Commit Graph

5792 Commits

Author SHA1 Message Date
Tianyi Cui
f2c0021941 docs(notes): aggressive archive sweep of low-value decision records
Archive 21 implemented triplets whose shipped decisions are complete and
whose bodies no longer guide future work (one-off UI chrome, generator
applications whose scripts are self-explanatory, superseded implementation
detail, process history owned by current contracts/skills). Delete 4
rejected triplets whose premises are obsolete: the DeepReadonly proposal
(dev-invariants note now carries the alternative inline), the collapse
tool-owned presentation proposal (superseded by the shipped render-intent
union), retire-mid-turn-steering (steering is now load-bearing across
plan-mode/apiproxy/TUI), and single-session-ACP (automation-only ACP
resolved the question; multi-session isolation is pinned by tests).

Repair every inbound link: retarget intentional historical citations to
archived paths, replace decision-current citations with the surviving
authority, and fix the stale example-execute-over-tsx pointer in
pnpm-workspace.yaml. Re-record pairing sidecars and seal the archive
manifest (append-only; existing seals unchanged).
2026-07-28 00:00:51 +08:00
Tianyi Cui
0dcdf188e2 Merge pull request #783 from deepseek-harness/worktree/agent-note-supersession-check-20260727
Require Agent Note supersession checks
2026-07-27 23:55:20 +08:00
Tianyi Cui
5175ab4019 Merge branch 'master' into worktree/agent-note-supersession-check-20260727 2026-07-27 23:44:06 +08:00
Tianyi Cui
67dca8c84c Merge pull request #628 from deepseek-harness/codex/provider-retry-policy
feat(llm): add per-provider retry policies
2026-07-27 23:44:01 +08:00
Tianyi Cui
35697a4529 Merge origin/master into Agent Note supersession checks 2026-07-27 23:39:18 +08:00
Tianyi Cui
6241eb6044 Require Agent Note supersession checks 2026-07-27 23:38:49 +08:00
Tianyi Cui
b7ae92b9bf Merge remote-tracking branch 'origin/master' into worktree/pr628-merge-20260727 2026-07-27 23:38:39 +08:00
Tianyi Cui
892577ee52 test(llm-retry): cover incomplete retry predecessors 2026-07-27 23:38:06 +08:00
Tianyi Cui
7e010cd39c Merge pull request #768 from deepseek-harness/worktree/dependabot-30-day-cooldown
Configure Dependabot with a 30-day cooldown
2026-07-27 23:35:49 +08:00
Tianyi Cui
355975fbd5 chore: schedule Dependabot for Friday Shanghai time 2026-07-27 23:31:29 +08:00
Tianyi Cui
29619eda77 Merge remote-tracking branch 'origin/master' into worktree/pr628-merge-20260727
# Conflicts:
#	.agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.i18n.yaml
#	.agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.md
#	.agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.zh.md
#	docs/architecture.i18n.yaml
#	docs/architecture.md
#	docs/architecture.zh.md
#	docs/cordis-catalog/events.md
#	docs/core-data-structures/llm-streaming.i18n.yaml
#	docs/core-data-structures/llm-streaming.md
#	docs/core-data-structures/llm-streaming.zh.md
#	docs/event-producer-consumer.md
#	examples/acp-agent/tests/snapshots/empty-response-retry/session.jsonl
#	packages/compact/compact-basic/src/index.ts
#	packages/compact/compact-basic/tests/compact-basic.spec.ts
#	packages/cordis/tool-cordis/src/api-catalog.ts
#	packages/core/agent-loop/README.i18n.yaml
#	packages/core/agent-loop/README.md
#	packages/core/agent-loop/README.zh.md
#	packages/core/agent-loop/src/loop.ts
#	packages/core/agent-loop/tests/request-recovery.spec.ts
#	packages/core/agent/src/types.ts
#	packages/core/scope/tests/invariant.spec.ts
#	packages/llm/llm-retry/README.i18n.yaml
#	packages/llm/llm-retry/README.md
#	packages/llm/llm-retry/README.zh.md
#	packages/llm/llm-retry/src/index.ts
#	packages/llm/llm-retry/src/invariant.ts
#	packages/llm/llm-retry/tests/invariant.spec.ts
#	packages/llm/llm-retry/tests/retry.spec.ts
#	packages/plan/plan-mode/src/index.ts
#	packages/plan/plan-mode/tests/integration.spec.ts
#	packages/plan/plan-mode/tests/plan-mode.spec.ts
2026-07-27 23:29:26 +08:00
Tianyi Cui
7759b1d682 docs: record Dependabot security update boundary 2026-07-27 23:27:07 +08:00
Tianyi Cui
22e3327f68 chore: configure Dependabot updates 2026-07-27 23:21:52 +08:00
Tianyi Cui
8a952ab433 Merge remote-tracking branch 'origin/master' into worktree/pr628-merge-20260727
# Conflicts:
#	.agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.md
#	docs/architecture.i18n.yaml
#	docs/config-catalog.md
#	docs/cordis-catalog/events.md
#	docs/cordis-catalog/services.md
#	docs/core-data-structures/llm-streaming.i18n.yaml
#	docs/core-data-structures/llm-streaming.md
#	docs/core-data-structures/llm-streaming.zh.md
#	docs/event-producer-consumer.md
#	docs/module-graph.md
#	examples/headless-agent/tests/headless.snapshot.ts
#	packages/compact/compact-basic/tests/compact-loop-repro.spec.ts
#	packages/cordis/tool-cordis/src/api-catalog.ts
#	packages/core/agent-loop/README.md
#	packages/core/agent-loop/src/loop.ts
#	packages/examples/agent-spine-demo/README.md
#	packages/llm/README.md
#	packages/llm/llm-deepseek/src/adapter.ts
#	packages/llm/llm-pi-ai/src/adapter.ts
#	packages/llm/llm-retry/README.md
#	packages/llm/llm/README.md
#	packages/llm/llm/src/index.ts
#	packages/llm/llm/tests/service.spec.ts
#	packages/support/llm-replay/src/index.ts
#	packages/support/llm-replay/tests/llm-replay.spec.ts
2026-07-27 22:44:43 +08:00
Tianyi Cui
5b5f089bd0 Merge pull request #585 from deepseek-harness/xtr/agent-loop-message-machine
refactor(agent-loop): simplify message machine
2026-07-27 22:39:45 +08:00
Tianyi Cui
096d2dc06a Merge branch 'master' into xtr/agent-loop-message-machine 2026-07-27 22:34:21 +08:00
Tianyi Cui
ec4055adb9 Merge pull request #763 from deepseek-harness/lint-tsx-baseline
chore(lint): bring .tsx files into the eslint, lefthook, and jscpd lanes
2026-07-27 22:30:16 +08:00
imccyu
cdd4d59ea0 chore(lint): clear the semantic .tsx backlog
Hand fixes for the findings --fix cannot touch, mirroring the fixes
already applied on the fe-docs feature branch (same file, same shape)
so its eventual rebase resolves cleanly:

