Commit Graph
46 Commits
Author SHA1 Message Date
Yichen Jiang ad8a00c291 Merge remote-tracking branch 'origin/master' into worktree/sidebar-session-recovery
# Conflicts:
#	packages/subprocess/subprocess-local/src/index.ts
2026-09-15 12:15:20 +08:00
imccyu 232ab768a9 perf(runtime): defer optional native dependencies 2026-09-15 11:06:43 +08:00
Yichen Jiang b25c5ad82e feat(web): restore sidebar layouts and reclaim unattended terminals 2026-09-15 10:27:44 +08:00
Turtle b42913c8f1 Merge master and adapt terminal retention fixtures 2026-09-14 16:52:55 +08:00
_Kerman 0a382becb3 Merge latest origin/master into xtr/agent-setup-hook 2026-09-14 13:57:18 +08:00
Yichen Jiang 1b7b50bbe1 Merge remote-tracking branch 'origin/master' into worktree/web-sidebar-terminal
# Conflicts:
#	apps/web/package.json
#	docs/config-catalog.i18n.yaml
#	docs/config-catalog.md
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	packages/api/remotes/src/client/index.ts
#	packages/e2b/subprocess-e2b/README.md
#	packages/e2b/subprocess-e2b/README.zh.md
#	packages/e2b/subprocess-e2b/src/index.ts
#	packages/e2b/subprocess-e2b/src/terminal.ts
#	packages/e2b/subprocess-e2b/tests/subprocess.spec.ts
#	packages/e2b/subprocess-e2b/tests/terminal.spec.ts
#	packages/mcp/mcp-resources/README.i18n.yaml
#	pnpm-lock.yaml
#	scripts/verify-package-readme-model-experience.ts
#	snapshots/session/cordis-inspect-jsdoc/session.v3.jsonl
#	tsconfig.base.json
#	tsconfig.client.json
#	tsconfig.host.json
2026-09-14 10:36:31 +08:00
Tianyi Cui caa69608fb refactor(sandbox): await cancellable preparation in process consumers 2026-09-12 15:03:02 +08:00
Turtle 68f9708e02 fix(terminal-bash): bound retained storage and status reads 2026-09-11 19:12:10 +08:00
Turtle cea837e065 perf(terminal-bash): retain scrollback incrementally 2026-09-11 18:40:06 +08:00
turtle1999 96ee6e49f9 test(terminal): await PowerShell prompt delivery 2026-09-11 13:22:55 +08:00
Yichen Jiang e15a9b1bec feat(web): add interactive sidebar terminals 2026-09-09 16:40:58 +08:00
_Kerman 9b7a8ccc9f feat(agent): await initialization through agent/created 2026-09-09 16:20:00 +08:00
_Kerman 0348599f04 Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2672
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	packages/acp/acp/tests/harness.ts
#	packages/api/session-controller/README.i18n.yaml
#	packages/api/session-controller/README.md
#	packages/api/session-controller/README.zh.md
#	packages/api/session-controller/tests/commands-queue-attachment.host.spec.ts
#	packages/context/agent-instructions/tests/agent-instructions.e2e.ts
#	packages/fs/tool-fs/tests/harness.ts
#	packages/preset/agent-presets/tests/invariant.spec.ts
#	packages/preset/agent-presets/tests/mount.spec.ts
#	packages/preset/agent-presets/tests/remote.spec.ts
#	packages/test-support/agent-loop-testkit/package.json
2026-09-07 20:22:24 +08:00
Tianyi Cui 237b3d5edf fix(test): synchronize pwsh completion and refresh profile snapshots 2026-09-07 11:07:19 +08:00
_Kerman 891f07a2d0 Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2672
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	packages/api/session-controller/README.i18n.yaml
#	packages/api/session-controller/README.md
#	packages/api/session-controller/README.zh.md
#	packages/api/session-controller/tests/session-projections.host.spec.ts
#	packages/bundle/headless/tests/headless.spec.ts
#	packages/core/agent-loop/README.i18n.yaml
#	packages/core/agent-loop/README.md
#	packages/core/agent-loop/README.zh.md
#	packages/core/agent/src/runtime-types.ts
#	packages/fs/tool-str-replace-editor/tests/tools.spec.ts
#	packages/llm/llm-retry/tests/retry.spec.ts
#	packages/llm/llm-retry/tests/transport-recovery.spec.ts
#	packages/shell/tool-bash-persistent/tests/loader-composition.spec.ts
#	packages/shell/tool-bash-persistent/tests/tools.spec.ts
#	packages/shell/tool-pwsh-persistent/tests/loader-composition.spec.ts
#	packages/shell/tool-pwsh-persistent/tests/tools.spec.ts
#	packages/terminal/terminal-bash/tests/index.spec.ts
#	packages/test-support/agent-loop-testkit/package.json
2026-09-04 12:18:37 +08:00
Tianyi Cui d1521ea783 feat(session)!: add released format migration 2026-09-01 22:12:21 +08:00
_Kerman ec51b7651f Merge remote-tracking branch 'origin/master' into xtr/durable-inbox-recovery
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	packages/api/session-controller/tests/session-projections.host.spec.ts
#	packages/context/agent-instructions/tests/agent-instructions.spec.ts
#	packages/core/agent/src/inbox.ts
#	packages/goal/tool-goal/tests/tool-goal.spec.ts
#	packages/skill/tool-skill/tests/tool-skill.spec.ts
#	packages/terminal/terminal-bash/tests/index.spec.ts
2026-09-01 21:46:31 +08:00
Tianyi Cui 27bf1039db refactor(session)!: distinguish event seqs from log offsets 2026-09-01 20:36:00 +08:00
_Kerman 9699772fff Merge remote-tracking branch 'origin/master' into xtr/durable-inbox-recovery
# Conflicts:
#	packages/api/session-controller/README.i18n.yaml
#	packages/api/session-controller/README.md
#	packages/api/session-controller/README.zh.md
#	packages/context/agent-instructions/tests/agent-instructions.spec.ts
#	packages/core/agent-loop/tests/contract-regressions.spec.ts
#	packages/core/agent/src/inbox.ts
#	packages/core/agent/tests/agent.spec.ts
#	packages/test-support/agent-loop-testkit/package.json
2026-09-01 11:02:30 +08:00
_Kerman 2aeb9920ee test(agent-loop): remove duplicated Inbox fixture 2026-08-31 13:37:23 +08:00
_Kerman b9b2a37528 Merge remote-tracking branch 'origin/master' into xtr/durable-inbox-recovery
# Conflicts:
#	apps/cli/tests/fixtures/dsh-badge/snapshot.ts
#	docs/config-catalog.i18n.yaml
#	docs/config-catalog.md
#	docs/config-catalog.zh.md
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	docs/persistence-catalog.i18n.yaml
#	docs/persistence-catalog.md
#	docs/persistence-catalog.zh.md
#	packages/api/session-controller/tests/session-projections.host.spec.ts
#	packages/context/agent-instructions/tests/agent-instructions.e2e.ts
#	packages/context/agent-instructions/tests/agent-instructions.spec.ts
#	packages/context/tmux-context/tests/tmux-context.spec.ts
#	packages/core/agent-loop/package.json
#	packages/core/agent-loop/src/agent.ts
#	packages/core/agent-loop/src/index.ts
#	packages/core/agent/src/index.ts
#	packages/core/agent/src/types.ts
#	packages/goal/goal/tests/goal.spec.ts
#	packages/goal/tool-goal/package.json
#	packages/llm/llm-retry/tests/retry.spec.ts
#	packages/session-query/session-query/tests/observation.spec.ts
#	packages/shell/tool-pwsh-persistent/tests/loader-composition.spec.ts
#	packages/test-support/agent-loop-testkit/package.json
#	packages/workflow/workflow-worker-thread/tests/workflow-worker-thread.e2e.ts
#	pnpm-lock.yaml
2026-08-31 13:37:06 +08:00
_Kerman 1101422362 refactor(agent): keep concrete inbox loop-internal 2026-08-31 13:36:49 +08:00
_Kerman a20c5ad0a3 Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2672
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
2026-08-31 13:35:39 +08:00
_Kerman 6ea9dd565b Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2672 2026-08-31 13:35:17 +08:00
_Kerman bd3b651ea8 refactor(agent): remove inbox service 2026-08-31 13:34:22 +08:00
_Kerman df2bae9639 Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2672 2026-08-31 13:34:09 +08:00
_Kerman aaf50dc39a refactor(agent): back Inbox with a durable projection 2026-08-31 13:32:59 +08:00
_Kerman 5660f44d29 perf(session): separate indexed and snapshot log reads 2026-08-28 13:25:58 +08:00
_Kerman d9c0aa1cd0 Merge remote-tracking branch 'github/master' into xtr/session-projection-migrations
# Conflicts:
#	docs/config-catalog.i18n.yaml
#	docs/config-catalog.md
#	packages/context/session-reference/package.json
#	packages/context/session-reference/tests/session-reference.spec.ts
#	packages/subagent/tool-subagent/src/index.ts
#	packages/subagent/tool-subagent/src/invariant.ts
#	packages/subagent/tool-subagent/src/model-selection-state.ts
#	packages/subagent/tool-subagent/tests/harness.ts
#	packages/subagent/tool-subagent/tests/list-models.spec.ts
#	packages/subagent/tool-subagent/tests/model-selection-settings.spec.ts
#	packages/subagent/tool-subagent/tests/tool-subagent.spec.ts
#	pnpm-lock.yaml
2026-08-27 16:38:06 +08:00
Yichen Jiang 9757224349 fix(subprocess): fence each signal against current process state
Review found the shared observation defeated the very fence it fed:
it carries the original PID-to-start-time pairing forward, so a
recycled PID still matches it and takes a signal meant for the process
that exited. Capturing it outside the per-member try also let one
failed read abort a whole teardown round, breaking the synchronous
host-exit contract, and an empty round paid a read for no members.

