@winspan/claude-forge 8.37.0 → 8.39.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/dist/agents/definition.d.ts +8 -2
- package/dist/agents/definition.d.ts.map +1 -1
- package/dist/agents/definition.js.map +1 -1
- package/dist/agents/methodologies/agent-builder.d.ts +21 -0
- package/dist/agents/methodologies/agent-builder.d.ts.map +1 -0
- package/dist/agents/methodologies/agent-builder.js +124 -0
- package/dist/agents/methodologies/agent-builder.js.map +1 -0
- package/dist/agents/methodologies/phases/bmad/analyze.d.ts +3 -0
- package/dist/agents/methodologies/phases/bmad/analyze.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/bmad/analyze.js +18 -0
- package/dist/agents/methodologies/phases/bmad/analyze.js.map +1 -0
- package/dist/agents/methodologies/phases/bmad/design.d.ts +3 -0
- package/dist/agents/methodologies/phases/bmad/design.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/bmad/design.js +17 -0
- package/dist/agents/methodologies/phases/bmad/design.js.map +1 -0
- package/dist/agents/methodologies/phases/bmad/implement.d.ts +3 -0
- package/dist/agents/methodologies/phases/bmad/implement.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/bmad/implement.js +16 -0
- package/dist/agents/methodologies/phases/bmad/implement.js.map +1 -0
- package/dist/agents/methodologies/phases/bmad/index.d.ts +6 -0
- package/dist/agents/methodologies/phases/bmad/index.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/bmad/index.js +6 -0
- package/dist/agents/methodologies/phases/bmad/index.js.map +1 -0
- package/dist/agents/methodologies/phases/bmad/review.d.ts +3 -0
- package/dist/agents/methodologies/phases/bmad/review.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/bmad/review.js +16 -0
- package/dist/agents/methodologies/phases/bmad/review.js.map +1 -0
- package/dist/agents/methodologies/phases/bmad/test.d.ts +3 -0
- package/dist/agents/methodologies/phases/bmad/test.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/bmad/test.js +20 -0
- package/dist/agents/methodologies/phases/bmad/test.js.map +1 -0
- package/dist/agents/methodologies/phases/harness/fix.d.ts +3 -0
- package/dist/agents/methodologies/phases/harness/fix.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/harness/fix.js +16 -0
- package/dist/agents/methodologies/phases/harness/fix.js.map +1 -0
- package/dist/agents/methodologies/phases/harness/index.d.ts +6 -0
- package/dist/agents/methodologies/phases/harness/index.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/harness/index.js +6 -0
- package/dist/agents/methodologies/phases/harness/index.js.map +1 -0
- package/dist/agents/methodologies/phases/harness/reproduce.d.ts +3 -0
- package/dist/agents/methodologies/phases/harness/reproduce.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/harness/reproduce.js +19 -0
- package/dist/agents/methodologies/phases/harness/reproduce.js.map +1 -0
- package/dist/agents/methodologies/phases/harness/root-cause.d.ts +3 -0
- package/dist/agents/methodologies/phases/harness/root-cause.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/harness/root-cause.js +20 -0
- package/dist/agents/methodologies/phases/harness/root-cause.js.map +1 -0
- package/dist/agents/methodologies/phases/harness/safety-net.d.ts +3 -0
- package/dist/agents/methodologies/phases/harness/safety-net.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/harness/safety-net.js +16 -0
- package/dist/agents/methodologies/phases/harness/safety-net.js.map +1 -0
- package/dist/agents/methodologies/phases/harness/verify.d.ts +3 -0
- package/dist/agents/methodologies/phases/harness/verify.d.ts.map +1 -0
- package/dist/agents/methodologies/phases/harness/verify.js +21 -0
- package/dist/agents/methodologies/phases/harness/verify.js.map +1 -0
- package/dist/agents/methodologies/presets.d.ts +10 -0
- package/dist/agents/methodologies/presets.d.ts.map +1 -0
- package/dist/agents/methodologies/presets.js +79 -0
- package/dist/agents/methodologies/presets.js.map +1 -0
- package/dist/agents/methodologies/types.d.ts +43 -0
- package/dist/agents/methodologies/types.d.ts.map +1 -0
- package/dist/agents/methodologies/types.js +10 -0
- package/dist/agents/methodologies/types.js.map +1 -0
- package/dist/agents/methodologies/user-config-loader.d.ts +30 -0
- package/dist/agents/methodologies/user-config-loader.d.ts.map +1 -0
- package/dist/agents/methodologies/user-config-loader.js +159 -0
- package/dist/agents/methodologies/user-config-loader.js.map +1 -0
- package/dist/agents/official-agents.d.ts.map +1 -1
- package/dist/agents/official-agents.js +3 -0
- package/dist/agents/official-agents.js.map +1 -1
- package/dist/agents/registry.d.ts +17 -4
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +58 -4
- package/dist/agents/registry.js.map +1 -1
- package/dist/cli/commands/agents.js +3 -3
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +39 -3
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +87 -38
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/core/storage/rows.d.ts +4 -0
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +9 -0
- package/dist/core/storage/sqlite.d.ts +25 -0
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +89 -3
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/engine/conventions/routing.yaml +160 -4
- package/dist/skills/tools/skill-invoke.d.ts +15 -0
- package/dist/skills/tools/skill-invoke.d.ts.map +1 -1
- package/dist/skills/tools/skill-invoke.js +29 -0
- package/dist/skills/tools/skill-invoke.js.map +1 -1
- package/dist/web/routes/agents.d.ts.map +1 -1
- package/dist/web/routes/agents.js +17 -0
- package/dist/web/routes/agents.js.map +1 -1
- package/dist/web/routes/workflows.d.ts +19 -0
- package/dist/web/routes/workflows.d.ts.map +1 -0
- package/dist/web/routes/workflows.js +86 -0
- package/dist/web/routes/workflows.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +2 -0
- package/dist/web/server.js.map +1 -1
- package/dist/web/static/assets/{AIConfig-D4VglzCl.js → AIConfig-R5wZ3ZKT.js} +2 -2
- package/dist/web/static/assets/{AIConfig-D4VglzCl.js.map → AIConfig-R5wZ3ZKT.js.map} +1 -1
- package/dist/web/static/assets/{Agents-ne5lXc7V.js → Agents-Beg34V1g.js} +2 -2
- package/dist/web/static/assets/{Agents-ne5lXc7V.js.map → Agents-Beg34V1g.js.map} +1 -1
- package/dist/web/static/assets/{Dashboard-D4j0Zmek.js → Dashboard-Cy1xsj1J.js} +2 -2
- package/dist/web/static/assets/{Dashboard-D4j0Zmek.js.map → Dashboard-Cy1xsj1J.js.map} +1 -1
- package/dist/web/static/assets/{Drawer-Lo5ihVP-.js → Drawer-DcU3ln98.js} +2 -2
- package/dist/web/static/assets/{Drawer-Lo5ihVP-.js.map → Drawer-DcU3ln98.js.map} +1 -1
- package/dist/web/static/assets/{Events-DBJ1B7OW.js → Events-mFhXl4zI.js} +2 -2
- package/dist/web/static/assets/{Events-DBJ1B7OW.js.map → Events-mFhXl4zI.js.map} +1 -1
- package/dist/web/static/assets/{ExecutionTrace-Du9XADc1.js → ExecutionTrace-DG901hLR.js} +2 -2
- package/dist/web/static/assets/{ExecutionTrace-Du9XADc1.js.map → ExecutionTrace-DG901hLR.js.map} +1 -1
- package/dist/web/static/assets/{Routing-BNQ09OlH.js → Routing-B7BFLfjh.js} +2 -2
- package/dist/web/static/assets/{Routing-BNQ09OlH.js.map → Routing-B7BFLfjh.js.map} +1 -1
- package/dist/web/static/assets/{SessionDetail-BPrPyMNa.js → SessionDetail-BT0l4RrK.js} +2 -2
- package/dist/web/static/assets/{SessionDetail-BPrPyMNa.js.map → SessionDetail-BT0l4RrK.js.map} +1 -1
- package/dist/web/static/assets/{Sessions-o3EXsXz9.js → Sessions-C6J_HQ_u.js} +2 -2
- package/dist/web/static/assets/{Sessions-o3EXsXz9.js.map → Sessions-C6J_HQ_u.js.map} +1 -1
- package/dist/web/static/assets/{Skills-Czt5mkyc.js → Skills-4DQWLaTv.js} +2 -2
- package/dist/web/static/assets/{Skills-Czt5mkyc.js.map → Skills-4DQWLaTv.js.map} +1 -1
- package/dist/web/static/assets/WorkflowDetail-zhNqUkBE.js +2 -0
- package/dist/web/static/assets/WorkflowDetail-zhNqUkBE.js.map +1 -0
- package/dist/web/static/assets/Workflows-Btvi-lGw.js +2 -0
- package/dist/web/static/assets/Workflows-Btvi-lGw.js.map +1 -0
- package/dist/web/static/assets/{export-C0mlC4AT.js → export-BQQZLaHV.js} +2 -2
- package/dist/web/static/assets/{export-C0mlC4AT.js.map → export-BQQZLaHV.js.map} +1 -1
- package/dist/web/static/assets/index-Cgr9qMtq.js +3 -0
- package/dist/web/static/assets/index-Cgr9qMtq.js.map +1 -0
- package/dist/web/static/assets/index-CngWb5gC.css +1 -0
- package/dist/web/static/assets/{lucide-Bu44HVAM.js → lucide-53bR2rki.js} +46 -31
- package/dist/web/static/assets/lucide-53bR2rki.js.map +1 -0
- package/dist/web/static/index.html +3 -3
- package/package.json +1 -1
- package/dist/web/static/assets/index-B1J7nBu0.js +0 -3
- package/dist/web/static/assets/index-B1J7nBu0.js.map +0 -1
- package/dist/web/static/assets/index-BVqk4bSO.css +0 -1
- package/dist/web/static/assets/lucide-Bu44HVAM.js.map +0 -1
|
@@ -2,11 +2,47 @@
|
|
|
2
2
|
* cf mcp — MCP server 注册与管理命令
|
|
3
3
|
*
|
|
4
4
|
* 子命令:
|
|
5
|
-
* cf mcp status
|
|
6
|
-
* cf mcp register
|
|
7
|
-
* cf mcp unregister
|
|
5
|
+
* cf mcp status — 检查 MCP server 是否已注册到 Claude Code
|
|
6
|
+
* cf mcp register — 向 Claude Code 注册 claude-forge MCP server(user scope)
|
|
7
|
+
* cf mcp unregister — 从 Claude Code 移除注册
|
|
8
|
+
*
|
|
9
|
+
* 实现要点:
|
|
10
|
+
* - claude mcp 配置存储在 ~/.claude.json(而非 ~/.claude/settings.json)
|
|
11
|
+
* - HTTP transport 必须显式 `--transport http`,不能用 `--url`
|
|
12
|
+
* - 默认注册到 user scope (`-s user`),让所有项目都能用
|
|
13
|
+
* - 必须把 daemon token 作为 `Authorization: Bearer ...` header 传入,
|
|
14
|
+
* 否则 MCP 调用会被 401 拦截
|
|
8
15
|
*/
|
|
9
16
|
import { Command } from 'commander';
|
|
17
|
+
/**
|
|
18
|
+
* 检查 Claude Code 是否已安装(通过检查 claude CLI 是否存在)
|
|
19
|
+
*/
|
|
20
|
+
export declare function isClaudeCodeInstalled(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 检查 claude-forge MCP server 是否已注册
|
|
23
|
+
*
|
|
24
|
+
* 通过 `claude mcp get <name>` 退出码判断:成功 = 已注册
|
|
25
|
+
*/
|
|
26
|
+
export declare function isMcpRegistered(): {
|
|
27
|
+
registered: boolean;
|
|
28
|
+
url?: string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* 获取 daemon 的 MCP server URL
|
|
32
|
+
*/
|
|
33
|
+
export declare function getMcpServerUrl(): string;
|
|
34
|
+
/**
|
|
35
|
+
* cf mcp status
|
|
36
|
+
*/
|
|
37
|
+
export declare function statusCommand(): void;
|
|
38
|
+
/**
|
|
39
|
+
* cf mcp register
|
|
40
|
+
*/
|
|
41
|
+
export declare function registerCommand(): void;
|
|
42
|
+
/**
|
|
43
|
+
* cf mcp unregister
|
|
44
|
+
*/
|
|
45
|
+
export declare function unregisterCommand(): void;
|
|
10
46
|
/**
|
|
11
47
|
* 注册 cf mcp 命令组
|
|
12
48
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAO/C;AAeD;;;;GAIG;AACH,wBAAgB,eAAe,IAAI;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAYvE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AASD;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CA2CpC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAkDtC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAwBxC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoB/C"}
|
package/dist/cli/commands/mcp.js
CHANGED
|
@@ -2,9 +2,16 @@
|
|
|
2
2
|
* cf mcp — MCP server 注册与管理命令
|
|
3
3
|
*
|
|
4
4
|
* 子命令:
|
|
5
|
-
* cf mcp status
|
|
6
|
-
* cf mcp register
|
|
7
|
-
* cf mcp unregister
|
|
5
|
+
* cf mcp status — 检查 MCP server 是否已注册到 Claude Code
|
|
6
|
+
* cf mcp register — 向 Claude Code 注册 claude-forge MCP server(user scope)
|
|
7
|
+
* cf mcp unregister — 从 Claude Code 移除注册
|
|
8
|
+
*
|
|
9
|
+
* 实现要点:
|
|
10
|
+
* - claude mcp 配置存储在 ~/.claude.json(而非 ~/.claude/settings.json)
|
|
11
|
+
* - HTTP transport 必须显式 `--transport http`,不能用 `--url`
|
|
12
|
+
* - 默认注册到 user scope (`-s user`),让所有项目都能用
|
|
13
|
+
* - 必须把 daemon token 作为 `Authorization: Bearer ...` header 传入,
|
|
14
|
+
* 否则 MCP 调用会被 401 拦截
|
|
8
15
|
*/
|
|
9
16
|
import { execSync } from 'node:child_process';
|
|
10
17
|
import { existsSync, readFileSync } from 'node:fs';
|
|
@@ -13,12 +20,14 @@ import { join } from 'node:path';
|
|
|
13
20
|
import chalk from 'chalk';
|
|
14
21
|
import { ConfigManager } from '../../core/config.js';
|
|
15
22
|
import { DEFAULTS } from '../../core/constants.js';
|
|
23
|
+
const SERVER_NAME = 'claude-forge';
|
|
24
|
+
const SCOPE = 'user'; // user scope: 全局可用
|
|
16
25
|
/**
|
|
17
26
|
* 检查 Claude Code 是否已安装(通过检查 claude CLI 是否存在)
|
|
18
27
|
*/
|
|
19
|
-
function isClaudeCodeInstalled() {
|
|
28
|
+
export function isClaudeCodeInstalled() {
|
|
20
29
|
try {
|
|
21
|
-
execSync('
|
|
30
|
+
execSync('command -v claude', { stdio: 'ignore' });
|
|
22
31
|
return true;
|
|
23
32
|
}
|
|
24
33
|
catch {
|
|
@@ -26,22 +35,33 @@ function isClaudeCodeInstalled() {
|
|
|
26
35
|
}
|
|
27
36
|
}
|
|
28
37
|
/**
|
|
29
|
-
*
|
|
30
|
-
* (通过读取 ~/.claude/settings.json 的 mcpServers 配置)
|
|
38
|
+
* 读取 daemon token(如果存在)
|
|
31
39
|
*/
|
|
32
|
-
function
|
|
33
|
-
const
|
|
34
|
-
if (!existsSync(
|
|
35
|
-
return
|
|
40
|
+
function readDaemonToken() {
|
|
41
|
+
const tokenPath = join(homedir(), '.claude-forge', 'daemon.token');
|
|
42
|
+
if (!existsSync(tokenPath))
|
|
43
|
+
return null;
|
|
44
|
+
try {
|
|
45
|
+
return readFileSync(tokenPath, 'utf-8').trim() || null;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
36
49
|
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 检查 claude-forge MCP server 是否已注册
|
|
53
|
+
*
|
|
54
|
+
* 通过 `claude mcp get <name>` 退出码判断:成功 = 已注册
|
|
55
|
+
*/
|
|
56
|
+
export function isMcpRegistered() {
|
|
37
57
|
try {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return { registered:
|
|
58
|
+
const output = execSync(`claude mcp get ${SERVER_NAME}`, {
|
|
59
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
60
|
+
encoding: 'utf-8',
|
|
61
|
+
});
|
|
62
|
+
// 从输出中尝试提取 URL(容错,匹配失败也认为已注册)
|
|
63
|
+
const urlMatch = output.match(/URL:\s*(\S+)/i);
|
|
64
|
+
return { registered: true, url: urlMatch?.[1] };
|
|
45
65
|
}
|
|
46
66
|
catch {
|
|
47
67
|
return { registered: false };
|
|
@@ -50,43 +70,57 @@ function isMcpRegistered() {
|
|
|
50
70
|
/**
|
|
51
71
|
* 获取 daemon 的 MCP server URL
|
|
52
72
|
*/
|
|
53
|
-
function getMcpServerUrl() {
|
|
73
|
+
export function getMcpServerUrl() {
|
|
54
74
|
const config = new ConfigManager().get();
|
|
55
75
|
const port = config.web.port ?? DEFAULTS.WEB_PORT;
|
|
56
76
|
return `http://127.0.0.1:${port}/mcp`;
|
|
57
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* 是否处于 daemon 运行中(通过 pid 文件存在性判断,松散探测)
|
|
80
|
+
*/
|
|
81
|
+
function isDaemonRunning() {
|
|
82
|
+
return existsSync(join(homedir(), '.claude-forge', 'daemon.pid'));
|
|
83
|
+
}
|
|
58
84
|
/**
|
|
59
85
|
* cf mcp status
|
|
60
86
|
*/
|
|
61
|
-
function statusCommand() {
|
|
87
|
+
export function statusCommand() {
|
|
62
88
|
console.log(chalk.bold('🔍 MCP Server Status\n'));
|
|
63
89
|
// 1. 检查 Claude Code 是否安装
|
|
64
90
|
const claudeInstalled = isClaudeCodeInstalled();
|
|
65
91
|
console.log(claudeInstalled
|
|
66
92
|
? chalk.green('✓ Claude Code CLI installed')
|
|
67
93
|
: chalk.red('✗ Claude Code CLI not found (install from claude.ai/code)'));
|
|
94
|
+
if (!claudeInstalled) {
|
|
95
|
+
console.log(chalk.dim('\n Cannot check registration without Claude Code CLI.'));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
68
98
|
// 2. 检查 MCP server 是否注册
|
|
69
99
|
const { registered, url } = isMcpRegistered();
|
|
70
100
|
if (registered) {
|
|
71
|
-
console.log(chalk.green(`✓ MCP server registered
|
|
101
|
+
console.log(chalk.green(`✓ MCP server registered${url ? `: ${url}` : ''}`));
|
|
72
102
|
}
|
|
73
103
|
else {
|
|
74
104
|
console.log(chalk.yellow('⚠ MCP server not registered'));
|
|
75
105
|
console.log(chalk.dim(' Run `cf mcp register` to register'));
|
|
76
106
|
}
|
|
77
107
|
// 3. 检查 daemon 是否运行
|
|
78
|
-
|
|
79
|
-
console.log(daemonRunning
|
|
108
|
+
console.log(isDaemonRunning()
|
|
80
109
|
? chalk.green('✓ Daemon running')
|
|
81
110
|
: chalk.yellow('⚠ Daemon not running (start with `cf daemon start`)'));
|
|
82
|
-
// 4.
|
|
83
|
-
const
|
|
84
|
-
console.log(
|
|
111
|
+
// 4. 检查 daemon token
|
|
112
|
+
const token = readDaemonToken();
|
|
113
|
+
console.log(token
|
|
114
|
+
? chalk.green('✓ Daemon token present')
|
|
115
|
+
: chalk.yellow('⚠ Daemon token missing (start daemon at least once)'));
|
|
116
|
+
// 5. 显示预期的 MCP URL
|
|
117
|
+
console.log(chalk.dim(`\nExpected MCP URL: ${getMcpServerUrl()}`));
|
|
118
|
+
console.log(chalk.dim(`Scope: ${SCOPE} (available in all projects)`));
|
|
85
119
|
}
|
|
86
120
|
/**
|
|
87
121
|
* cf mcp register
|
|
88
122
|
*/
|
|
89
|
-
function registerCommand() {
|
|
123
|
+
export function registerCommand() {
|
|
90
124
|
console.log(chalk.bold('📡 Registering MCP Server\n'));
|
|
91
125
|
// 1. 检查 Claude Code CLI
|
|
92
126
|
if (!isClaudeCodeInstalled()) {
|
|
@@ -97,29 +131,42 @@ function registerCommand() {
|
|
|
97
131
|
// 2. 检查是否已注册
|
|
98
132
|
const { registered, url: existingUrl } = isMcpRegistered();
|
|
99
133
|
if (registered) {
|
|
100
|
-
console.log(chalk.yellow(`⚠ MCP server already registered
|
|
134
|
+
console.log(chalk.yellow(`⚠ MCP server already registered${existingUrl ? `: ${existingUrl}` : ''}`));
|
|
101
135
|
console.log(chalk.dim(' Run `cf mcp unregister` first if you want to re-register'));
|
|
102
136
|
return;
|
|
103
137
|
}
|
|
104
|
-
// 3.
|
|
138
|
+
// 3. 读取 daemon token(必需,否则 MCP 调用会 401)
|
|
139
|
+
const token = readDaemonToken();
|
|
140
|
+
if (!token) {
|
|
141
|
+
console.error(chalk.red('✗ Daemon token not found'));
|
|
142
|
+
console.error(chalk.dim(' Start daemon at least once: cf daemon start'));
|
|
143
|
+
console.error(chalk.dim(' This generates ~/.claude-forge/daemon.token'));
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
// 4. 获取 MCP URL
|
|
105
147
|
const mcpUrl = getMcpServerUrl();
|
|
106
|
-
//
|
|
107
|
-
|
|
148
|
+
// 5. 执行注册命令
|
|
149
|
+
// claude mcp add --transport http -s user claude-forge <url> -H "Authorization: Bearer <token>"
|
|
150
|
+
console.log(chalk.dim(`Registering: ${mcpUrl}`));
|
|
151
|
+
console.log(chalk.dim(`Scope: ${SCOPE} (all projects)`));
|
|
152
|
+
console.log(chalk.dim(`Token: <hidden>\n`));
|
|
108
153
|
try {
|
|
109
|
-
execSync(`claude mcp add
|
|
154
|
+
execSync(`claude mcp add --transport http -s ${SCOPE} ${SERVER_NAME} "${mcpUrl}" -H "Authorization: Bearer ${token}"`, { stdio: 'inherit' });
|
|
110
155
|
console.log(chalk.green('\n✓ MCP server registered successfully'));
|
|
111
|
-
console.log(chalk.dim(' Restart Claude Code to apply
|
|
156
|
+
console.log(chalk.dim(' Restart Claude Code (or open a new session) to apply'));
|
|
112
157
|
}
|
|
113
158
|
catch (err) {
|
|
114
159
|
console.error(chalk.red('\n✗ Registration failed'));
|
|
115
|
-
|
|
160
|
+
if (err instanceof Error) {
|
|
161
|
+
console.error(chalk.dim(err.message));
|
|
162
|
+
}
|
|
116
163
|
process.exit(1);
|
|
117
164
|
}
|
|
118
165
|
}
|
|
119
166
|
/**
|
|
120
167
|
* cf mcp unregister
|
|
121
168
|
*/
|
|
122
|
-
function unregisterCommand() {
|
|
169
|
+
export function unregisterCommand() {
|
|
123
170
|
console.log(chalk.bold('🗑️ Unregistering MCP Server\n'));
|
|
124
171
|
if (!isClaudeCodeInstalled()) {
|
|
125
172
|
console.error(chalk.red('✗ Claude Code CLI not found'));
|
|
@@ -131,12 +178,14 @@ function unregisterCommand() {
|
|
|
131
178
|
return;
|
|
132
179
|
}
|
|
133
180
|
try {
|
|
134
|
-
execSync(
|
|
181
|
+
execSync(`claude mcp remove -s ${SCOPE} ${SERVER_NAME}`, { stdio: 'inherit' });
|
|
135
182
|
console.log(chalk.green('\n✓ MCP server unregistered'));
|
|
136
183
|
}
|
|
137
184
|
catch (err) {
|
|
138
185
|
console.error(chalk.red('\n✗ Unregister failed'));
|
|
139
|
-
|
|
186
|
+
if (err instanceof Error) {
|
|
187
|
+
console.error(chalk.dim(err.message));
|
|
188
|
+
}
|
|
140
189
|
process.exit(1);
|
|
141
190
|
}
|
|
142
191
|
}
|
|
@@ -153,7 +202,7 @@ export function register(program) {
|
|
|
153
202
|
.action(statusCommand);
|
|
154
203
|
mcp
|
|
155
204
|
.command('register')
|
|
156
|
-
.description('Register claude-forge MCP server with Claude Code')
|
|
205
|
+
.description('Register claude-forge MCP server with Claude Code (user scope)')
|
|
157
206
|
.action(registerCommand);
|
|
158
207
|
mcp
|
|
159
208
|
.command('unregister')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -122,6 +122,10 @@ export interface SkillInvocationRow {
|
|
|
122
122
|
skill_id: string;
|
|
123
123
|
invocation_type: 'static' | 'dynamic' | 'slash_command';
|
|
124
124
|
reason: string | null;
|
|
125
|
+
workflow: string | null;
|
|
126
|
+
phase: string | null;
|
|
127
|
+
feature_slug: string | null;
|
|
128
|
+
artifact_path: string | null;
|
|
125
129
|
depth: number;
|
|
126
130
|
success: number;
|
|
127
131
|
error: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../../src/core/storage/rows.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../../src/core/storage/rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,YAAY,GAAG,aAAa,GAAG,kBAAkB,GAAG,cAAc,GAAG,MAAM,CAAC;IACvF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;IACzE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAID,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,eAAe,GAAG,mBAAmB,GAAG,QAAQ,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAOD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,QAAQ,GAAG,SAAS,GAAG,eAAe,CAAC;IACxD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAItB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -254,6 +254,13 @@ CREATE TABLE IF NOT EXISTS skill_invocations (
|
|
|
254
254
|
skill_id TEXT NOT NULL, -- 被调用的 Skill ID
|
|
255
255
|
invocation_type TEXT NOT NULL, -- 'static' / 'dynamic' / 'slash_command'
|
|
256
256
|
reason TEXT, -- Agent 提供的调用理由
|
|
257
|
+
|
|
258
|
+
-- 工作流追踪字段:从 reason 解析的 <workflow>/<phase>[:feature-slug] 元信息
|
|
259
|
+
workflow TEXT, -- 'bmad' / 'harness' / NULL(普通调用)
|
|
260
|
+
phase TEXT, -- 'analyze' / 'design' / 'safety-net' 等
|
|
261
|
+
feature_slug TEXT, -- 可选,用于关联同一个 feature 的多次调用
|
|
262
|
+
artifact_path TEXT, -- 可选,调用产出的文档路径
|
|
263
|
+
|
|
257
264
|
depth INTEGER DEFAULT 0, -- 调用嵌套深度
|
|
258
265
|
success INTEGER DEFAULT 1, -- 1 成功 / 0 失败
|
|
259
266
|
error TEXT, -- 错误信息(如 skill 不存在)
|
|
@@ -265,3 +272,5 @@ CREATE INDEX IF NOT EXISTS idx_skill_invocations_route_request ON skill_invocati
|
|
|
265
272
|
CREATE INDEX IF NOT EXISTS idx_skill_invocations_session ON skill_invocations(session_id);
|
|
266
273
|
CREATE INDEX IF NOT EXISTS idx_skill_invocations_skill ON skill_invocations(skill_id);
|
|
267
274
|
CREATE INDEX IF NOT EXISTS idx_skill_invocations_timestamp ON skill_invocations(timestamp DESC);
|
|
275
|
+
-- 工作流字段索引(workflow / feature_slug)由 runMigrations 创建,以便旧库升级时
|
|
276
|
+
-- 先通过 addColumnIfMissing 补列再建索引,避免 "no such column" 错误。
|
|
@@ -272,5 +272,30 @@ export declare class SQLiteStorage extends EventEmitter {
|
|
|
272
272
|
skill_id?: string;
|
|
273
273
|
limit?: number;
|
|
274
274
|
}): SkillInvocationRow[];
|
|
275
|
+
/**
|
|
276
|
+
* 按 route_request_id 聚合工作流进度。
|
|
277
|
+
*
|
|
278
|
+
* 用途:Web UI 展示「某次路由 / 某个 session 走完了哪些 phase」。仅聚合
|
|
279
|
+
* `workflow IS NOT NULL` 的调用(工作流型 reason),普通调用不会被纳入。
|
|
280
|
+
*
|
|
281
|
+
* 返回字段:
|
|
282
|
+
* - `phases_completed` 已按 timestamp 升序排序,并去重;同 phase 多次调用只算一次。
|
|
283
|
+
* - `feature_slug` 取该 route 内首个非空的 slug;不同 slug 混用时以最早出现的为准。
|
|
284
|
+
* - `total_invocations` / `success_count` 仅统计有 workflow 的行。
|
|
285
|
+
*/
|
|
286
|
+
queryWorkflowProgress(filter?: {
|
|
287
|
+
session_id?: string;
|
|
288
|
+
workflow?: string;
|
|
289
|
+
limit?: number;
|
|
290
|
+
}): Array<{
|
|
291
|
+
route_request_id: string;
|
|
292
|
+
workflow: string;
|
|
293
|
+
phases_completed: string[];
|
|
294
|
+
feature_slug: string | null;
|
|
295
|
+
total_invocations: number;
|
|
296
|
+
success_count: number;
|
|
297
|
+
first_at: number;
|
|
298
|
+
last_at: number;
|
|
299
|
+
}>;
|
|
275
300
|
}
|
|
276
301
|
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/core/storage/sqlite.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/core/storage/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,6 +84,20 @@ export class SQLiteStorage extends EventEmitter {
|
|
|
84
84
|
// routing_events: skill_confidence / skill_source (Skill 监控字段)
|
|
85
85
|
this.addColumnIfMissing('routing_events', 'skill_confidence', 'REAL');
|
|
86
86
|
this.addColumnIfMissing('routing_events', 'skill_source', 'TEXT');
|
|
87
|
+
// skill_invocations: 工作流追踪字段(v8.38+)
|
|
88
|
+
// 解析 reason 字段的 "<workflow>/<phase>[:feature-slug]" 格式后落库到独立列。
|
|
89
|
+
this.addColumnIfMissing('skill_invocations', 'workflow', 'TEXT');
|
|
90
|
+
this.addColumnIfMissing('skill_invocations', 'phase', 'TEXT');
|
|
91
|
+
this.addColumnIfMissing('skill_invocations', 'feature_slug', 'TEXT');
|
|
92
|
+
this.addColumnIfMissing('skill_invocations', 'artifact_path', 'TEXT');
|
|
93
|
+
// skill_invocations: 工作流字段索引(CREATE INDEX IF NOT EXISTS 天然幂等)
|
|
94
|
+
try {
|
|
95
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_skill_invocations_workflow ON skill_invocations(workflow, phase);
|
|
96
|
+
CREATE INDEX IF NOT EXISTS idx_skill_invocations_feature ON skill_invocations(feature_slug);`);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
logger.warn(`[SQLiteStorage] migration: create skill_invocations workflow indexes failed: ${err}`);
|
|
100
|
+
}
|
|
87
101
|
// sessions 聚合表性能索引(幂等):start_time 用于 querySessions 的 ORDER BY
|
|
88
102
|
try {
|
|
89
103
|
this.db.exec('CREATE INDEX IF NOT EXISTS idx_sessions_start_time ON sessions(start_time DESC)');
|
|
@@ -698,9 +712,11 @@ export class SQLiteStorage extends EventEmitter {
|
|
|
698
712
|
// "外层路由 → Agent → 内层 Skill 调用"的证据链。
|
|
699
713
|
writeSkillInvocation(row) {
|
|
700
714
|
const sql = `INSERT INTO skill_invocations
|
|
701
|
-
(id, route_request_id, session_id, agent_id, skill_id, invocation_type,
|
|
702
|
-
|
|
703
|
-
|
|
715
|
+
(id, route_request_id, session_id, agent_id, skill_id, invocation_type,
|
|
716
|
+
reason, workflow, phase, feature_slug, artifact_path,
|
|
717
|
+
depth, success, error, timestamp)
|
|
718
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;
|
|
719
|
+
this.db.prepare(sql).run(row.id, row.route_request_id, row.session_id, row.agent_id, row.skill_id, row.invocation_type, row.reason, row.workflow, row.phase, row.feature_slug, row.artifact_path, row.depth, row.success, row.error, row.timestamp);
|
|
704
720
|
}
|
|
705
721
|
querySkillInvocations(filter = {}) {
|
|
706
722
|
const conditions = [];
|
|
@@ -722,5 +738,75 @@ export class SQLiteStorage extends EventEmitter {
|
|
|
722
738
|
const sql = `SELECT * FROM skill_invocations ${where} ORDER BY timestamp DESC LIMIT ${limit}`;
|
|
723
739
|
return this.db.prepare(sql).all(...params);
|
|
724
740
|
}
|
|
741
|
+
/**
|
|
742
|
+
* 按 route_request_id 聚合工作流进度。
|
|
743
|
+
*
|
|
744
|
+
* 用途:Web UI 展示「某次路由 / 某个 session 走完了哪些 phase」。仅聚合
|
|
745
|
+
* `workflow IS NOT NULL` 的调用(工作流型 reason),普通调用不会被纳入。
|
|
746
|
+
*
|
|
747
|
+
* 返回字段:
|
|
748
|
+
* - `phases_completed` 已按 timestamp 升序排序,并去重;同 phase 多次调用只算一次。
|
|
749
|
+
* - `feature_slug` 取该 route 内首个非空的 slug;不同 slug 混用时以最早出现的为准。
|
|
750
|
+
* - `total_invocations` / `success_count` 仅统计有 workflow 的行。
|
|
751
|
+
*/
|
|
752
|
+
queryWorkflowProgress(filter = {}) {
|
|
753
|
+
const conditions = ['workflow IS NOT NULL', 'route_request_id IS NOT NULL'];
|
|
754
|
+
const params = [];
|
|
755
|
+
if (filter.session_id) {
|
|
756
|
+
conditions.push('session_id = ?');
|
|
757
|
+
params.push(filter.session_id);
|
|
758
|
+
}
|
|
759
|
+
if (filter.workflow) {
|
|
760
|
+
conditions.push('workflow = ?');
|
|
761
|
+
params.push(filter.workflow);
|
|
762
|
+
}
|
|
763
|
+
const where = `WHERE ${conditions.join(' AND ')}`;
|
|
764
|
+
const limit = filter.limit ?? 100;
|
|
765
|
+
// 用 GROUP_CONCAT 收集 phase 序列(保留时间顺序),再在 JS 层去重。
|
|
766
|
+
// SQLite 的 GROUP_CONCAT 不保证子查询排序稳定,因此用一个 ORDER BY timestamp
|
|
767
|
+
// 的子查询固定顺序。
|
|
768
|
+
const sql = `
|
|
769
|
+
SELECT
|
|
770
|
+
route_request_id,
|
|
771
|
+
workflow,
|
|
772
|
+
GROUP_CONCAT(phase, '||') AS phases_raw,
|
|
773
|
+
MIN(feature_slug) AS feature_slug,
|
|
774
|
+
COUNT(*) AS total_invocations,
|
|
775
|
+
SUM(success) AS success_count,
|
|
776
|
+
MIN(timestamp) AS first_at,
|
|
777
|
+
MAX(timestamp) AS last_at
|
|
778
|
+
FROM (
|
|
779
|
+
SELECT * FROM skill_invocations
|
|
780
|
+
${where}
|
|
781
|
+
ORDER BY timestamp ASC
|
|
782
|
+
)
|
|
783
|
+
GROUP BY route_request_id, workflow
|
|
784
|
+
ORDER BY last_at DESC
|
|
785
|
+
LIMIT ${limit}
|
|
786
|
+
`;
|
|
787
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
788
|
+
return rows.map(r => {
|
|
789
|
+
const phases = r.phases_raw ? r.phases_raw.split('||').filter(Boolean) : [];
|
|
790
|
+
// 去重,保留首次出现的顺序
|
|
791
|
+
const seen = new Set();
|
|
792
|
+
const phases_completed = [];
|
|
793
|
+
for (const p of phases) {
|
|
794
|
+
if (!seen.has(p)) {
|
|
795
|
+
seen.add(p);
|
|
796
|
+
phases_completed.push(p);
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
return {
|
|
800
|
+
route_request_id: r.route_request_id,
|
|
801
|
+
workflow: r.workflow,
|
|
802
|
+
phases_completed,
|
|
803
|
+
feature_slug: r.feature_slug,
|
|
804
|
+
total_invocations: r.total_invocations,
|
|
805
|
+
success_count: r.success_count ?? 0,
|
|
806
|
+
first_at: r.first_at,
|
|
807
|
+
last_at: r.last_at,
|
|
808
|
+
};
|
|
809
|
+
});
|
|
810
|
+
}
|
|
725
811
|
}
|
|
726
812
|
//# sourceMappingURL=sqlite.js.map
|