Commit Graph

5351 Commits

Author SHA1 Message Date
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
Tianyi Cui
67b6610e9f Merge remote-tracking branch 'origin/master' into nih-imp-turndown 2026-07-27 06:08:05 +08:00
Tianyi Cui
c74a325f7c Merge pull request #667 from deepseek-harness/nih-dependency-audit
docs: NIH audit — dependencies-over-hand-rolling policy + 8 Agent Notes
2026-07-27 06:06:17 +08:00
Tianyi Cui
e0e63de5d5 docs: fix two ds-review-bot findings on the audit notes
- gate-consolidation note: parseArgs strict mode DOES reject a
  dash-leading token where a value is expected (verified with node);
  only the duplicate-option behavior differs
- YAML roll-up item: scripts/verify-cordis-config.ts is a fourth
  js-yaml !!js tag definition the inventory missed
Both EN+ZH, pairs re-recorded.
2026-07-27 05:44:26 +08:00
Tianyi Cui
736c8bf6de Merge remote-tracking branch 'origin/master' into worktree-nih-dependency-audit 2026-07-27 04:59:50 +08:00
Tianyi Cui
e01c2f97a0 Merge pull request #672 from deepseek-harness/worktree/packed-chunks-default-rfc
feat(session): make packed chunk rows the default
2026-07-27 04:52:19 +08:00
Tianyi Cui
d7647d9332 fix(scripts): complete fixture migration diagnostics 2026-07-27 03:54:33 +08:00
Tianyi Cui
4a336ba8d7 fix(session): resolve packed default without schema 2026-07-27 03:54:03 +08:00
Tianyi Cui
d525bbabbb test(tui): migrate inherited session fixture to packed chunks 2026-07-27 03:32:15 +08:00
Tianyi Cui
7a3c71161c Merge remote-tracking branch 'origin/master' into worktree/packed-chunks-default-rfc
# Conflicts:
#	.agents/notes/implemented/testing/2026-06-19-acp-snapshot-tests.i18n.yaml
#	docs/testing.i18n.yaml
#	packages/support/acp-snapshot/README.i18n.yaml
2026-07-27 03:31:33 +08:00
Tianyi Cui
f3a4833dbf Merge pull request #677 from deepseek-harness/worktree/archive-agent-notes-20260726
Archive low-value implemented Agent Notes
2026-07-27 03:01:21 +08:00
Tianyi Cui
40f331f951 test: remove crash marker publication race 2026-07-27 02:51:25 +08:00
Tianyi Cui
3b328b375e ci: restore standard Windows allocation 2026-07-27 02:31:46 +08:00
Tianyi Cui
8b684fa5d0 ci: fetch archive baseline history 2026-07-27 02:01:46 +08:00
Tianyi Cui
861fe6d43d ci: retry hosted checks 2026-07-27 01:44:53 +08:00
Tianyi Cui
3b8600e2e8 ci: keep required aggregate on enterprise runner 2026-07-27 01:25:01 +08:00
Tianyi Cui
51bf3ca96e Merge remote-tracking branch 'origin/master' into worktree/archive-agent-notes-20260726
# Conflicts:
#	.agents/notes/archived/process/2026-07-23-browser-demo-gif-recording.i18n.yaml
2026-07-27 00:53:07 +08:00
Tianyi Cui
394b3f804c Merge remote-tracking branch 'origin/master' into worktree-nih-dependency-audit 2026-07-27 00:46:06 +08:00
Tianyi Cui
fc33543285 Merge pull request #681 from deepseek-harness/worktree/fix-pty-sigint-flake
test(pty): avoid shell-echo readiness race
2026-07-27 00:41:29 +08:00
Tianyi Cui
d14f3371ae Merge remote-tracking branch 'origin/master' into worktree-nih-dependency-audit 2026-07-27 00:40:02 +08:00
Tianyi Cui
420e0b5fb7 Merge remote-tracking branch 'origin/master' into worktree/fix-pty-sigint-flake 2026-07-27 00:35:06 +08:00
Tianyi Cui
72fa31b745 Merge remote-tracking branch 'origin/master' into worktree/packed-chunks-default-rfc 2026-07-27 00:29:58 +08:00
Tianyi Cui
8cb908b9e8 Merge pull request #661 from deepseek-harness/code-mode-ui/dispatch-spill
feat(web): Code Mode UI completion — bounded sub-dispatch logs, shiki highlighting, trajectory/waterfall sub-calls
2026-07-27 00:28:23 +08:00
Tianyi Cui
45a5175e44 feat(tool-web): replace the regex HTML-to-markdown converter with turndown
Implements the turndown Agent Note from the NIH dependency audit (full
variant, not the minimal entities-only fallback): dsh-tool-web's fetch
rendering now converts HTML through turndown + @joplin/turndown-plugin-gfm
(atx headings, fenced code, dash bullets, GFM tables/strikethrough) over
the real domino DOM, with script/style/noscript removed wholesale. The
hand-rolled ~86-line regex converter html.ts and its entity tables are
deleted; renderBody wraps the conversion in try/catch falling back to
the raw HTML body, because turndown's recursive DOM walk overflows with
a RangeError on pathological nesting (measured: 4k levels on the main
thread, 8k in a worker) where the regex version could never throw.

