Commit Graph
9203 Commits
Author SHA1 Message Date
ZiyaZhang c7076e15b8 fix(hooks): bound regex reuse across reloads 2026-07-28 20:33:08 -07:00
NI0317 f280a97c56 test(web): isolate details session lifecycle e2e 2026-07-29 11:32:03 +08:00
_Kerman 5939355b1a fix(ui-conversation): keep composer visible across views 2026-07-29 11:30:50 +08:00
NI0317 cd88a339fa fix(web): verify current GUI updates end to end 2026-07-29 11:22:48 +08:00
NI0317 ca2e6207b5 Merge origin/master into fix/web-details-session-lifecycle 2026-07-29 11:21:48 +08:00
NI0317 406cd3602b fix(web): close details when current session changes 2026-07-29 11:21:13 +08:00
imccyu 5c432955ed Merge remote-tracking branch 'origin/master' into web-permission-sandbox-merge-master 2026-07-29 11:16:49 +08:00
_Kerman 69aa58d31b Merge remote-tracking branch 'github/master' into xtr/trajectory-inspection-ui 2026-07-29 11:14:05 +08:00
Turtle 44a657c149 fix(tmux-context): contain executor rejection as a warning, correct suppression claim
Review round on #758.

bash.run() only promises to resolve for nonzero exits, timeouts, and aborts,
and bash.resolve() can reject on policy grounds, so either could escape the
serial agent/step listener and abort the model turn — contradicting the
plugin's documented failed-query no-op contract. Contain both and log a
warning instead; the location is optional context.

