duaer-spec 0.15.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/.duaer/active-job.json +4 -4
  2. package/.duaer/memory/testing.md +7 -2
  3. package/.duaer/specs/056-revise-reliability/delivery.json +13 -0
  4. package/.duaer/specs/056-revise-reliability/spec.md +44 -0
  5. package/.duaer/specs/056-revise-reliability/tasks.md +10 -0
  6. package/.duaer/specs/057-progress-accepted/delivery.json +9 -0
  7. package/.duaer/specs/057-progress-accepted/spec.md +42 -0
  8. package/.duaer/specs/057-progress-accepted/tasks.md +8 -0
  9. package/.duaer/specs/058-revise-progress-track/delivery.json +13 -0
  10. package/.duaer/specs/058-revise-progress-track/spec.md +48 -0
  11. package/.duaer/specs/058-revise-progress-track/tasks.md +9 -0
  12. package/.duaer/specs/059-revise-preempt-order/delivery.json +13 -0
  13. package/.duaer/specs/059-revise-preempt-order/spec.md +47 -0
  14. package/.duaer/specs/059-revise-preempt-order/tasks.md +8 -0
  15. package/.duaer/specs/060-release-016/delivery.json +10 -0
  16. package/.duaer/specs/060-release-016/spec.md +24 -0
  17. package/.duaer/specs/060-release-016/tasks.md +4 -0
  18. package/.duaer/specs/061-satisfactory-delivery/delivery.json +10 -0
  19. package/.duaer/specs/061-satisfactory-delivery/spec.md +39 -0
  20. package/.duaer/specs/061-satisfactory-delivery/tasks.md +5 -0
  21. package/.duaer/specs/062-deepseek-cli/delivery.json +10 -0
  22. package/.duaer/specs/062-deepseek-cli/spec.md +37 -0
  23. package/.duaer/specs/062-deepseek-cli/tasks.md +4 -0
  24. package/.duaer/specs/063-queued-count/delivery.json +10 -0
  25. package/.duaer/specs/063-queued-count/spec.md +12 -0
  26. package/.duaer/specs/063-queued-count/tasks.md +3 -0
  27. package/.duaer/specs/064-cli-install-show/delivery.json +10 -0
  28. package/.duaer/specs/064-cli-install-show/spec.md +17 -0
  29. package/.duaer/specs/064-cli-install-show/tasks.md +3 -0
  30. package/.duaer/specs/065-detailed-progress/delivery.json +18 -0
  31. package/.duaer/specs/065-detailed-progress/spec.md +19 -0
  32. package/.duaer/specs/065-detailed-progress/tasks.md +4 -0
  33. package/.duaer/specs/066-duaer-fed/delivery.json +16 -0
  34. package/.duaer/specs/066-duaer-fed/spec.md +18 -0
  35. package/.duaer/specs/066-duaer-fed/tasks.md +4 -0
  36. package/.duaer/specs/067-duaer-spec-fed/delivery.json +11 -0
  37. package/.duaer/specs/067-duaer-spec-fed/spec.md +16 -0
  38. package/.duaer/specs/067-duaer-spec-fed/tasks.md +3 -0
  39. package/.duaer/specs/068-fed-ux-polish/delivery.json +11 -0
  40. package/.duaer/specs/068-fed-ux-polish/spec.md +18 -0
  41. package/.duaer/specs/068-fed-ux-polish/tasks.md +4 -0
  42. package/.duaer/specs/069-history-btn-size/delivery.json +6 -0
  43. package/.duaer/specs/069-history-btn-size/spec.md +14 -0
  44. package/.duaer/specs/069-history-btn-size/tasks.md +3 -0
  45. package/.duaer/specs/070-validate-autofix-btn/delivery.json +9 -0
  46. package/.duaer/specs/070-validate-autofix-btn/spec.md +17 -0
  47. package/.duaer/specs/070-validate-autofix-btn/tasks.md +3 -0
  48. package/.duaer/specs/071-req-structured-display/delivery.json +9 -0
  49. package/.duaer/specs/071-req-structured-display/spec.md +17 -0
  50. package/.duaer/specs/071-req-structured-display/tasks.md +3 -0
  51. package/.duaer/specs/072-chat-send/delivery.json +14 -0
  52. package/.duaer/specs/072-chat-send/spec.md +48 -0
  53. package/.duaer/specs/072-chat-send/tasks.md +5 -0
  54. package/.duaer/specs/073-empty-structured/delivery.json +10 -0
  55. package/.duaer/specs/073-empty-structured/spec.md +28 -0
  56. package/.duaer/specs/073-empty-structured/tasks.md +4 -0
  57. package/.duaer/specs/074-chat-blank/delivery.json +10 -0
  58. package/.duaer/specs/074-chat-blank/spec.md +22 -0
  59. package/.duaer/specs/074-chat-blank/tasks.md +4 -0
  60. package/.duaer/specs/075-header-beginner/delivery.json +10 -0
  61. package/.duaer/specs/075-header-beginner/spec.md +17 -0
  62. package/.duaer/specs/075-header-beginner/tasks.md +4 -0
  63. package/.duaer/specs/076-click-options/delivery.json +10 -0
  64. package/.duaer/specs/076-click-options/spec.md +23 -0
  65. package/.duaer/specs/076-click-options/tasks.md +4 -0
  66. package/.duaer/specs/077-dispatch-unique/delivery.json +10 -0
  67. package/.duaer/specs/077-dispatch-unique/spec.md +18 -0
  68. package/.duaer/specs/077-dispatch-unique/tasks.md +4 -0
  69. package/.duaer/specs/078-chip-tone/delivery.json +10 -0
  70. package/.duaer/specs/078-chip-tone/spec.md +16 -0
  71. package/.duaer/specs/078-chip-tone/tasks.md +4 -0
  72. package/.duaer/specs/079-desk-equal-cols/delivery.json +10 -0
  73. package/.duaer/specs/079-desk-equal-cols/spec.md +17 -0
  74. package/.duaer/specs/079-desk-equal-cols/tasks.md +4 -0
  75. package/.duaer/specs/080-progress-polish/delivery.json +10 -0
  76. package/.duaer/specs/080-progress-polish/spec.md +18 -0
  77. package/.duaer/specs/080-progress-polish/tasks.md +4 -0
  78. package/.duaer/specs/081-beginner-copy/delivery.json +10 -0
  79. package/.duaer/specs/081-beginner-copy/spec.md +14 -0
  80. package/.duaer/specs/081-beginner-copy/tasks.md +4 -0
  81. package/.duaer/specs/082-git-cli-ensure/delivery.json +15 -0
  82. package/.duaer/specs/082-git-cli-ensure/spec.md +27 -0
  83. package/.duaer/specs/082-git-cli-ensure/tasks.md +5 -0
  84. package/.duaer/specs/083-deepseek-w-flag/delivery.json +14 -0
  85. package/.duaer/specs/083-deepseek-w-flag/spec.md +23 -0
  86. package/.duaer/specs/083-deepseek-w-flag/tasks.md +4 -0
  87. package/.duaer/specs/084-drop-deepseek-cli/delivery.json +14 -0
  88. package/.duaer/specs/084-drop-deepseek-cli/spec.md +25 -0
  89. package/.duaer/specs/084-drop-deepseek-cli/tasks.md +6 -0
  90. package/.duaer/specs/085-repo-mkdir/delivery.json +14 -0
  91. package/.duaer/specs/085-repo-mkdir/spec.md +26 -0
  92. package/.duaer/specs/085-repo-mkdir/tasks.md +5 -0
  93. package/.duaer/specs/086-claude-auto-perms/delivery.json +14 -0
  94. package/.duaer/specs/086-claude-auto-perms/spec.md +17 -0
  95. package/.duaer/specs/086-claude-auto-perms/tasks.md +4 -0
  96. package/.duaer/specs/087-release-017/spec.md +15 -0
  97. package/.duaer/specs/087-release-017/tasks.md +4 -0
  98. package/CHANGELOG.md +176 -0
  99. package/DUADER.md +11 -6
  100. package/README.md +22 -14
  101. package/README.zh-CN.md +11 -8
  102. package/bin/duaer-live.mjs +668 -143
  103. package/bin/duaer.mjs +1 -1
  104. package/bin/live-progress.mjs +189 -0
  105. package/bin/live-repo-path.mjs +88 -0
  106. package/bin/live-tooling.mjs +308 -0
  107. package/bin/live-worktree-name.mjs +57 -0
  108. package/docs/agent/README.md +2 -0
  109. package/docs/agent/e2e-test-plan.md +39 -2
  110. package/docs/agent/worker-models.md +75 -0
  111. package/docs/agent/worker-models.zh-CN.md +68 -0
  112. package/package.json +2 -2
  113. package/web/live-dev/app.js +469 -144
  114. package/web/live-dev/choice-options.mjs +59 -0
  115. package/web/live-dev/i18n.js +147 -38
  116. package/web/live-dev/index.html +50 -15
  117. package/web/live-dev/structured-html.mjs +121 -0
  118. package/web/live-dev/styles.css +546 -114