Closure weight, measured: tool-web IS in the single-exe runtime closure,
and the exe asset globs would pack ~7.9 MB of the three new packages —
but ~6 MB of that is domino's test corpus, with runtime lib/ at ~550 KB
against a ~174 MB artifact (<0.5% either way), so the swap wins.

Per testing policy the previously-missing keyless web_fetch snapshot
ships in the same change: the acp-agent `web-fetch` scenario boots a new
web.cordis.yml overlay (web seam + real dsh-web-fetch-local provider +
tool-web fetch-only + a loopback HTTP fixture server on a fixed port
serving deterministic HTML with entities, a GFM table, and nesting), so
recording and keyless replay both drive the real HTTP fetch and real
conversion end to end; the scenario pins the new `web` header class.

The Agent Note moves proposed -> implemented and is rewritten per the
lifecycle contract (Decision/Consequences/Testing, closure verdict and
alternatives recorded); tool-web and acp-agent READMEs updated in both
languages and pairs re-recorded.
2026-07-27 00:22:13 +08:00
Tianyi Cui
25a7c6e207 Merge branch 'master' into code-mode-ui/dispatch-spill 2026-07-27 00:05:29 +08:00
Tianyi Cui
46e70be34a Merge pull request #678 from deepseek-harness/skills/record-browser-gif-assets-workflow
docs(skills): record-browser-gif — assets-branch publishing + mandatory GUI-PR gifs
2026-07-27 00:02:55 +08:00
Tianyi Cui
d52f8bfdfe fix(notes): anchor archive seals to prior Git state 2026-07-27 00:01:39 +08:00
Tianyi Cui
d2b15e71df Merge pull request #662 from deepseek-harness/code-mode-ui/shiki
feat(web): shiki syntax highlighting for code surfaces
2026-07-27 00:00:23 +08:00
Tianyi Cui
212abfc2e4 Merge pull request #664 from deepseek-harness/code-mode-ui/trajectory-spans
feat(web): Code Mode sub-calls in the trajectory and waterfall views
2026-07-27 00:00:08 +08:00
Tianyi Cui
48400c436b Merge branch 'master' into code-mode-ui/dispatch-spill 2026-07-26 23:58:31 +08:00
Tianyi Cui
e0e187a6a7 test(pty): avoid echoed readiness marker race 2026-07-26 23:52:12 +08:00
Tianyi Cui
0561647ed5 Merge pull request #680 from deepseek-harness/worktree/archive-pr639-agent-notes-20260726
Restore Agent Notes deleted by #639 to the archive
2026-07-26 23:51:59 +08:00
Tianyi Cui
9e04034862 fix(scripts): keep fixture discovery private 2026-07-26 23:49:16 +08:00
Tianyi Cui
05adf5da4a docs: reject the timers/promises sleep proposal after implementation
PR #679 implemented the swap and falsified the note's parity premise:
vitest's fake clock does not intercept node:timers/promises, so the
change traded deterministic fast tests (llm-retry ~4s->~10s real
sleeps, two pty teardown tests rewritten real-time, a weakened
workflow grace-timer guard) for ~10 deleted lines. Moved the note
proposed -> rejected with the verdict on the Status line; the frozen
proposal body is kept per the rejected-lifecycle contract.
2026-07-26 23:47:56 +08:00
Tianyi Cui
a20cf88928 test(session): canonicalize fixtures as packed rows 2026-07-26 23:45:14 +08:00
Tianyi Cui
4ff496c65c feat(session): default JSONL writes to packed rows 2026-07-26 23:44:52 +08:00
Tianyi Cui
da6059d9f9 Merge branch 'worktree/archive-agent-notes-20260726' into worktree/archive-pr639-agent-notes-20260726 2026-07-26 23:35:49 +08:00
Tianyi Cui
5ffa7faecc test(notes): refresh archived-link snapshot 2026-07-26 23:35:16 +08:00
Tianyi Cui
accd4ac3ff Merge branch 'master' into skills/record-browser-gif-assets-workflow 2026-07-26 23:31:44 +08:00
Tianyi Cui
fba048daca Merge branch 'worktree/archive-agent-notes-20260726' into worktree/archive-pr639-agent-notes-20260726 2026-07-26 23:30:20 +08:00
Tianyi Cui
046419faf4 fix(notes): keep archive helpers internal 2026-07-26 23:29:46 +08:00
Tianyi Cui
b458a97907 docs(notes): restore PR 639 history to archive 2026-07-26 23:26:00 +08:00
Tianyi Cui
8ceb638bb5 docs(skills): record-browser-gif — assets-branch publishing + mandatory GUI-PR gifs
Every PR that changes product-user-visible GUI behavior now includes a
demonstration GIF with real provenance (that branch's built tree, real
key, real model rounds). Recording stays side-effect-free; the skill
gains a bounded final publication step: GIFs go on an append-only
orphan assets branch (one per PR series) and embed via the blob URL
with ?raw=true, never on the PR branch itself.