The Agent Note claimed an unchanged location suppresses the query. It does
not: only the interval floor is checked before the query, while change
suppression compares state the query returned. Corrected in both languages
and re-recorded the i18n pairs.
2026-07-29 11:11:17 +08:00
ZiyaZhang ec72d0b57e fix(hooks): share matcher validation instances 2026-07-28 20:10:21 -07:00
imccyu 75b32f7d76 Merge pull request #821 from deepseek-harness/feat/workspace-directory-browser
feat(host,client): ship the in-app directory browser as the browse package's client half
2026-07-29 10:58:12 +08:00
ZiyaZhang 774755ef2d Merge remote-tracking branch 'upstream/master' into fix/hook-matcher-validation 2026-07-28 19:57:23 -07:00
ZiyaZhang 7121d25c8a test(hooks): keep regex lifecycle ownership explicit 2026-07-28 19:56:03 -07:00
imccyu 540639672d Merge branch 'master' into feat/workspace-directory-browser 2026-07-29 10:54:08 +08:00
imccyu a51c9510f1 Merge branch 'feat/directory-picker' into feat/workspace-directory-browser 2026-07-29 10:51:31 +08:00
imccyu e8dcc888d5 Merge pull request #817 from deepseek-harness/feat/directory-picker
feat(host,client): directory-picker capability seam with dual-face native backend
2026-07-29 10:51:21 +08:00
ZiyaZhang ea4103c14a Merge remote-tracking branch 'upstream/master' into fix/hook-matcher-validation 2026-07-28 19:49:35 -07:00
ZiyaZhang d3d370e4d2 fix(hooks): reuse compiled Codex matchers 2026-07-28 19:48:59 -07:00
imccyu ffe65dd3b2 Merge branch 'master' into feat/directory-picker 2026-07-29 10:47:48 +08:00
imccyu 19a9cfe035 Merge pull request #814 from deepseek-harness/doc/host-client-group-readmes
fix(connection): browser-trust fence for /api + host/client group docs
2026-07-29 10:46:17 +08:00
imccyu 8d0249d392 Merge branch 'feat/directory-picker' into feat/workspace-directory-browser 2026-07-29 10:42:19 +08:00
imccyu ecc447daf5 Merge branch 'doc/host-client-group-readmes' into feat/directory-picker 2026-07-29 10:42:13 +08:00
imccyu fa64ad39cb Merge branch 'master' into doc/host-client-group-readmes 2026-07-29 10:42:00 +08:00
Tianyi Cui 92e310a6ff Merge pull request #871 from deepseek-harness/feature/tui-improvements-standalone
feat(tui)!: consolidate terminal UI improvements
2026-07-29 10:40:24 +08:00
Turtle f15ff737cd chore: drop e2e-only knip entry, loader-smoke dep, and tsconfig reference
Follows removing the tmux-context e2e test: the .e2e.ts knip entry pattern
matched nothing and dsh-loader-smoke became an unused devDependency.
2026-07-29 10:37:17 +08:00
Turtle 7a3295e0bf docs: consolidate TUI Agent Notes 2026-07-29 10:30:27 +08:00
Turtle 8060f7fc0d chore: remove tmux-context e2e test and headless-agent fixtures
The headless-agent test fixtures and the e2e test that depended on them
are out of scope for this PR. Unit tests in tmux-context.spec.ts cover
the plugin behavior.
2026-07-29 10:28:33 +08:00
Turtle 9f5b639a08 docs: prefer new commits after review 2026-07-29 10:27:32 +08:00
Yichen Jiang 42de60347a docs: raise packages/README.md budget ceiling to 850
The group table legitimately gained one row for the new settings group;
the row itself is already condensed to the minimum. The intended raise
missed the merge commit because a pipeline swallowed the failing edit's
exit status.
2026-07-29 10:26:29 +08:00
Turtle c7e6cb5753 fix(tui): complete launcher integration and rationale 2026-07-29 10:25:07 +08:00
Yichen Jiang 82a299bf6d Merge origin/master: settings seam lands beside web plan mode
Conflicts were the parallel-edit set: packages/README group table (kept
master's session-title wording, re-added the settings row condensed),
doc-budgets AGENTS.md ceiling (took master's 1750), and regenerated
graph/catalog docs plus re-recorded translation pairs. packages/README.md
ceiling 845 -> 850: the table legitimately gained one row for the new
settings group and the row is already minimal.
2026-07-29 10:24:57 +08:00
Turtle 7c99ff7331 fix: relocate tmux-context e2e fixtures into package tests
The headless-agent test fixtures were removed; move the driver, cordis.yml,
and mocks into packages/context/tmux-context/tests/fixtures/ so the e2e test
is self-contained.
2026-07-29 10:21:48 +08:00
Yichen Jiang 1010291fe6 fix(settings): close cross-namespace, dispatch, and lifecycle races from second review
Confirmed and fixed, each with a regression test that failed first:

- Concurrent writes to different namespaces lost whole sections on disk
  (each persist rendered the full document from a stale text): the local
  provider serializes render->write->rename->text-commit on one internal
  persist chain shared by every namespace queue.
- One throwing settings/updated listener starved the rest (cordis emit
  stops at the first throw): commit fans out per listener via
  events.dispatch, contains individual failures, and rethrows the first
  INVARIANT-coded error only after every listener ran.
- Write queues ignored fiber/service lifecycle: the base init now
  registers a teardown that refuses new writes and drains queued chains;
  queued tasks re-verify service liveness and namespace ownership before
  running and again before committing, so a registrant disposed
  mid-flight is never notified and a disposed service never commits.
- Async watcher invocations could interleave (a slow stale call applied
  last): each watcher carries a serialized invocation chain — one call
  at a time, in commit order; JSDoc/doc pages state the async timing.
- update/replace borrowed the caller's object until the queued task ran:
  inputs are structured-clone snapshotted at call time; non-cloneable
  plain objects reject with a typed error.
- Composition guard now proves the documented fallback: the consumer
  uses the optional scoped-inject shape and boots both with the settings
  entry (hot publish) and without it (entry-config resolution, no scope).
- core-data-structures index: settings.md row added to the sub-page
  table in core.md/core.zh.md.

Both packages hold per-file 100% coverage across repeated runs.
2026-07-29 10:19:33 +08:00
Yichen Jiang f44b4db1f2 fix(settings): harden seam and provider per review findings
Confirmed and fixed, each with a regression test that failed first:

- Concurrent update() lost patches (merge over one stale snapshot):
  per-namespace serialized write queues; a failed write cannot poison
  the queue for later writers.
- Fixed-name .tmp write followed planted symlinks and kept stale modes:
  random-suffix sibling, exclusive-create (wx), 0600, cleanup on
  failure, then rename.
- A throwing settings/updated listener escaped commit and permanently
  wedged the provider reload chain (rejected refreshTask): commit now
  contains listener failures (INVARIANT-coded errors still propagate),
  async watcher rejections are adopted and contained
  (watch callbacks are officially void | Promise<void>), and the
  provider chains refreshes on a settled tail with an error log.
- No way to remove a user override: scope/service replace(section)
  sets the user section wholesale; replace({}) re-inherits base and
  schema defaults.
- The three-primitive provider contract did not hold (base never
  called load()): the base Service.init loads and publishes once;
  settings-local delegates via yield* super[Service.init]().
- Dispose did not quiesce: teardown flags closed, closes the watcher,
  then awaits queued/in-flight reloads; closed is re-checked across
  await points.
- Invariant now checks the authoritative relation with the seam's own
  deepEqualJson: emitted next must equal settings.get(ns), and
  next/prev must differ structurally (cosmokit dependency dropped).
- New docs/core-data-structures/settings.{md,zh.md} with type-equiv
  blocks + manifest entries; catalog types moved from exemptions to
  LINK_MAP; website page registered.

Both packages stay at per-file 100% coverage.
2026-07-29 10:19:32 +08:00
Yichen Jiang ec0786e099 feat(settings): add user-settings seam (ctx.settings) + file provider
Two-package capability family mirroring session-persistence/:

- dsh-settings: abstract Settings service — namespace registry with
  caller-fiber effect registrations, layered resolution (schema defaults
  < composition base < user document), schemastery validation,
  per-namespace deep-equal commit detection, and the settings/updated
  event. Boot/registration validation fails loud; provider publishes
  keep last-good per namespace.
- dsh-settings-local: settings.yaml/.json provider — resolveSpec
  defaulting to $DSH_HOME/settings.yaml, chokidar hot reload,
  content-equality self-write suppression, atomic 0600 tmp+rename
  writes, comment-preserving YAML namespace patching.

Consumers register inside ctx.inject(['settings'], …), so every
composition works unchanged without a mounted provider. Real Loader +
Include composition test proves cordis.yml boot and external-edit hot
propagation; HMR disposal test proves registry cleanup. Both packages
hold per-file 100% coverage.

Doc budgets rise 1705→1710 (AGENTS.md) and 835→845 (packages/README.md):
one structural line per file for the new package group.

Agent Note: .agents/notes/implemented/architecture/2026-07-28-user-settings-seam.md
2026-07-29 10:19:32 +08:00
ZiyaZhang 2630de8bd6 Merge remote-tracking branch 'upstream/master' into fix/subprocess-password-scrub
# Conflicts:
#	docs/module-graph.md
2026-07-28 19:14:40 -07:00
Yichen Jiang 602f594c4b Merge remote-tracking branch 'origin/master' into worktree/web-model-request-retry
# Conflicts:
#	apps/cli/README.i18n.yaml
#	packages/client/connection/tests/fixture.spec.ts
#	packages/client/runtime/README.i18n.yaml
#	packages/client/runtime/src/client/index.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/chat/ChatView.tsx
#	packages/client/ui-conversation/tests/chat-view.spec.tsx
#	tsconfig.base.json
2026-07-29 10:14:02 +08:00
Turtle b4aebc9b56 chore: update pnpm-lock.yaml after removing dsh-tmux-context from examples deps 2026-07-29 10:12:22 +08:00
Turtle efb67365d3 test(tui): update assembled terminal snapshots 2026-07-29 10:03:38 +08:00
Turtle 936d7e4ecb chore: remove headless-agent tmux-context test fixtures
Out of scope and unnecessary for the tmux-context PR. The package
itself (packages/context/tmux-context) and its own tests remain.
2026-07-29 10:02:26 +08:00
Turtle d0548e0ac9 docs: regenerate TUI catalogs 2026-07-29 10:01:39 +08:00
Turtle 31cb340c36 feat(tui)!: consolidate terminal UI improvements 2026-07-29 10:00:29 +08:00
_Kerman c60d3f2aaa Merge remote-tracking branch 'github/master' into xtr/trajectory-inspection-ui
# Conflicts:
#	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
2026-07-29 09:48:24 +08:00
Turtle 32774d5ff3 Update AGENTS.md 2026-07-29 09:29:43 +08:00
ZiyaZhang dfba46c6d4 Merge remote-tracking branch 'upstream/master' into fix/workspace-instruction-frame-metadata 2026-07-28 16:53:21 -07:00
ZiyaZhang f8082eef63 Merge remote-tracking branch 'upstream/master' into fix/translation-brief-uncommitted-pair 2026-07-28 16:53:21 -07:00
ZiyaZhang fad111c7e6 Merge remote-tracking branch 'upstream/master' into fix/hook-matcher-validation 2026-07-28 16:14:51 -07:00
creatixchu 9a5fe52678 Merge remote-tracking branch 'origin/feat/directory-picker' into feat/workspace-directory-browser 2026-07-29 06:45:12 +08:00
creatixchu c5ae7dd65e Merge remote-tracking branch 'origin/doc/host-client-group-readmes' into feat/directory-picker
# Conflicts:
#	packages/host/apiproxy/package.json
#	pnpm-lock.yaml
2026-07-29 06:43:09 +08:00
creatixchu 1779488c99 Merge remote-tracking branch 'origin/master' into doc/host-client-group-readmes 2026-07-29 06:40:26 +08:00