Tianyi Cui
3ca9c7d489
rename code-mode to ptc (PTC mode), except session-persistent vocabulary
...
Rename the tool-presentation transport from code-mode to ptc everywhere
that is not written into session logs: the mode config value becomes 'ptc',
the preset directory/id becomes ptc, the demo becomes demo:ptc, the
dispatch waterfall becomes tools/ptc-dispatch-log (types PtcDispatch*), the
prompt rule becomes tools:ptc-only, source/test files become ptc.ts etc.,
and prose says PTC mode / PTC 模式. The session-persistent vocabulary
(durable events tool/code-dispatch*, logged plugin name tools-code-mode,
sub-call id segment :code:) intentionally stays and moves in the stacked
persistence PR, which is blocked until the SESSION_FORMAT_VERSION v0→v1
migration lands with it. run_code, its code parameter, CodeSdkLanguage,
CodeRunFailedError, the dsh-code-runtime family, third-party codex names,
and frozen archived notes keep their names.
2026-08-27 23:14:31 +08:00
imccyu
e57e7c3f25
docs(api): describe Connection-owned transport
2026-08-27 22:26:30 +08:00
Tianyi Cui
6ea8a52e22
fix(test): harden snapshot corpus invariants
2026-08-24 21:37:57 +08:00
creatixchu
6a27286e44
docs(i18n): fix rebased image note links
2026-08-21 15:09:14 +08:00
creatixchu
d29855f97c
feat(images): unify master and Files request pipeline
2026-08-21 15:05:54 +08:00
Yichen Jiang
246caaba77
Merge remote-tracking branch 'origin/master' into worktree/deepseek-vision-model-catalog
...
# Conflicts:
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.i18n.yaml
# .agents/notes/implemented/feature/2026-08-19-direct-deepseek-vision-input.i18n.yaml
# docs/config-catalog.i18n.yaml
# packages/llm/llm-deepseek/README.i18n.yaml
2026-08-21 10:34:51 +08:00
pku-xht
84cbec28e9
Merge remote-tracking branch 'origin/master' into codex/localized-chinese-doc-links
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.zh.md
# .agents/notes/implemented/architecture/2026-06-18-shared-persistence-write-coordinator.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.zh.md
# .agents/notes/implemented/bug-fix/2026-07-29-pnpm-setup-runner-isolation.i18n.yaml
# .agents/notes/implemented/bug-fix/2026-07-29-pnpm-setup-runner-isolation.zh.md
# .agents/notes/implemented/bug-fix/2026-08-18-request-image-payload-bound.i18n.yaml
# .agents/notes/implemented/bug-fix/2026-08-18-request-image-payload-bound.zh.md
# .agents/notes/implemented/feature/2026-07-06-sandbox.i18n.yaml
# .agents/notes/implemented/feature/2026-07-06-sandbox.zh.md
# .agents/notes/implemented/feature/2026-07-16-persistent-pty-sessions.i18n.yaml
# .agents/notes/implemented/feature/2026-07-21-cross-session-references.i18n.yaml
# .agents/notes/implemented/feature/2026-07-21-cross-session-references.zh.md
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.i18n.yaml
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.zh.md
# .agents/notes/implemented/feature/2026-07-27-web-subagent-conversations.i18n.yaml
# .agents/notes/implemented/feature/2026-07-31-permission-default-for-new-sessions.i18n.yaml
# .agents/notes/implemented/feature/2026-08-03-web-search-source-scroll.i18n.yaml
# .agents/notes/implemented/feature/2026-08-03-web-search-source-scroll.zh.md
# .agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml
# .agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.zh.md
# .agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml
# .agents/notes/implemented/feature/2026-08-05-agent-teams.zh.md
# .agents/notes/implemented/feature/2026-08-11-workspace-sidebar-order-and-folding.i18n.yaml
# .agents/notes/implemented/feature/2026-08-15-product-subagent-noninteractive-permissions.i18n.yaml
# .agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.i18n.yaml
# .agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.zh.md
# .agents/notes/implemented/process/2026-07-22-evidence-based-larger-hosted-runners.i18n.yaml
# .agents/notes/implemented/process/2026-07-22-evidence-based-larger-hosted-runners.zh.md
# .agents/notes/implemented/process/2026-07-23-portable-required-pull-request-ci.i18n.yaml
# .agents/notes/implemented/process/2026-07-23-portable-required-pull-request-ci.zh.md
# .agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml
# .agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md
# .agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.i18n.yaml
# .agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.zh.md
# .agents/notes/proposed/architecture/2026-07-27-session-projection-and-command-log.i18n.yaml
# README.i18n.yaml
# README.zh.md
# docs/architecture.i18n.yaml
# docs/architecture.zh.md
# docs/development.i18n.yaml
# docs/development.zh.md
# docs/persistence-catalog.i18n.yaml
# docs/persistence-catalog.zh.md
# docs/subsystems/README.i18n.yaml
# docs/subsystems/README.zh.md
# docs/subsystems/agent-team.i18n.yaml
# docs/subsystems/agent-team.zh.md
# docs/subsystems/client-modules.i18n.yaml
# docs/subsystems/client-modules.zh.md
# docs/subsystems/commands.i18n.yaml
# docs/subsystems/commands.zh.md
# docs/subsystems/persistence.i18n.yaml
# docs/subsystems/persistence.zh.md
# docs/subsystems/session-reference.i18n.yaml
# docs/tool-catalog.i18n.yaml
# docs/tool-catalog.zh.md
# docs/user/guide/providers.i18n.yaml
# docs/user/guide/providers.zh.md
# packages/README.i18n.yaml
# packages/README.zh.md
# packages/bundle/web-app/README.i18n.yaml
# packages/bundle/web-app/README.zh.md
# packages/client/README.i18n.yaml
# packages/client/README.zh.md
# packages/client/connection/README.i18n.yaml
# packages/client/connection/README.zh.md
# packages/client/ui-conversation/README.i18n.yaml
# packages/client/ui-conversation/README.zh.md
# packages/client/ui-primitives/README.i18n.yaml
# packages/client/ui-primitives/README.zh.md
# packages/client/ui-sidebar/README.i18n.yaml
# packages/client/ui-sidebar/README.zh.md
# packages/client/ui-workspace/README.i18n.yaml
# packages/client/ui-workspace/README.zh.md
# packages/context/README.i18n.yaml
# packages/context/README.zh.md
# packages/core/agent-loop/README.i18n.yaml
# packages/credentials/README.i18n.yaml
# packages/credentials/README.zh.md
# packages/experimental/agent-team/README.i18n.yaml
# packages/experimental/agent-team/README.zh.md
# packages/experimental/tool-agent-team/README.i18n.yaml
# packages/experimental/tool-agent-team/README.zh.md
# packages/host/frontend-static/README.i18n.yaml
# packages/host/frontend-static/README.zh.md
# packages/host/webserver/README.i18n.yaml
# packages/host/webserver/README.zh.md
# packages/interaction/commands/README.i18n.yaml
# packages/interaction/commands/README.zh.md
# packages/plan/plan-mode/README.i18n.yaml
# packages/plan/plan-mode/README.zh.md
# packages/sandbox/sandbox-local/README.i18n.yaml
# packages/sandbox/sandbox-local/README.zh.md
# packages/session/README.i18n.yaml
# packages/session/README.zh.md
# packages/session/session-persistence-sqlite/README.i18n.yaml
# packages/session/session-persistence-sqlite/README.zh.md
# packages/session/session-projection-cache/README.i18n.yaml
# packages/session/session-projection-cache/README.zh.md
# packages/shell/tool-pwsh/README.i18n.yaml
# packages/shell/tool-pwsh/README.zh.md
# packages/subagent/subagent-codex/README.i18n.yaml
# packages/subagent/subagent-codex/README.zh.md
# packages/subagent/subagent/README.i18n.yaml
# packages/subagent/subagent/README.zh.md
# packages/web/tool-web/README.i18n.yaml
# packages/web/tool-web/README.zh.md
# scripts/snapshots/translation-prompt-v4/request-response.expected.json
2026-08-20 19:15:33 +08:00
Yichen Jiang
4fa38d6a23
feat(llm-deepseek): publish the vision model
2026-08-19 11:50:34 +08:00
Yichen Jiang
7078918b30
feat(llm-deepseek): support multimodal requests
2026-08-19 11:39:52 +08:00
pku-xht
8729f38015
Merge master at 43f08ef into localized Chinese links
2026-08-18 19:13:47 +08:00
pku-xht
8d3674695b
docs(i18n): localize Chinese internal links
2026-08-18 19:00:37 +08:00
creatixchu
5849c57c0c
fix(images): align provider-safe payload defaults
2026-08-18 14:00:00 +08:00
creatixchu
d559ba9b2b
fix(attachment): address dimension-limit review
2026-08-18 11:30:07 +08:00
Tianyi Cui
b2f23f88ad
Merge commit '70396085b141370ce32de1be4e225b4384eaf46d' into HEAD
...
# Conflicts:
# .agents/notes/implemented/feature/2026-07-07-mcp-client-plugin.i18n.yaml
# .agents/notes/implemented/feature/2026-07-20-code-mode-typed-tool-returns.i18n.yaml
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.i18n.yaml
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.md
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.zh.md
# .agents/notes/implemented/simplification/2026-07-23-acp-automation-only-protocol.i18n.yaml
# docs/config-catalog.i18n.yaml
# docs/module-graph.i18n.yaml
# docs/module-graph.md
# docs/module-graph.zh.md
# docs/tool-catalog.i18n.yaml
# docs/tool-catalog.md
# docs/tool-catalog.zh.md
# examples/acp-agent/tests/snapshots/advanced-toolchain/tool-schemas.expected.json
# examples/acp-agent/tests/snapshots/both-mode-turn/tool-schemas.expected.json
# examples/acp-agent/tests/snapshots/code-mode-turn/tool-schemas.expected.json
# packages/core/tools/README.i18n.yaml
# packages/core/tools/README.zh.md
# packages/core/tools/src/code-mode.ts
# packages/host/apiproxy/tests/api-proxy-models.spec.ts
# packages/host/plugin-inventory/tests/inventory.spec.ts
# packages/mcp/mcp-client/tests/mcp-client.e2e.ts
# packages/mcp/mcp-client/tests/mcp-client.spec.ts
# packages/self-modification/tool-cordis/src/api-catalog.ts
# packages/test-support/acp-snapshot/README.i18n.yaml
# pnpm-lock.yaml
2026-08-17 11:31:59 +08:00
Tianyi Cui
a2d0f7f411
refactor: apply repository naming contract
...
Apply the accepted pre-release package, service, type, directory, and role renames as one repository-wide change.
2026-08-13 00:54:38 +08:00
Tianyi Cui
b3e2de873d
Merge master into worktree/fix-1463-rich-content-bridge
...
# Conflicts:
# .agents/notes/implemented/feature/2026-07-20-code-mode-typed-tool-returns.i18n.yaml
# .agents/notes/implemented/feature/2026-07-20-code-mode-typed-tool-returns.zh.md
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.i18n.yaml
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.zh.md
# .agents/notes/implemented/feature/2026-08-10-telemetry-default-off.i18n.yaml
# .agents/notes/implemented/feature/2026-08-10-telemetry-default-off.md
# .agents/notes/implemented/feature/2026-08-10-telemetry-default-off.zh.md
# .agents/notes/implemented/simplification/2026-07-23-acp-automation-only-protocol.i18n.yaml
# .agents/notes/implemented/simplification/2026-07-23-acp-automation-only-protocol.zh.md
# apps/web/tests/scaffold.ts
2026-08-12 21:25:26 +08:00
Tianyi Cui
219d2a1fb9
feat(attachment): add ordered image batch admission
2026-08-12 17:48:17 +08:00
xjt
ce883ffea3
Merge remote-tracking branch 'origin/master' into docs/post-v3-release-proofreading
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-06-20-generic-long-running-tool-runtime.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-20-generic-long-running-tool-runtime.zh.md
# README.i18n.yaml
# README.zh.md
# scripts/snapshots/translation-prompt-v4/request-response.expected.json
2026-08-12 16:45:48 +08:00
creatixchu
51dc55ec3d
fix(web): cap default images at 5 MiB
2026-08-12 14:47:20 +08:00
creatixchu
c9a536e0c8
review: theme-owned drop mask token, overlay fade-in, stable gallery keys, close-button stacking, stale note defaults
2026-08-12 13:12:06 +08:00
xjt
7b450d121e
docs(i18n): apply reviewed Chinese proofreading updates
2026-08-12 09:59:19 +08:00
creatixchu
87e3c95027
fix(web): review-round attachment refinements
...
Body-portal the lightbox and toast so transformed ancestors cannot trap
their fixed positioning (a lightbox opened from a chat message covered only
the chat column); make the toast pointer-transparent; observe the rail
element's own size instead of window resizes; consume vertical wheel ticks
exclusively via a non-passive listener with LINE/PAGE delta normalization;
keep the start position when the rail mounts over an existing draft; honor
prefers-reduced-motion for the toast, remove-control, and paging; retry
loads through the guarded load effect; note the deliberate promptError
re-announce; pin the intake toast in the assembled snapshot; sync the
superseded multimodal note and package docs.
2026-08-11 17:45:11 +08:00
Turtle
0c708cb10d
refactor: replace overloaded surface terminology
2026-08-11 15:23:05 +08:00
Yichen Jiang
25d959aa08
Merge remote-tracking branch 'origin/master' into worktree/web-multimodal-image-input
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-07-05-reconstructable-requests.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-05-reconstructable-requests.md
# .agents/notes/implemented/architecture/2026-07-05-reconstructable-requests.zh.md
# .agents/notes/implemented/architecture/2026-07-25-web-input-machine-and-slash-pipeline.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-25-web-input-machine-and-slash-pipeline.md
# .agents/notes/implemented/architecture/2026-07-25-web-input-machine-and-slash-pipeline.zh.md
# THIRD_PARTY_NOTICES.md
# apps/cli/composition.md
# apps/cli/config/base.cordis.yml
# apps/cli/package.json
# apps/cli/src/app-cli-entry.ts
# apps/cli/src/bin.ts
# apps/cli/tests/args.spec.ts
# apps/web/tests/built-boot.snapshot.ts
# apps/web/tests/navigation-panes.e2e.ts
# docs/architecture.i18n.yaml
# docs/architecture.md
# docs/architecture.zh.md
# docs/config-catalog.md
# docs/cordis-catalog/services.md
# docs/core-data-structures/core.i18n.yaml
# docs/core-data-structures/llm-streaming.i18n.yaml
# docs/event-producer-consumer.md
# docs/module-graph.md
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
# packages/README.i18n.yaml
# packages/bundle/README.i18n.yaml
# packages/client/connection/README.i18n.yaml
# packages/client/connection/README.md
# packages/client/connection/README.zh.md
# packages/client/connection/src/client/fixture.ts
# packages/client/connection/src/http-bridge.ts
# packages/client/connection/src/index.ts
# packages/client/connection/tests/fixture.spec.ts
# packages/client/connection/tests/node-half.spec.ts
# packages/client/runtime/README.i18n.yaml
# packages/client/runtime/README.md
# packages/client/runtime/README.zh.md
# packages/client/runtime/src/client/contract/session.ts
# packages/client/runtime/src/client/sessions/session.ts
# packages/client/ui-conversation/README.i18n.yaml
# packages/client/ui-conversation/README.md
# packages/client/ui-conversation/README.zh.md
# packages/client/ui-conversation/src/client/apply.ts
# packages/client/ui-conversation/src/client/chat/AssistantMarkdown.tsx
# packages/client/ui-conversation/src/client/chat/ChatView.tsx
# packages/client/ui-conversation/src/client/chat/MessageItem.module.css
# packages/client/ui-conversation/src/client/chat/MessageItem.tsx
# packages/client/ui-conversation/src/client/contract/slots.ts
# packages/client/ui-conversation/src/client/index.ts
# packages/client/ui-conversation/src/client/input/contract.ts
# packages/client/ui-conversation/src/client/input/facade.ts
# packages/client/ui-conversation/src/client/input/hub.ts
# packages/client/ui-conversation/src/client/locales.ts
# packages/client/ui-conversation/src/client/service.ts
# packages/client/ui-conversation/src/client/skeleton/ConversationSession.tsx
# packages/client/ui-conversation/src/client/skeleton/InputBar.tsx
# packages/client/ui-conversation/tests/apply-inject.spec.tsx
# packages/client/ui-conversation/tests/input-bar.spec.tsx
# packages/client/ui-conversation/tests/input-matrix.spec.tsx
# packages/client/ui-conversation/tests/input-scenarios.spec.tsx
# packages/client/ui-conversation/tests/service-orchestration.spec.ts
# packages/client/ui-conversation/tests/skeleton.spec.tsx
# packages/client/ui-trajectory/tests/views.spec.tsx
# packages/compact/compact-basic/README.i18n.yaml
# packages/cordis/tool-cordis/src/api-catalog.ts
# packages/host/apiproxy/README.i18n.yaml
# packages/host/apiproxy/README.md
# packages/host/apiproxy/README.zh.md
# packages/host/apiproxy/src/api-proxy.ts
# packages/host/apiproxy/src/api/rpc.ts
# packages/host/apiproxy/src/api/sessions.ts
# packages/host/apiproxy/src/index.ts
# packages/host/apiproxy/tests/api-proxy-models.spec.ts
# packages/host/apiproxy/tests/rpc-schemas.spec.ts
# packages/llm/llm-pi-ai/README.i18n.yaml
# packages/llm/llm-pi-ai/README.md
# packages/llm/llm-pi-ai/README.zh.md
# packages/llm/llm-pi-ai/src/adapter.ts
# packages/llm/llm/README.i18n.yaml
# packages/ui/tui/README.md
# packages/ui/tui/README.zh.md
# packages/ui/tui/src/components/content.ts
# packages/ui/tui/src/components/transcript.ts
# packages/ui/tui/tests/tui.spec.ts
# pnpm-lock.yaml
2026-08-08 01:56:29 +08:00
creatixchu
8b00482d7c
fix(web): harden multimodal draft and storage lifecycle
2026-07-31 17:15:08 +08:00
creatixchu
0d1250f743
fix: address ds-review-bot v7 findings on the merged image-input head
...
- gate model selection on steering-placement image carriers from enqueue
until their steering/message event publishes; release the gate when an
admission ends idle without publication (both behaviorally asserted)
- reject session.updateQueue edits carrying non-text blocks at the RPC
boundary (queue edits cannot bypass image admission)
- extend the durable-directory walk past a first-created DSH_HOME to the
deepest pre-existing ancestor
- strip Windows-style separators from attachment display names on POSIX
- verify attachment reads with a header-only probe (digest already proves
the bytes decoded fully at admission); document the read path
- make SessionInputShell.addImages refusal observable and keep workspace
transfers/composer intake from leaking refused drafts
- own ONE recursive image walk (dsh-llm contentHasImage) across apiproxy,
pi-ai, compact-basic, and the DeepSeek text-only assertion
- drop the redundant canonical-base64 regex and the no-op role read
- move AttachmentId/AttachmentError out of types.ts (brand.ts/error.ts);
document why AttachmentError does not extend HarnessError
- document the hard attachments inject in both consumer READMEs
2026-07-30 14:34:08 +08:00
Tianyi Cui
515d48875e
fix: harden Web image admission
2026-07-30 01:58:36 +08:00
Tianyi Cui
d6c82001b3
Merge remote-tracking branch 'refs/remotes/origin/worktree/web-multimodal-image-input' into worktree/pr555-simplify
...
# Conflicts:
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.i18n.yaml
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.md
# .agents/notes/implemented/feature/2026-07-22-web-multimodal-image-input-and-durable-attachments.zh.md
# apps/cli/README.i18n.yaml
# apps/cli/README.md
# apps/cli/README.zh.md
# apps/cli/src/app-cli-entry.ts
# packages/client/connection/src/client/fixture.ts
# packages/client/ui-conversation/src/client/service.ts
# packages/host/apiproxy/src/api-proxy.ts
# packages/host/apiproxy/src/api/host.schema.ts
# packages/host/apiproxy/src/api/host.ts
# packages/host/apiproxy/tests/fetch-carrier.spec.ts
2026-07-30 01:16:58 +08:00
Tianyi Cui
6312e43a11
fix: preserve multi-image prompt batches
2026-07-30 00:58:35 +08:00
Yichen Jiang
3733bd1374
fix(gui): remove temporary multimodal routing state
2026-07-30 00:30:58 +08:00
Tianyi Cui
3a4c436d83
refactor: narrow web image input v1
2026-07-29 23:18:57 +08:00
creatixchu
f73bf425ec
fix: address ds-review-bot v8 findings
...
- llm-deepseek: the uncatalogued resolveModel fallback declares text-only
modalities — the wire route is text-only regardless of catalog
membership, so "unknown" must not let the host persist-then-fail images.
- session.selectModel also consults the pending-inbox mirror: a queued
image prompt enters the log only when claimed, after a switch would land.
- attachment store: ensureDurableDirectory syncs every ancestor entry up to
a caller-vouched boundary regardless of what mkdir reports — a raced
"already existed" is not "already durable".
- One image walker (imageBlockIn/imageInEvent) now serves both attachment
authorization and the selection gate; referencedImage therefore also
authorizes references inside wrapped message content.
- InputHub: the scope disposer resolves the conversation service optionally
(teardown/HMR must reach quiescence), and a send failing after its scope
died releases the in-flight drafts instead of restoring them onto a
disposed shell.
- http-bridge destroys declared-oversize requests with connection: close
instead of draining a body the client can trickle indefinitely.
- LlmService validates AND detaches modality arrays identically on the
advisory and exact routes; READMEs record the fourth INVALID_MODEL_INFO
rejection reason.
- CLI provider docs (JSDoc, README pair, Agent Note pair) describe the
reuse behavior; llm-route.spec now parses the SHIPPED cordis.yml through
the production extraction, pinning the row coupling.
- image-display lane pins gallery/rail shape in inline snapshots and the
object-URL scheme this environment must take; stale host.schema comment
dropped.
2026-07-29 19:40:17 +08:00
creatixchu
adce3b833d
fix: address ds-review-bot v6/v7 findings on the image-input assembly
...
- resolveLlmRoute: reuse the yml pi-ai row for providers it already routes
(DUPLICATE_ADAPTER boot failure) and detect an unset model by origin, not
by comparison against one deployment default; covered by a new spec.
- LlmService.resolveModelInfoFor preserves (and validates) modality
metadata, arming the host image preflight for exact-route resolution.
- session.selectModel refuses a text-only target once the session log
carries an image on any replayed route; an accepted switch would strand
every later turn with no in-product recovery.
- The composer no longer gates image intake on the handshake activeModel
snapshot (wrong authority for a per-session decision); the host preflight
plus the error strip own capability, deployment limits stay client-side.
- InputHub shell teardown releases the scope's draft images (File objects
and object URLs leaked for the page lifetime).
- session.prompt image parts carry optional alt into the durable block;
ImageBlock documents assistant-side rendering as forward compatibility.
- Assembled built-client lane apps/web/tests/image-display.snapshot.ts pins
the history galleries over the authorized attachment route, the lightbox,
and the composer paste rail; the attachment rail is an accessible group.
- Docs: validateImage on the seam page, fixture byte metadata matches its
PNG, and the Agent Note claims now match the shipped coverage.
2026-07-29 18:56:40 +08:00
Yichen Jiang
b599d1d0af
Merge remote-tracking branch 'origin/master' into worktree/web-multimodal-image-input
...
# Conflicts:
# .gitignore
# apps/cli/package.json
# apps/cli/src/web.ts
# docs/architecture.i18n.yaml
# docs/config-catalog.md
# docs/module-graph.md
# packages/client/connection/README.md
# packages/client/connection/src/client/api.ts
# packages/client/connection/src/client/fixture.ts
# packages/client/runtime/README.md
# packages/client/runtime/src/client/sessions/service.ts
# packages/client/runtime/src/client/sessions/session.ts
# packages/client/runtime/src/client/workspaces/service.ts
# packages/client/ui-conversation/src/client/apply.ts
# packages/client/ui-conversation/src/client/chat/MessageItem.tsx
# packages/client/ui-conversation/src/client/contract/slots.ts
# packages/client/ui-conversation/src/client/index.ts
# packages/client/ui-conversation/src/client/service.ts
# packages/client/ui-conversation/src/client/skeleton/ConversationRoot.tsx
# packages/client/ui-conversation/src/client/skeleton/EmptyHero.tsx
# packages/client/ui-conversation/src/client/skeleton/EmptyState.tsx
# packages/client/ui-conversation/src/client/skeleton/InputBar.module.css
# packages/client/ui-conversation/src/client/skeleton/InputBar.tsx
# packages/client/ui-conversation/tests/apply-inject.spec.tsx
# packages/client/ui-conversation/tests/input-bar.spec.tsx
# packages/client/ui-conversation/tests/skeleton.spec.tsx
# packages/client/ui-trajectory/tests/views.spec.tsx
# packages/host/apiproxy/src/api-proxy.ts
# pnpm-lock.yaml
2026-07-27 12:27:30 +08:00
Yichen Jiang
c981f18921
Merge remote-tracking branch 'origin/master' into worktree/web-multimodal-image-input
...
# Conflicts:
# apps/cli/README.md
# apps/cli/src/web.ts
# apps/web/tests/smoke-fixture.e2e.ts
# docs/architecture.i18n.yaml
# docs/module-graph.md
# examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/stdout.expected.jsonl
# packages/client/connection/src/client/api.ts
# packages/client/connection/src/client/fixture.ts
# packages/client/runtime/README.md
# packages/client/runtime/src/client/index.ts
# packages/client/runtime/src/client/sessions/conversation.ts
# packages/client/runtime/src/client/sessions/service.ts
# packages/client/runtime/src/client/sessions/session.ts
# packages/client/ui-conversation/src/client/apply.ts
# packages/client/ui-conversation/src/client/contract/slots.ts
# packages/client/ui-conversation/src/client/index.ts
# packages/client/ui-conversation/src/client/service.ts
# packages/client/ui-conversation/src/client/skeleton/ConversationRoot.tsx
# packages/client/ui-conversation/src/client/skeleton/EmptyState.tsx
# packages/client/ui-conversation/src/client/skeleton/InputBar.tsx
# packages/client/ui-conversation/src/client/stores.ts
# packages/client/ui-conversation/tests/apply-inject.spec.tsx
# packages/client/ui-conversation/tests/service-orchestration.spec.ts
# packages/client/ui-conversation/tests/skeleton-branches.spec.tsx
# packages/client/ui-conversation/tests/skeleton.spec.tsx
# packages/cordis/tool-cordis/src/api-catalog.ts
# packages/host/apiproxy/package.json
# packages/host/apiproxy/src/api-proxy.ts
# packages/host/apiproxy/src/api/sessions.schema.ts
# packages/host/runtime/package.json
# packages/host/runtime/src/boot.ts
# packages/host/runtime/tests/host-runtime.spec.ts
# packages/host/runtime/tsconfig.json
# packages/host/webserver/README.md
# packages/host/webserver/src/index.ts
# packages/host/webserver/tests/webserver.spec.ts
# packages/llm/llm-pi-ai/tests/convert.spec.ts
# packages/ui/acp/src/codec.ts
# packages/ui/acp/tests/codec.spec.ts
# pnpm-lock.yaml
2026-07-25 22:35:22 +08:00
creatixchu
f57a4a044a
fix(gui): address ds-review-bot findings on image attachments
...
- dsh web gains --provider/--model: a non-deepseek provider mounts the
matching pi-ai catalog route (ambient credentials), making image input
reachable from the shipped Web assembly; requires an explicit --model
- attachment-local syncs the publication directories after the hard-link
publish so a reported durable reference survives a crash (POSIX; Windows
relies on filesystem metadata journaling)
- the attachment seam gains storage-free validateImage; the host validates a
complete multi-image prompt before persisting any member, so one malformed
image cannot strand valid members as unreferenced objects
- startSession sends before navigating: a rejected first send keeps the empty
state, its error strip, and the complete draft mounted
- the webserver rejects an undeclared-length body the moment it crosses the
configured limit instead of draining a potentially endless stream to EOF
2026-07-24 20:55:25 +08:00
Yichen Jiang
580e05b794
fix(gui): harden multimodal image attachments
2026-07-23 19:38:37 +08:00