Feat/artiface manager#85
Conversation
Add ImageGenModelSettingControl to web routing settings page, using platform settings (image_generative.model) for persistence. Also increase image model test timeout from 15s to 60s to accommodate slower image generation APIs. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add image_generate to AUXILIARY_RENDERED_TOOL_NAMES - Create StreamingArtifactEntry on image_generate tool-result - Render image artifacts via ArtifactImage instead of ArtifactIframe - Filter inline-rendered image artifacts from MarkdownRenderer to avoid duplication Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add messageAttachmentStore to image_generate executor with WithMessageAttachmentStore builder
- loadInputImages fallback to attachment store when artifact store misses
- artifactKeyMatchesAccount supports attachments/{accountID}/ prefix
- Inject uploaded image key annotation into LLM context so model can reference attachments
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… in messages - Scan all assistant messages for artifact:<key> references - Only show image_generate streaming artifact at top-level when the key is NOT already referenced in an assistant message bubble - Remove currentRunArtifacts filtering so MarkdownRenderer can render images during streaming inside the message bubble Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…liminate flash - Never show image_generate in visibleStreamingArtifacts during streaming - Compute fallbackImageGenerateArtifacts only after run completes and the artifact key is not referenced in messages - Preserve image_generate streaming artifacts on run completion for fallback - Update persona prompts and toolmeta: image_generate does not need visualize_read_me Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…story for fallback rendering Do not clear streamingArtifactsRef when releasing completed handoff to history. image_generate artifacts need to persist for fallback rendering after the run ends. They are cleared by resetLiveState() when the next run starts. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Persist pending form messages as thread messages on run.input_requested - Finalize form messages (submitted/dismissed) on input submission - Expire pending forms on terminal run end (completed/cancelled/failed) - Add AskUserFormMessageCard component for editable and read-only views - Route form-mode input-request events through message stream instead of overlay - Widen web message types to support AskUserFormContent tagged union Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…assthrough - normalizeInputRequest now preserves display_mode field from SSE events - Add display_mode to AgentInputRequestData type - Create optimistic form message in message store on form-mode input-request - Remove setAwaitingInput for form mode (form card handles all input) - Rewrite AskUserFormMessageCard from wizard to unified scrollable form - Update display_mode description in tool spec Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…rlay, remove filename bar, remove count label Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1f4f9bf010
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| jsonb_set(content_json, '{status}', to_jsonb($5::text)), | ||
| '{answers}', COALESCE(to_jsonb($6::jsonb), 'null'::jsonb) | ||
| ), | ||
| '{submitted_at}', COALESCE(to_jsonb($7::text), 'null'::jsonb) |
There was a problem hiding this comment.
Fix ask_user_form SQL parameter indexes in worker repo
The query in UpdateAskUserFormMessageStatus references $5, $6, and $7 for status/answers/submitted_at, but this call only provides six bind arguments and status is the 4th argument. In PostgreSQL this fails at runtime (missing $7) whenever the worker tries to submit/expire form messages, so pending form state updates do not persist.
Useful? React with 👍 / 👎.
| json_set(content_json, '$.status', json_quote($5)), | ||
| '$.answers', COALESCE($6, json('null')) | ||
| ), | ||
| '$.submitted_at', COALESCE(json_quote($7), json('null')) |
There was a problem hiding this comment.
Fix ask_user_form SQL parameter indexes in desktop repo
The desktop variant has the same placeholder mismatch: the SQL uses $5/$6/$7 while only six arguments are passed and status is argument 4. This causes runtime bind errors in desktop mode when updating ask-user-form message status, so submitted/dismissed/expired states are not reliably written.
Useful? React with 👍 / 👎.
| const doSubmit = useCallback(() => { | ||
| if (!allValid || submitting || disabled) return | ||
| setSubmitting(true) | ||
| onSubmit(values) |
There was a problem hiding this comment.
Restore form controls after submit failure
The submit handler sets submitting to true and invokes onSubmit without awaiting or resetting state on failure. Since the current onSubmit implementation handles API errors internally and resolves, a failed provideInput leaves this card permanently in the submitting state (buttons stay disabled), preventing retry or dismiss until a full refresh/rerender from external state.
Useful? React with 👍 / 👎.
右侧增加了本次会话的成果物集合展示