signalProcess now reads ProcessInspector.isAlive immediately before
delivering, from the narrowest per-identity source each platform
offers; signalMembers and waitForMembers return before capturing when
a round has no members. snapshot() keeps serving the readiness poll,
whose per-poll table read stays at one.

Windows enumerates Toolhelp32 lazily on the first tree question, so a
snapshot asked only for liveness — the 25 ms teardown poll — performs
no table walk at all.
2026-08-27 15:19:43 +08:00
Yichen Jiang 32ddfcd89c fix(subprocess): read the process table once per terminal poll
MacProcessInspector answered the descendant tree and every member's
liveness with its own `/bin/ps` fork, so one readiness poll cost N+1
full table reads for N tracked descendants. With execFileSync on that
path and a 50 ms poll interval, any command spawning two or more
children saturated the host event loop until it exited.

ProcessInspector.snapshot() now returns one ProcessSnapshot that
answers tree, session, and alive from a single observation, and
signalProcess takes the caller's observation so its PID-reuse fence
does not re-read the table per member.
2026-08-27 13:06:12 +08:00
_Kerman a6c7c70d4f fix(session-projection): close review findings from the fold migration
- permission-presets: register the permissions unit synchronously before the
  existing-session sweep, so a remount reads folded knob state instead of
  treating every session as fresh; add a regression test for that path