- restore the return the no-confusing-void-expression autofix ate in
  useAbsentSnapshot (typed S | undefined; hook call kept for hook-order
  stability, undefined returned explicitly);
- re-type DOM queries the no-unnecessary-type-assertion autofix broke:
  getByRole<HTMLButtonElement>(...) generics instead of the removed
  as-casts (the eslint program and the client tsconfig aggregate
  disagree about these casts; the generic form satisfies both);
- justified eslint-disable for the deliberate legacy paths: keyCode 229
  IME-composition detection, execCommand clipboard fallbacks, lib.dom
  clipboard optionality, and the any-typed Reflect.get/this probes in
  test fakes;
- drop the dead react/no-danger directive (eslint-plugin-react is not
  loaded, so the rule never applied) keeping its shiki rationale;
- delete the tautological 'Z' comparison and the renameTarget null
  check already implied by renameBlocked;
- css-module non-null assertions replaced by type widening
  (Button className, TAG_CLASS Record) per the established pattern;
- misc: max-len comment wraps, void generic drop in the deferred test
  helper, unused type imports, floating selectWorkspace promises voided,
  member-delimiter newlines in inline type literals.
2026-07-27 22:23:41 +08:00
imccyu
2adf44fb80 chore(lint): declare contract callbacks property-style
unbound-method flags destructuring a method-style member (method
signatures are bivariant and exempt from the this-context check).
These contract members are all plain callbacks — declare them as
property-style function types so consumers can destructure them
without a false this-binding hazard. Type-level only.
2026-07-27 22:23:10 +08:00
_Kerman
fb1dc6d117 Merge remote-tracking branch 'origin/master' into xtr/agent-loop-message-machine
# Conflicts:
#	docs/cordis-catalog/services.md
#	docs/core-data-structures/session.i18n.yaml
#	docs/event-producer-consumer.md
#	examples/acp-agent/tests/snapshots/cordis-inspect-jsdoc/session.jsonl
2026-07-27 21:51:37 +08:00
imccyu
49c2e85ac7 chore(lint): apply eslint auto-fixes across the .tsx backlog
Mechanical --fix output over the newly linted .tsx files (indent,
arrow-parens, comma-dangle, member-delimiter-style, unnecessary type
assertions), plus the three generic-arrow test hooks converted to
function declarations up front: the comma-dangle fixer strips the
<T,> disambiguation comma and turns them into parse errors otherwise.
2026-07-27 21:49:40 +08:00
imccyu
36e8141145 chore(lint): bring .tsx files into the eslint, lefthook, and jscpd lanes
.tsx sources and specs were invisible to every lint surface: the eslint
flat-config globs, the lefthook staged-file glob, and the jscpd clone
scan all matched *.ts only. Widen the five eslint file groups (source,
test, client-test, sonar, formatting), the pre-commit glob, and the
jscpd format/pattern to cover .tsx.

