Commit Graph
7009 Commits
Author SHA1 Message Date
Turtle 83ae7046f2 fix(install): preserve pnpm version errors 2026-07-30 17:54:48 +08:00
imccyu aaf8fd07e0 Merge pull request #954 from deepseek-harness/codex/details-default-closed
fix(web): keep details closed by default
2026-07-30 17:28:32 +08:00
imccyu 4cd5745b94 Merge branch 'master' into codex/details-default-closed 2026-07-30 17:14:51 +08:00
imccyu 6686f47945 Merge pull request #883 from deepseek-harness/feat/ask-question-gui
feat(web): answerable ask_user_question flow & workspace tooltips & hero layout & plan button
2026-07-30 17:07:18 +08:00
imccyu 34d5f8f2e2 Merge branch 'master' into feat/ask-question-gui 2026-07-30 16:55:54 +08:00
imccyu f87692a5c3 test(web): anchor the group section above the HoverCard wrapper
The workspace header row is now wrapped by its HoverCard anchor span
(0b4a6196f), so the row's immediate parent no longer holds the session
subtree; the delete scenario anchors on the groupSection ancestor
instead. The flat-view and dwell failures were downstream of this one
(shared page state).
2026-07-30 16:54:43 +08:00
Tianyi Cui b987ec664a Merge pull request #941 from deepseek-harness/feat/session-inherited-boundary
feat(session): add the end-seed log boundary
2026-07-30 16:51:20 +08:00
imccyu 34c124585a fix: test 2026-07-30 16:46:50 +08:00
Tianyi Cui 9e679c89b6 Merge branch 'master' into feat/session-inherited-boundary 2026-07-30 16:30:42 +08:00
imccyu f88d324f01 Merge branch 'master' into codex/details-default-closed 2026-07-30 15:53:01 +08:00
imccyu 69a58ddd6f Merge branch 'master' into feat/ask-question-gui 2026-07-30 15:50:59 +08:00
Tianyi Cui 09c217eba7 Merge pull request #882 from deepseek-harness/worktree/persistent-bash-str-replace-editor
feat(tools): add persistent bash and str-replace editor
2026-07-30 15:47:39 +08:00
imccyu d34bc5bfa4 test(web): pick up the plan chip in the answered composer golden
The always-visible plan-mode toggle (fe9191934) adds one composer-row
button; the answered transcript golden re-records with it.
2026-07-30 15:44:53 +08:00
imccyu ee1d06e23d docs: regenerate the event matrix for the locale-seat question composer
ui-question no longer listens to locale/change directly — copy rides the
framework locale seat since the standard-seat merge — so the generated
matrix row drops it. gen-doc-graphs output, verified with --check.
2026-07-30 15:41:53 +08:00
imccyu 17fea637d5 Merge branch 'master' into codex/details-default-closed 2026-07-30 15:40:36 +08:00
imccyu e184b9561a Merge branch 'master' into feat/ask-question-gui 2026-07-30 15:36:22 +08:00
Hypatia May 30667e1eb9 Merge remote-tracking branch 'origin/master' into feat/session-inherited-boundary 2026-07-30 15:34:55 +08:00
imccyu 925cb0b315 feat(web): plan chip as an always-visible pressed-state toggle
fix: plan button add label
2026-07-30 15:33:45 +08:00
Hypatia May 9d26815126 test(web): wait for the driven session before snapshotting 2026-07-30 15:32:17 +08:00
Hypatia May 8527137230 refactor(session): rename the seed boundary to end-seed 2026-07-30 15:32:06 +08:00
imccyu 245aeb414c feat(web): workspace header hover card with cwd and creation time 2026-07-30 15:29:12 +08:00
imccyu 4c33ca8bec fix: hero layout when no-workspace 2026-07-30 15:25:50 +08:00
Tianyi Cui 2296065c51 Merge branch 'master' into worktree/persistent-bash-str-replace-editor 2026-07-30 15:22:19 +08:00
Tianyi Cui b21f13baa1 test: update tool agent fixtures for inbox API 2026-07-30 15:21:42 +08:00
Tianyi Cui 2550882875 Merge branch 'master' into worktree/persistent-bash-str-replace-editor 2026-07-30 15:19:27 +08:00
imccyu 6ea1238714 docs(web): the composer bar is one session-maybe slot, not a swapped pair
fix(web): keep one composer bar DOM across the no-workspace transition