- sandbox-policy/terminal-bash: mount the projection registry in the 5 pwsh
  terminal tests, the sdk-minimal bundle, and the e2b fixture composition;
  declare the new package dependency in both manifests
- plan-mode: restore .strict() on the plan unit state schema and drop the
  deleted foldPlanMode from the bilingual READMEs
- session-title/session-projection: sync bilingual READMEs to the mandatory
  projection seam and re-record translation pairing
- docs: turnBoundary reader contract, subagent schema comment, token-meter
  import comment, sandbox-policy module docstring
2026-08-26 14:13:42 +08:00
_Kerman 4e6a1f8d21 Merge origin/xtr/projection-per-session-cache into xtr/session-projection-migrations 2026-08-25 21:42:06 +08:00
Yichen Jiang a3f67137bc test(pty): cover restricted proc syscall access 2026-08-25 14:19:56 +08:00
Yichen Jiang 133ed2d0f0 test(pty): report proc state on readiness failure 2026-08-25 14:08:30 +08:00
Yichen Jiang 5467685bc1 fix(pty): identify waiting thread terminals 2026-08-25 13:35:53 +08:00
Tianyi Cui 4f3a47d792 fix(terminal-bash): handle terminal protocol replies
Unix PowerShell emits cursor-position requests while PSReadLine starts and
redraws prompts. The subprocess PTY is only a transport, so those requests
went unanswered. Startup could then accept the dsh> literal echoed from its
setup source as a rendered prompt, and later sends were lost or clipped.

