Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ This file is the release-notes source of truth for Marinara Engine. Reuse these

### Added

- Added a Gallery image-agent picker that can run any active custom image-producing agent alongside the base Illustrator (#4846).
- Added an editable Storyboard Agent shot-planner stage that inspects each generated keyframe before video generation, persists its suitability classification, and falls back to the planned motion when image-aware refinement is unavailable or invalid. The Storyboard Agent page now explains the four-stage prompt workflow and orders its shared prompt editors from illustration through image-aware grounding to video generation (#4839, Pasta-Devs/Marinara-Agents#296).
- Added batch selection to Character and Persona image galleries so selected images can be downloaded or deleted together after confirmation (#4832).
- Added a persisted Auto, Low, Medium, or High output-quality choice to GPT Image generation connections (#4831).
Expand Down Expand Up @@ -46,6 +47,10 @@ This file is the release-notes source of truth for Marinara Engine. Reuse these

### Fixed

- Restored intuitive mobile swipe navigation for Conversation transcripts while preserving Roleplay swipes and interactive controls (#4841).
- Made Memory Recall re-vectorization exclusive with background chunking so embedding-model changes cannot leave mixed vector dimensions (#4843).
- Saved pending Lorebook vector settings before vectorization and surfaced provider or eligibility failures instead of reporting a misleading zero-vector success (#4844).
- Recovered expected sharded chat history from its preserved pre-shard backup when a restored profile contains no message shards (#4845).
- Kept Professor Mari's Home navigator enabled by default and visible with reduced effects, reset her to the default position when re-enabled, centered her drag handle, contained compact Field Notes and Community actions, and presented iPad sidebars as full-width overlays (#4826, #4827, #4829, #4830).
- Sharpened Professor Mari's read-only guardrail so a "how do I…" question is answered or offered rather than performed, even when it names the change as its goal (for example "how do I make X have Y") — while a plainly-worded request to make that change, including a polite question form like "can you set X to Y", is still carried out — so she keys on intent rather than grammar and no longer edits without a clear instruction (#4838).
- Reduced background autonomous-message polling to a lightweight candidate-id lookup instead of re-fetching the full chat list every 30 seconds (#4715).
Expand Down
369 changes: 369 additions & 0 deletions e2e/core-flows.e2e.ts

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
"regression:agent-registry-hydration": "pnpm build:shared && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/agent-registry-hydration.regression.ts",
"regression:mari-review-durability": "pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/mari-db-review-durability.regression.ts",
"regression:mari-preset-granular": "pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/mari-preset-granular.regression.ts",
"regression:issues": "pnpm regression:card-library-search && pnpm regression:chat-resource-drop && pnpm regression:avatar-delete && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/chat-html-newlines.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/open-issues.regression.ts && pnpm regression:mari-review-durability && pnpm regression:mari-preset-granular && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/bot-browser-route.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/janny-character-import.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/agent-activation.regression.ts && pnpm regression:agent-registry-hydration && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/profile-import-noodle.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/notification-sound.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/agent-catalog-kind-badges.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/file-backed-shutdown.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/autonomous-scheduler-gate.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/message-sharding.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/env-watcher.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/extension-ipc.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/capability-package-lifecycle.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/capability-client-version-refresh.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/message-page-cache.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/chat-branch-lineage.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/conversation-game-slash.regression.ts && node ./scripts/regressions/launcher-env.regression.mjs && node ./scripts/regressions/launcher-update.regression.mjs && node ./scripts/regressions/launcher-format-guard.regression.mjs && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/scene-video-range.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/professor-mari-prompt-context.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/professor-mari-documentation.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/professor-mari-fetch-tiers.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/entity-embedding-store.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/professor-mari-fetch-integration.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/professor-mari-relevance-names.regression.ts",
"regression:issues": "pnpm regression:card-library-search && pnpm regression:chat-resource-drop && pnpm regression:avatar-delete && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/chat-html-newlines.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/open-issues.regression.ts && pnpm regression:mari-review-durability && pnpm regression:mari-preset-granular && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/bot-browser-route.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/janny-character-import.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/agent-activation.regression.ts && pnpm regression:agent-registry-hydration && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/profile-import-noodle.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/notification-sound.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/agent-catalog-kind-badges.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/file-backed-shutdown.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/autonomous-scheduler-gate.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/message-sharding.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/memory-recall-revectorize.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/env-watcher.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/extension-ipc.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/capability-package-lifecycle.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/capability-client-version-refresh.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/message-page-cache.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/chat-branch-lineage.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/conversation-game-slash.regression.ts && node ./scripts/regressions/launcher-env.regression.mjs && node ./scripts/regressions/launcher-update.regression.mjs && node ./scripts/regressions/launcher-format-guard.regression.mjs && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/scene-video-range.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/professor-mari-prompt-context.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/professor-mari-documentation.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/professor-mari-fetch-tiers.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/entity-embedding-store.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/professor-mari-fetch-integration.regression.ts && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/professor-mari-relevance-names.regression.ts",
"regression:card-library-search": "pnpm build:shared && pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/card-library-search.regression.ts",
"regression:chat-resource-drop": "pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/chat-resource-drop.regression.ts",
"regression:gallery-delete": "pnpm --filter @marinara-engine/server exec tsx ../../scripts/regressions/gallery-cascade-deletion.regression.ts",
Expand Down
13 changes: 10 additions & 3 deletions packages/client/src/components/chat/ChatArea.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,12 @@ const shouldIgnoreIntuitiveSwipeTarget = (
);
};

function closestChatScrollSurface(target: EventTarget | null): HTMLElement | null {
if (!(target instanceof Node)) return null;
const element = target instanceof Element ? target : target.parentElement;
return element?.closest<HTMLElement>("[data-chat-scroll]") ?? null;
}

type AgentInjectionReviewItem = {
agentType: string;
agentName: string;
Expand Down Expand Up @@ -2266,13 +2272,11 @@ export const ChatArea = memo(function ChatArea() {
if (!intuitiveSwipeNavigation || intuitiveSwipeBlocked) return;

const handleTouchStart = (event: TouchEvent) => {
const surface = scrollRef.current;
const target = event.target;
const surface = closestChatScrollSurface(target);
if (
event.touches.length !== 1 ||
!surface ||
!(target instanceof Node) ||
!surface.contains(target) ||
shouldIgnoreIntuitiveSwipeTarget(target)
) {
intuitiveTouchStartRef.current = null;
Expand Down Expand Up @@ -3111,6 +3115,9 @@ export const ChatArea = memo(function ChatArea() {
illustratorRetryTargets: ["illustration"],
})
}
onIllustrateWithAgent={async (agentType) => {
await retryAgents(activeChatId, [agentType], { forceImageGeneration: true });
}}
onGenerateBackground={handleGenerateRoleplayBackground}
onGenerateVideo={() => handleGenerateRoleplaySceneVideo()}
onAnimateImage={(image) => handleGenerateRoleplaySceneVideo({ galleryImageId: image.id })}
Expand Down
3 changes: 3 additions & 0 deletions packages/client/src/components/chat/ChatCommonOverlays.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ type ChatCommonOverlaysProps = {
onOpenScheduleEditor?: (characterId: string, options?: { initialDay?: string | null }) => void;
/** Manually trigger the Illustrator agent */
onIllustrate?: () => void;
onIllustrateWithAgent?: (agentType: string) => void | Promise<void>;
/** Generate an on-demand Conversation selfie. */
onGenerateSelfie?: (characterId?: string) => void | Promise<void>;
selfieCharacters?: Array<{ id: string; name: string }>;
Expand Down Expand Up @@ -299,6 +300,7 @@ export function ChatCommonOverlays({
onCloseGallery,
onOpenScheduleEditor,
onIllustrate,
onIllustrateWithAgent,
onGenerateSelfie,
selfieCharacters,
onGenerateBackground,
Expand Down Expand Up @@ -348,6 +350,7 @@ export function ChatCommonOverlays({
onClose={onCloseGallery}
anchor={galleryAnchor}
onIllustrate={onIllustrate}
onIllustrateWithAgent={onIllustrateWithAgent}
onGenerateSelfie={onGenerateSelfie}
selfieCharacters={selfieCharacters}
onGenerateStoryboard={onGenerateStoryboard}
Expand Down
Loading