@@ -1,6 +1,6 @@
1
1
  {
2
- "featureDir": ".duaer/specs/055-release-015",
3
- "branch": "feat/release-015",
4
- "worktree": ".worktree/feat-release-015",
5
- "status": "active"
2
+ "featureDir": ".duaer/specs/087-release-017",
3
+ "slug": "087-release-017",
4
+ "branch": "chore/release-017",
5
+ "worktree": ".worktree/chore-release-017"
6
6
  }
@@ -41,8 +41,13 @@ Covers without a paid LLM:
41
41
  3. `/api/validate` pass and `/api/validate/fix` via an in-process mock
42
42
  OpenAI-compatible server
43
43
 
44
- Does **not** cover: real model quality, Terminal CLI launch, or full revise
45
- dispatch. Those stay manual E2E catalog rows or future suites.
44
+ Also run `npm test` (includes revise-reliability contract tests: Brief
45
+ snapshot/rollback helpers + source markers for `PREEMPT_FAILED` / longer
46
+ client timeout).
47
+
48
+ Does **not** cover: real model quality, live Terminal CLI launch against a
49
+ real Cursor/Claude session. Those stay manual E2E catalog rows (E2E-055) or
50
+ future suites.
46
51
 
47
52
  ## Opt-in (still need an explicit ask or Spec note)
