Commit Graph
423 Commits
Author SHA1 Message Date
Yichen Jiang 3764b60205 Merge commit '3dd445fe163' into worktree/composer-host-confirmed-echo
The session-controller README pairing is recorded again for the merged
sections.
2026-10-24 21:39:51 +08:00
imccyu 048845f841 fix(typert): harden default resource declarations and sync contracts 2026-10-23 17:39:35 +08:00
imccyu 3c4a79cc1b chore(session): remove stray blank lines 2026-10-23 16:22:07 +08:00
imccyu b2b3bf4568 fix(typert): reject ambiguous and multiple default resource identities 2026-10-23 16:13:38 +08:00
imccyu 9d7cd67a51 test(session): cover cold attachment without workspace 2026-10-23 16:01:29 +08:00
imccyu 05f94de1f9 fix(typert): preserve parameter metadata in resource resolvers 2026-10-23 16:01:28 +08:00
imccyu 94464e2214 chore(session): sync baseline docs and test lint 2026-10-23 16:01:28 +08:00
imccyu fea3bcdbf4 feat(typert): support default resource resolvers 2026-10-23 16:01:28 +08:00
imccyu 0c23ad233d refactor(session-controller): remove unused inspection facade 2026-10-23 16:01:27 +08:00
Dudu-0223 b096659245 fix(session): make ordinary forks independent of source lineage 2026-10-23 14:48:07 +08:00
Yichen Jiang 89538fb115 Merge remote-tracking branch 'origin/master' into worktree/composer-host-confirmed-echo
- The composer's primary button keeps master's rule that hides a denied
  action and draws the sending state inside it; a sending prompt stays
  interruptible through master's stopAction.
- The ui-conversation README pairing is recorded again for the merged
  sections.
2026-10-23 14:31:30 +08:00
Turtle b908e13271 Merge remote-tracking branch 'origin/master' into turtle/image-cache-stale-0a243f674e12
# Conflicts:
#	packages/api/session-controller/README.i18n.yaml
#	packages/api/session-controller/README.md
#	packages/api/session-controller/README.zh.md
#	packages/client/ui-primitives/README.i18n.yaml
2026-10-22 14:57:42 +08:00
Yichen Jiang da864e3377 Merge remote-tracking branch 'origin/master' into stack/pr-6426 2026-10-22 10:30:26 +08:00
Yichen Jiang dd568f76de Merge remote-tracking branch 'origin/master' into worktree/composer-image-preupload
# Conflicts:
#	packages/test-support/client-runtime/README.i18n.yaml
2026-10-21 23:17:57 +08:00
Turtle 16cf3316e6 Merge remote-tracking branch 'origin/master' into turtle/image-cache-stale-0a243f674e12
# Conflicts:
#	packages/api/session-controller/README.i18n.yaml
#	packages/client/ui-primitives/README.i18n.yaml
2026-10-21 17:58:20 +08:00
Yichen Jiang c29fdd3bf6 Merge branch 'worktree/composer-image-preupload' into worktree/pr-6426-review-970262 2026-10-21 16:51:49 +08:00
Yichen Jiang b22cf68e50 fix(web): explain refused image uploads and tighten image staging
Address the review of this pull request:
- A failed image upload keeps the Host's attachment refusal reason. The
  thumbnail of a refused image names the reason instead of offering a
  retry that cannot succeed, and Enter while uploads hold the send names
  the first failure; a transport failure still offers retry, and an
  image without a file name uses the pending-image label.
- An image upload stops reading at the smaller of the per-image and
  per-message byte limits.
- A carried image draft moving to a Session that sends images inline
  drops its upload instead of staging it again.
- The image upload ready state no longer carries an unread image ref.
- Docs describe stored-image admission and the command image path, and
  the attachment rail test builds typed props instead of casting through
  unknown.
2026-10-21 16:48:01 +08:00
Yichen Jiang 052186f89f Merge branch 'worktree/composer-image-preupload' into worktree/pr-6426-review-970262 2026-10-21 15:44:10 +08:00
Yichen Jiang a2d35f381a fix(web): bound image receipts by the message limits and cancellation
Prompt admission counted stored images only toward the image count, so
two uploads that each fit alone could exceed maxMessageImageBytes once a
prompt cited both receipts. A staged image now records the byte length
of its upload, and admission counts stored and encoded images together
against both per-message limits before storing anything.