The composer.bar slot moves from session to session-maybe scope: with no
current session the entry still mounts, the machine faces (keyboard, stop,
command) arrive undefined, and the bar renders its normal DOM inert via the
disabled owner prop. DisabledInputBar and its parallel tree are gone, so the
textarea node survives the cold-start workspace pick instead of flashing
through a remount. A blank session whose workspace was deleted takes the
same inert path through owner props.

test(web): add the composer DOM-continuity acceptance probe

Drives a real dsh web server with headless chromium through the cold-start
-> pick-workspace -> type flow and asserts the composer textarea is the
same DOM node throughout (a marker property must survive). Rerun
prerequisites are in the header comment.

docs(web): session-maybe identity is adoption, not hold-forever

fix(web): session-maybe entries adopt the first session, then remount like strict entries

A session-maybe entry used to keep one React instance across every
transition, so component-local state leaked between sessions once the
composer bar moved to that scope (PermissionSelect's optimistic pick, the
IME composition guard). Identity is now adoption: an incarnation born
session-less holds through the arrival of the first session (the blank
shell's DOM survives the workspace pick), and afterwards behaves exactly
like a strict session entry — a switch or a drop to no-session remounts,
clearing local state by construction. The child key is an incarnation
counter kept in the stable outlet wrapper via render-phase setState.

chore: knip knows the root acceptance probe's playwright dependency

scripts/hero-composer-dom-continuity.mjs resolves playwright through
apps/web's devDependency tree (createRequire), which knip cannot follow;
ignore it at the root workspace.
2026-07-30 15:18:06 +08:00
imccyu 69214b4708 Merge pull request #955 from deepseek-harness/xtr/fix-trajectory-scroll-layering
fix(web): isolate trajectory scrolling and overlays
2026-07-30 15:17:31 +08:00
Hypatia May e8f0934bc2 Merge remote-tracking branch 'origin/master' into feat/session-inherited-boundary 2026-07-30 15:14:16 +08:00
imccyu ecd07abdc0 test(web): refresh question-composer goldens for the merged composer
The master-side refresh batch recorded these goldens against master's
composer (customTrigger row, header pager); the merge keeps this
branch's redesigned composer (always-visible custom input, footer
pager) with copy on the standard locale seat, so the waiting aria and
the answered transcript re-record against the merged UI. The answered
golden also picks up the ask_user_question toolview row this branch
introduces.
2026-07-30 15:07:31 +08:00
imccyu 6c7520c652 Merge remote-tracking branch 'origin/master' into mergebot/pr883
# Conflicts:
#	apps/web/tests/snapshots/question-composer/answered.expected.md
#	apps/web/tests/snapshots/question-composer/ui.expected.md
2026-07-30 15:04:59 +08:00
Tianyi Cui 4f17303265 Merge pull request #913 from deepseek-harness/worktree/pr882-hardening
fix(tools): harden persistent bash and editor contracts
2026-07-30 15:04:18 +08:00
imccyu 03936cb320 Merge remote-tracking branch 'origin/master' into mergebot/pr883
# Conflicts:
#	packages/client/ui-question/package.json
#	packages/client/ui-question/src/client/QuestionComposer.tsx
#	packages/client/ui-question/src/client/contract/slots.ts
#	packages/client/ui-question/src/client/index.ts
#	packages/client/ui-question/src/client/locales.ts
#	packages/client/ui-question/tests/browser-plugin.spec.ts
#	packages/client/ui-question/tests/question-composer.spec.tsx
2026-07-30 15:01:10 +08:00
imccyu 5c2fc03d8f Merge branch 'master' into codex/details-default-closed 2026-07-30 14:50:50 +08:00
Hypatia May b257ed5e8a docs(session): make the boundary's position and ownership conditional
Documentation only; no behavior change.