48
53
 
@@ -0,0 +1,13 @@
1
+ {
2
+ "status": "accepted",
3
+ "summary": "Revise dispatch: honest preempt, Brief rollback on launch fail, structured retryable errors, terminal status line, longer client wait.",
4
+ "verification": {
5
+ "levels": ["L0", "L3"],
6
+ "commands": [
7
+ "node --check bin/duaer-live.mjs",
8
+ "npm run test:live",
9
+ "node --test test/revise-reliability.test.mjs"
10
+ ],
11
+ "notes": "E2E-055 manual for live Terminal preempt path."
12
+ }
13
+ }
@@ -0,0 +1,44 @@
1
+ # Feature Specification: Revise round reliability
2
+
3
+ **Feature Branch**: `feat/revise-reliability`
4
+
5
+ **Created**: 2026-09-17
6
+
7
+ **Status**: Active
8
+
9
+ ## Goal
10
+
11
+ Revise dispatch is **observable**, **retryable**, and failures are **readable**:
12
+ confirm → Terminal enqueue must not report success when preempt failed; Brief
13
+ mutations must not stick after a failed launch; client timeout matches server
14
+ budgets; status exposes Terminal busy/queue; UI keeps dispatch unlocked when
15
+ retryable.
16
+
17
+ ## In scope
18
+
19
+ - Honest preempt outcome (no false preempted / false HTTP 200)
20
+ - Rollback Brief writes if launch/enqueue fails
21
+ - Structured revise errors (`code`, `retryable`) + UI copy
22
+ - Align client `/api/revise` abort with recreate/init budgets (~3 min)
23
+ - `/api/status` includes `terminal: { busy, queueDepth, runnerHealthy }`
24
+ - Minimal status/hint line; extend L3 smoke for error shape / rollback unit
25
+
26
+ ## Out of scope
27
+
28
+ - Desk layout / column redesign
29
+ - Full Playwright Terminal automation
30
+ - Paid live LLM quality
31
+
32
+ ## Acceptance
33
+
34
+ 1. When preempt cannot clear leftover agents, `/api/revise` fails with
35
+ `PREEMPT_FAILED` and does **not** lock the revise card
36
+ 2. Failed launch does not leave a new Revision block in Brief (rollback)
37
+ 3. Client wait ≥ worst-case recreate path; timeout message mentions retry
38
+ 4. Status poll shows terminal busy/queue when revising
39
+ 5. `npm run test:live` still passes; new smoke/unit covers rollback or error codes
40
+
41
+ ## Assumptions
42
+
43
+ - Worktree: `.worktree/feat-revise-reliability`
44
+ - Brief: `.duaer/specs/056-revise-reliability/`
@@ -0,0 +1,10 @@
1
+ # Tasks: Revise round reliability
2
+
3
+ **Brief**: `.duaer/specs/056-revise-reliability/`
4
+
5
+ ## Checklist
6
+
7
+ - [x] Honest preempt + PREEMPT_FAILED; Brief rollback on launch fail
8
+ - [x] Structured errors on `/api/revise`; status.terminal
9
+ - [x] UI: longer timeout, retryable unlock, terminal line, i18n
10
+ - [x] L3 / unit smoke; docs; accept; merge develop
@@ -0,0 +1,9 @@
1
+ {
2
+ "status": "accepted",
3
+ "summary": "On delivery accepted, progress shows N/N and reconciles unchecked tasks.md boxes.",
4
+ "verification": {
5
+ "levels": ["L0", "L3"],
6
+ "commands": ["npm test"],
7
+ "notes": "E2E-056."
8
+ }
9
+ }
@@ -0,0 +1,42 @@
1
+ # Feature Specification: Progress sync when delivery accepted
2
+
3
+ **Feature Branch**: `fix/progress-accepted`
4
+
5
+ **Created**: 2026-09-17
6
+
7
+ **Status**: Active
8
+
9
+ ## Goal
10
+
11
+ Task progress must not show `0/N · delivery accepted · 工单完成`. When
12
+ `delivery.json` is `accepted`, the desk treats tasks as complete (done ===
13
+ total) and reconciles unchecked boxes in `tasks.md` when safe.
14
+
15
+ ## Problem
16
+
17
+ `dispatchStatus` only rewrites `progress.current` on accept; `done` stays at
18
+ the unchecked count. Agents often stamp `delivery.json` without flipping every
19
+ `- [ ]` to `- [x]`, so 任务跟进 shows a contradictory `0/3 · …工单完成`.
20
+
21
+ ## In scope
22
+
23
+ - Normalize progress when accepted: `done = total`, all task rows `done: true`
24
+ - Reconcile `tasks.md` unchecked boxes to `[x]` once when accepted (idempotent)
25
+ - Unit/smoke coverage; short README/CHANGELOG/E2E note
26
+
27
+ ## Out of scope
28
+
29
+ - Changing how agents are prompted (except if a one-line reminder helps)
30
+ - Progress column layout redesign
31
+
32
+ ## Acceptance
33
+
34
+ 1. Accepted delivery never surfaces `done < total` with an “工单完成 /
35
+ delivery accepted” current line
36
+ 2. Unchecked tasks in Brief are marked `[x]` after status observes accept
37
+ 3. `npm test` / `npm run test:live` pass
38
+
39
+ ## Assumptions
40
+
41
+ - Worktree: `.worktree/fix-progress-accepted`
42
+ - Brief: `.duaer/specs/057-progress-accepted/`
@@ -0,0 +1,8 @@
1
+ # Tasks: Progress sync when delivery accepted
2
+
3
+ **Brief**: `.duaer/specs/057-progress-accepted/`
4
+
5
+ ## Checklist
6
+
7
+ - [x] Normalize progress on accept; reconcile tasks.md
8
+ - [x] Tests + docs; accept; merge develop
@@ -0,0 +1,13 @@
1
+ {
2
+ "status": "accepted",
3
+ "acceptedAt": "2026-09-17T09:50:00.000Z",
4
+ "summary": "Revise-round progress scopes to Revision N / R{n}-* tasks; lagging accepted + busy Terminal no longer freezes on 工单完成.",
5
+ "verification": {
6
+ "levels": ["L0", "L1", "L3"],
7
+ "commands": [
8
+ "node --check bin/duaer-live.mjs",
9
+ "npm test"
10
+ ],
11
+ "result": "pass (14 tests)"
12
+ }
13
+ }
@@ -0,0 +1,48 @@
1
+ # Feature Specification: Track revise-round task progress
2
+
3
+ **Feature Branch**: `fix/revise-progress-track`
4
+
5
+ **Created**: 2026-09-17
6
+
7
+ **Status**: Accepted
8
+
9
+ ## Goal
10
+
11
+ After **Confirm revise and dispatch**, 任务跟进 shows **this revision’s**
12
+ checklist and updates as work starts — not the prior dispatch’s completed
13
+ `T001…` pile, and not a frozen “delivery accepted · 工单完成” while Terminal
14
+ is already running the revise.
15
+
16
+ ## Problem
17
+
18
+ Progress parses the whole `tasks.md`. After revise, old tasks stay `[x]` so
19
+ the bar looks finished (or accepted-normalized to N/N) while the new `R{n}-*`
20
+ round has started. Live `revisionCount` can lag; status may still say
21
+ `accepted`, so the wrong run-block is updated and revise work looks untracked.
22
+
23
+ ## In scope
24
+
25
+ - Scope progress to dispatch (pre-Revision section) vs active `Revision N`
26
+ - Infer active revision from job / delivery / tasks.md headers and `R{n}` ids
27
+ - While revising (or Terminal busy with open `R{n}` tasks), do not force
28
+ accept-complete progress
29
+ - Persist inferred `revisionCount` onto the live job when missing
30
+ - Tests + CHANGELOG / E2E note
31
+
32
+ ## Out of scope
33
+
34
+ - Layout / column redesign
35
+ - Changing revise launch / preempt behavior
36
+
37
+ ## Acceptance
38
+
39
+ 1. After Confirm revise, progress shows only this revision’s tasks (e.g. `0/3`
40
+ then rising), under the Revision N run block
41
+ 2. While revise is active, status is not stuck on `delivery accepted · 工单完成`
42
+ 3. When revise delivery accepts, that revision shows `N/N · …完成`
43
+ 4. `npm test` passes
44
+
45
+ ## Assumptions
46
+
47
+ - Worktree: `.worktree/fix-revise-progress-track`
48
+ - Brief: `.duaer/specs/058-revise-progress-track/`
@@ -0,0 +1,9 @@
1
+ # Tasks: Track revise-round task progress
2
+
3
+ **Brief**: `.duaer/specs/058-revise-progress-track/`
4
+
5
+ ## Checklist
6
+
7
+ - [x] Scope parseTasksProgress by revision; infer active revision
8
+ - [x] Revising / busy Terminal skips accept-complete normalize
9
+ - [x] Tests + docs; merge develop
@@ -0,0 +1,13 @@
1
+ {
2
+ "status": "accepted",
3
+ "acceptedAt": "2026-09-17T10:05:00.000Z",
4
+ "summary": "priorAccepted revise preempts leftovers before enqueue so Confirm revise no longer returns PREEMPT_FAILED while the revise Agent is already running.",
5
+ "verification": {
6
+ "levels": ["L0", "L1", "L3"],
7
+ "commands": [
8
+ "node --check bin/duaer-live.mjs",
9
+ "npm test"
10
+ ],
11
+ "result": "pass (14 tests)"
12
+ }
13
+ }
@@ -0,0 +1,47 @@
1
+ # Feature Specification: Honest revise preempt (enqueue after clear)
2
+
3
+ **Feature Branch**: `fix/revise-preempt-order`
4
+
5
+ **Created**: 2026-09-17
6
+
7
+ **Status**: Accepted
8
+
9
+ ## Goal
10
+
11
+ After Confirm revise, either the revise Agent is launched and the desk
12
+ reports success, or preempt truly failed and nothing was started — never
13
+ “Could not preempt…” while Terminal is already running the revise job.
14
+
15
+ ## Problem
16
+
17
+ `launchInTerminal` enqueues the revise job **before** preempt. Within the
18
+ post-preempt wait, the runner starts the new Agent; status then sees
19
+ `busy && agentsLeft > 0` and throws `PREEMPT_FAILED`. The API rolls back
20
+ Brief while the queued revise Agent keeps working — UI error, work already
21
+ underway; retries kill that Agent.
22
+
23
+ ## In scope
24
+
25
+ - Preempt leftover agents **before** enqueueing the revise Terminal job
26
+ - Fail `PREEMPT_FAILED` only when prior agents remain (nothing queued yet)
27
+ - Do not treat the newly started revise Agent as a preempt failure
28
+ - Tests + CHANGELOG / E2E note
29
+
30
+ ## Out of scope
31
+
32
+ - Progress scoping (058)
33
+ - Changing when priorAccepted revise preempts vs waits
34
+
35
+ ## Acceptance
36
+
37
+ 1. priorAccepted revise: preempt clears leftovers, then enqueue; HTTP 200
38
+ 2. If leftover agents cannot be cleared, `PREEMPT_FAILED` and **no** new
39
+ Terminal job for that attempt
40
+ 3. Desk does not show preempt failure while revise Agent is already running
41
+ from that same Confirm tap
42
+ 4. `npm test` passes
43
+
44
+ ## Assumptions
45
+
46
+ - Worktree: `.worktree/fix-revise-preempt-order`
47
+ - Brief: `.duaer/specs/059-revise-preempt-order/`
@@ -0,0 +1,8 @@
1
+ # Tasks: Honest revise preempt (enqueue after clear)
2
+
3
+ **Brief**: `.duaer/specs/059-revise-preempt-order/`
4
+
5
+ ## Checklist
6
+
7
+ - [x] Preempt before enqueue; fail only on leftover prior agents
8
+ - [x] Tests + docs; merge develop
@@ -0,0 +1,10 @@
1
+ {
2
+ "status": "accepted",
3
+ "acceptedAt": "2026-09-18T00:00:00.000Z",
4
+ "summary": "Release 0.16.0: honest revise preempt, revise progress scope, accept progress sync.",
5
+ "verification": {
6
+ "levels": ["L0", "L1", "L3"],
7
+ "commands": ["npm test"],
8
+ "result": "pass (14 tests)"
9
+ }
10
+ }
@@ -0,0 +1,24 @@
1
+ # Feature Specification: Release 0.16.0
2
+
3
+ **Feature Branch**: `feat/release-016`
4
+
5
+ **Created**: 2026-09-18
6
+
7
+ **Status**: Accepted
8
+
9
+ ## Goal
10
+
11
+ Ship **0.16.0** to `main` + npm: revise reliability (honest preempt order),
12
+ revise-round progress tracking, and accept progress sync.
13
+
14
+ ## Acceptance
15
+
16
+ 1. `package.json` version `0.16.0`; CHANGELOG dated section; Unreleased cleared
17
+ 2. `main` tagged `v0.16.0`; GitHub Release; npm `latest` is `0.16.0`
18
+ 3. `npm test` passes before promote
19
+
20
+ ## Assumptions
21
+
22
+ - Worktree: `.worktree/feat-release-016`
23
+ - Brief: `.duaer/specs/060-release-016/`
24
+ - User ask「发版」authorizes push + promote `develop` → `main`
@@ -0,0 +1,4 @@
1
+ # Tasks: Release 0.16.0
2
+
3
+ - [x] Bump 0.16.0 + CHANGELOG + light README notes
4
+ - [x] Verify `npm test`; merge develop; promote main; tag + npm
@@ -0,0 +1,10 @@
1
+ {
2
+ "status": "accepted",
3
+ "acceptedAt": "2026-09-18T01:00:00.000Z",
4
+ "summary": "Position norms → satisfactory delivery; stricter checkable acceptance gate for confirm/revise; docs and live hints updated.",
5
+ "verification": {
6
+ "levels": ["L0", "L1", "L3"],
7
+ "commands": ["npm test"],
8
+ "result": "pass (18 tests)"
9
+ }
10
+ }
@@ -0,0 +1,39 @@
1
+ # Feature Specification: Spec AI for satisfactory delivery
2
+
3
+ **Feature Branch**: `feat/satisfactory-delivery`
4
+
5
+ **Created**: 2026-09-18
6
+
7
+ **Status**: Accepted
8
+
9
+ ## Goal
10
+
11
+ Position Duaer as **规范 AI → 满意交付**: acceptance must be objectively
12
+ checkable before confirm/revise dispatch, and public docs lead with that
13
+ promise—not phase/skill names.
14
+
15
+ ## In scope
16
+
17
+ - Stricter local + LLM validate gate for confirm and revise cards
18
+ - Positioning copy: README EN/ZH, package description, DUADER, live desk tag/hints
19
+ - Dispatch/revise agent prompts emphasize meeting Acceptance + openable preview
20
+ - Tests + CHANGELOG / E2E note
21
+
22
+ ## Out of scope
23
+
24
+ - npm release / promote to main (ship when asked)
25
+ - Layout redesign
26
+ - New columns or cloud hosting
27
+
28
+ ## Acceptance
29
+
30
+ 1. Vague acceptance (e.g.「更好用」/ “looks better”) fails `/api/validate` locally
31
+ 2. Checkable acceptance (open X / see Y / command passes) can still pass the gate
32
+ 3. README EN/ZH lead with 规范 → 满意交付 (English: norms → satisfactory delivery)
33
+ 4. `npm test` passes
34
+
35
+ ## Assumptions
36
+
37
+ - Worktree: `.worktree/feat-satisfactory-delivery`
38
+ - Brief: `.duaer/specs/061-satisfactory-delivery/`
39
+ - User confirmed evolution direction; no further intent wait
@@ -0,0 +1,5 @@
1
+ # Tasks: Spec AI for satisfactory delivery
2
+
3
+ - [x] Stricter acceptance gate (local heuristics + ACCEPT_PROMPT)
4
+ - [x] Positioning docs + live i18n hints
5
+ - [x] Agent prompts; tests; merge develop
@@ -0,0 +1,10 @@
1
+ {
2
+ "status": "accepted",
3
+ "acceptedAt": "2026-09-18T01:20:00.000Z",
4
+ "summary": "Live desk launches DeepSeek TUI (deepseek) as a third CLI digital employee with PATH discovery for npm/nvm/cargo.",
5
+ "verification": {
6
+ "levels": ["L0", "L1", "L3"],
7
+ "commands": ["npm test"],
8
+ "result": "pass (19 tests)"
9
+ }
10
+ }
@@ -0,0 +1,37 @@
1
+ # Feature Specification: DeepSeek CLI digital employee
2
+
3
+ **Feature Branch**: `feat/deepseek-cli`
4
+
5
+ **Created**: 2026-09-18
6
+
7
+ **Status**: Accepted
8
+
9
+ ## Goal
10
+
11
+ Live desk can launch **DeepSeek TUI** (`deepseek` / `deepseek-tui`) as a third
12
+ CLI digital employee alongside Cursor Agent and Claude Code.
13
+
14
+ ## In scope
15
+
16
+ - Detect `deepseek` on PATH (incl. npm global / nvm / cargo bins under launchd)
17
+ - Dispatch + revise Terminal launch with workspace, YOLO tools, optional `--continue`
18
+ - Preempt matching for deepseek processes; install hint `npm install -g deepseek-tui`
19
+ - README / i18n / tests
20
+
21
+ ## Out of scope
22
+
23
+ - Embedding DeepSeek API chat (already used for desk validate) as the worker
24
+ - Shipping npm release unless asked
25
+
26
+ ## Acceptance
27
+
28
+ 1. With `deepseek` installed, desk lists **DeepSeek** as available CLI
29
+ 2. Dispatch/revise enqueue a Terminal command using `deepseek -w <worktree> …`
30
+ 3. Without `deepseek`, missing list shows install command
31
+ 4. `npm test` passes
32
+
33
+ ## Assumptions
34
+
35
+ - Target CLI: DeepSeek-TUI entrypoint `deepseek` (`npm i -g deepseek-tui`)
36
+ - Worktree: `.worktree/feat-deepseek-cli`
37
+ - Brief: `.duaer/specs/062-deepseek-cli/`
@@ -0,0 +1,4 @@
1
+ # Tasks: DeepSeek CLI digital employee
2
+
3
+ - [x] Catalog + detect + PATH dirs; launch + preempt
4
+ - [x] Docs/i18n/tests; merge develop
@@ -0,0 +1,10 @@
1
+ {
2
+ "status": "accepted",
3
+ "acceptedAt": "2026-09-18T01:50:00.000Z",
4
+ "summary": "Define queuedCount on fresh Terminal open path to stop ReferenceError.",
5
+ "verification": {
6
+ "levels": ["L0", "L1"],
7
+ "commands": ["npm test"],
8
+ "result": "pass"
9
+ }
10
+ }
@@ -0,0 +1,12 @@
1
+ # Feature Specification: Fix queuedCount ReferenceError
2
+
3
+ **Feature Branch**: `fix/queued-count`
4
+ **Brief**: `.duaer/specs/063-queued-count/`
5
+ **Status**: Active
6
+
7
+ ## Goal
8
+ Fresh Terminal open path must not throw `queuedCount is not defined`.
9
+
10
+ ## Acceptance
11
+ 1. Unhealthy-runner launch return uses a defined queue depth
12
+ 2. `npm test` passes
@@ -0,0 +1,3 @@
1
+ # Tasks
2
+ - [x] Define queuedCount on fresh Terminal open path
3
+ - [x] Test + merge develop
@@ -0,0 +1,10 @@
1
+ {
2
+ "status": "accepted",
3
+ "acceptedAt": "2026-09-18T02:00:00.000Z",
4
+ "summary": "Missing CLI chips show install commands; install panel + redetect for PATH refresh.",
5
+ "verification": {
6
+ "levels": ["L0", "L1", "L3"],
7
+ "commands": ["npm test"],
8
+ "result": "pass (19 tests)"
9
+ }
10
+ }
@@ -0,0 +1,17 @@
1
+ # Feature Specification: Show CLI install commands when missing
2
+
3
+ **Feature Branch**: `feat/cli-install-show`
4
+ **Brief**: `.duaer/specs/064-cli-install-show/`
5
+ **Status**: Accepted
6
+
7
+ ## Goal
8
+
9
+ 「用哪个 CLI 数字员工启动」must detect install status; if not installed,
10
+ show the install command clearly (on the chip + install panel), with redetect.
11
+
12
+ ## Acceptance
13
+
14
+ 1. Missing CLIs render as distinct chips with install command text visible
15
+ 2. Install panel lists the selected missing CLI’s command + copy button
16
+ 3. Redetect button refreshes `/api/agents`
17
+ 4. `npm test` passes
@@ -0,0 +1,3 @@
1
+ # Tasks
2
+ - [x] Missing chips show install cmd; panel + redetect
3
+ - [x] i18n/CSS/tests; merge develop
@@ -0,0 +1,18 @@
1
+ {
2
+ "status": "accepted",
3
+ "acceptedAt": "2026-09-18T00:00:00.000Z",
4
+ "featureDir": ".duaer/specs/065-detailed-progress",
5
+ "branch": "feat/detailed-progress",
6
+ "worktree": ".worktree/feat-detailed-progress",
7
+ "verification": {
8
+ "levels": ["L0", "L1", "L3"],
9
+ "commands": [
10
+ "node --check bin/duaer-live.mjs",
11
+ "node --check bin/live-progress.mjs",
12
+ "node --check web/live-dev/app.js",
13
+ "npm test",
14
+ "npm run test:live"
15
+ ],
16
+ "notes": "Richer default tasks.md, status.activity, progress-activity UI"
17
+ }
18
+ }
@@ -0,0 +1,19 @@
1
+ # Feature Specification: Detailed coding progress
2
+
3
+ **Feature Branch**: `feat/detailed-progress`
4
+ **Brief**: `.duaer/specs/065-detailed-progress/`
5
+ **Status**: Active
6
+
7
+ ## Goal
8
+
9
+ Live desk progress shows more than 3 coarse tasks: a finer `tasks.md`
10
+ checklist on dispatch, stronger agent check-off rules, and live worktree
11
+ file activity while the CLI runs.
12
+
13
+ ## Acceptance
14
+
15
+ 1. New dispatch writes ≥6 checkbox tasks (not only T001–T003)
16
+ 2. `/api/status` includes `activity` (recent changed files / git porcelain)
17
+ 3. Progress column shows activity under the task list while work is running
18
+ 4. Agent launch prompt requires expanding/checking detailed tasks
19
+ 5. `npm test` passes
@@ -0,0 +1,4 @@
1
+ # Tasks
2
+ - [x] Richer default tasks.md + agent prompt
3
+ - [x] worktree activity on status + UI
4
+ - [x] Tests/docs; merge develop
@@ -0,0 +1,16 @@
1
+ {
2
+ "status": "accepted",
3
+ "acceptedAt": "2026-09-18T00:00:00.000Z",
4
+ "featureDir": ".duaer/specs/066-duaer-fed",
5
+ "branch": "feat/duaer-fed",
6
+ "worktree": ".worktree/feat-duaer-fed",
7
+ "verification": {
8
+ "levels": ["L0", "L1", "L3"],
9
+ "commands": [
10
+ "node --check bin/duaer-live.mjs",
11
+ "node --check web/live-dev/i18n.js",
12
+ "npm test",
13
+ "npm run test:live"
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,18 @@
1
+ # Feature Specification: Brand live desk as Duaer FED
2
+
3
+ **Feature Branch**: `feat/duaer-fed`
4
+ **Brief**: `.duaer/specs/066-duaer-fed/`
5
+ **Status**: Active
6
+
7
+ ## Goal
8
+
9
+ User-facing name for the web confirm desk is **Duaer FED** (Field
10
+ Engineering Desk). Chinese keeps「现场开发」as the secondary mark.
11
+
12
+ ## Acceptance
13
+
14
+ 1. Desk header brand + document title show `Duaer FED`
15
+ 2. zh mark is「现场开发」; en mark is `Field Engineering Desk`
16
+ 3. README EN/ZH section titles use Duaer FED; CLI help / start banner say FED
17
+ 4. Agent/system prompts refer to Duaer FED (not only「现场开发」)
18
+ 5. `duaer live` command path unchanged; `npm test` + `npm run test:live` pass
@@ -0,0 +1,4 @@
1
+ # Tasks
2
+ - [x] UI i18n + index title/brand
3
+ - [x] CLI banner, README, agent prompts
4
+ - [x] Tests/docs; merge develop
@@ -0,0 +1,11 @@
1
+ {
2
+ "status": "accepted",
3
+ "acceptedAt": "2026-09-18T00:00:00.000Z",
4
+ "featureDir": ".duaer/specs/067-duaer-spec-fed",
5
+ "branch": "feat/duaer-spec-fed",
6
+ "worktree": ".worktree/feat-duaer-spec-fed",
7
+ "verification": {
8
+ "levels": ["L0", "L1", "L3"],
9
+ "commands": ["npm test", "npm run test:live"]
10
+ }
11
+ }
@@ -0,0 +1,16 @@
1
+ # Feature Specification: Brand as Duaer-spec FED
2
+
3
+ **Feature Branch**: `feat/duaer-spec-fed`
4
+ **Brief**: `.duaer/specs/067-duaer-spec-fed/`
5
+ **Status**: Active
6
+
7
+ ## Goal
8
+
9
+ Correct the live desk product name from `Duaer FED` to **Duaer-spec FED**
10
+ (tied to the duaer-spec product).
11
+
12
+ ## Acceptance
13
+
14
+ 1. Header, title, CLI banner/help, README, and agent prompts say `Duaer-spec FED`
15
+ 2. Secondary marks unchanged (zh on-site desk / en Field Engineering Desk)
16
+ 3. Brand tests updated; `npm test` + `npm run test:live` pass
@@ -0,0 +1,3 @@
1
+ # Tasks
2
+ - [x] Rename Duaer FED → Duaer-spec FED across UI/docs/CLI
3
+ - [x] Update brand test; verify; merge develop