Existing .tsx files predate these lanes; follow-up commits on this PR
clear the backlog they surface.
2026-07-27 21:42:08 +08:00
Tianyi Cui
c03c4fdbdd Merge pull request #537 from deepseek-harness/feat/telemetry-otel-plugin
feat(telemetry): session-telemetry seam with mandatory redaction + OTel backend
2026-07-27 21:38:55 +08:00
Tianyi Cui
605df45928 Merge remote-tracking branch 'origin/master' into feat/telemetry-otel-plugin 2026-07-27 21:32:50 +08:00
Tianyi Cui
0af16387ae fix(telemetry): rename record waterfall 2026-07-27 21:30:28 +08:00
imccyu
4feb657b45 Merge pull request #754 from deepseek-harness/fix/question-composer-row-shrink
fix(ui-question): stop option rows absorbing the capped card's shortfall
2026-07-27 21:19:10 +08:00
_Kerman
ed67ad53d2 refactor(agent): return request retry action 2026-07-27 21:17:49 +08:00
Chinesezjc
207bab0c21 Merge remote-tracking branch 'origin/master' into fix/question-composer-row-shrink 2026-07-27 21:11:15 +08:00
Chinesezjc
b5395f9415 docs(agent-note): record that reproducing the shortfall needs a short viewport
The card cap is viewport-relative (min(60vh, 520px)), so shrinking the
conversation column clips the card without under-allocating it. Anything
demonstrating or measuring this defect outside the e2e scenario has to
change the viewport.
2026-07-27 21:11:15 +08:00
imccyu
9b23fe84c1 Merge pull request #751 from deepseek-harness/feat/workspace-native-folder-picker
feat(gui): add native workspace folder picker
2026-07-27 20:59:50 +08:00
kingwl
4182dbdc86 test(snapshot): refresh cordis-inspect-jsdoc for Session.firstLiveSeq
The self-referential inspect tool surfaces Session's public API in its
transcript; the construction-boundary field added in bc8512d17 now
appears there. Keyless refresh; only the affected scenario re-recorded.
2026-07-27 20:38:22 +08:00
kingwl
7d4b984037 Merge remote-tracking branch 'origin/master' into feat/telemetry-otel-plugin
Resolutions: regenerate the conflicted generated docs (cordis services
catalog, event-producer-consumer, module-graph); take master's
packages/README pair and re-insert the telemetry row on both sides;
re-record the README and session-doc translation pairs.
2026-07-27 20:26:21 +08:00
Chinesezjc
82f66f8fde Merge remote-tracking branch 'origin/master' into fix/question-composer-row-shrink 2026-07-27 20:20:16 +08:00
Chinesezjc
3e659db0b7 docs(notes): localize the Chinese Agent Note headings
The Chinese counterpart kept its title and every section heading in
English. The bilingual contract localizes heading text; only the
`# Agent Note:` prefix and the `Status:` token stay verbatim, matching
the renderings already used across the note corpus (问题 / 决策 /
曾考虑的替代方案 / 后果 / 验证). Pairing hashes re-recorded.
2026-07-27 20:20:12 +08:00
kingwl
bf76c52d76 fix(telemetry): reject non-positive maxExportBatchSize at plugin load
Review finding, pinned red-first: the SDK accepts
processor.maxExportBatchSize <= 0 (or fractional), but its shutdown
drain then splices empty batches without consuming the queue —
disposing telemetry hangs forever whenever records are queued. The
constructor now rejects a non-positive-integer batch size before
building the SDK processor, per the misconfiguration-fails-loud rule;
everything else in the processor block remains the SDK's verbatim
passthrough.
2026-07-27 20:11:30 +08:00
Ziya
91d85773ac Merge branch 'master' into feat/workspace-native-folder-picker 2026-07-27 08:06:44 -04:00
Tianyi Cui
3f9afd3a93 Merge pull request #748 from deepseek-harness/turtle1999-patch-1
fix(session-title): improve prompt
2026-07-27 20:03:18 +08:00
Tianyi Cui
08851a1a3e Merge branch 'master' into turtle1999-patch-1 2026-07-27 19:57:43 +08:00
_Kerman
c6073f07c2 Merge remote-tracking branch 'origin/master' into xtr/agent-loop-message-machine
# Conflicts:
#	docs/architecture.i18n.yaml
#	docs/architecture.md
#	docs/architecture.zh.md
#	docs/core-data-structures/core.i18n.yaml
2026-07-27 19:55:55 +08:00
Tianyi Cui
ee1bf2764a Merge pull request #719 from deepseek-harness/fix/pty-raw-ready-wait
#719: keep the pty settle-boundary contract behind master's raw-mode SIGINT fix
2026-07-27 19:54:57 +08:00
Chinesezjc
f11dc28f1f test(web): record the user-bubble action row in the answered golden
The answered golden omitted the `复制` / `在新对话中分支` / `编辑` buttons
that `MessageItem`'s `UserActions` renders under every user bubble, so the
scenario failed against the built client. They are unconditional in the
accessibility tree — the `@media (hover: hover)` rule only sets `opacity`,
which does not remove a node from an aria snapshot — so there is no
message-row state to stabilize before capture; the golden was simply
recorded against a stale `lib/`. A partially failed `pnpm run build` had
left the client bundles from before its failure current and the rest not.