`firstLiveSeq`'s JSDoc still stated the boundary sits at that seq
unconditionally. Verified reachable on a plain production path: pick up a log,
do no work, pick it up again — the seed already ends in a boundary, so it is
not re-marked and `events[firstLiveSeq]` is undefined. Both that claim and the
firehose-gap sentence are now conditional, with the locate rule ("scan for the
last boundary") matching what types.ts already said.

`repair.ts`'s header claimed this module supplies the boundary. It does not —
the constructor does; this module supplies the activity read that must skip it.
Reworded, and it now names the closer timestamp leak, which is the one real
coupling that justifies `lastActivityTime` living beside the repair synthesis.

Recorded that `Session`'s constructor is the boundary's only legitimate writer,
since the invariant companion constrains nothing and a plugin-side append would
silently turn live brackets below it into dead history.
2026-07-30 14:46:38 +08:00
_Kerman df25ca41dc Merge remote-tracking branch 'github/master' into xtr/fix-trajectory-scroll-layering 2026-07-30 14:45:16 +08:00
_Kerman c0b8fea4c8 fix(ui): contain trajectory scrolling and overlays 2026-07-30 14:45:07 +08:00
imccyu 007659b78f Merge pull request #938 from deepseek-harness/worktree-fetest
ci: gate web browser expected outputs
2026-07-30 14:44:55 +08:00
kingwl 4ef3e60d57 fix(web): keep details closed by default 2026-07-30 14:42:39 +08:00
imccyu ac37caa1ee Merge branch 'master' into worktree-fetest 2026-07-30 14:31:44 +08:00
Hypatia May 3e57bd3d0b chore(session): re-record the pairing and catalog fixture after the master merge 2026-07-30 14:21:04 +08:00
Hypatia May 9e6f251a4c Merge remote-tracking branch 'origin/master' into feat/session-inherited-boundary
# Conflicts:
#	examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
#	packages/host/apiproxy/README.i18n.yaml
#	packages/host/apiproxy/src/api-proxy.ts
2026-07-30 14:20:35 +08:00
Hypatia May 39ebd8f745 fix(session): close the review gaps the boundary opened
- `SessionSummary.updatedAt`'s wire doc still said "Persisted file mtime",
  which stopped being true for attached sessions.
- The core invariant let `session/inherited` fall through the merge-extensible
  default. It is core-owned, so it gets an explicit case; an unbalanced seed
  legally places it inside an open turn, which the relation permits.
- The Agent Note claimed the boundary reaches disk via `live.pending`/
  `scheduleDrain`. Verified false: the constructor append precedes `enter()`,
  so it never publishes on `session/event` and rides the creation seed instead.
  Attaching is therefore a write where none happened before — recorded, since
  only `load()` stays a pure read.
- The deferred-index proposal asserted this change documented the cold-mtime
  skew on `dsh-host-apiproxy`. It did not; the README entry now exists.
- `firstLiveSeq`'s firehose gap runs through its own seq, not below it.
- The boundary is not always at `firstLiveSeq` (the idempotence guard), so
  consumers scan for the last one.
- `lastActivityTime` excludes by type, so a pickup time still leaks onto a
  synthetic closer when a boundary ends an open turn. Documented.
- Pin the fork claim end-to-end: a child inherits a still-running parent's
  open bracket below its own boundary, while the parent has none. Fails if the
  write moves back to the load path.
- Fix the telemetry title that contradicted its own assertions.

The `/status` call site cannot be pinned the way the other two are: the
command appends its own `command/run` before rendering, so the boundary is
never the log tail there. Its fixture now at least renders over a
boundary-bearing log.
2026-07-30 13:59:08 +08:00
imccyu 1db976210f Merge pull request #928 from deepseek-harness/worktree/short-default-labels
fix(ui): shorten default reasoning labels
2026-07-30 13:22:05 +08:00
imccyu 291fe1e823 test(web): refresh composer stats expected outputs 2026-07-30 13:15:57 +08:00
imccyu 4869e0bbfc Merge branch 'master' into worktree-fetest 2026-07-30 13:09:53 +08:00
imccyu 1b84126f70 Merge branch 'master' into worktree/short-default-labels 2026-07-30 13:08:34 +08:00
imccyu c66cf04ebf Merge pull request #937 from deepseek-harness/fix/input-ui
Web composer stats detail row and input-zone polish
2026-07-30 13:08:25 +08:00
imccyu 20cac781a2 Merge branch 'master' into worktree-fetest 2026-07-30 12:56:54 +08:00
imccyu 432a64ef2f Merge branch 'master' into worktree/short-default-labels 2026-07-30 12:56:11 +08:00
imccyu 01324f9167 Merge branch 'master' into fix/input-ui 2026-07-30 12:55:57 +08:00