An image upload cancelled after its last chunk, or while its image was
stored, still received a receipt. The upload now checks cancellation
after the read and again before staging, as the file stream path does;
an image whose storage began stays stored, but no receipt is issued.
2026-10-21 15:43:55 +08:00
Yichen Jiang faf62f4c1a Merge branch 'worktree/composer-image-preupload' into worktree/pr-6426-review-970262
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/src/client/input/facade.ts
#	packages/client/ui-conversation/src/client/input/hub.ts
2026-10-21 15:15:46 +08:00
Yichen Jiang 1b608982cc Merge remote-tracking branch 'origin/master' into worktree/composer-image-preupload
# Conflicts:
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	docs/persistence-catalog.i18n.yaml
#	docs/persistence-catalog.md
#	docs/persistence-catalog.zh.md
#	docs/persistence-schema.json
#	packages/client/ui-conversation/README.i18n.yaml
2026-10-21 15:02:15 +08:00
_Kerman d6dc8890b9 Merge github/master into xtr/session-store-write-lifecycle 2026-10-21 15:01:22 +08:00
lsdsjyandlsdsjy 0e49f443dd feat(ui-conversation,ui-chat): 基于 user-text 支持富文本引用与草稿恢复 (#3206)
* feat(ui-chat,ui-conversation): 通过通用文本交互支持原文引用

* refactor(message-quotes): 插件化引用交互与文本扫描豁免

* test(message-quotes): 补齐插件装配预期与交互分发覆盖

* refactor(ui-conversation): 移除引用删除文案的语言切换刷新

* refactor(message-quotes): 移除引用扫描豁免并收窄文本交互接口

* fix(ui-chat): 修复引用浮层的滚动遮挡与恢复

* fix(ui-chat): 对齐 master 的聊天流注入与界面快照

* test(message-quotes): 补齐 Host 入口覆盖并固定子会话回放时序

* refactor(message-quotes): 清理文本依赖特例并修正引用按钮

* fix(ui-primitives): 让引用原文弹层按内容收缩

* fix(ui-primitives): 修复相邻引用悬停弹层重叠与误切换

* fix(message-quotes): 为引用悬停样式限定设备能力

---------

Co-authored-by: lsdsjy <[email protected]>
2026-10-21 14:41:41 +08:00
_Kerman 6bfe05c6f5 refactor(agent): name captured step selection modelSelection 2026-10-21 14:08:11 +08:00
Yichen Jiang 114ab6395b Merge branch 'worktree/composer-image-preupload' into worktree/composer-host-confirmed-echo
Brings in master a8d675ecc92, which reverts the agent controller of #6418,
together with the composer's image upload on add.

The agent-controller message delivery Agent Note follows master's deletion.
The ui-conversation README keeps the read-only sending paragraph and takes
the image upload sentences. Service orchestration keeps both new sendSession
cases, and the refused-send reference case takes master's newSession
submission fact. README pairings are recorded again.
2026-10-21 14:05:09 +08:00
Yichen Jiang 9be99a0e28 feat(web): upload composer images when they are added
An ordinary Session's composer now uploads each image draft through the
background upload queue as soon as it is added. The raw upload route stages
the body as a prompt image when the request names its media type: the Host
reads at most the per-image byte limit, then validates, normalizes, and
stores the image as prompt admission would. The prompt cites the receipt in
a file part; prompt admission resolves it to the stored image, applies the
image-input check, and counts stored images toward maxImagesPerMessage.

Send waits for every image receipt, and a failed image upload turns its
thumbnail into a retry control. Commands and subagent continuations keep
encoding images inline.
2026-10-21 13:50:19 +08:00
_Kerman a8013ddc35 Merge remote-tracking branch 'github/master' into xtr/session-store-write-lifecycle
# Conflicts:
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	docs/persistence-schema.json
2026-10-21 13:45:24 +08:00
_Kerman cdb3a76b6a test(agent): complete model ownership migration coverage 2026-10-21 10:43:20 +08:00
_Kerman 200dedd494 chore: trim unrelated model-selection changes 2026-10-20 22:13:30 +08:00
_Kerman ba50aec4de fix(session): preserve automatic reasoning effort on selection 2026-10-20 21:09:29 +08:00
_Kerman a9c006f9c3 refactor(agent): own model selection on each agent 2026-10-20 21:09:09 +08:00
_Kerman 639602e63a Merge origin/master into xtr/session-model-selection 2026-10-20 20:57:11 +08:00
Turtle aa8bdfc79e Revert "feat(agent): admit Web prompts through the agent controller" 2026-10-20 19:09:02 +08:00
Turtle 450e81bbf3 Merge remote-tracking branch 'origin/master' into turtle/image-cache-stale-0a243f674e12
# Conflicts:
#	packages/client/ui-primitives/README.i18n.yaml
#	packages/client/ui-primitives/README.md
#	packages/client/ui-primitives/README.zh.md
#	packages/client/ui-primitives/tests/markdown-path-images.client.spec.tsx
2026-10-20 18:00:57 +08:00
_Kerman 8b79a1ddcc Merge origin/master into xtr/session-model-selection 2026-10-20 17:22:59 +08:00
Yichen Jiang 317e56d108 fix(web): accept a prompt when its Inbox row arrives before the receipt
The Host's Inbox projection can reach the client before the prompt receipt.
Until the receipt published the echo, QueueDock showed the message as a
queued row, and in "On next message" mode the conversation followed the
grown tail and then folded back.

An Inbox row carrying the request id proves that the Host accepted the
prompt. The Session now publishes the echo and leaves the blank layout at
whichever of the receipt or the row arrives first, and calls the new
onAccept callback in that update. The composer settles inside that callback,
before the echo renders, so the fold starts from the shrunk composer instead
of depending on microtask order.
2026-10-20 15:51:53 +08:00
_Kerman e7ffab7902 Merge remote-tracking branch 'origin/master' into xtr/session-store-write-lifecycle
# Conflicts:
#	apps/web/tests/new-session-refused.e2e.ts
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
2026-10-20 15:31:09 +08:00
_Kerman cc0e980e48 fix(session): align store-owned writes with lifecycle notifications 2026-10-20 11:33:44 +08:00
Yichen Jiang 73a9e6c95c Merge branch 'refs/heads/worktree/session-agent-controller-refactor-ff892d' into worktree/composer-host-confirmed-echo
# Conflicts:
#	.agents/notes/implemented/architecture/2026-10-17-agent-controller-message-delivery.i18n.yaml
2026-10-20 10:41:58 +08:00
Yichen Jiang 43d6585375 refactor(agent-controller): recognize admission refusals by code
AgentAdmissionRejected now extends HarnessError with the fixed code
AGENT_ADMISSION_REJECTED. The Session Remote recognizes a refusal by that
code and imports only agent-controller types, so its mapping also holds for
an error from another copy of the module; its literals are typed by the
agent-controller constants, so a changed value fails the build.
2026-10-20 10:40:31 +08:00
Yichen Jiang eb105d3471 Merge branch 'refs/heads/worktree/session-agent-controller-refactor-ff892d' into worktree/composer-host-confirmed-echo
# Conflicts:
#	packages/api/session-controller/README.i18n.yaml
2026-10-19 22:40:19 +08:00
Yichen Jiang 8f487bbb61 test(agent-controller): register session projections before the Agent registry
Master's async activation makes AgentRegistry inject sessionProjections and
makes createSessionTestRemote async. Install SessionProjectionRegistry in the
agent-controller and prompt-admission harnesses and await the test Remote in
the image admission tests.
2026-10-19 22:31:31 +08:00
Yichen Jiang 1d51715aca Merge remote-tracking branch 'origin/master' into worktree/session-agent-controller-refactor-ff892d
# Conflicts:
#	docs/config-catalog.md
#	docs/config-catalog.zh.md
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	docs/persistence-catalog.i18n.yaml
#	docs/persistence-catalog.md
#	docs/persistence-catalog.zh.md
#	docs/persistence-schema.json
#	packages/api/session-controller/README.i18n.yaml
#	packages/api/session-controller/tests/commands-upload-file.host.spec.ts
#	scripts/gen-cordis-catalog.ts
2026-10-19 22:25:55 +08:00
Yichen Jiang da80c3d9e6 fix(web): publish awaitingFirstTurn only after the Host accepted the prompt
The first-prompt flag is still set before the receipt, so a turn that
starts ahead of it clears the flag, but the Session snapshot reports
awaitingFirstTurn only once the Session left blank, which happens when the
Host accepted the prompt. A snapshot rebuilt while the prompt waits no
longer reports a first turn that nothing accepted yet.
2026-10-19 17:02:21 +08:00
Yichen Jiang ed99af1272 Merge remote-tracking branch 'origin/worktree/session-agent-controller-refactor-ff892d' into worktree/composer-host-confirmed-echo
# Conflicts:
#	.agents/notes/implemented/architecture/2026-10-17-agent-controller-message-delivery.i18n.yaml
#	packages/api/session-controller/README.i18n.yaml
2026-10-19 17:00:01 +08:00
turtle1999 67a4ab78be fix(file-upload): release the Agent resolver when its owner reloads
session-controller registers its resolver through `ctx.fileUploads`. Inside
that call Cordis returns a new proxy for every function-valued property read
from `this`, so the disposer's identity check never matched and the slot was
never cleared. Any restart of session-controller, such as a profile patch that
changes session-query-sqlite, then failed with "Agent resolver is already
registered" and left every sessionController dependent pending.

Store the resolver in a plain holder object, as the commands receipt resolver
already does, and test registration and disposal through a plugin fiber.
2026-10-19 16:59:18 +08:00
Yichen Jiang a472820428 fix(agent): wait for deliveries on disposal and keep image prompts in order
The Agent controller now finishes disposal only after every delivery it
stopped has settled, and a sender that cancels stops waiting at once, also
while its message waits behind a held one; the message keeps its place and
is dropped at its turn.

An image prompt takes the Session's image admission turn when its
preparation starts, in the Agent's delivery order, and keeps it until the
prompt settles. Image and text prompts therefore enter the inbox in arrival
order, and a model selection waits only for the image prompt being
admitted, not for one still queued.

The core page documents the delivery types, and the architecture overview
lists the controller and its admission event.
2026-10-19 16:58:59 +08:00
Yichen Jiang d4aeef0352 Merge remote-tracking branch 'origin/master' into worktree/composer-host-confirmed-echo
# Conflicts:
#	docs/capability-seams.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	docs/persistence-catalog.i18n.yaml
#	docs/persistence-catalog.md
#	docs/persistence-catalog.zh.md
#	docs/persistence-schema.json
2026-10-19 15:16:01 +08:00
Yichen Jiang 47d947d8b1 Merge remote-tracking branch 'origin/master' into worktree/session-agent-controller-refactor-ff892d
# Conflicts:
#	docs/capability-seams.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	docs/persistence-catalog.i18n.yaml
#	docs/persistence-catalog.md
#	docs/persistence-catalog.zh.md
#	docs/persistence-schema.json
2026-10-19 15:07:35 +08:00
_Kerman c18f5bd3c0 Merge remote-tracking branch 'origin/master' into xtr/session-model-selection
# Conflicts:
#	docs/capability-seams.i18n.yaml
#	docs/capability-seams.md
#	docs/capability-seams.zh.md
#	docs/config-catalog.md
#	docs/config-catalog.zh.md
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	docs/persistence-catalog.i18n.yaml
#	docs/persistence-catalog.md
#	docs/persistence-catalog.zh.md
#	docs/persistence-schema.json
#	packages/api/session-controller/src/types.ts
#	packages/bundle/base/package.json
#	packages/bundle/headless/README.i18n.yaml
#	packages/bundle/headless/README.md
#	packages/bundle/headless/README.zh.md
#	packages/bundle/headless/package.json
#	packages/bundle/headless/tsconfig.json
#	packages/subagent/tool-subagent/tests/model-selection-settings.spec.ts
#	scripts/type-equiv.manifest.json
2026-10-19 11:30:55 +08:00