Folds in the operational lessons from the Code Mode UI series:
.playwright-mcp/ screenshot roots (now gitignored), per-PR staging and
precise server teardown, one-call DOM polling for transient states,
exact-text completion predicates, prompt engineering for UI states,
and the export-before-invoke GIF_SKILL_DIR encoder pitfall.

Agent Note: implemented/process/2026-07-26-gui-pr-gif-evidence-and-assets-branch (+ zh pair); the 2026-07-23 recording note now defers publication policy to it.
2026-07-26 23:21:44 +08:00
Tianyi Cui
cad2af4741 Merge remote-tracking branch 'origin/master' into worktree/packed-chunks-default-rfc 2026-07-26 23:18:40 +08:00
Tianyi Cui
f18fb32e2c fix(notes): narrow complete archive triplets 2026-07-26 23:17:20 +08:00
Tianyi Cui
32ae16fa59 Merge origin/master into worktree/archive-agent-notes-20260726 2026-07-26 23:11:33 +08:00
Tianyi Cui
4dfbd2cbd7 Merge pull request #657 from deepseek-harness/worktree-tasks-service-seam
refactor(tasks): split the task registry into seam and local implementation
2026-07-26 23:09:25 +08:00
Tianyi Cui
0dca9684d5 docs(graphs): retain archived rationale link 2026-07-26 23:08:47 +08:00
Tianyi Cui
98980900d0 Merge origin/master into worktree/archive-agent-notes-20260726
# Conflicts:
#	.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml
#	.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md
#	.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md
2026-07-26 23:07:21 +08:00
Tianyi Cui
37140bf823 docs(notes): archive low-value decision records 2026-07-26 23:06:00 +08:00