Commit Graph

3697 Commits

Author SHA1 Message Date
Hypatia May
795af3174e fix: cancel session authorization reads 2026-07-24 19:21:32 +08:00
Turtle
f0410d592d feat(web): permission presets and approval answering for the web UI
The web host now composes the sandboxed product path (sandbox-local +
sandbox-policy behind bash-sandbox/fs-sandbox, with user-approval and
permission on top); BootHostOptions.sandbox carries the deployment
defaults (workspace-write + ask).

createApiProxy owns the approval pending registry: a ctx.approval ask
becomes an answerable approval/requested mux frame with a stable rpcId,
replayed verbatim on every mux open until settled; respond routes by the
echoed rpcId, validates the ApprovalResponsePayload audit correlation,
and broadcasts approval/resolved; the ask's abort signal withdraws the
question as cancelled.

session.permissions / session.setPermission project ctx.permission into
a protocol-owned PermissionOption select; idle switches are held
last-write-wins and
flushed into the next prompted turn (the ACP bridge's anchoring
pattern). The shared hasOpenTurn fold moved to dsh-session,
deduplicating the private copies in user-approval, the ACP bridge, and
the proxy.

Client, per the designer draft: a pending approval takes over the
composer (ApprovalPanel replaces the InputBar — amber strip,
justification headline, paired command, one-shot refuse/allow, keyed by
rpcId so a queued second approval remounts live; the resolved frame
restores the composer); the sidebar session row shows an amber
waiting-approval dot that outranks the running ring (manager-tracked
approvalId set, idempotent under mux-open replays, cleared per
connection generation, lit for uninstantiated sessions too); the
permission selector is a composer bottom-row chip over an invisible
native select, with a presentation-only title-case transform
(workspace-write renders as Workspace Write; wire names untouched). Question placeholders stay in the message flow. The
connection fixture mirrors the host behavior for keyless browser
acceptance.
2026-07-24 19:15:04 +08:00
Tianyi Cui
9ef0193dd5 feat(host-runtime,llm-replay): keyless llm seam + replay pacing/consumption handle
BootHostOptions.llm: 'deepseek' | false — false mounts no adapter, boots
keyless, and leaves the llm capability seam open for the embedder to fill
on RunningHost.ctx (now the third sanctioned ctx use, JSDoc + README
amended); an unfilled seam fails loud with NO_ADAPTER at the first stream.

