Repository navigation
Conversation
The Illustrator's Run Interval now belongs to each chat, so one chat can draw every message, another every 5 and another only when asked (0). - New chat metadata field illustratorRunInterval (0-100, null = agent default), clamped by the chat metadata route. - resolveEffectiveAgentSettings applies the chat value through applyIllustratorChatRunInterval, so automatic cadence (and the cadence status route) uses it; 0 still means manual-only. - Chat Settings Illustrator card (Roleplay and Game agent cards) gets a Run Interval field with the usual chat override / Use agent default. - The add-agent window (drawer and setup wizard) shows the chat value, saves it to the chat and no longer writes runInterval into the global Illustrator config; other agents are unchanged. - Agent Editor help says its value is the default for chats. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
🎭 Dottore Review — ConcludedTip Review posted. The specimen has left the observation table.
|
🎭 Dottore ReviewDottore Verdict: Repair RequiredWarning REPAIR REQUIRED
Note Mode: 🧭 Specimen Summary
🔎 Isolated Defects
🧹 Minor Imperfections
🤖 Copy prompt for isolated Dottore findings✅ Control Checks
🧪 Observations
📝 Lab Notes
|
| const illustratorChatRunInterval = normalizeIllustratorRunInterval(metadata.illustratorRunInterval); | ||
| const illustratorRunInterval = | ||
| illustratorChatRunInterval ?? | ||
| normalizePositiveInteger(illustratorDefaults.runInterval, 5, MAX_ILLUSTRATOR_RUN_INTERVAL, 0); |
There was a problem hiding this comment.
⚠️ MEDIUM: Inherited string intervals disagree with execution
Location: packages/client/src/components/chat/ChatSettingsDrawer.tsx:2015 (RIGHT)
The card invents a default: with no chat override, persisted
runInterval: "0"survives the settings merge but the numeric-only normalizer displays 5, while execution treats it as manual-only. Positive numeric strings other than "5" produce the same display mismatch. Committing the apparent 5 cannot repair the discrepancy, because the unchanged-value guard suppresses that write.
Tip
Suggested fix: Give the display the runtime's interpretation of inherited intervals, including supported numeric strings; a default should describe execution, not contradict it.
| ); | ||
| applyIllustratorDefault("illustratorUseAvatarReferences", setup.useAvatarReferences, defaults?.useAvatarReferences); | ||
| if (options?.runInterval != null) { | ||
| applyIllustratorDefault("illustratorRunInterval", options.runInterval, defaults?.runInterval); |
There was a problem hiding this comment.
⚠️ MEDIUM: Preserve explicit cadence when re-adding Illustrator
Location: packages/client/src/components/chat/AgentAddSetupFields.tsx:474 (RIGHT)
The add flow mistakes equality with the agent default for permission to erase a chat override. With an explicit chat interval of 0 and an agent default subsequently changed to 0, removing and re-adding Illustrator prefills 0, then writes null because the values match. A later agent-default change to 5 therefore restores automatic images in a chat whose manual-only choice was never reset.
Tip
Suggested fix: Preserve an existing explicit interval through reactivation, even when it matches the agent default; let the explicit reset control restore inheritance.
| </label> | ||
| <AgentDefaultStatus | ||
| overridden={illustratorChatRunInterval !== null} | ||
| onReset={() => updateMeta.mutate({ id: chat.id, illustratorRunInterval: null })} |
There was a problem hiding this comment.
⚠️ MEDIUM: A pending interval save can overtake the reset
Location: packages/client/src/components/chat/ChatSettingsDrawer.tsx:2263 (RIGHT)
The reset dispatches null independently of the preceding interval save; the metadata hook's ordering queue is opt-in and this drawer does not enable it. If the positive-interval request reaches storage after the reset, that older choice becomes the persisted override despite the newer interaction. With an agent default of 0, the supposed return to manual-only behavior instead restores automatic generation.
Tip
Suggested fix: Route interval commits and resets through the same per-chat save queue, so transport timing cannot choose the final cadence.
Dottore replay shadow (fork only) of upstream PR 7304 at d9cda66, the first head CodeRabbit reviewed.
Original title: feat(illustrator): Run Interval per chat