@winspan/claude-forge 8.33.5 → 8.35.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/README.md +10 -30
- package/dist/agents/definition.d.ts +3 -0
- package/dist/agents/definition.d.ts.map +1 -1
- package/dist/agents/definition.js +3 -0
- package/dist/agents/definition.js.map +1 -1
- package/dist/agents/official-agents.d.ts.map +1 -1
- package/dist/agents/official-agents.js +6 -3
- package/dist/agents/official-agents.js.map +1 -1
- package/dist/agents/registry.d.ts +17 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +106 -7
- package/dist/agents/registry.js.map +1 -1
- package/dist/capability/index.d.ts +6 -5
- package/dist/capability/index.d.ts.map +1 -1
- package/dist/capability/index.js +6 -5
- package/dist/capability/index.js.map +1 -1
- package/dist/capability/types.d.ts +5 -74
- package/dist/capability/types.d.ts.map +1 -1
- package/dist/capability/types.js +4 -1
- package/dist/capability/types.js.map +1 -1
- package/dist/cli/commands/executions.d.ts +3 -0
- package/dist/cli/commands/executions.d.ts.map +1 -0
- package/dist/cli/commands/executions.js +109 -0
- package/dist/cli/commands/executions.js.map +1 -0
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +83 -20
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/storage/rows.d.ts +14 -36
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +27 -45
- package/dist/core/storage/sqlite.d.ts +11 -79
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +35 -362
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/utils/token-tracker.d.ts +0 -1
- package/dist/core/utils/token-tracker.d.ts.map +1 -1
- package/dist/core/utils/token-tracker.js +0 -1
- package/dist/core/utils/token-tracker.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +1 -9
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +2 -99
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/stop.d.ts +5 -15
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +25 -93
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +3 -5
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +39 -98
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +11 -56
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/routing-observer.d.ts.map +1 -1
- package/dist/daemon/routing-observer.js +24 -1
- package/dist/daemon/routing-observer.js.map +1 -1
- package/dist/intelligence/execution-doc-builder.d.ts +61 -0
- package/dist/intelligence/execution-doc-builder.d.ts.map +1 -0
- package/dist/intelligence/execution-doc-builder.js +601 -0
- package/dist/intelligence/execution-doc-builder.js.map +1 -0
- package/dist/skills/invocation-guard.d.ts +45 -0
- package/dist/skills/invocation-guard.d.ts.map +1 -0
- package/dist/skills/invocation-guard.js +82 -0
- package/dist/skills/invocation-guard.js.map +1 -0
- package/dist/skills/official-skills.d.ts.map +1 -1
- package/dist/skills/official-skills.js +218 -20
- package/dist/skills/official-skills.js.map +1 -1
- package/dist/skills/registry.d.ts +22 -0
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +30 -2
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/skill-invoke.d.ts +36 -0
- package/dist/skills/tools/skill-invoke.d.ts.map +1 -0
- package/dist/skills/tools/skill-invoke.js +82 -0
- package/dist/skills/tools/skill-invoke.js.map +1 -0
- package/dist/skills/tools/skill-list.d.ts +26 -0
- package/dist/skills/tools/skill-list.d.ts.map +1 -0
- package/dist/skills/tools/skill-list.js +35 -0
- package/dist/skills/tools/skill-list.js.map +1 -0
- package/dist/web/routes/execution-trace.d.ts.map +1 -1
- package/dist/web/routes/execution-trace.js +16 -0
- package/dist/web/routes/execution-trace.js.map +1 -1
- package/dist/web/routes/skill-stats.d.ts +12 -0
- package/dist/web/routes/skill-stats.d.ts.map +1 -0
- package/dist/web/routes/skill-stats.js +72 -0
- package/dist/web/routes/skill-stats.js.map +1 -0
- package/dist/web/routes/status.d.ts.map +1 -1
- package/dist/web/routes/status.js +8 -10
- package/dist/web/routes/status.js.map +1 -1
- package/dist/web/routes/token-usage.d.ts +1 -1
- package/dist/web/routes/token-usage.d.ts.map +1 -1
- package/dist/web/routes/token-usage.js +1 -16
- package/dist/web/routes/token-usage.js.map +1 -1
- package/dist/web/routes/types.d.ts +0 -6
- package/dist/web/routes/types.d.ts.map +1 -1
- package/dist/web/routes/types.js.map +1 -1
- package/dist/web/server.d.ts +0 -6
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +0 -5
- package/dist/web/server.js.map +1 -1
- package/dist/web/static/assets/{AIConfig-BbwRuWzm.js → AIConfig-DiUFET_Q.js} +2 -2
- package/dist/web/static/assets/{AIConfig-BbwRuWzm.js.map → AIConfig-DiUFET_Q.js.map} +1 -1
- package/dist/web/static/assets/{Agents-FyKzsN-g.js → Agents-bNNGbQnL.js} +2 -2
- package/dist/web/static/assets/{Agents-FyKzsN-g.js.map → Agents-bNNGbQnL.js.map} +1 -1
- package/dist/web/static/assets/{Events-C2OCOKAD.js → Events-DQHP6Uaq.js} +2 -2
- package/dist/web/static/assets/{Events-C2OCOKAD.js.map → Events-DQHP6Uaq.js.map} +1 -1
- package/dist/web/static/assets/ExecutionTrace-Co8ARdg-.js +3 -0
- package/dist/web/static/assets/ExecutionTrace-Co8ARdg-.js.map +1 -0
- package/dist/web/static/assets/{Methodologies-DwYLXc8o.js → Methodologies-CXNrDXwG.js} +2 -2
- package/dist/web/static/assets/{Methodologies-DwYLXc8o.js.map → Methodologies-CXNrDXwG.js.map} +1 -1
- package/dist/web/static/assets/{Sessions-CFpFk-5I.js → Sessions-ZQSCgXyy.js} +2 -2
- package/dist/web/static/assets/{Sessions-CFpFk-5I.js.map → Sessions-ZQSCgXyy.js.map} +1 -1
- package/dist/web/static/assets/{Skills-BkbegTV1.js → Skills-C5-5zOSH.js} +2 -2
- package/dist/web/static/assets/{Skills-BkbegTV1.js.map → Skills-C5-5zOSH.js.map} +1 -1
- package/dist/web/static/assets/{index-CIRlno4E.js → index-DJK5beK6.js} +3 -3
- package/dist/web/static/assets/{index-CIRlno4E.js.map → index-DJK5beK6.js.map} +1 -1
- package/dist/web/static/assets/index-phpuytMI.css +1 -0
- package/dist/web/static/index.html +2 -2
- package/package.json +2 -2
- package/dist/capability/execution-manager.d.ts +0 -96
- package/dist/capability/execution-manager.d.ts.map +0 -1
- package/dist/capability/execution-manager.js +0 -260
- package/dist/capability/execution-manager.js.map +0 -1
- package/dist/capability/executor/background-executor.d.ts +0 -58
- package/dist/capability/executor/background-executor.d.ts.map +0 -1
- package/dist/capability/executor/background-executor.js +0 -322
- package/dist/capability/executor/background-executor.js.map +0 -1
- package/dist/capability/executor/foreground-executor.d.ts +0 -26
- package/dist/capability/executor/foreground-executor.d.ts.map +0 -1
- package/dist/capability/executor/foreground-executor.js +0 -82
- package/dist/capability/executor/foreground-executor.js.map +0 -1
- package/dist/capability/executor/orchestrator.d.ts +0 -38
- package/dist/capability/executor/orchestrator.d.ts.map +0 -1
- package/dist/capability/executor/orchestrator.js +0 -158
- package/dist/capability/executor/orchestrator.js.map +0 -1
- package/dist/capability/executor/stream-parser.d.ts +0 -73
- package/dist/capability/executor/stream-parser.d.ts.map +0 -1
- package/dist/capability/executor/stream-parser.js +0 -56
- package/dist/capability/executor/stream-parser.js.map +0 -1
- package/dist/capability/executor/types.d.ts +0 -44
- package/dist/capability/executor/types.d.ts.map +0 -1
- package/dist/capability/executor/types.js +0 -9
- package/dist/capability/executor/types.js.map +0 -1
- package/dist/capability/executor/worker-auth-probe.d.ts +0 -30
- package/dist/capability/executor/worker-auth-probe.d.ts.map +0 -1
- package/dist/capability/executor/worker-auth-probe.js +0 -108
- package/dist/capability/executor/worker-auth-probe.js.map +0 -1
- package/dist/capability/methodologies/bmad.yaml +0 -81
- package/dist/capability/methodologies/code-quality-audit.yaml +0 -26
- package/dist/capability/methodologies/harness-engineering.yaml +0 -75
- package/dist/capability/methodologies/test-coverage-scan.yaml +0 -26
- package/dist/capability/methodology-planner.d.ts +0 -49
- package/dist/capability/methodology-planner.d.ts.map +0 -1
- package/dist/capability/methodology-planner.js +0 -306
- package/dist/capability/methodology-planner.js.map +0 -1
- package/dist/capability/methodology-registry.d.ts +0 -32
- package/dist/capability/methodology-registry.d.ts.map +0 -1
- package/dist/capability/methodology-registry.js +0 -113
- package/dist/capability/methodology-registry.js.map +0 -1
- package/dist/daemon/handlers/methodology-formatter.d.ts +0 -16
- package/dist/daemon/handlers/methodology-formatter.d.ts.map +0 -1
- package/dist/daemon/handlers/methodology-formatter.js +0 -119
- package/dist/daemon/handlers/methodology-formatter.js.map +0 -1
- package/dist/daemon/idle-detector.d.ts +0 -35
- package/dist/daemon/idle-detector.d.ts.map +0 -1
- package/dist/daemon/idle-detector.js +0 -56
- package/dist/daemon/idle-detector.js.map +0 -1
- package/dist/daemon/idle-trigger.d.ts +0 -53
- package/dist/daemon/idle-trigger.d.ts.map +0 -1
- package/dist/daemon/idle-trigger.js +0 -153
- package/dist/daemon/idle-trigger.js.map +0 -1
- package/dist/daemon/methodology-pending-queue.d.ts +0 -33
- package/dist/daemon/methodology-pending-queue.d.ts.map +0 -1
- package/dist/daemon/methodology-pending-queue.js +0 -120
- package/dist/daemon/methodology-pending-queue.js.map +0 -1
- package/dist/web/routes/methodology.d.ts +0 -12
- package/dist/web/routes/methodology.d.ts.map +0 -1
- package/dist/web/routes/methodology.js +0 -228
- package/dist/web/routes/methodology.js.map +0 -1
- package/dist/web/static/assets/ExecutionTrace-BsWSpu2v.js +0 -3
- package/dist/web/static/assets/ExecutionTrace-BsWSpu2v.js.map +0 -1
- package/dist/web/static/assets/index-N1EByy_h.css +0 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
export function registerExecutionsCommand(program) {
|
|
5
|
+
const cmd = program.command('executions').description('管理 Agent/Skill 执行文档');
|
|
6
|
+
// cf executions list — 列出所有执行文档
|
|
7
|
+
cmd
|
|
8
|
+
.command('list')
|
|
9
|
+
.description('列出所有执行文档')
|
|
10
|
+
.option('--limit <n>', '限制数量', '20')
|
|
11
|
+
.option('--date <date>', '按日期筛选(YYYY-MM-DD)')
|
|
12
|
+
.action(async (opts) => {
|
|
13
|
+
const baseDir = path.join(process.cwd(), '.claude-forge', 'executions', 'by-route');
|
|
14
|
+
if (!fs.existsSync(baseDir)) {
|
|
15
|
+
console.log('暂无执行文档。请先触发 Agent/Skill 执行。');
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const limit = parseInt(opts.limit) || 20;
|
|
19
|
+
// 列出 route 目录,按 mtime 倒序
|
|
20
|
+
const routes = fs.readdirSync(baseDir, { withFileTypes: true })
|
|
21
|
+
.filter(d => d.isDirectory())
|
|
22
|
+
.map(d => ({
|
|
23
|
+
name: d.name,
|
|
24
|
+
mtime: fs.statSync(path.join(baseDir, d.name)).mtime,
|
|
25
|
+
}))
|
|
26
|
+
.sort((a, b) => b.mtime.getTime() - a.mtime.getTime())
|
|
27
|
+
.slice(0, limit);
|
|
28
|
+
console.log(`找到 ${routes.length} 个执行记录:\n`);
|
|
29
|
+
for (const r of routes) {
|
|
30
|
+
const overviewPath = path.join(baseDir, r.name, 'overview.md');
|
|
31
|
+
let summary = '(无 overview)';
|
|
32
|
+
if (fs.existsSync(overviewPath)) {
|
|
33
|
+
// 读 frontmatter 的 user_prompt 字段
|
|
34
|
+
const content = fs.readFileSync(overviewPath, 'utf-8').slice(0, 1000);
|
|
35
|
+
const m = content.match(/user_prompt:\s*["']?(.+?)["']?\n/);
|
|
36
|
+
if (m)
|
|
37
|
+
summary = m[1].slice(0, 60);
|
|
38
|
+
}
|
|
39
|
+
const time = r.mtime.toISOString().slice(0, 19).replace('T', ' ');
|
|
40
|
+
console.log(`${time} ${r.name.slice(0, 24)} ${summary}`);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
// cf executions open <route_id> — 用 IDE / 编辑器打开
|
|
44
|
+
cmd
|
|
45
|
+
.command('open <route_id>')
|
|
46
|
+
.description('打开指定执行的 overview 文档')
|
|
47
|
+
.action((routeId) => {
|
|
48
|
+
const baseDir = path.join(process.cwd(), '.claude-forge', 'executions', 'by-route');
|
|
49
|
+
if (!fs.existsSync(baseDir)) {
|
|
50
|
+
console.error('执行文档目录不存在。');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
// 模糊匹配
|
|
54
|
+
const dirs = fs.readdirSync(baseDir).filter(d => d.includes(routeId));
|
|
55
|
+
if (dirs.length === 0) {
|
|
56
|
+
console.error(`未找到匹配的执行记录:${routeId}`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
const target = path.join(baseDir, dirs[0], 'overview.md');
|
|
60
|
+
if (!fs.existsSync(target)) {
|
|
61
|
+
console.error(`overview.md 不存在:${target}`);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
// 用系统默认编辑器或 cat
|
|
65
|
+
const editor = process.env.EDITOR || process.env.VISUAL;
|
|
66
|
+
if (editor) {
|
|
67
|
+
execSync(`${editor} "${target}"`, { stdio: 'inherit' });
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.log(fs.readFileSync(target, 'utf-8'));
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
// cf executions clean — 清理旧文档
|
|
74
|
+
cmd
|
|
75
|
+
.command('clean')
|
|
76
|
+
.description('清理超过指定天数的执行文档')
|
|
77
|
+
.option('--before <days>', '清理 N 天前的文档', '30')
|
|
78
|
+
.option('--dry-run', '只显示将删除的文件,不实际删除')
|
|
79
|
+
.action(async (opts) => {
|
|
80
|
+
const baseDir = path.join(process.cwd(), '.claude-forge', 'executions', 'by-route');
|
|
81
|
+
if (!fs.existsSync(baseDir)) {
|
|
82
|
+
console.log('执行文档目录不存在,无需清理。');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const days = parseInt(opts.before) || 30;
|
|
86
|
+
const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
|
|
87
|
+
const toDelete = [];
|
|
88
|
+
for (const d of fs.readdirSync(baseDir, { withFileTypes: true })) {
|
|
89
|
+
if (!d.isDirectory())
|
|
90
|
+
continue;
|
|
91
|
+
const dirPath = path.join(baseDir, d.name);
|
|
92
|
+
const stat = fs.statSync(dirPath);
|
|
93
|
+
if (stat.mtime.getTime() < cutoff) {
|
|
94
|
+
toDelete.push(dirPath);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
console.log(`将删除 ${toDelete.length} 个超过 ${days} 天的执行记录${opts.dryRun ? '(dry-run,不实际删除)' : ''}:`);
|
|
98
|
+
for (const p of toDelete) {
|
|
99
|
+
console.log(` - ${path.basename(p)}`);
|
|
100
|
+
if (!opts.dryRun) {
|
|
101
|
+
fs.rmSync(p, { recursive: true, force: true });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (!opts.dryRun && toDelete.length > 0) {
|
|
105
|
+
console.log(`已清理 ${toDelete.length} 个目录。`);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=executions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executions.js","sourceRoot":"","sources":["../../../src/cli/commands/executions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuHzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAa/C"}
|
|
@@ -3,32 +3,72 @@ import path from 'path';
|
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
import { OFFICIAL_SKILLS } from '../../skills/official-skills.js';
|
|
5
5
|
import { SkillRegistry } from '../../skills/registry.js';
|
|
6
|
+
import { skillInvoke } from '../../skills/tools/skill-invoke.js';
|
|
7
|
+
import { skillList } from '../../skills/tools/skill-list.js';
|
|
6
8
|
const SKILLS_DIR = path.join(homedir(), '.claude', 'skills');
|
|
7
9
|
/**
|
|
8
|
-
* List
|
|
10
|
+
* List skills with optional keyword filter and JSON output.
|
|
11
|
+
* Delegates to the shared skillList() tool so CLI and Agent share one code path.
|
|
9
12
|
*/
|
|
10
|
-
function listSkills() {
|
|
13
|
+
async function listSkills(options) {
|
|
11
14
|
const registry = new SkillRegistry();
|
|
12
|
-
const
|
|
13
|
-
|
|
15
|
+
const keywords = options.keywords
|
|
16
|
+
? options.keywords
|
|
17
|
+
.split(',')
|
|
18
|
+
.map(k => k.trim())
|
|
19
|
+
.filter(k => k.length > 0)
|
|
20
|
+
: undefined;
|
|
21
|
+
const result = await skillList({ keywords }, { skillRegistry: registry });
|
|
22
|
+
if (options.json) {
|
|
23
|
+
console.log(JSON.stringify(result, null, 2));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (result.total === 0) {
|
|
14
27
|
console.log('No skills found.');
|
|
15
28
|
return;
|
|
16
29
|
}
|
|
17
|
-
|
|
18
|
-
console.log(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const type =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
// Human-readable output. Include `isOfficial` hint via registry lookup.
|
|
31
|
+
console.log(`Available skills (${result.total}):\n`);
|
|
32
|
+
for (const s of result.skills) {
|
|
33
|
+
const full = registry.get(s.id);
|
|
34
|
+
const type = full?.isOfficial ? 'official' : 'user';
|
|
35
|
+
console.log(`- ${s.id} [${type}]`);
|
|
36
|
+
console.log(` name: ${s.name}`);
|
|
37
|
+
if (s.description) {
|
|
38
|
+
console.log(` description: ${s.description}`);
|
|
39
|
+
}
|
|
40
|
+
if (s.keywords.length > 0) {
|
|
41
|
+
console.log(` keywords: ${s.keywords.join(', ')}`);
|
|
42
|
+
}
|
|
43
|
+
console.log();
|
|
26
44
|
}
|
|
27
45
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Invoke a skill by id, printing its full methodology content.
|
|
48
|
+
* Exit code 1 on failure so Bash callers can detect errors.
|
|
49
|
+
*/
|
|
50
|
+
async function invokeSkill(skillId, options) {
|
|
51
|
+
const registry = new SkillRegistry();
|
|
52
|
+
try {
|
|
53
|
+
const result = await skillInvoke({ skill_id: skillId, reason: options.reason }, { skillRegistry: registry });
|
|
54
|
+
if (options.json) {
|
|
55
|
+
console.log(JSON.stringify(result, null, 2));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
console.log(`# ${result.skill_name}`);
|
|
59
|
+
if (result.keywords.length > 0) {
|
|
60
|
+
console.log(`\n> keywords: ${result.keywords.join(', ')}`);
|
|
61
|
+
}
|
|
62
|
+
console.log();
|
|
63
|
+
console.log(result.content);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
67
|
+
console.error(`Error: ${msg}`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function registerSkillSubcommands(skills) {
|
|
32
72
|
skills
|
|
33
73
|
.command('sync')
|
|
34
74
|
.description('Write official skills to ~/.claude/skills/')
|
|
@@ -38,11 +78,34 @@ export function register(program) {
|
|
|
38
78
|
});
|
|
39
79
|
skills
|
|
40
80
|
.command('list')
|
|
41
|
-
.description('List all skills (official + user)')
|
|
42
|
-
.
|
|
43
|
-
|
|
81
|
+
.description('List all skills (official + user) with optional keyword filter')
|
|
82
|
+
.option('--keywords <keywords>', 'Comma-separated keywords to filter by')
|
|
83
|
+
.option('--json', 'Output as JSON (machine-readable)')
|
|
84
|
+
.action(async (options) => {
|
|
85
|
+
await listSkills(options);
|
|
86
|
+
});
|
|
87
|
+
skills
|
|
88
|
+
.command('invoke <skill_id>')
|
|
89
|
+
.description('Invoke a skill and print its full methodology content')
|
|
90
|
+
.option('--reason <reason>', 'Reason for invoking (used for audit log)')
|
|
91
|
+
.option('--json', 'Output as JSON (machine-readable)')
|
|
92
|
+
.action(async (skillId, options) => {
|
|
93
|
+
await invokeSkill(skillId, options);
|
|
44
94
|
});
|
|
45
95
|
}
|
|
96
|
+
export function register(program) {
|
|
97
|
+
// Primary command: `cf skills ...`
|
|
98
|
+
const skills = program
|
|
99
|
+
.command('skills')
|
|
100
|
+
.description('Manage official and user skills (list | invoke | sync)');
|
|
101
|
+
registerSkillSubcommands(skills);
|
|
102
|
+
// Singular alias: `cf skill ...` — preferred for Agent Bash calls where
|
|
103
|
+
// `cf skill invoke <id>` reads more naturally than the plural form.
|
|
104
|
+
const skill = program
|
|
105
|
+
.command('skill')
|
|
106
|
+
.description('Alias of `skills` (list | invoke | sync)');
|
|
107
|
+
registerSkillSubcommands(skill);
|
|
108
|
+
}
|
|
46
109
|
function syncSkills(options) {
|
|
47
110
|
if (!fs.existsSync(SKILLS_DIR)) {
|
|
48
111
|
fs.mkdirSync(SKILLS_DIR, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -13,6 +13,7 @@ import { registerMenuCommand } from './commands/menu.js';
|
|
|
13
13
|
import { createTemplateCommand } from './commands/template.js';
|
|
14
14
|
import { createRulesCommand } from './commands/rules.js';
|
|
15
15
|
import { createStatsCommand } from './commands/stats.js';
|
|
16
|
+
import { registerExecutionsCommand } from './commands/executions.js';
|
|
16
17
|
const require = createRequire(import.meta.url);
|
|
17
18
|
const { version } = require('../../package.json');
|
|
18
19
|
const program = new Command();
|
|
@@ -33,5 +34,6 @@ registerMenuCommand(program);
|
|
|
33
34
|
program.addCommand(createTemplateCommand());
|
|
34
35
|
program.addCommand(createRulesCommand());
|
|
35
36
|
program.addCommand(createStatsCommand());
|
|
37
|
+
registerExecutionsCommand(program);
|
|
36
38
|
program.parseAsync();
|
|
37
39
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,cAAc,CAAC;KACpB,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,+BAA+B,CAAC;KAC5C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAEnC,OAAO,CAAC,UAAU,EAAE,CAAC"}
|
|
@@ -103,45 +103,9 @@ export interface TaskRow {
|
|
|
103
103
|
event_count: number;
|
|
104
104
|
created_at: string;
|
|
105
105
|
}
|
|
106
|
-
export interface MethodologyExecutionRow {
|
|
107
|
-
id: number;
|
|
108
|
-
session_id: string;
|
|
109
|
-
methodology_id: string;
|
|
110
|
-
plan_json: string;
|
|
111
|
-
original_plan_json: string | null;
|
|
112
|
-
current_phase_index: number;
|
|
113
|
-
status: 'running' | 'completed' | 'failed' | 'cancelled' | 'stale';
|
|
114
|
-
mode: 'foreground' | 'background';
|
|
115
|
-
worker_pid: number | null;
|
|
116
|
-
worker_session_id: string | null;
|
|
117
|
-
trigger_type: 'manual' | 'idle' | 'scheduled' | null;
|
|
118
|
-
retry_count: number | null;
|
|
119
|
-
last_progress_at: number | null;
|
|
120
|
-
started_at: number;
|
|
121
|
-
completed_at: number | null;
|
|
122
|
-
created_at: string;
|
|
123
|
-
}
|
|
124
|
-
export interface PhaseExecutionRow {
|
|
125
|
-
id: number;
|
|
126
|
-
methodology_execution_id: number;
|
|
127
|
-
phase_id: string;
|
|
128
|
-
phase_index: number;
|
|
129
|
-
agent_name: string;
|
|
130
|
-
prompt: string;
|
|
131
|
-
status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
132
|
-
started_at: number | null;
|
|
133
|
-
completed_at: number | null;
|
|
134
|
-
duration_ms: number | null;
|
|
135
|
-
artifacts_json: string | null;
|
|
136
|
-
output_text: string | null;
|
|
137
|
-
error_message: string | null;
|
|
138
|
-
stream_log_path: string | null;
|
|
139
|
-
created_at: string;
|
|
140
|
-
}
|
|
141
106
|
export interface TokenUsageRow {
|
|
142
107
|
id: number;
|
|
143
108
|
session_id: string;
|
|
144
|
-
methodology_execution_id: number | null;
|
|
145
109
|
timestamp: number;
|
|
146
110
|
input_tokens: number;
|
|
147
111
|
output_tokens: number;
|
|
@@ -150,4 +114,18 @@ export interface TokenUsageRow {
|
|
|
150
114
|
tool_name: string | null;
|
|
151
115
|
created_at: string;
|
|
152
116
|
}
|
|
117
|
+
export interface SkillInvocationRow {
|
|
118
|
+
id: string;
|
|
119
|
+
route_request_id: string | null;
|
|
120
|
+
session_id: string;
|
|
121
|
+
agent_id: string | null;
|
|
122
|
+
skill_id: string;
|
|
123
|
+
invocation_type: 'static' | 'dynamic' | 'slash_command';
|
|
124
|
+
reason: string | null;
|
|
125
|
+
depth: number;
|
|
126
|
+
success: number;
|
|
127
|
+
error: string | null;
|
|
128
|
+
timestamp: number;
|
|
129
|
+
created_at: string;
|
|
130
|
+
}
|
|
153
131
|
//# sourceMappingURL=rows.d.ts.map
|
|
@@ -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":"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"}
|
|
@@ -183,6 +183,8 @@ CREATE TABLE IF NOT EXISTS routing_events (
|
|
|
183
183
|
injection_version TEXT,
|
|
184
184
|
experiment_id TEXT, -- Phase 5: A/B test experiment id (null if no experiment)
|
|
185
185
|
experiment_group TEXT, -- Phase 5: assigned group id (null if no experiment)
|
|
186
|
+
skill_confidence REAL, -- Skill matching confidence (0.0-1.0)
|
|
187
|
+
skill_source TEXT, -- Skill source: 'auto' / 'slash_command' / 'agent_dependency'
|
|
186
188
|
created_at TEXT DEFAULT (datetime('now'))
|
|
187
189
|
);
|
|
188
190
|
|
|
@@ -222,64 +224,44 @@ CREATE TABLE IF NOT EXISTS routing_rule_states (
|
|
|
222
224
|
|
|
223
225
|
CREATE INDEX IF NOT EXISTS idx_rule_states_disabled ON routing_rule_states(disabled);
|
|
224
226
|
|
|
225
|
-
-- ── Methodology Executions (方法论执行追踪) ──────────────────────────────
|
|
226
|
-
-- 记录方法论的执行实例和动态生成的执行计划
|
|
227
|
-
|
|
228
|
-
CREATE TABLE IF NOT EXISTS methodology_executions (
|
|
229
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
230
|
-
session_id TEXT NOT NULL,
|
|
231
|
-
methodology_id TEXT NOT NULL,
|
|
232
|
-
plan_json TEXT NOT NULL, -- 动态生成的执行计划(JSON)
|
|
233
|
-
current_phase_index INTEGER DEFAULT 0,
|
|
234
|
-
status TEXT NOT NULL DEFAULT 'running' CHECK(status IN ('running', 'completed', 'failed', 'cancelled', 'stale')),
|
|
235
|
-
started_at INTEGER NOT NULL,
|
|
236
|
-
completed_at INTEGER,
|
|
237
|
-
last_progress_at INTEGER, -- 最后一次推进时间戳(ms),用于 stale 判定
|
|
238
|
-
created_at TEXT DEFAULT (datetime('now'))
|
|
239
|
-
);
|
|
240
|
-
|
|
241
|
-
CREATE INDEX IF NOT EXISTS idx_methodology_exec_session ON methodology_executions(session_id);
|
|
242
|
-
CREATE INDEX IF NOT EXISTS idx_methodology_exec_status ON methodology_executions(status);
|
|
243
|
-
|
|
244
|
-
-- ── Phase Executions (阶段执行记录) ──────────────────────────────────────
|
|
245
|
-
-- 记录每个阶段的执行情况
|
|
246
|
-
|
|
247
|
-
CREATE TABLE IF NOT EXISTS phase_executions (
|
|
248
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
249
|
-
methodology_execution_id INTEGER NOT NULL,
|
|
250
|
-
phase_id TEXT NOT NULL,
|
|
251
|
-
phase_index INTEGER NOT NULL,
|
|
252
|
-
agent_name TEXT NOT NULL,
|
|
253
|
-
prompt TEXT NOT NULL,
|
|
254
|
-
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'running', 'completed', 'failed', 'cancelled')),
|
|
255
|
-
started_at INTEGER,
|
|
256
|
-
completed_at INTEGER,
|
|
257
|
-
duration_ms INTEGER,
|
|
258
|
-
artifacts_json TEXT, -- 产物记录(JSON)
|
|
259
|
-
created_at TEXT DEFAULT (datetime('now')),
|
|
260
|
-
FOREIGN KEY (methodology_execution_id) REFERENCES methodology_executions(id)
|
|
261
|
-
);
|
|
262
|
-
|
|
263
|
-
CREATE INDEX IF NOT EXISTS idx_phase_exec_methodology ON phase_executions(methodology_execution_id);
|
|
264
|
-
CREATE INDEX IF NOT EXISTS idx_phase_exec_status ON phase_executions(status);
|
|
265
|
-
|
|
266
227
|
-- ── Token Usage (Token 用量追踪) ──────────────────────────────────────────
|
|
267
228
|
-- 记录每次 AI 调用的 token 用量,用于成本可观测和预算控制
|
|
268
229
|
|
|
269
230
|
CREATE TABLE IF NOT EXISTS token_usage (
|
|
270
231
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
271
232
|
session_id TEXT NOT NULL,
|
|
272
|
-
methodology_execution_id INTEGER, -- 可选,关联方法论执行
|
|
273
233
|
timestamp INTEGER NOT NULL,
|
|
274
234
|
input_tokens INTEGER NOT NULL,
|
|
275
235
|
output_tokens INTEGER NOT NULL,
|
|
276
236
|
total_tokens INTEGER NOT NULL,
|
|
277
237
|
model TEXT, -- 如 'claude-opus-4-7'
|
|
278
238
|
tool_name TEXT, -- 如 'Task' / 'Read' / 'Agent' / 'classify' / 'plan'
|
|
279
|
-
created_at TEXT DEFAULT (datetime('now'))
|
|
280
|
-
FOREIGN KEY (methodology_execution_id) REFERENCES methodology_executions(id)
|
|
239
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
281
240
|
);
|
|
282
241
|
|
|
283
242
|
CREATE INDEX IF NOT EXISTS idx_token_usage_session ON token_usage(session_id);
|
|
284
|
-
CREATE INDEX IF NOT EXISTS idx_token_usage_methodology ON token_usage(methodology_execution_id);
|
|
285
243
|
CREATE INDEX IF NOT EXISTS idx_token_usage_timestamp ON token_usage(timestamp DESC);
|
|
244
|
+
|
|
245
|
+
-- ── Skill Invocations (Skill 调用链路追踪) ─────────────────────────────────
|
|
246
|
+
-- 记录 Agent 动态调用 Skill 的完整链路,形成"一次路由 → Agent → N 次 Skill 调用"
|
|
247
|
+
-- 的证据链,配合 routing_events.route_request_id 可串联外层路由与内层 Skill 调用。
|
|
248
|
+
|
|
249
|
+
CREATE TABLE IF NOT EXISTS skill_invocations (
|
|
250
|
+
id TEXT PRIMARY KEY, -- UUID
|
|
251
|
+
route_request_id TEXT, -- 关联外层路由(routing_events.route_request_id)
|
|
252
|
+
session_id TEXT NOT NULL,
|
|
253
|
+
agent_id TEXT, -- 发起调用的 Agent(可能为 NULL 如果是主 Claude)
|
|
254
|
+
skill_id TEXT NOT NULL, -- 被调用的 Skill ID
|
|
255
|
+
invocation_type TEXT NOT NULL, -- 'static' / 'dynamic' / 'slash_command'
|
|
256
|
+
reason TEXT, -- Agent 提供的调用理由
|
|
257
|
+
depth INTEGER DEFAULT 0, -- 调用嵌套深度
|
|
258
|
+
success INTEGER DEFAULT 1, -- 1 成功 / 0 失败
|
|
259
|
+
error TEXT, -- 错误信息(如 skill 不存在)
|
|
260
|
+
timestamp INTEGER NOT NULL, -- 调用时间戳(ms)
|
|
261
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
CREATE INDEX IF NOT EXISTS idx_skill_invocations_route_request ON skill_invocations(route_request_id);
|
|
265
|
+
CREATE INDEX IF NOT EXISTS idx_skill_invocations_session ON skill_invocations(session_id);
|
|
266
|
+
CREATE INDEX IF NOT EXISTS idx_skill_invocations_skill ON skill_invocations(skill_id);
|
|
267
|
+
CREATE INDEX IF NOT EXISTS idx_skill_invocations_timestamp ON skill_invocations(timestamp DESC);
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
import Database from 'better-sqlite3';
|
|
6
6
|
import { EventEmitter } from 'node:events';
|
|
7
7
|
import type { ForgeEvent } from '../types.js';
|
|
8
|
-
import type {
|
|
9
|
-
export type { EventRow, SessionRow, QualityIssueRow, DistillResultRow, ToolEventRow, DecisionRow, InjectionRow, TaskRow,
|
|
8
|
+
import type { SkillInvocationRow } from './rows.js';
|
|
9
|
+
export type { EventRow, SessionRow, QualityIssueRow, DistillResultRow, ToolEventRow, DecisionRow, InjectionRow, TaskRow, TokenUsageRow, SkillInvocationRow, } from './rows.js';
|
|
10
10
|
type DecisionLevel = 'allow' | 'warn' | 'confirm' | 'block';
|
|
11
11
|
export interface SessionSummary {
|
|
12
12
|
session_id: string;
|
|
@@ -80,6 +80,8 @@ export interface RoutingEventRecord {
|
|
|
80
80
|
injection_version?: string | null;
|
|
81
81
|
experiment_id?: string | null;
|
|
82
82
|
experiment_group?: string | null;
|
|
83
|
+
skill_confidence?: number | null;
|
|
84
|
+
skill_source?: 'auto' | 'slash_command' | 'agent_dependency' | null;
|
|
83
85
|
}
|
|
84
86
|
export interface RoutingEventRow extends RoutingEventRecord {
|
|
85
87
|
id: number;
|
|
@@ -115,24 +117,6 @@ export declare class SQLiteStorage extends EventEmitter {
|
|
|
115
117
|
* upsert 过的数据。
|
|
116
118
|
*/
|
|
117
119
|
private backfillSessionsIfNeeded;
|
|
118
|
-
/**
|
|
119
|
-
* SQLite 无法直接修改 CHECK 约束。若旧库的 phase_executions.status CHECK
|
|
120
|
-
* 还没有 'cancelled',走经典的"新表 + 拷数据 + 重命名"路径升级。
|
|
121
|
-
*
|
|
122
|
-
* 幂等:检测到当前 CREATE TABLE 语句里已有 'cancelled' 就跳过。fresh install
|
|
123
|
-
* 的库会直接命中 schema.sql 里的新定义,这里也直接跳过。
|
|
124
|
-
*/
|
|
125
|
-
private rebuildPhaseExecutionsIfNeeded;
|
|
126
|
-
/**
|
|
127
|
-
* methodology_executions.status CHECK 升级:加入 'stale' 枚举值。
|
|
128
|
-
* 幂等:CREATE TABLE 语句里已含 'stale' 则跳过;fresh install 会命中 schema.sql
|
|
129
|
-
* 的新定义,这里也跳过。
|
|
130
|
-
*
|
|
131
|
-
* 注意:必须在 addColumnIfMissing('last_progress_at' / 'retry_count' /
|
|
132
|
-
* 'original_plan_json' / 'trigger_type', ...) 之后执行,重建表时才能把它们一起
|
|
133
|
-
* 拷贝过去。重建方法内部再做一次兜底 addColumnIfMissing,避免未来新列漏同步。
|
|
134
|
-
*/
|
|
135
|
-
private rebuildMethodologyExecutionsIfNeeded;
|
|
136
120
|
getDatabase(): Database.Database;
|
|
137
121
|
getDbPath(): string;
|
|
138
122
|
writeEvent(event: ForgeEvent): void;
|
|
@@ -256,60 +240,8 @@ export declare class SQLiteStorage extends EventEmitter {
|
|
|
256
240
|
close(): void;
|
|
257
241
|
private getDbSizeMb;
|
|
258
242
|
private rowToEvent;
|
|
259
|
-
createMethodologyExecution(data: {
|
|
260
|
-
session_id: string;
|
|
261
|
-
methodology_id: string;
|
|
262
|
-
plan_json: string;
|
|
263
|
-
mode?: 'foreground' | 'background';
|
|
264
|
-
trigger_type?: 'manual' | 'idle' | 'scheduled';
|
|
265
|
-
}): number;
|
|
266
|
-
getActiveMethodologyExecution(session_id: string): MethodologyExecutionRow | null;
|
|
267
|
-
updateMethodologyExecution(id: number, data: {
|
|
268
|
-
current_phase_index?: number;
|
|
269
|
-
status?: MethodologyExecutionRow['status'];
|
|
270
|
-
completed_at?: number;
|
|
271
|
-
worker_pid?: number | null;
|
|
272
|
-
worker_session_id?: string | null;
|
|
273
|
-
last_progress_at?: number;
|
|
274
|
-
plan_json?: string;
|
|
275
|
-
retry_count?: number;
|
|
276
|
-
}): void;
|
|
277
|
-
getMethodologyExecution(id: number): MethodologyExecutionRow | null;
|
|
278
|
-
/**
|
|
279
|
-
* List all methodology_executions with status='running' and mode='background'.
|
|
280
|
-
* Used at daemon startup to detect crashed workers (worker_pid not alive).
|
|
281
|
-
*/
|
|
282
|
-
listRunningBackgroundExecutions(): MethodologyExecutionRow[];
|
|
283
|
-
/**
|
|
284
|
-
* List all methodology_executions with status='running' and mode='foreground'.
|
|
285
|
-
* Used at daemon startup to sweep stale foreground executions — rows left
|
|
286
|
-
* behind when the originating Claude session ended without Stop hook firing
|
|
287
|
-
* (crash / detach / pre-guard legacy data).
|
|
288
|
-
*/
|
|
289
|
-
listRunningForegroundExecutions(): MethodologyExecutionRow[];
|
|
290
|
-
createPhaseExecution(data: {
|
|
291
|
-
methodology_execution_id: number;
|
|
292
|
-
phase_id: string;
|
|
293
|
-
phase_index: number;
|
|
294
|
-
agent_name: string;
|
|
295
|
-
prompt: string;
|
|
296
|
-
}): number;
|
|
297
|
-
updatePhaseExecution(id: number, data: {
|
|
298
|
-
status?: PhaseExecutionRow['status'];
|
|
299
|
-
completed_at?: number;
|
|
300
|
-
artifacts_json?: string;
|
|
301
|
-
output_text?: string | null;
|
|
302
|
-
error_message?: string | null;
|
|
303
|
-
stream_log_path?: string | null;
|
|
304
|
-
}): void;
|
|
305
|
-
getPhaseExecutions(methodology_execution_id: number): PhaseExecutionRow[];
|
|
306
|
-
/**
|
|
307
|
-
* 获取指定 session 和 methodology 的最后一次 idle 触发时间
|
|
308
|
-
*/
|
|
309
|
-
getLastIdleTrigger(session_id: string, methodology_id: string): number | null;
|
|
310
243
|
recordTokenUsage(params: {
|
|
311
244
|
session_id: string;
|
|
312
|
-
methodology_execution_id?: number;
|
|
313
245
|
input_tokens: number;
|
|
314
246
|
output_tokens: number;
|
|
315
247
|
model?: string;
|
|
@@ -320,19 +252,12 @@ export declare class SQLiteStorage extends EventEmitter {
|
|
|
320
252
|
input_tokens: number;
|
|
321
253
|
output_tokens: number;
|
|
322
254
|
};
|
|
323
|
-
getTokenUsageByMethodology(methodology_execution_id: number): {
|
|
324
|
-
total_tokens: number;
|
|
325
|
-
input_tokens: number;
|
|
326
|
-
output_tokens: number;
|
|
327
|
-
};
|
|
328
255
|
listTokenUsage(filter?: {
|
|
329
256
|
session_id?: string;
|
|
330
|
-
methodology_execution_id?: number;
|
|
331
257
|
limit?: number;
|
|
332
258
|
}): Array<{
|
|
333
259
|
id: number;
|
|
334
260
|
session_id: string;
|
|
335
|
-
methodology_execution_id: number | null;
|
|
336
261
|
timestamp: number;
|
|
337
262
|
input_tokens: number;
|
|
338
263
|
output_tokens: number;
|
|
@@ -340,5 +265,12 @@ export declare class SQLiteStorage extends EventEmitter {
|
|
|
340
265
|
model: string | null;
|
|
341
266
|
tool_name: string | null;
|
|
342
267
|
}>;
|
|
268
|
+
writeSkillInvocation(row: Omit<SkillInvocationRow, 'created_at'>): void;
|
|
269
|
+
querySkillInvocations(filter?: {
|
|
270
|
+
route_request_id?: string;
|
|
271
|
+
session_id?: string;
|
|
272
|
+
skill_id?: string;
|
|
273
|
+
limit?: number;
|
|
274
|
+
}): SkillInvocationRow[];
|
|
343
275
|
}
|
|
344
276
|
//# sourceMappingURL=sqlite.d.ts.map
|