The Agent Note records that trap: confirm the build exited zero before
refreshing a golden, and note that untracked directories under `packages/`
are compiled too, so a leftover from another branch fails the build for
reasons the diff does not explain.

The same omission is present in the other 15 committed web goldens on
master, where 9 tests across 7 files fail for this reason on a pristine
tree. That is pre-existing and belongs to whoever landed `UserActions`;
this commit fixes only the golden this PR already touches.
2026-07-27 19:54:55 +08:00
kingwl
a72436105b docs(telemetry): state the crash-repair export semantics for resumed streams
Review finding: synthetic turn closers written by SessionPersistence
.load() at crash-resume sit below firstLiveSeq and are never exported,
leaving the remote turn unbalanced. Kept deliberately — exporting a
synthetic closer cannot complete a turn whose real tail records died
in the crashed process's queue; it can only make an incomplete turn
look closed. The OTel README now states the receiver rule (a
never-closed turn on a resumed stream marks the previous process dying
inside it; a later clean shutdown marker attests only to the resumed
process's exit), and the revival Agent Note records why the repair
suffix stays local.
2026-07-27 19:49:19 +08:00
Chinesezjc
0701245007 Merge remote-tracking branch 'origin/master' into fix/pty-raw-ready-wait 2026-07-27 19:44:10 +08:00
Tianyi Cui
5888503d5f Merge pull request #660 from deepseek-harness/worktree-process-service-seam
feat(subprocess): extract the subprocess seam from the bash executor and migrate every spawn site
2026-07-27 19:38:37 +08:00
ZiyaZhang
a5239b0f64 test(gui): cover native workspace picker branches 2026-07-27 04:37:24 -07:00
Tianyi Cui
dd03c88083 Merge commit 'refs/codex-unblock/20260727/pr660-master' into worktree/pr660-merge-20260727
# Conflicts:
#	scripts/doc-budgets.manifest.json
2026-07-27 19:34:55 +08:00
Chinesezjc
9dd57a25c5 fix(ui-question): stop option rows absorbing the capped card's shortfall
The question composer card is capped against the viewport and scrolls its
option list. `.options` is a flex column whose children defaulted to
`flex-shrink: 1`, so a short seat shrank the rows before overflowing the
scroll container: a row collapsed to its 42px minimum while `.optionCopy`
kept the taller height its wrapped copy needs, and `align-items: center`
then painted that copy outside the row's border box — over the question
title above and the next row below. Measured 6.5px of spill at 900x440 on
the shipped client, 10px at 380px tall, with `.options` reporting
scrollHeight === clientHeight and therefore offering no scrollbar.

`.option` and `.custom` now declare `flex-shrink: 0`, so the shortfall
reaches the scroll container that already owns `overflow-y: auto` — the
behavior the cap was designed for. Only rows whose copy wraps could
reproduce this, which is why the recorded scenario now asks a question
with long option descriptions; the web e2e asserts at three squeezed seat
heights that every row's children stay inside its border box, guarded
against holding vacuously by requiring a wrapped row and a scrolling list.
2026-07-27 19:20:33 +08:00
Tianyi Cui
beb885c254 Merge pull request #744 from deepseek-harness/wine-local-gate
ci: share one Wine Windows gate script between CI and an optional local gate
2026-07-27 19:11:36 +08:00
_Kerman
a11d4211a6 docs: refresh event consumer graph 2026-07-27 19:10:01 +08:00
_Kerman
613eaba80c fix(tui): correlate referenced prompt snapshots 2026-07-27 19:06:44 +08:00