@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.
Files changed (184) hide show
  1. package/README.md +10 -30
  2. package/dist/agents/definition.d.ts +3 -0
  3. package/dist/agents/definition.d.ts.map +1 -1
  4. package/dist/agents/definition.js +3 -0
  5. package/dist/agents/definition.js.map +1 -1
  6. package/dist/agents/official-agents.d.ts.map +1 -1
  7. package/dist/agents/official-agents.js +6 -3
  8. package/dist/agents/official-agents.js.map +1 -1
  9. package/dist/agents/registry.d.ts +17 -1
  10. package/dist/agents/registry.d.ts.map +1 -1
  11. package/dist/agents/registry.js +106 -7
  12. package/dist/agents/registry.js.map +1 -1
  13. package/dist/capability/index.d.ts +6 -5
  14. package/dist/capability/index.d.ts.map +1 -1
  15. package/dist/capability/index.js +6 -5
  16. package/dist/capability/index.js.map +1 -1
  17. package/dist/capability/types.d.ts +5 -74
  18. package/dist/capability/types.d.ts.map +1 -1
  19. package/dist/capability/types.js +4 -1
  20. package/dist/capability/types.js.map +1 -1
  21. package/dist/cli/commands/executions.d.ts +3 -0
  22. package/dist/cli/commands/executions.d.ts.map +1 -0
  23. package/dist/cli/commands/executions.js +109 -0
  24. package/dist/cli/commands/executions.js.map +1 -0
  25. package/dist/cli/commands/skills.d.ts.map +1 -1
  26. package/dist/cli/commands/skills.js +83 -20
  27. package/dist/cli/commands/skills.js.map +1 -1
  28. package/dist/cli/index.js +2 -0
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/core/storage/rows.d.ts +14 -36
  31. package/dist/core/storage/rows.d.ts.map +1 -1
  32. package/dist/core/storage/schema.sql +27 -45
  33. package/dist/core/storage/sqlite.d.ts +11 -79
  34. package/dist/core/storage/sqlite.d.ts.map +1 -1
  35. package/dist/core/storage/sqlite.js +35 -362
  36. package/dist/core/storage/sqlite.js.map +1 -1
  37. package/dist/core/utils/token-tracker.d.ts +0 -1
  38. package/dist/core/utils/token-tracker.d.ts.map +1 -1
  39. package/dist/core/utils/token-tracker.js +0 -1
  40. package/dist/core/utils/token-tracker.js.map +1 -1
  41. package/dist/daemon/handlers/post-tool-use.d.ts +1 -9
  42. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  43. package/dist/daemon/handlers/post-tool-use.js +2 -99
  44. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  45. package/dist/daemon/handlers/stop.d.ts +5 -15
  46. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  47. package/dist/daemon/handlers/stop.js +25 -93
  48. package/dist/daemon/handlers/stop.js.map +1 -1
  49. package/dist/daemon/handlers/user-prompt.d.ts +3 -5
  50. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  51. package/dist/daemon/handlers/user-prompt.js +39 -98
  52. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  53. package/dist/daemon/index.d.ts.map +1 -1
  54. package/dist/daemon/index.js +11 -56
  55. package/dist/daemon/index.js.map +1 -1
  56. package/dist/daemon/routing-observer.d.ts.map +1 -1
  57. package/dist/daemon/routing-observer.js +24 -1
  58. package/dist/daemon/routing-observer.js.map +1 -1
  59. package/dist/intelligence/execution-doc-builder.d.ts +61 -0
  60. package/dist/intelligence/execution-doc-builder.d.ts.map +1 -0
  61. package/dist/intelligence/execution-doc-builder.js +601 -0
  62. package/dist/intelligence/execution-doc-builder.js.map +1 -0
  63. package/dist/skills/invocation-guard.d.ts +45 -0
  64. package/dist/skills/invocation-guard.d.ts.map +1 -0
  65. package/dist/skills/invocation-guard.js +82 -0
  66. package/dist/skills/invocation-guard.js.map +1 -0
  67. package/dist/skills/official-skills.d.ts.map +1 -1
  68. package/dist/skills/official-skills.js +218 -20
  69. package/dist/skills/official-skills.js.map +1 -1
  70. package/dist/skills/registry.d.ts +22 -0
  71. package/dist/skills/registry.d.ts.map +1 -1
  72. package/dist/skills/registry.js +30 -2
  73. package/dist/skills/registry.js.map +1 -1
  74. package/dist/skills/tools/skill-invoke.d.ts +36 -0
  75. package/dist/skills/tools/skill-invoke.d.ts.map +1 -0
  76. package/dist/skills/tools/skill-invoke.js +82 -0
  77. package/dist/skills/tools/skill-invoke.js.map +1 -0
  78. package/dist/skills/tools/skill-list.d.ts +26 -0
  79. package/dist/skills/tools/skill-list.d.ts.map +1 -0
  80. package/dist/skills/tools/skill-list.js +35 -0
  81. package/dist/skills/tools/skill-list.js.map +1 -0
  82. package/dist/web/routes/execution-trace.d.ts.map +1 -1
  83. package/dist/web/routes/execution-trace.js +16 -0
  84. package/dist/web/routes/execution-trace.js.map +1 -1
  85. package/dist/web/routes/skill-stats.d.ts +12 -0
  86. package/dist/web/routes/skill-stats.d.ts.map +1 -0
  87. package/dist/web/routes/skill-stats.js +72 -0
  88. package/dist/web/routes/skill-stats.js.map +1 -0
  89. package/dist/web/routes/status.d.ts.map +1 -1
  90. package/dist/web/routes/status.js +8 -10
  91. package/dist/web/routes/status.js.map +1 -1
  92. package/dist/web/routes/token-usage.d.ts +1 -1
  93. package/dist/web/routes/token-usage.d.ts.map +1 -1
  94. package/dist/web/routes/token-usage.js +1 -16
  95. package/dist/web/routes/token-usage.js.map +1 -1
  96. package/dist/web/routes/types.d.ts +0 -6
  97. package/dist/web/routes/types.d.ts.map +1 -1
  98. package/dist/web/routes/types.js.map +1 -1
  99. package/dist/web/server.d.ts +0 -6
  100. package/dist/web/server.d.ts.map +1 -1
  101. package/dist/web/server.js +0 -5
  102. package/dist/web/server.js.map +1 -1
  103. package/dist/web/static/assets/{AIConfig-BbwRuWzm.js → AIConfig-DiUFET_Q.js} +2 -2
  104. package/dist/web/static/assets/{AIConfig-BbwRuWzm.js.map → AIConfig-DiUFET_Q.js.map} +1 -1
  105. package/dist/web/static/assets/{Agents-FyKzsN-g.js → Agents-bNNGbQnL.js} +2 -2
  106. package/dist/web/static/assets/{Agents-FyKzsN-g.js.map → Agents-bNNGbQnL.js.map} +1 -1
  107. package/dist/web/static/assets/{Events-C2OCOKAD.js → Events-DQHP6Uaq.js} +2 -2
  108. package/dist/web/static/assets/{Events-C2OCOKAD.js.map → Events-DQHP6Uaq.js.map} +1 -1
  109. package/dist/web/static/assets/ExecutionTrace-Co8ARdg-.js +3 -0
  110. package/dist/web/static/assets/ExecutionTrace-Co8ARdg-.js.map +1 -0
  111. package/dist/web/static/assets/{Methodologies-DwYLXc8o.js → Methodologies-CXNrDXwG.js} +2 -2
  112. package/dist/web/static/assets/{Methodologies-DwYLXc8o.js.map → Methodologies-CXNrDXwG.js.map} +1 -1
  113. package/dist/web/static/assets/{Sessions-CFpFk-5I.js → Sessions-ZQSCgXyy.js} +2 -2
  114. package/dist/web/static/assets/{Sessions-CFpFk-5I.js.map → Sessions-ZQSCgXyy.js.map} +1 -1
  115. package/dist/web/static/assets/{Skills-BkbegTV1.js → Skills-C5-5zOSH.js} +2 -2
  116. package/dist/web/static/assets/{Skills-BkbegTV1.js.map → Skills-C5-5zOSH.js.map} +1 -1
  117. package/dist/web/static/assets/{index-CIRlno4E.js → index-DJK5beK6.js} +3 -3
  118. package/dist/web/static/assets/{index-CIRlno4E.js.map → index-DJK5beK6.js.map} +1 -1
  119. package/dist/web/static/assets/index-phpuytMI.css +1 -0
  120. package/dist/web/static/index.html +2 -2
  121. package/package.json +2 -2
  122. package/dist/capability/execution-manager.d.ts +0 -96
  123. package/dist/capability/execution-manager.d.ts.map +0 -1
  124. package/dist/capability/execution-manager.js +0 -260
  125. package/dist/capability/execution-manager.js.map +0 -1
  126. package/dist/capability/executor/background-executor.d.ts +0 -58
  127. package/dist/capability/executor/background-executor.d.ts.map +0 -1
  128. package/dist/capability/executor/background-executor.js +0 -322
  129. package/dist/capability/executor/background-executor.js.map +0 -1
  130. package/dist/capability/executor/foreground-executor.d.ts +0 -26
  131. package/dist/capability/executor/foreground-executor.d.ts.map +0 -1
  132. package/dist/capability/executor/foreground-executor.js +0 -82
  133. package/dist/capability/executor/foreground-executor.js.map +0 -1
  134. package/dist/capability/executor/orchestrator.d.ts +0 -38
  135. package/dist/capability/executor/orchestrator.d.ts.map +0 -1
  136. package/dist/capability/executor/orchestrator.js +0 -158
  137. package/dist/capability/executor/orchestrator.js.map +0 -1
  138. package/dist/capability/executor/stream-parser.d.ts +0 -73
  139. package/dist/capability/executor/stream-parser.d.ts.map +0 -1
  140. package/dist/capability/executor/stream-parser.js +0 -56
  141. package/dist/capability/executor/stream-parser.js.map +0 -1
  142. package/dist/capability/executor/types.d.ts +0 -44
  143. package/dist/capability/executor/types.d.ts.map +0 -1
  144. package/dist/capability/executor/types.js +0 -9
  145. package/dist/capability/executor/types.js.map +0 -1
  146. package/dist/capability/executor/worker-auth-probe.d.ts +0 -30
  147. package/dist/capability/executor/worker-auth-probe.d.ts.map +0 -1
  148. package/dist/capability/executor/worker-auth-probe.js +0 -108
  149. package/dist/capability/executor/worker-auth-probe.js.map +0 -1
  150. package/dist/capability/methodologies/bmad.yaml +0 -81
  151. package/dist/capability/methodologies/code-quality-audit.yaml +0 -26
  152. package/dist/capability/methodologies/harness-engineering.yaml +0 -75
  153. package/dist/capability/methodologies/test-coverage-scan.yaml +0 -26
  154. package/dist/capability/methodology-planner.d.ts +0 -49
  155. package/dist/capability/methodology-planner.d.ts.map +0 -1
  156. package/dist/capability/methodology-planner.js +0 -306
  157. package/dist/capability/methodology-planner.js.map +0 -1
  158. package/dist/capability/methodology-registry.d.ts +0 -32
  159. package/dist/capability/methodology-registry.d.ts.map +0 -1
  160. package/dist/capability/methodology-registry.js +0 -113
  161. package/dist/capability/methodology-registry.js.map +0 -1
  162. package/dist/daemon/handlers/methodology-formatter.d.ts +0 -16
  163. package/dist/daemon/handlers/methodology-formatter.d.ts.map +0 -1
  164. package/dist/daemon/handlers/methodology-formatter.js +0 -119
  165. package/dist/daemon/handlers/methodology-formatter.js.map +0 -1
  166. package/dist/daemon/idle-detector.d.ts +0 -35
  167. package/dist/daemon/idle-detector.d.ts.map +0 -1
  168. package/dist/daemon/idle-detector.js +0 -56
  169. package/dist/daemon/idle-detector.js.map +0 -1
  170. package/dist/daemon/idle-trigger.d.ts +0 -53
  171. package/dist/daemon/idle-trigger.d.ts.map +0 -1
  172. package/dist/daemon/idle-trigger.js +0 -153
  173. package/dist/daemon/idle-trigger.js.map +0 -1
  174. package/dist/daemon/methodology-pending-queue.d.ts +0 -33
  175. package/dist/daemon/methodology-pending-queue.d.ts.map +0 -1
  176. package/dist/daemon/methodology-pending-queue.js +0 -120
  177. package/dist/daemon/methodology-pending-queue.js.map +0 -1
  178. package/dist/web/routes/methodology.d.ts +0 -12
  179. package/dist/web/routes/methodology.d.ts.map +0 -1
  180. package/dist/web/routes/methodology.js +0 -228
  181. package/dist/web/routes/methodology.js.map +0 -1
  182. package/dist/web/static/assets/ExecutionTrace-BsWSpu2v.js +0 -3
  183. package/dist/web/static/assets/ExecutionTrace-BsWSpu2v.js.map +0 -1
  184. 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;AA+BzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmB/C"}
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 all skills (official + user)
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 skills = registry.getAll();
13
- if (skills.length === 0) {
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
- console.log(`Total: ${skills.length} skill(s)\n`);
18
- console.log(' Name Type Keywords');
19
- console.log(' ' + '-'.repeat(70));
20
- for (const skill of skills) {
21
- const type = skill.isOfficial ? 'official' : 'user';
22
- const kw = skill.keywords.slice(0, 3).join(', ');
23
- const name = skill.name.padEnd(35);
24
- const typeStr = type.padEnd(10);
25
- console.log(` ${name} ${typeStr} ${kw}`);
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
- export function register(program) {
29
- const skills = program
30
- .command('skills')
31
- .description('Manage official and user skills');
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
- .action(() => {
43
- listSkills();
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":"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"}
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
@@ -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;AAEzD,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;AAEzC,OAAO,CAAC,UAAU,EAAE,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 { MethodologyExecutionRow, PhaseExecutionRow } from './rows.js';
9
- export type { EventRow, SessionRow, QualityIssueRow, DistillResultRow, ToolEventRow, DecisionRow, InjectionRow, TaskRow, MethodologyExecutionRow, PhaseExecutionRow, TokenUsageRow, } from './rows.js';
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