Commit Graph

3991 Commits

Author SHA1 Message Date
Chinesezjc
37e2b5d85a Merge remote-tracking branch 'origin/master' into fix/pty-handoff-grace 2026-07-27 16:39:42 +08:00
07akioni
16598f7159 fix: cr 2026-07-27 16:36:36 +08:00
07akioni
900e45b365 feat: optimize todo tool ui 2026-07-27 16:24:30 +08:00
imccyu
62a37ba38a Merge branch 'master' into worktree/web-session-model-selector 2026-07-27 16:19:40 +08:00
imccyu
9249c5504e Merge remote-tracking branch 'origin/master' into worktree/web-session-model-selector 2026-07-27 16:16:17 +08:00
Yichen Jiang
0d084ab6ff feat(web): support reasoning effort selection 2026-07-27 16:12:40 +08:00
Tianyi Cui
ab25c34ea0 Merge remote-tracking branch 'origin/master' into worktree/fix-ci-timing-flakes-20260727 2026-07-27 16:09:50 +08:00
kingwl
fa8fffda6d Merge remote-tracking branch 'origin/master' into feature/subagent-policy-inheritance
# Conflicts:
#	docs/cordis-catalog/services.md
#	examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
2026-07-27 16:09:30 +08:00
NI0317
c171ecc60b Merge remote-tracking branch 'origin/master' into feature/delete-workspace 2026-07-27 16:07:11 +08:00
Tianyi Cui
ae18216199 Merge remote-tracking branch 'origin/master' into worktree/pr683-retarget-20260727 2026-07-27 16:03:33 +08:00
07akioni
62e2551edd fix: darkmode 滚动条颜色 2026-07-27 16:01:01 +08:00
Tianyi Cui
9b8e6e6548 Merge remote-tracking branch 'origin/master' into worktree/fix-ci-timing-flakes-20260727 2026-07-27 15:58:37 +08:00
imccyu
52985d688d Merge branch 'master' into markdown-ui 2026-07-27 15:58:13 +08:00
NI0317
dcf06e8272 Merge remote-tracking branch 'origin/master' into feature/delete-workspace
# Conflicts:
#	packages/client/runtime/README.i18n.yaml
#	packages/host/apiproxy/README.i18n.yaml
2026-07-27 15:54:51 +08:00
Tianyi Cui
77a85f9b1a Merge remote-tracking branch 'origin/master' into worktree/fix-ci-timing-flakes-20260727 2026-07-27 15:53:08 +08:00
NI0317
4701373fc2 fix(workspace): remove transient duplicate warning 2026-07-27 15:52:35 +08:00
Yichen Jiang
39c60d5d64 Merge remote-tracking branch 'origin/master' into worktree/web-session-model-selector
# Conflicts:
#	.agents/notes/implemented/architecture/2026-07-20-routed-model-context-and-compaction-policy.i18n.yaml
#	.agents/notes/implemented/architecture/2026-07-20-routed-model-context-and-compaction-policy.md
#	.agents/notes/implemented/architecture/2026-07-20-routed-model-context-and-compaction-policy.zh.md
#	packages/llm/llm-deepseek/README.i18n.yaml
#	packages/llm/llm-deepseek/tests/adapter.spec.ts
2026-07-27 15:49:09 +08:00
Tianyi Cui
bfdaf7600b Merge remote-tracking branch 'origin/master' into worktree/pr674-retarget-20260727
# Conflicts:
#	docs/cookbook/adding-an-llm-adapter.i18n.yaml
#	docs/core-data-structures/llm-streaming.i18n.yaml
#	packages/llm/llm-deepseek/README.i18n.yaml
#	packages/llm/llm/README.i18n.yaml
2026-07-27 15:48:17 +08:00
Dudu-0223
d28527b91f fix(snapshot): preserve fresh cwd aliases 2026-07-27 15:46:40 +08:00
Yichen Jiang
7da7b182c9 fix: refresh model target after reconnect 2026-07-27 15:45:06 +08:00
imccyu
b8d7938498 Merge branch 'master' into markdown-ui 2026-07-27 15:44:30 +08:00
imccyu
0a7c8a284d chore 2026-07-27 15:44:10 +08:00
Yichen Jiang
181ac52f8e Merge remote-tracking branch 'origin/master' into worktree/web-session-model-selector
# Conflicts:
#	packages/client/connection/src/client/fixture.ts
#	packages/client/runtime/README.i18n.yaml
#	packages/client/runtime/tests/fake-api.ts
#	packages/client/runtime/tests/session.spec.ts
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/README.md
#	packages/client/ui-conversation/README.zh.md
#	packages/host/apiproxy/README.i18n.yaml
2026-07-27 15:41:01 +08:00
Tianyi Cui
9c53cd7d07 test: stabilize timing-sensitive terminal checks 2026-07-27 15:33:36 +08:00
Tianyi Cui
f6de42a886 Merge remote-tracking branch 'origin/master' into worktree/pr674-retarget-20260727 2026-07-27 15:30:30 +08:00
Yichen Jiang
c3dfed668d Merge branch 'master' into worktree/llm-reasoning-effort 2026-07-27 15:30:00 +08:00
Chinesezjc
ebce590bee Merge remote-tracking branch 'origin/master' into pr720 2026-07-27 15:28:46 +08:00
Dudu-0223
5eca318cdc fix(snapshot): preserve volatile id correlations 2026-07-27 15:25:50 +08:00
imccyu
b241d4332c Merge branch 'master' into markdown-ui 2026-07-27 15:23:13 +08:00
Dudu-0223
82637524a3 fix(snapshot): stabilize refresh volatiles 2026-07-27 14:58:38 +08:00
imccyu
8605099282 fix: model selector width 2026-07-27 14:54:27 +08:00
NI0317
7bd96af5eb fix(workspace): make deletion recoverable 2026-07-27 14:37:04 +08:00
Chinesezjc
87c1b37dce Merge branch 'fix/pty-raw-ready-wait' into fix/pty-handoff-grace 2026-07-27 14:35:32 +08:00
Chinesezjc
a5c820ea3a Merge remote-tracking branch 'origin/master' into fix/pty-handoff-grace 2026-07-27 14:15:11 +08:00
Chinesezjc
f35c18f7e6 fix(pty): make the foreground-handoff grace a config field
The local PTY readiness poll held its inferred_idle fallback for exactly
one pollIntervalMs after a prompt marker, so a bash foreground handoff
that lands on the silence boundary only wins the exact stdin_read
attribution when the kernel publishes it inside that single poll. On a
slow or loaded host it does not, and the attribution flips.

