Files
deepseek-harness/examples/desktop/test/comment-sweep-apply.test.js
ZiyaZhang e8f5c0b51b feat(desktop): DSH Electron desktop shell — harness internals visualized
Minimal Electron shell over the DSH JSON-RPC runtime — a first-look at
what a ChatGPT.app-style host on top of the DeepSeek Harness looks
like, with the harness's normally-invisible internals (trace timeline,
context surface, subagent tree, compaction, plugin registry, rubrics)
brought forward as first-class UI surfaces so plugin authors and
researchers can see what the agent is actually doing.

Runs against three keyless-to-live profiles (stdio-echo works on
master out of the box; daemon-echo / daemon-vibe-echo activate once
the daemon-demo lands; stdio-deepseek and daemon-vibe hit the real
DeepSeek API when you supply a key). HARNESS_DEV auto-resolves to the
in-repo runtime when this shell ships under examples/desktop/, so a
fresh clone launches without config; env DSH_DEV_ROOT overrides for
custom layouts, and a sibling deepseek-harness-dev/ checkout is the
original dev workflow.

Cold-clone gate (P0 fixes for first-time-clone usability):
- HARNESS_DEV: 3-candidate resolver (env → walk-up in-repo marker →
  sibling), unit-tested via mock fs so ordering is locked without
  needing either real layout on disk.
- config yml leaves rewritten at assemble time so the sibling-clone
  paths (../../deepseek-harness-dev/examples/echo-agent/…) become
  the in-repo paths (../../echo-agent/…) in the released tree —
  source yml stays usable for local dev, released tree ships a
  working shape.
- pnpm-workspace.yaml allowBuilds.electron = true (was placeholder).
- missing-key card in stdio-deepseek offers a one-click switch to
  stdio-echo (the keyless profile that works on master) rather than
  daemon-echo (blocked on the not-yet-shipped daemon-demo).
- assemble-oss-release.sh rewrites the source-side breadcrumb name
  'dsh-desktop-demo' → 'dsh-desktop' for the released package.json.

FOUC guard on the onboarding gate (41fc5df carried) keeps the
first-launch splash from flashing before the runtime probe finishes.

Test suite (1634 tests in source, 3990 in the runtime repo) covers
resolver ordering, renderer classifiers, trace timeline shape,
compaction diff rendering, rubric parity, and the missing-key
onboarding paths.
2026-07-18 12:59:34 -07:00

