duaer-spec 0.10.0 → 0.12.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.
- package/.duaer/active-job.json +1 -5
- package/.duaer/specs/004-live-deepseek-preset/delivery.json +12 -0
- package/.duaer/specs/004-live-deepseek-preset/spec.md +30 -0
- package/.duaer/specs/004-live-deepseek-preset/tasks.md +5 -0
- package/.duaer/specs/005-live-ui-probe/delivery.json +9 -0
- package/.duaer/specs/005-live-ui-probe/spec.md +17 -0
- package/.duaer/specs/005-live-ui-probe/tasks.md +5 -0
- package/.duaer/specs/006-live-auto-accept/delivery.json +9 -0
- package/.duaer/specs/006-live-auto-accept/spec.md +17 -0
- package/.duaer/specs/006-live-auto-accept/tasks.md +5 -0
- package/.duaer/specs/007-live-stream/delivery.json +9 -0
- package/.duaer/specs/007-live-stream/spec.md +17 -0
- package/.duaer/specs/007-live-stream/tasks.md +5 -0
- package/.duaer/specs/008-live-dispatch/delivery.json +12 -0
- package/.duaer/specs/008-live-dispatch/spec.md +19 -0
- package/.duaer/specs/008-live-dispatch/tasks.md +5 -0
- package/.duaer/specs/009-live-repo-pick/delivery.json +9 -0
- package/.duaer/specs/009-live-repo-pick/spec.md +17 -0
- package/.duaer/specs/009-live-repo-pick/tasks.md +5 -0
- package/.duaer/specs/010-fix-browse-remember/delivery.json +1 -0
- package/.duaer/specs/010-fix-browse-remember/spec.md +7 -0
- package/.duaer/specs/010-fix-browse-remember/tasks.md +2 -0
- package/.duaer/specs/011-live-agent-launch/delivery.json +15 -0
- package/.duaer/specs/011-live-agent-launch/spec.md +33 -0
- package/.duaer/specs/011-live-agent-launch/tasks.md +5 -0
- package/.duaer/specs/012-live-dispatch-progress/delivery.json +12 -0
- package/.duaer/specs/012-live-dispatch-progress/spec.md +29 -0
- package/.duaer/specs/012-live-dispatch-progress/tasks.md +5 -0
- package/.duaer/specs/013-fix-live-agent-run/delivery.json +9 -0
- package/.duaer/specs/013-fix-live-agent-run/spec.md +18 -0
- package/.duaer/specs/013-fix-live-agent-run/tasks.md +4 -0
- package/.duaer/specs/014-fix-live-agent-auto/delivery.json +9 -0
- package/.duaer/specs/014-fix-live-agent-auto/spec.md +18 -0
- package/.duaer/specs/014-fix-live-agent-auto/tasks.md +4 -0
- package/.duaer/specs/015-fix-live-open-worktree/delivery.json +9 -0
- package/.duaer/specs/015-fix-live-open-worktree/spec.md +17 -0
- package/.duaer/specs/015-fix-live-open-worktree/tasks.md +4 -0
- package/.duaer/specs/016-live-cursor-cli/delivery.json +9 -0
- package/.duaer/specs/016-live-cursor-cli/spec.md +18 -0
- package/.duaer/specs/016-live-cursor-cli/tasks.md +4 -0
- package/.duaer/specs/017-live-cli-install-prompt/delivery.json +9 -0
- package/.duaer/specs/017-live-cli-install-prompt/spec.md +18 -0
- package/.duaer/specs/017-live-cli-install-prompt/tasks.md +5 -0
- package/.duaer/specs/018-fix-live-cursor-terminal/delivery.json +9 -0
- package/.duaer/specs/018-fix-live-cursor-terminal/spec.md +17 -0
- package/.duaer/specs/018-fix-live-cursor-terminal/tasks.md +4 -0
- package/.duaer/specs/019-fix-live-terminal-open/delivery.json +1 -0
- package/.duaer/specs/019-fix-live-terminal-open/spec.md +17 -0
- package/.duaer/specs/019-fix-live-terminal-open/tasks.md +4 -0
- package/.duaer/specs/020-fix-live-dispatch-hang/delivery.json +1 -0
- package/.duaer/specs/020-fix-live-dispatch-hang/spec.md +16 -0
- package/.duaer/specs/020-fix-live-dispatch-hang/tasks.md +3 -0
- package/.duaer/specs/021-fix-live-cli-only/delivery.json +1 -0
- package/.duaer/specs/021-fix-live-cli-only/spec.md +17 -0
- package/.duaer/specs/021-fix-live-cli-only/tasks.md +4 -0
- package/.duaer/specs/022-live-preview-link/delivery.json +9 -0
- package/.duaer/specs/022-live-preview-link/spec.md +19 -0
- package/.duaer/specs/022-live-preview-link/tasks.md +5 -0
- package/CHANGELOG.md +50 -1
- package/README.md +17 -2
- package/README.zh-CN.md +17 -3
- package/bin/duaer-live.mjs +1997 -167
- package/bin/duaer.mjs +27 -5
- package/docs/agent/e2e-test-plan.md +8 -1
- package/package.json +1 -1
- package/web/live-dev/app.js +778 -42
- package/web/live-dev/index.html +69 -11
- package/web/live-dev/styles.css +514 -110
package/.duaer/active-job.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-15T11:15:00.000Z",
|
|
4
|
+
"verification": {
|
|
5
|
+
"levels": ["L0"],
|
|
6
|
+
"commands": [
|
|
7
|
+
"duaer live config --provider deepseek --api-key sk-test (DUAER_HOME temp)",
|
|
8
|
+
"GET /api/config returns providers including deepseek"
|
|
9
|
+
],
|
|
10
|
+
"result": "pass"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Feature Specification: Live model presets (DeepSeek)
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-deepseek`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-15
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
现场开发模型配置要能一键/明确选用 DeepSeek(OpenAI 兼容),不必用户自己猜 Base URL 和模型名。
|
|
12
|
+
|
|
13
|
+
## In scope
|
|
14
|
+
|
|
15
|
+
- UI: DeepSeek preset(填入官方兼容 Base URL + 默认模型)
|
|
16
|
+
- CLI help / docs 示例含 DeepSeek
|
|
17
|
+
- 仍走现有 OpenAI-compatible `/chat/completions`
|
|
18
|
+
|
|
19
|
+
## Out of scope
|
|
20
|
+
|
|
21
|
+
- DeepSeek 专有 SDK
|
|
22
|
+
- 自动拉取 API Key
|
|
23
|
+
- 其它厂商完整目录(可保留「自定义」)
|
|
24
|
+
|
|
25
|
+
## Acceptance
|
|
26
|
+
|
|
27
|
+
- 配置页可选 DeepSeek,一键填好 `https://api.deepseek.com/v1` 与默认模型(如 `deepseek-chat`)
|
|
28
|
+
- 用户仍只需填 API Key(或覆盖模型名)
|
|
29
|
+
- `duaer live config` 帮助/文档示例含 DeepSeek
|
|
30
|
+
- 不写入业务仓库;配置仍在 `~/.duaer/live/config.json`
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Feature Specification: Live desk UI — Probe visual language
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-ui`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-15
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
现场开发页视觉对齐本地 Probe(`localhost:61662/probe/`):钢蓝工业台面,不再用暖奶油 + 衬线默认风。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
- Palette / type / chrome match Probe tokens (steel, plate, ink, mute, register, lock; Outfit + Chivo Mono)
|
|
16
|
+
- Setup + desk remain usable; no behavior change
|
|
17
|
+
- Concise UI copy; brand “现场开发” remains the hero signal
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Feature Specification: Auto-accept review on confirm
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-auto-accept`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-15
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
点「需求无误,开始干活」时,先用已配置模型自动验收确认卡;通过才写入 Brief。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
- Confirm 调用自动验收;未通过返回 issues,不写 Brief
|
|
16
|
+
- 通过后写入 Brief,并记录验收摘要
|
|
17
|
+
- UI 显示「自动验收中…」及失败原因
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Feature Specification: Streaming chat replies
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-stream`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-15
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
现场开发对话框支持流式输出:助手回复边生成边显示。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
- `/api/chat` 默认 SSE 流式:先推 reply 文本,结束时推完整确认卡字段
|
|
16
|
+
- UI 气泡随 delta 更新;结束后应用卡片与 options
|
|
17
|
+
- 自动验收 confirm 仍可非流式
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Feature Specification: Live desk → product repo dispatch
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-dispatch`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
确认并自动验收通过后,用户选择产品仓库;系统写入 Brief、从 develop/main 建 worktree,并给出数字员工开工说明(尽量打开编辑器)。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
1. Confirm 后出现「派工」:可选最近仓库或粘贴绝对路径
|
|
16
|
+
2. Dispatch 在目标仓 `.worktree/feat-<name>/` 建隔离区,Brief 在该 worktree 的 `.duaer/specs/`
|
|
17
|
+
3. 返回 agentPrompt;若本机有 `cursor`/`code` 则尝试打开 worktree
|
|
18
|
+
4. 可查询 delivery 状态(accepted / pending)
|
|
19
|
+
5. 未派工前仍只写 `~/.duaer/live/jobs`
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Feature Specification: Easier product repo selection
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-repo-pick`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
派工时不必手搓绝对路径:本机选文件夹、扫描发现、CLI 登记、列表点选。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
- UI: 「浏览…」调系统选文件夹;「扫描」列出常见目录下的 git 仓;可筛选点选
|
|
16
|
+
- `duaer live repo add [path]` 登记仓库(默认 cwd)
|
|
17
|
+
- 路径输入框降为备选
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"status":"accepted","acceptedAt":"2026-09-16T01:00:00.000Z","verification":{"levels":["L0"],"result":"pass"}}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-16T00:45:00.000Z",
|
|
4
|
+
"verification": {
|
|
5
|
+
"levels": ["L0", "L1", "L3"],
|
|
6
|
+
"commands": [
|
|
7
|
+
"node --check bin/duaer-live.mjs",
|
|
8
|
+
"curl GET /api/agents (cursor-agent,claude,cursor,code,none)",
|
|
9
|
+
"curl POST /api/dispatch agentId=none",
|
|
10
|
+
"curl POST /api/dispatch agentId=cursor (open)",
|
|
11
|
+
"curl POST /api/dispatch/launch agentId=none"
|
|
12
|
+
],
|
|
13
|
+
"result": "pass"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Feature Specification: Live desk agent detect + launch
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-agent-launch`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
派工后不只给文案:检测本机已安装的数字员工(Cursor Agent、Claude Code,以及仅打开仓库的 Cursor / VS Code),在现场开发页面列出可选,用户选中后启动并带上开工 prompt。
|
|
12
|
+
|
|
13
|
+
## Out of scope
|
|
14
|
+
|
|
15
|
+
- 远程/云端 Agent 编排
|
|
16
|
+
- 代填各工具的 API Key / 登录
|
|
17
|
+
- 默认开启 bypassPermissions / dangerously-skip-permissions(Claude)
|
|
18
|
+
- 自动合入 / 自动 stamp delivery(仍由被启动的数字员工完成)
|
|
19
|
+
|
|
20
|
+
## Acceptance
|
|
21
|
+
|
|
22
|
+
1. `GET /api/agents` 返回本机检测到的启动器列表(至少探测 `agent`/`cursor agent`、`claude`、`cursor`、`code`)
|
|
23
|
+
2. 派工面板展示可用启动器供点选;可「仅派工不启动」
|
|
24
|
+
3. 派工时可带 `agentId`;或派工后再 `POST /api/dispatch/launch` 启动
|
|
25
|
+
4. Cursor Agent:在 worktree 上以 prompt 启动(非交互 `-p`,记录日志);Claude Code:`--bg` 后台开工;`cursor`/`code`:打开 worktree
|
|
26
|
+
5. UI 文案不再暗示「请手动复制给数字员工」为唯一路径
|
|
27
|
+
6. E2E catalog 增加场景;smoke curl 覆盖 detect + launch(launch 可用假/探测级)
|
|
28
|
+
|
|
29
|
+
## Assumptions
|
|
30
|
+
|
|
31
|
+
- macOS/Linux PATH 上有 CLI 即视为已安装
|
|
32
|
+
- Cursor Agent 启动使用 `--trust`;为无人值守加 `--force`(用户显式点启动)
|
|
33
|
+
- 上次选用的 agentId 可记在 live 配置里作默认
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "accepted",
|
|
3
|
+
"acceptedAt": "2026-09-16T00:50:00.000Z",
|
|
4
|
+
"verification": {
|
|
5
|
+
"levels": ["L0", "L1", "L3"],
|
|
6
|
+
"commands": [
|
|
7
|
+
"node --check bin/duaer-live.mjs",
|
|
8
|
+
"curl status progress 0/3 → 1/3 after T001 → accepted"
|
|
9
|
+
],
|
|
10
|
+
"result": "pass"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Feature Specification: Live dispatch progress
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-dispatch-progress`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
派工后现场开发能看到数字员工做到哪一步:轮询产品仓 Brief 的 `tasks.md` 勾选状态,并展示当前步骤;可选附带启动日志尾部。
|
|
12
|
+
|
|
13
|
+
## Out of scope
|
|
14
|
+
|
|
15
|
+
- 实时流式推送 Agent token
|
|
16
|
+
- 解析 IDE 内部会话状态
|
|
17
|
+
- 强制远程 Agent 上报自定义协议(依赖 tasks.md 勾选约定)
|
|
18
|
+
|
|
19
|
+
## Acceptance
|
|
20
|
+
|
|
21
|
+
1. `GET /api/status` 返回 `progress`:tasks 列表(done/pending)、done/total、current 文案
|
|
22
|
+
2. 派工面板展示进度清单,随轮询更新
|
|
23
|
+
3. delivery accepted 时进度显示完成并停止轮询
|
|
24
|
+
4. 派工写入的 tasks / agentPrompt 明确要求边做边勾选
|
|
25
|
+
5. Smoke curl + E2E catalog
|
|
26
|
+
|
|
27
|
+
## Assumptions
|
|
28
|
+
|
|
29
|
+
- 数字员工按 Duaer 流程会更新 `tasks.md` 的 `- [x]`
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Feature Specification: Live agent actually runs
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `fix/live-agent-run`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
选 Cursor Agent / Claude 派工后,真正启动可运行的数字员工会话(终端可见),而不是只打开 Cursor 窗口;默认不要记住「仅打开 IDE」。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
1. cursor-agent:打开 worktree,并在 Terminal(macOS)或等效方式启动 `agent --workspace … --trust --force`(交互,不用 `-p` 静默)
|
|
16
|
+
2. claude:在终端启动交互 `claude`(或明确后台时写清日志);不再让用户误以为「打开 Cursor」就是开工
|
|
17
|
+
3. preferredAgentId 只持久化 worker;open-only 不覆盖默认
|
|
18
|
+
4. UI 文案区分「开工」与「仅打开」
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Feature Specification: Live agent auto-run (no wait for input)
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `fix/live-agent-auto`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
派工选 Cursor Agent / Claude 后立刻非交互开工,不落在终端/IDE 里等用户再输入。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
1. cursor-agent:`agent -p --force --trust --workspace` 后台 spawn,prompt 作 argv;日志写入 agent-launch.log
|
|
16
|
+
2. claude:`claude --bg` 后台开工(非交互)
|
|
17
|
+
3. 不再为 worker 打开交互 Terminal;不默认只打开 Cursor 空窗导致误以为要手输
|
|
18
|
+
4. UI 说明「已后台自动开工」
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Feature Specification: Open named worktree on auto-start
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `fix/live-open-worktree`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
后台自动开工时,同时用 Cursor 打开派工得到的命名 worktree(如 `.worktree/feat-1`),方便查看与操作。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
1. cursor-agent:后台 `-p` 开工 + `cursor <worktreePath>`
|
|
16
|
+
2. claude:`--bg` + 尽量打开 Cursor/VS Code 到该 worktree
|
|
17
|
+
3. UI 提示已打开 worktree
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Feature Specification: Cursor CLI dispatch support
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-cursor-cli`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
派工启动对齐 Cursor 官方 CLI:用 `cursor -n` 打开命名 worktree,用 `agent` / `cursor agent` 非交互开工(`--workspace --trust -p --force`,不用 `-w`),并暴露 CLI 检测信息。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
1. Open: `cursor -n <worktree>`;尽量 `-g` 到 Brief `tasks.md`
|
|
16
|
+
2. Run: prefer `agent` else `cursor agent`; args include `--workspace --trust -p --force --sandbox disabled`; never pass `-w`
|
|
17
|
+
3. `/api/agents` includes cursor/agent binary paths (+ optional version)
|
|
18
|
+
4. UI hint reflects Cursor CLI behavior
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Feature Specification: CLI install hints + Agent start command box
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `feat/live-cli-install-prompt`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
未安装 Cursor CLI 时提示安装命令;派工区提供「启动命令」输入框,默认以 `Agent` 开头,派工时把该内容交给 Cursor Agent。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
1. missing Cursor / Cursor Agent 带 `installCommand: curl https://cursor.com/install -fsS | bash`,UI 展示可复制
|
|
16
|
+
2. 派工面板有启动命令输入框;选 Cursor Agent 时默认以 `Agent` 开头
|
|
17
|
+
3. `POST /api/dispatch` 接受 `startCommand`,用作 agent prompt(并补全 worktree/Brief 路径)
|
|
18
|
+
4. 未安装却选 Cursor Agent 时阻止启动并提示安装
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Feature Specification: Cursor Agent launches Terminal + CLI
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `fix/live-cursor-terminal`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Cursor Agent 派工打开 Terminal,在终端里执行 `agent` / `cursor agent` CLI(带启动命令),不再 `cursor -n` 开 IDE,也不后台静默 `-p`。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
1. cursor-agent → launchInTerminal with cursor CLI; mode=terminal
|
|
16
|
+
2. Hint/UI 文案反映 Terminal + CLI
|
|
17
|
+
3. 不调用 openCursorWorktree for cursor-agent
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"status":"accepted","acceptedAt":"2026-09-16T01:45:00.000Z","verification":{"levels":["L0"],"commands":["node --check","open .command"],"result":"pass"}}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Feature Specification: Reliable Terminal open for Cursor Agent
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `fix/live-terminal-open`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Cursor Agent 派工时真正弹出 Terminal:用 `.command` + `open`(并修正 osascript 引号)。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
1. macOS uses `open *.command` to launch Terminal with Cursor CLI
|
|
16
|
+
2. Failed open falls back to correctly quoted osascript; both fail → error with command
|
|
17
|
+
3. Launch log records open result
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"status":"accepted","acceptedAt":"2026-09-16T01:50:00.000Z","verification":{"levels":["L0"],"commands":["node --check"],"result":"pass"}}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Feature Specification: Unstick dispatch UI
|
|
2
|
+
|
|
3
|
+
**Feature Branch**: `fix/live-dispatch-hang`
|
|
4
|
+
|
|
5
|
+
**Created**: 2026-09-16
|
|
6
|
+
|
|
7
|
+
**Status**: Active
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
派工不再因同步打开 Terminal / osascript 卡住;接口快速返回,UI 有超时。
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
|
|
15
|
+
1. launchInTerminal non-blocking
|
|
16
|
+
2. fetch abort 60s; finally clears 派工中
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"status":"accepted","acceptedAt":"2026-09-16T01:55:00.000Z","verification":{"levels":["L0"],"commands":["node --check"],"result":"pass"}}
|