handoffGraceMs replaces the hardcoded one-poll window as a validated,
deployment-owned config field defaulting to 500ms, rejected at load when
it cannot contain one readiness poll. Real-shell tests that interrupt a
send now assert the session is usable again rather than which readiness
tier observed the handoff, because no fixed grace removes the race.
2026-07-27 14:14:59 +08:00
Chinesezjc
d3d66926fb fix(code-runtime): reject a maxWallMs above Node's maximum timer delay
`config.maxWallMs` is only checked for positivity, and it is handed to
`setTimeout`, which clamps any delay above 2^31-1 ms to 1 ms. A deployment
configuring a 25-day wall ceiling therefore gets the opposite of what it asked
for: every run times out on the first tick. The runtime now range-checks the
field at load against MAX_TIMER_DELAY_MS from dsh-timeout and throws, so the
misconfiguration fails loud where it is self-contained instead of silently
inverting the budget.

`computeMs` needs no matching bound: it is compared against measured event-loop
utilization rather than fed to a timer.

The test asserts both the rejection and that the boundary value itself loads.
2026-07-27 14:01:15 +08:00
kingwl
10bb6dc4fe docs(policy): align every precedence statement with the override chain
Review fix (ds-review-bot on #623): the READMEs and JSDoc still stated the
pre-baseline formulas — resolve() outranking 'the session's last
sandbox/mode event', 'effective = explicit grant ?? fold(events) ??
deployment default', and the approval README's 'last approval/policy event'
opener — which contradict the shipped semantics for a delegated fork whose
seed tail differs from its header baseline. Every statement now names the
override chain (own post-seed switches ?? inherited header baseline): both
READMEs (both languages), resolve()'s JSDoc, the session-mode module and
event-declaration docs, the raw folds re-scoped as building blocks, and
the regenerated catalogs.
2026-07-27 13:45:09 +08:00
Chinesezjc
e56afd718d test(pty-local): keep the raw-mode send active until python3 prints its marker
The darwin-parity job failed intermittently on the SIGINT test with the
operation buffer holding only the echoed command line, never RAW_READY. The
harness sets idleSilenceMs to 250, so when a cold python3 start stays silent
past that bound the send settles as inferred_idle; PtySendOperation.append then
drops all later output, and the marker reaches only the scrollback.

Give the harness per-test idleSilenceMs/timeoutMs overrides and let this
scenario raise both above interpreter startup latency, so the readiness marker
lands inside the send it belongs to. waitForOutput's own deadline and the test
timeout grow to match the new bounds.

The product timings are unchanged; the pty Agent Note records why a test that
waits on an operation must outlast the child's startup.
2026-07-27 13:45:04 +08:00
imccyu
3b04941830 Merge the concurrent selector adaptation; ui-model stays the model owner
The remote side re-merged master (i18n workflow round) and restored the
pre-architecture ModelSelector package with the Session-side state
machine. Reconciliation keeps that merge's master content and reasserts
this branch's model architecture: business state lives in ui-model's
shared per-session directory (ctx.models), not on Session/
ConversationSnapshot; the input.model seat entry and the /model popup
stay the two same-source entries; the history modelTarget piggyback stays
removed. The ui-model-selector package, its roster row, and its allowlist
entry go; the smoke-real roster names ui-model.
2026-07-27 13:36:25 +08:00
Yichen Jiang
21aeff3029 Merge remote-tracking branch 'origin/master' into worktree/llm-reasoning-effort
# Conflicts:
#	.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml
#	docs/config-catalog.md
#	docs/core-data-structures/session.i18n.yaml
#	scripts/type-equiv.manifest.json
2026-07-27 13:35:10 +08:00
Turtle
a7a369a7be chore(llm): bump pi-ai to 0.82.1 2026-07-27 13:25:45 +08:00
Tianyi Cui
73d2a787a7 Merge branch 'master' into nih-imp-sse 2026-07-27 13:13:57 +08:00
imccyu
3025a324cd Fix the setEffort arrow shorthand lint finding 2026-07-27 13:10:32 +08:00
imccyu
72717b7b78 Two-level model/effort selection per the MenuDropdown mock
The seat's dropdown follows figma 496:26454: the root pane is the
Model / Effort cell pair (14/22 label, value in the tertiary tone, right
chevron), each drilling into its own list — the provider-grouped model
list over the shared directory, and the High/Max effort levels. The
trigger (313:14108) shows both values: model name plus effort in the
caption tone. Effort is a client-local display echo on the shared
directory state for now — the design pairs the two as one selection, but
no wire carries a per-session effort override yet (the deepseek adapter's
reasoningEffort is deployment config); the directory state documents that
boundary, so wiring it later is a submit-path change, not a UI one.
Escape backs out of a drilled pane before closing.
2026-07-27 13:01:47 +08:00
07akioni
0d2a8a3090 Merge branch 'master' into markdown-ui 2026-07-27 12:59:37 +08:00
07akioni
55fc87a7a0 fix: cr 2026-07-27 12:58:20 +08:00
Tianyi Cui
a70923ba21 fix(session-checkpoint-policy): fail fast on an impossible crash marker
vi.waitFor retries every callback throw, so the mismatch branch inside
the callback waited the full 30s deadline for a fixture that writes the
marker once and cannot recover. Terminal states (complete marker, or
content that can no longer become the expected marker) now resolve out
of the retry loop and the mismatch throws after it, restoring the old
loop's immediate failure.
2026-07-27 12:51:47 +08:00
Tianyi Cui
109b469a7e fix(tool-web): bound conversion depth and complete fetch output
Two review findings on the turndown swap, both verified empirically:

- Unclosed-tag nesting makes the synchronous turndown/domino walk
  superlinear (measured: depth 512 ~0.15s, 2k ~2s, 20k ~5s), during
  which the cooperative fetchTimeoutMs timer cannot fire. renderBody
  now preflights nesting depth with a linear tag scan and passes
  bodies past 512 levels through raw; the try/catch stays for markup
  the scan cannot see (comment-hidden tags), simulated in tests via a
  converter throw.
- Markdown escaping can expand converted HTML ~2x (100k underscores
  render as 200k chars), so provider body caps no longer bounded the
  model-visible result. formatFetchOutput now caps the complete output
  (header + body + footer) under new fetchMaxOutputChars config
  (default 200000 = 2x the local provider's default body cap), reusing
  the truncation notice.

README EN+ZH, config catalog, Agent Note EN+ZH updated; the new
web-fetch fixture is migrated to the packed layout master now
requires; tool-web coverage stays 100% per-file.
2026-07-27 12:41:36 +08:00
NI0317
187cf6f804 feat(web): delete workspace registrations 2026-07-27 12:38:11 +08:00
Chinesezjc
710a3b1686 docs(ui-conversation): document the two todo registrations in the owning README pair
The todo row and the todo plan strip were registered without a contract in this
package's README, which still described only the bash sample. Both sides now
carry the two registrations: TodoRow's `todo_write` toolview key with its
attempted-write summary and non-ok dot semantics, and TodoDock's
`conversation.input.dock` entry at `order: -1` with the dock-owned selection,
empty-hidden panel, collapse behavior, and the composer-takeover consequence
that hides the whole dock. README.i18n.yaml re-recorded.
2026-07-27 12:20:17 +08:00