484 lines
20 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use strict';
const { test } = require('node:test');
const assert = require('node:assert/strict');
const { rewriteCommentText, rewriteFile } = require('../tools/comment-sweep-apply.js');
// -----------------------------------------------------------------------------
// rewriteCommentText — pure text-level transform tests. Each pair mirrors a
// real hit family from the scanner.
// -----------------------------------------------------------------------------
// Fresh-eyes P0 with review-fresh-eyes.md coordinate: full prefix strip.
test('strip: Fresh-eyes P0 dated + review file → keep constraint', () => {
const src = 'Fresh-eyes P0 (2026-07-18, review-fresh-eyes.md #4 + team-lead follow-up): gate the Debug popover on DSH_QA=1.';
const out = rewriteCommentText(src);
assert.equal(out, 'gate the Debug popover on DSH_QA=1.');
});
// Bare Fresh-eyes P0:
test('strip: Fresh-eyes P0 bare → keep constraint', () => {
const src = 'Fresh-eyes P0: user-driven pick deserves the toast.';
const out = rewriteCommentText(src);
assert.equal(out, 'user-driven pick deserves the toast.');
});
// Ticket #NNN with parenthetical
test('strip: Ticket #168 step 1: → keep body', () => {
const src = 'Ticket #168 step 1: per-block payload controls (pretty⇅raw, copy,)';
const out = rewriteCommentText(src);
assert.equal(out, 'per-block payload controls (pretty⇅raw, copy,)');
});
test('strip: Ticket A (parenthetical): → keep body', () => {
const src = 'Ticket A (2026-07-16): two-way branch handling.';
const out = rewriteCommentText(src);
assert.equal(out, 'two-way branch handling.');
});
// task #NNN + rec 22-bis + phase 2 (pi §2.3)
test('strip: task #162 rec 22-bis phase 2 (pi §2.3): → keep body', () => {
const src = 'task #162 rec 22-bis phase 2 (pi §2.3): when an assistant bubble lands.';
const out = rewriteCommentText(src);
assert.equal(out, 'when an assistant bubble lands.');
});
// F-N (e2e audit) prefix
test('strip: F-3 (2026-07-18 e2e audit): → keep body', () => {
const src = 'F-3 (2026-07-18 e2e audit): last trace card that finishTraceStep saw.';
const out = rewriteCommentText(src);
assert.equal(out, 'last trace card that finishTraceStep saw.');
});
// team-lead §X.Y prefix
test('strip: team-lead §4.1 fix → keep body', () => {
const src = 'team-lead §4.1 fix: real-daemon truth wins over cached title.';
const out = rewriteCommentText(src);
assert.equal(out, 'real-daemon truth wins over cached title.');
});
// Round-visual N1 prefix
test('strip: Round-visual N1 (2026-07-16): → keep body', () => {
const src = 'Round-visual N1 (2026-07-16): the round-1 pass exempted rank-0.';
const out = rewriteCommentText(src);
// The trailing "round-1" is an inline round tag; should be stripped too.
assert.match(out, /^the .*exempted rank-0\.$/);
assert.ok(!/Round-visual/i.test(out));
});
// Trailing paren: (review-fresh-eyes.md #N)
test('strip: (review-fresh-eyes.md #2) trailing → gone', () => {
const src = 'The layout toast only fires on user-driven picks (review-fresh-eyes.md #2).';
const out = rewriteCommentText(src);
assert.equal(out, 'The layout toast only fires on user-driven picks.');
});
// Trailing paren: (QA round-3 shot 07)
test('strip: (QA round-3 shot 07) trailing → gone', () => {
const src = 'On stdio profiles there is a delay before the runtime chip flips (QA round-3 shot 07).';
const out = rewriteCommentText(src);
assert.equal(out, 'On stdio profiles there is a delay before the runtime chip flips.');
});
// Upstream packages/*/src/*.ts:33-52 inline coord → stripped
test('strip: packages/*/src/*.ts:33-52 inline → gone', () => {
const src = 'wire packages/ui/jsonrpc/src/server.ts:89-96 carries only parent/child.';
const out = rewriteCommentText(src);
assert.equal(out, 'wire carries only parent/child.');
});
// pi-agent-ui-study.md §2.3 → stripped
test('strip: pi-agent-ui-study.md §2.3 → gone (artifact ref removed)', () => {
const src = 'The active turn shape (rec 22-bis, pi-agent-ui-study.md §2.3): one section per turn.';
const out = rewriteCommentText(src);
// The pi-agent-ui-study reference is gone; the constraint is preserved.
assert.ok(!/pi-agent-ui-study/.test(out), `got: ${out}`);
assert.ok(/one section per turn/.test(out));
});
// density-spec §X — team-lead 2026-07-18: STRIP (docs/design-refs/ is dropped
// from the OSS artefact, so references would 404 in the published tree).
test('strip: density-spec §2 → gone, constraint kept', () => {
const src = 'L0 row grammar (density-spec §2 · t159): glyph column · type · gist.';
const out = rewriteCommentText(src);
assert.ok(!/density-spec/.test(out), `got: ${out}`);
assert.ok(/glyph column · type · gist/.test(out));
});
// style-guide reference — same treatment as density-spec.
test('strip: style-guide reference → gone', () => {
const src = 'Per style-guide §4 the row must be full-width.';
const out = rewriteCommentText(src);
assert.ok(!/style-guide/.test(out), `got: ${out}`);
assert.ok(/full-width/.test(out));
});
// reference tracing UI study §6 rec 4 → stripped
test('strip: LangSmith study §6 rec 4 → gone (internal artifact)', () => {
const src = 'Follow LangSmith study §6 rec 4 streaming-first: drop a placeholder card.';
const out = rewriteCommentText(src);
assert.equal(out, 'Follow streaming-first: drop a placeholder card.');
});
// Whole-line stripping: line whose sole body IS a hit
test('empty-out: comment that is 100% prefix returns empty', () => {
const src = 'Fresh-eyes P0 (2026-07-18, review-fresh-eyes.md #4):';
const out = rewriteCommentText(src);
assert.equal(out, '');
});
// No hit → identity transform
test('identity: comment with no artifact reference is untouched', () => {
const src = 'Compact "3s / 12m / 4h / 2d" formatter used by the sidebar.';
const out = rewriteCommentText(src);
assert.equal(out, src);
});
// bare #NNN mid-sentence — we do NOT strip these (see rules.md: bare hash
// numbers preserving the reference to a specific PR/ticket is often the
// only anchor the reader has; scanner reports but reviewer decides).
test('keep: bare #218 mid-sentence anchor is preserved by default', () => {
const src = 'pre-#218 daemons; fall through and try the fetch.';
const out = rewriteCommentText(src);
assert.equal(out, src);
});
// Nested "old ledger" hash — same rule.
test('keep: /#154 old ledger/ mid-sentence anchor', () => {
const src = 'zero-render turn from the #154 old ledger scenario.';
const out = rewriteCommentText(src);
assert.equal(out, src);
});
// -----------------------------------------------------------------------------
// rewriteFile — end-to-end on tiny synthetic files. Ensures code lines are
// never touched.
// -----------------------------------------------------------------------------
test('e2e: strip leading artifact prefix, keep code intact', () => {
const src = [
"'use strict'",
'',
'// Fresh-eyes P0 (2026-07-18, review-fresh-eyes.md #4):',
'// gate the Debug popover on DSH_QA=1.',
'if (document.body.dataset.qa) {',
' render()',
'}',
'',
].join('\n');
const { src: out, stripped } = rewriteFile(src);
// Every code line must be present verbatim.
assert.ok(out.includes("'use strict'"));
assert.ok(out.includes('if (document.body.dataset.qa) {'));
assert.ok(out.includes(' render()'));
// Fresh-eyes prefix must be gone.
assert.ok(!/Fresh-eyes P0/.test(out));
// The constraint sentence stays.
assert.ok(/gate the Debug popover on DSH_QA=1\./.test(out));
assert.ok(stripped.lines >= 1); // one prefix-only line was removed
});
test('e2e: block comment with mixed body loses artifact lines, keeps rest', () => {
const src = [
'/*',
' * task #162 rec 22-bis: the active assistant-turn <section>. Populated',
' * by ensureTurnContainer on first assistant-side event of a turn, cleared',
' * by finishTurnContainer on turn/end.',
' */',
'function ensureTurnContainer(){}',
'',
].join('\n');
const { src: out } = rewriteFile(src);
assert.ok(!/task #162/.test(out));
assert.ok(!/rec 22-bis/.test(out));
assert.ok(/active assistant-turn/.test(out));
assert.ok(/ensureTurnContainer/.test(out));
});
test('e2e: pure artifact banner block becomes gone', () => {
const src = [
'const before = 1',
'// task #201 / trace-viz §4d: inline "shape of this turn" glyph. Drawn',
'const after = 2',
].join('\n');
const { src: out } = rewriteFile(src);
// Only the artifact prefix strips; the constraint sentence stays with //
assert.ok(/const before = 1/.test(out));
assert.ok(/const after = 2/.test(out));
assert.ok(/inline "shape of this turn" glyph\. Drawn/.test(out));
assert.ok(!/task #201/.test(out));
assert.ok(!/trace-viz §4d/.test(out));
});
test('e2e: no strings in code are ever modified', () => {
const src = [
'const s1 = "task #999: still here"',
"const s2 = 'Fresh-eyes P0 (whatever): also still here'",
'const s3 = `Ticket #123 keep me`',
'// task #999: strip me',
'const after = 1',
].join('\n');
const { src: out } = rewriteFile(src);
assert.ok(out.includes('"task #999: still here"'));
assert.ok(out.includes("'Fresh-eyes P0 (whatever): also still here'"));
assert.ok(out.includes('`Ticket #123 keep me`'));
assert.ok(!out.includes('// task #999: strip me'));
});
test('e2e: identity on file without any hits', () => {
const src = [
"'use strict'",
'',
'// Compact formatter used by the sidebar.',
'function fmt(n) { return String(n) }',
'',
].join('\n');
const { src: out } = rewriteFile(src);
assert.equal(out, src);
});
// Inline `(task #N …)` parens carrying trailing tokens/dates. Widened
// paren-ticket-num rule (2026-07-18): the old rule only matched `(task #N)`
// verbatim; we now accept `(task #N P0-4, 2026-07-16)` / `(task #N layer 1)`
// / `(2026-07-17, task #49)` shapes discovered in src/main dry-run.
test('strip: inline (task #N trailing tokens) → gone, sentence intact', () => {
const src = 'Two-way branch (task #103 P0-4, 2026-07-16). A real SessionForkError from the wire.';
const out = rewriteCommentText(src);
assert.ok(!/task #103/.test(out), `got: ${out}`);
assert.ok(/Two-way branch/.test(out));
assert.ok(/SessionForkError/.test(out));
});
test('strip: inline (task #N layer 1) → gone', () => {
const src = 'Static validation (task #37 layer 1). Same three questions the Plugins page asks.';
const out = rewriteCommentText(src);
assert.ok(!/task #37/.test(out), `got: ${out}`);
assert.ok(/Static validation/.test(out));
assert.ok(/Same three questions/.test(out));
});
test('strip: leading-date-then-task paren → gone', () => {
const src = 'MCP note (2026-07-17, task #49): the MCP-server config card writes a shallow-JSON block.';
const out = rewriteCommentText(src);
assert.ok(!/task #49/.test(out), `got: ${out}`);
assert.ok(!/2026-07-17/.test(out), `got: ${out}`);
assert.ok(/MCP note/.test(out));
assert.ok(/config card writes/.test(out));
});
// Pre-existing empty parens (function-call references inside comments) must
// survive the cleanup step even when other strips fire in the same comment.
// Regression guard added 2026-07-18 after src/main/main.js dry-run mangled
// `daemon.ensureUp()` → `daemon.ensureUp` alongside a legit strip.
test('preserve: function-call refs like foo() are not touched', () => {
const src = 'startRuntime is still in daemon.ensureUp() or _spawnOnce()';
const out = rewriteCommentText(src);
assert.equal(out, src);
});
test('preserve: function-call ref + inline task-num strip in same comment', () => {
const src = 'Two-way branch (task #103 P0-4, 2026-07-16) fires when ensureUp() lands.';
const out = rewriteCommentText(src);
assert.ok(!/task #103/.test(out), `got: ${out}`);
assert.ok(/ensureUp\(\)/.test(out), `got: ${out}`);
});
test('preserve: negation code-shape !foo() stays intact', () => {
const src = 'Guard rejects if !shellHomeExists() || !readShellConfig() at boot.';
const out = rewriteCommentText(src);
assert.equal(out, src);
});
// Compound "QA round-N shot NN" is a single atomic artifact tag; do not
// strip only `round-N` leaving `QA shot NN` orphan text.
test('strip: QA round-N shot NN → whole tag gone', () => {
const src = 'See profile map — QA round-3 shot 07 caught the daemon-echo hardcode.';
const out = rewriteCommentText(src);
assert.ok(!/round-3/.test(out), `got: ${out}`);
assert.ok(!/shot 07/.test(out), `got: ${out}`);
assert.ok(/See profile map/.test(out));
assert.ok(/caught the daemon-echo hardcode/.test(out));
});
// Orphan `):` line body after upstream-path strip: whole line drops.
test('strip: orphan close-paren line body → gone', () => {
const src = [
'/**',
' * Doc paragraph one.',
' * packages/ui/jsonrpc/src/interactions.ts:295-296',
' * ):',
' * Doc paragraph two.',
' */',
'function f(){}',
].join('\n');
const { src: out } = rewriteFile(src);
assert.ok(!/interactions\.ts/.test(out), `got:\n${out}`);
assert.ok(!/\)\s*:/.test(out) || !/^\s*\*\s*\)\s*:\s*$/m.test(out), `got:\n${out}`);
assert.ok(/Doc paragraph one/.test(out));
assert.ok(/Doc paragraph two/.test(out));
});
// Regex literals containing quote chars must NOT trap the walker in "string
// state". Regression: `/model\s+"([^"]+)"/i` at renderer.js:1110 left the
// walker inside a phantom string until EOF, blocking every downstream comment
// from being scanned. Regex-start detection uses JS's actual ASI-style rule.
test('walker: regex literal with double quotes does not trap string state', () => {
const src = [
'const rx = /model\\s+"([^"]+)"/i',
'// task #999: strip me',
'const x = 1;',
].join('\n');
const { src: out } = rewriteFile(src);
assert.ok(!/task #999/.test(out), `got:\n${out}`);
assert.ok(/const x = 1;/.test(out));
});
test('walker: regex with single quotes does not trap', () => {
const src = [
"const rx2 = /'/;",
'// task #999: strip me',
'const x = 1;',
].join('\n');
const { src: out } = rewriteFile(src);
assert.ok(!/task #999/.test(out), `got:\n${out}`);
});
test('walker: division operator is NOT treated as regex start', () => {
const src = [
'const half = width / 2;',
'const s = "task #999: keep me because I am in a string";',
'// task #999: strip me',
'const x = half + 1;',
].join('\n');
const { src: out } = rewriteFile(src);
// The string literal `"task #999:..."` must survive (walker correctly
// identified `/ 2;` as division and then entered the string.
assert.ok(out.includes('"task #999: keep me because I am in a string"'));
assert.ok(!out.includes('// task #999: strip me'));
});
// Fresh-eyes P0 with date-only paren (no review-md coord).
test('strip: Fresh-eyes P0 (2026-07-18): dated variant → keep constraint', () => {
const src = 'Fresh-eyes P0 (2026-07-18): expose `openDrill` so the empty-state';
const out = rewriteCommentText(src);
assert.equal(out, 'expose `openDrill` so the empty-state');
});
// Mid-sentence inline artifact refs. These leak through the leading-prefix
// strippers because they sit after commas / em-dashes / mid-sentence.
test('strip: em-dash inline Ticket ref → gone, sentence keeps meaning', () => {
const src = 'raw-inject.js — Ticket #15 B (2026-07-17) envelope:raw classifier.';
const out = rewriteCommentText(src);
assert.ok(!/Ticket #15/.test(out), `got: ${out}`);
assert.ok(/raw-inject\.js/.test(out));
assert.ok(/envelope:raw classifier/.test(out));
});
test('strip: leading Ticket #NNN. sentence (no colon) → prefix gone', () => {
// Comment starts `Ticket #140. Data source ...` — no colon, so the leading
// stripper (which requires `[::—]`) never fires. The inline-ticket-ref
// rule handles it.
const src = 'Ticket #140. Data source is the growth-v2 IPC compact-window.';
const out = rewriteCommentText(src);
assert.ok(!/Ticket #140/.test(out), `got: ${out}`);
assert.ok(/Data source is the growth-v2 IPC/.test(out));
});
test('strip: mid-sentence — Ticket #140 explicitly says', () => {
const src = 'Replace the pane body wholesale — Ticket #140 explicitly says "推倒";';
const out = rewriteCommentText(src);
assert.ok(!/Ticket #140/.test(out), `got: ${out}`);
assert.ok(/Replace the pane body wholesale/.test(out));
assert.ok(/explicitly says/.test(out));
});
test('strip: mid-sentence (team-lead §4.1 fix) reference', () => {
const src = 'Title fallback (team-lead §4.1 fix): real-daemon truth from wire.';
const out = rewriteCommentText(src);
assert.ok(!/team-lead §4\.1/.test(out), `got: ${out}`);
assert.ok(/Title fallback/.test(out));
assert.ok(/real-daemon truth from wire/.test(out));
});
test('strip: mid-sentence , task #NNN comma-tagged', () => {
const src = 'Empty-filter shared with mergeRecentSessions, task #69 caveat included.';
const out = rewriteCommentText(src);
assert.ok(!/task #69/.test(out), `got: ${out}`);
assert.ok(/mergeRecentSessions/.test(out));
});
test('preserve: bare #NNN mid-sentence stays (team-lead (B) ruling)', () => {
const src = 'The kernel PR #199 landed the recallable-compaction stack.';
const out = rewriteCommentText(src);
assert.equal(out, src);
});
// INTERNAL_DOC_STRIP hits at leading position must also consume the trailing
// delimiter (like the LEADING_STRIPPERS do), else we leave `: rest of body`.
// Regression: `// density-spec §4: rows focusable` was leaving `:` orphan.
test('strip: leading density-spec §N: followed by body → colon consumed', () => {
const src = 'density-spec §4: rows focusable, Enter=L1';
const out = rewriteCommentText(src);
assert.ok(!/density-spec/.test(out));
assert.equal(out, 'rows focusable, Enter=L1', `got: ${out}`);
});
test('strip: leading style-guide §N — body → dash-delim consumed', () => {
const src = 'style-guide §3: full-width row is normative.';
const out = rewriteCommentText(src);
assert.ok(!/style-guide/.test(out));
assert.equal(out, 'full-width row is normative.', `got: ${out}`);
});
// Widened task-num-prefix accepts a trailing tag-word and `.` as delimiter.
test('strip: Task #NNN word: prefix → gone', () => {
const src = 'Task #49 lane: the desktop shell needs a live indicator.';
const out = rewriteCommentText(src);
assert.equal(out, 'the desktop shell needs a live indicator.', `got: ${out}`);
});
test('strip: Task #NNN two-word tag: prefix → gone', () => {
const src = 'Task #225 selfie seam: the Tracing page projects rows.';
const out = rewriteCommentText(src);
assert.equal(out, 'the Tracing page projects rows.', `got: ${out}`);
});
test('strip: Task #NNN tag (paren). prefix → gone (period delim)', () => {
const src = 'Task #103 P0-4 (2026-07-16). Fork enabled.';
const out = rewriteCommentText(src);
assert.equal(out, 'Fork enabled.', `got: ${out}`);
});
// dated-tag-prefix (2026-07-18 additions).
test('strip: 2026-07-17 delta: prefix → gone', () => {
const src = '2026-07-17 delta: pill-style "60 tok" rather than bare "60"';
const out = rewriteCommentText(src);
assert.equal(out, 'pill-style "60 tok" rather than bare "60"', `got: ${out}`);
});
test('strip: 2026-07-17 addendum (...): prefix → gone', () => {
const src = '2026-07-17 addendum (老板实拍指令team-lead 转发): assemble the';
const out = rewriteCommentText(src);
assert.equal(out, 'assemble the', `got: ${out}`);
});
test('strip: Density-spec L0 budget: prefix → gone', () => {
const src = 'Density-spec L0 budget: identity + gist + 2 metrics. We show 3.';
const out = rewriteCommentText(src);
assert.equal(out, 'identity + gist + 2 metrics. We show 3.', `got: ${out}`);
});
test('strip: Clickability audit fills (2026-07-17): prefix → gone', () => {
const src = 'Clickability audit fills (docs/demo-clickability-audit.md 2026-07-17). Rest.';
const out = rewriteCommentText(src);
assert.ok(!/Clickability audit/.test(out), `got: ${out}`);
assert.ok(/Rest/.test(out));
});
test('strip: pi-agent-ui-study §N without .md → gone', () => {
const src = 'Adapter dot palette — mirrors the pi-agent-ui-study §2 adapter matrix.';
const out = rewriteCommentText(src);
assert.ok(!/pi-agent-ui-study/.test(out), `got: ${out}`);
assert.ok(/adapter matrix/.test(out));
});