dsh-llm-replay grows two additive surfaces for the web browser e2e lane:
paceMs (validated per-chunk delay so a real transport shows incremental
delivery; abort during a pace wait cancels promptly) and a ReplayHandle
return — dispose() plus assertConsumed(), the teardown check that every
recorded script bound and drained, converting silent fixture underruns
into diagnostics. Existing callers updated; config catalog regenerated.
2026-07-24 19:08:10 +08:00
Tianyi Cui
6865b861d8 docs(site): preserve translated core fragment ids 2026-07-24 18:32:31 +08:00
_Kerman
fb0ef82aa6 Merge remote-tracking branch 'origin/feat/send-unify' into xtr/agent-loop-message-machine
# Conflicts:
#	packages/client/runtime/src/client/sessions/fold-adapter.ts
2026-07-24 18:24:28 +08:00
_Kerman
879bc71864 refactor(agent): require explicit send options 2026-07-24 18:23:24 +08:00
Hypatia May
fec4ce52cc fix: batch cancellable title reads 2026-07-24 18:13:11 +08:00
Tianyi Cui
b7a8a97034 Merge refreshed #343 into docs/i18n-batch-cds-postmortem 2026-07-24 17:39:54 +08:00
Tianyi Cui
305930712b docs(i18n): bind authority terminology 2026-07-24 17:39:11 +08:00
_Kerman
1d9662a020 refactor(agent-loop): unify pending message representation 2026-07-24 17:23:33 +08:00
Hypatia May
96c5696f80 Merge remote-tracking branch 'origin/master' into session-query-tool
# Conflicts:
#	docs/architecture.i18n.yaml
#	docs/cordis-catalog/services.md
2026-07-24 17:12:03 +08:00
_Kerman
76d0e450ce fix(agent): preserve thrown error values 2026-07-24 17:11:58 +08:00
Tianyi Cui
6b686aa832 docs(i18n): refresh session query snapshot contract 2026-07-24 17:07:23 +08:00
_Kerman
90e69a3123 refactor(agent): minimize inbox message contract 2026-07-24 17:00:42 +08:00
Turtle
d2b2539f3e Merge remote-tracking branch 'origin/feat/send-unify' into feat/send-unify
# Conflicts:
#	docs/architecture.i18n.yaml
#	docs/architecture.md
2026-07-24 16:58:32 +08:00
Tianyi Cui
c962db28da Merge refreshed #343 into docs/i18n-batch-cds-postmortem 2026-07-24 16:57:46 +08:00
Tianyi Cui
b040c6a1c9 Merge latest master into docs/i18n-batch-core 2026-07-24 16:55:08 +08:00
Turtle
80bbe959a7 Merge remote-tracking branch 'origin/master' into feat/send-unify 2026-07-24 16:52:46 +08:00
_Kerman
b3c1abac67 refactor(agent-loop): rely on eager session persistence 2026-07-24 16:40:33 +08:00
Hypatia May
6be11539e2 fix: bind session authorization to observations 2026-07-24 16:40:08 +08:00
_Kerman
6945a2c37d Merge remote-tracking branch 'origin/feat/send-unify' into xtr/agent-loop-message-machine 2026-07-24 16:31:49 +08:00
Turtle
bb124c2869 Merge branch 'master' into feat/send-unify 2026-07-24 16:31:00 +08:00
ZiyaZhang
33ee34b58e fix(tui): make resume picker full-screen 2026-07-24 01:29:35 -07:00
Turtle
c440217fde refactor(tui): defer cross-process resume locking 2026-07-24 01:29:35 -07:00
NI0317
54d986ed87 fix(tui): close resume handoff races 2026-07-24 01:29:35 -07:00
NI0317
2ae9f4fdf3 feat(tui): add safe session resume flow 2026-07-24 01:29:35 -07:00
_Kerman
66645638fb Merge remote-tracking branch 'origin/feat/send-unify' into xtr/agent-loop-message-machine
# Conflicts:
#	.agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.md
#	.agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.zh.md
#	docs/architecture.i18n.yaml
#	docs/architecture.md
#	docs/architecture.zh.md
#	docs/core-data-structures/core.md
#	packages/context/session-reference/README.md
#	packages/cordis/tool-cordis/src/api-catalog.ts
#	packages/core/agent-loop/README.md
#	packages/core/agent-loop/src/agent.ts
#	packages/core/agent-loop/src/inbox.ts
#	packages/core/agent-loop/tests/agent.spec.ts
#	packages/core/agent-loop/tests/cancel.spec.ts
#	packages/core/agent-loop/tests/contract-regressions.spec.ts
#	packages/core/agent-loop/tests/coverage-edges.spec.ts
#	packages/core/agent-loop/tests/interception.spec.ts
#	packages/core/agent-loop/tests/loop.spec.ts
#	packages/core/agent/README.md
#	packages/core/agent/src/types.ts
#	packages/core/agent/tests/agent.spec.ts
#	packages/ui/acp/src/index.ts
#	packages/ui/tui/src/index.ts
#	packages/ui/tui/tests/harness.ts
2026-07-24 16:25:53 +08:00
Tianyi Cui
46a71ecf22 docs(i18n): address final core-data review 2026-07-24 16:21:48 +08:00
_Kerman
45fc7fda3d refactor(agent-loop): separate injected context from turns 2026-07-24 16:05:52 +08:00
Tianyi Cui
c53f9324bc Merge #343 into #344 2026-07-24 15:51:35 +08:00
Tianyi Cui
445bb89f03 docs(i18n): complete core batch review contract 2026-07-24 15:51:06 +08:00
Tianyi Cui
3122548be8 Merge #343 into #344 2026-07-24 15:16:55 +08:00
Tianyi Cui
bc329a962b docs(i18n): codify review terminology 2026-07-24 15:16:18 +08:00
Hypatia May
a350e95165 feat(session-query): add model-facing tools (round 1) 2026-07-24 15:09:55 +08:00
Turtle
b02b438667 refactor(agent): align delivery method names 2026-07-24 15:08:36 +08:00
Tianyi Cui
1b0988c92a docs(i18n): address core translation review 2026-07-24 14:56:48 +08:00
Yichen Jiang
208a44a7ec feat(web): add session model selector 2026-07-24 14:55:54 +08:00
Tianyi Cui
8345a73d97 Merge commit 'c3d9023fa' into worktree/pr344-retarget-stack 2026-07-24 14:43:09 +08:00
Tianyi Cui
9b38ccad54 docs(i18n): clarify optional rounds and test layout 2026-07-24 14:42:36 +08:00
Tianyi Cui
eceacca432 Merge commit '84ac8a3f9' into worktree/pr344-retarget-stack 2026-07-24 14:22:38 +08:00
Tianyi Cui
86d3bd6b9b docs(i18n): clarify review terminology 2026-07-24 14:21:36 +08:00
Tianyi Cui
6e4aa13632 docs(i18n): clarify Cordis and test wording 2026-07-24 14:21:15 +08:00
_Kerman
fdeadc9dda Merge remote-tracking branch 'origin/feat/send-unify' into xtr/agent-loop-message-machine
# Conflicts:
#	.agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.md
#	.agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.zh.md
#	packages/context/workspace-context/README.md
#	packages/core/agent-loop/src/agent.ts
#	packages/core/agent-loop/src/inbox.ts
#	packages/core/agent-loop/tests/agent.spec.ts
#	packages/core/agent-loop/tests/inbox.spec.ts
#	packages/goal/goal/README.md
2026-07-24 14:14:12 +08:00
_Kerman
5c7505b208 refactor(agent): remove message metadata channel 2026-07-24 14:05:33 +08:00
Tianyi Cui
9848a9542b docs: restore architecture headroom 2026-07-24 14:02:53 +08:00
Tianyi Cui
b01fc33492 Merge remote-tracking branch 'origin/feat/send-unify' into worktree/agent-message-intents
# Conflicts:
#	.agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.md
#	.agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.zh.md
#	docs/cordis-catalog/events.md
#	docs/event-producer-consumer.md
#	packages/core/agent-loop/src/agent.ts
2026-07-24 13:59:37 +08:00
Tianyi Cui
d6d50deb24 refactor(agent): expose resolved input acceptance 2026-07-24 13:52:25 +08:00
Turtle
d613fdb073 fix(agent-loop): third review pass — disposal discard ordering, flush guard, docs
Address a fresh-eye review of the disposal/injection fixes:
- disposal now snapshots, clears, and marks disposed BEFORE emitting
  agent/inbox/discard (mirroring cancel's snapshot→clear→emit), so a
  re-entrant send/cancel from a discard listener throws 'disposed' or
  finds an empty inbox instead of leaking or double-discarding an id.
  The discard is unconditional (even on unpublished setup-rollback) to
  match send's unconditional enqueue, keeping every id balanced.
- restore the turnRecorded guard on the idle-injection flush: a
  turn/start rejected pre-commit (append reentrancy / internal-dispatch
  veto) records nothing and owes no flush; the previous unconditional
  flush emitted a phantom-turn agent/error. The isTurnOpen/turnRecorded
  branches are reachable (reentrant inject from a session/event
  listener) and now covered by a regression test rather than v8-ignored.
- rewrite the agent/inbox/discard event JSDoc to enumerate all three
  emitters (cancel, terminal turn-stop, disposal) — every enqueued id
  gets exactly one terminal dequeue-or-discard.

Per-file coverage stays 100%.
2026-07-24 13:39:06 +08:00
_Kerman
7d5c8b12c0 fix(agent-loop): preserve unified send contracts 2026-07-24 13:20:51 +08:00
Tianyi Cui
086e454931 refactor(agent): name delivery methods by intent 2026-07-24 12:27:20 +08:00