Feed raw PTY output into a zero-scrollback @xterm/headless state machine and
write generated replies through the provider-owned terminal handle. Drain
replies before caller input, repeat foreground inspection when terminal
activity races the sample, and retain send ownership until parser and reply
work quiesce. Coalesce raw chunks behind one active parser write so large
Windows output cannot create thousands of queued parse callbacks.

Publish pwsh only from backend stdin_read evidence and start one timeoutMs
deadline before the complete startup retry loop, so inferred-idle follow-ups
cannot reset the bound. Dispose the emulator when the
terminal or cleanup fails. Document the fail-loud ConstrainedLanguage path
and add focused coverage for split queries, reply ordering, foreground
resampling, failure containment, batching, timeout, and disposal.
2026-08-23 19:24:50 +08:00
_Kerman 1a72ae202a refactor(session): migrate host state reads to projections 2026-08-19 13:57:58 +08:00
_Kerman b72bd6f5be merge: bring master into feat/pwsh-persistent-pty 2026-08-18 13:36:46 +08:00
Huanqi Cao 06b766711c fix(pty): pin UTF-8 output encodings in the persistent pwsh bootstrap 2026-08-15 11:45:13 +08:00
Yichen Jiang a8dc6f9776 fix(pty): keep the controlled prompt so persistent bash settles fast
tool-bash-persistent overwrote the backend's PS1, so terminal-bash prompt
readiness never matched and every send degraded to the 3.5s silence tier
(idleSilenceMs + handoffGraceMs) under production defaults.

The controlled PROMPT_COMMAND now re-asserts PS1 before every prompt, so an
in-shell override never survives to the next prompt. The tool initializes
with stty -echo alone and detects the no-end-marker fallback through the
seam's stdin_read wait reason instead of matching its own prompt text.

Tool calls drop from 7180/3560/3566 ms to 355/88/91 ms (spawn+init+echo,
echo, pwd; darwin, production defaults). The loader composition suite now
pins the fast path by pushing idleSilenceMs beyond the send bound, and a
real-PTY case proves PS1 self-healing.

Fixes #2585
2026-08-15 11:06:57 +08:00
Huanqi Cao 6e2a4fd08a test(terminal-bash): cover the spawn signal forwarded into the pwsh bootstrap send 2026-08-13 10:54:23 +08:00
Huanqi Cao 82c53ee209 fix(terminal-bash): fall back to dialect defaults when Schemastery materializes empty shell values 2026-08-13 10:41:33 +08:00
Huanqi Cao d6010c2d88 refactor(pty): follow the naming-contract renames across the persistent pwsh stack 2026-08-13 09:52:56 +08:00
Huanqi Cao 1ae9df33eb merge: bring master's naming-contract refactor into feat/pwsh-persistent-pty 2026-08-13 01:52:47 +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