@winspan/claude-forge 8.34.0 → 8.36.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 (186) hide show
  1. package/README.md +10 -30
  2. package/dist/capability/index.d.ts +6 -5
  3. package/dist/capability/index.d.ts.map +1 -1
  4. package/dist/capability/index.js +6 -5
  5. package/dist/capability/index.js.map +1 -1
  6. package/dist/capability/types.d.ts +5 -74
  7. package/dist/capability/types.d.ts.map +1 -1
  8. package/dist/capability/types.js +4 -1
  9. package/dist/capability/types.js.map +1 -1
  10. package/dist/core/ai/provider.d.ts +23 -1
  11. package/dist/core/ai/provider.d.ts.map +1 -1
  12. package/dist/core/ai/provider.js +67 -1
  13. package/dist/core/ai/provider.js.map +1 -1
  14. package/dist/core/ai/types.d.ts +28 -0
  15. package/dist/core/ai/types.d.ts.map +1 -1
  16. package/dist/core/storage/rows.d.ts +0 -36
  17. package/dist/core/storage/rows.d.ts.map +1 -1
  18. package/dist/core/storage/schema.sql +1 -45
  19. package/dist/core/storage/sqlite.d.ts +2 -79
  20. package/dist/core/storage/sqlite.d.ts.map +1 -1
  21. package/dist/core/storage/sqlite.js +3 -362
  22. package/dist/core/storage/sqlite.js.map +1 -1
  23. package/dist/core/utils/token-tracker.d.ts +0 -1
  24. package/dist/core/utils/token-tracker.d.ts.map +1 -1
  25. package/dist/core/utils/token-tracker.js +0 -1
  26. package/dist/core/utils/token-tracker.js.map +1 -1
  27. package/dist/daemon/handlers/post-tool-use.d.ts +1 -9
  28. package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
  29. package/dist/daemon/handlers/post-tool-use.js +2 -99
  30. package/dist/daemon/handlers/post-tool-use.js.map +1 -1
  31. package/dist/daemon/handlers/stop.d.ts +1 -15
  32. package/dist/daemon/handlers/stop.d.ts.map +1 -1
  33. package/dist/daemon/handlers/stop.js +1 -95
  34. package/dist/daemon/handlers/stop.js.map +1 -1
  35. package/dist/daemon/handlers/user-prompt.d.ts +1 -5
  36. package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
  37. package/dist/daemon/handlers/user-prompt.js +29 -99
  38. package/dist/daemon/handlers/user-prompt.js.map +1 -1
  39. package/dist/daemon/index.d.ts.map +1 -1
  40. package/dist/daemon/index.js +9 -56
  41. package/dist/daemon/index.js.map +1 -1
  42. package/dist/engine/agent-router.d.ts +37 -0
  43. package/dist/engine/agent-router.d.ts.map +1 -1
  44. package/dist/engine/agent-router.js +58 -0
  45. package/dist/engine/agent-router.js.map +1 -1
  46. package/dist/engine/conventions/routing.yaml +31 -2
  47. package/dist/intelligence/classifier.d.ts +63 -43
  48. package/dist/intelligence/classifier.d.ts.map +1 -1
  49. package/dist/intelligence/classifier.js +256 -191
  50. package/dist/intelligence/classifier.js.map +1 -1
  51. package/dist/intelligence/context-gatherer.d.ts +101 -0
  52. package/dist/intelligence/context-gatherer.d.ts.map +1 -0
  53. package/dist/intelligence/context-gatherer.js +417 -0
  54. package/dist/intelligence/context-gatherer.js.map +1 -0
  55. package/dist/intelligence/cot-classifier.d.ts +95 -0
  56. package/dist/intelligence/cot-classifier.d.ts.map +1 -0
  57. package/dist/intelligence/cot-classifier.js +391 -0
  58. package/dist/intelligence/cot-classifier.js.map +1 -0
  59. package/dist/intelligence/execution-doc-builder.d.ts +90 -0
  60. package/dist/intelligence/execution-doc-builder.d.ts.map +1 -1
  61. package/dist/intelligence/execution-doc-builder.js +459 -42
  62. package/dist/intelligence/execution-doc-builder.js.map +1 -1
  63. package/dist/intelligence/intent-types.d.ts +13 -0
  64. package/dist/intelligence/intent-types.d.ts.map +1 -0
  65. package/dist/intelligence/intent-types.js +19 -0
  66. package/dist/intelligence/intent-types.js.map +1 -0
  67. package/dist/intelligence/multimodal-parser.d.ts +105 -0
  68. package/dist/intelligence/multimodal-parser.d.ts.map +1 -0
  69. package/dist/intelligence/multimodal-parser.js +425 -0
  70. package/dist/intelligence/multimodal-parser.js.map +1 -0
  71. package/dist/skills/official-skills.d.ts.map +1 -1
  72. package/dist/skills/official-skills.js +218 -20
  73. package/dist/skills/official-skills.js.map +1 -1
  74. package/dist/web/routes/status.d.ts.map +1 -1
  75. package/dist/web/routes/status.js +8 -10
  76. package/dist/web/routes/status.js.map +1 -1
  77. package/dist/web/routes/token-usage.d.ts +1 -1
  78. package/dist/web/routes/token-usage.d.ts.map +1 -1
  79. package/dist/web/routes/token-usage.js +1 -16
  80. package/dist/web/routes/token-usage.js.map +1 -1
  81. package/dist/web/routes/types.d.ts +0 -6
  82. package/dist/web/routes/types.d.ts.map +1 -1
  83. package/dist/web/routes/types.js.map +1 -1
  84. package/dist/web/server.d.ts +0 -6
  85. package/dist/web/server.d.ts.map +1 -1
  86. package/dist/web/server.js +0 -5
  87. package/dist/web/server.js.map +1 -1
  88. package/dist/web/static/assets/{AIConfig-DiUFET_Q.js → AIConfig-D4VglzCl.js} +2 -2
  89. package/dist/web/static/assets/{AIConfig-DiUFET_Q.js.map → AIConfig-D4VglzCl.js.map} +1 -1
  90. package/dist/web/static/assets/{Agents-bNNGbQnL.js → Agents-ne5lXc7V.js} +2 -2
  91. package/dist/web/static/assets/{Agents-bNNGbQnL.js.map → Agents-ne5lXc7V.js.map} +1 -1
  92. package/dist/web/static/assets/Dashboard-D4j0Zmek.js +2 -0
  93. package/dist/web/static/assets/Dashboard-D4j0Zmek.js.map +1 -0
  94. package/dist/web/static/assets/{Drawer-DOUcx6m1.js → Drawer-Lo5ihVP-.js} +2 -2
  95. package/dist/web/static/assets/{Drawer-DOUcx6m1.js.map → Drawer-Lo5ihVP-.js.map} +1 -1
  96. package/dist/web/static/assets/{Events-DQHP6Uaq.js → Events-DBJ1B7OW.js} +2 -2
  97. package/dist/web/static/assets/{Events-DQHP6Uaq.js.map → Events-DBJ1B7OW.js.map} +1 -1
  98. package/dist/web/static/assets/{ExecutionTrace-Co8ARdg-.js → ExecutionTrace-Du9XADc1.js} +2 -2
  99. package/dist/web/static/assets/{ExecutionTrace-Co8ARdg-.js.map → ExecutionTrace-Du9XADc1.js.map} +1 -1
  100. package/dist/web/static/assets/{Routing-BW3eGD-8.js → Routing-BNQ09OlH.js} +2 -2
  101. package/dist/web/static/assets/{Routing-BW3eGD-8.js.map → Routing-BNQ09OlH.js.map} +1 -1
  102. package/dist/web/static/assets/{SessionDetail-Cbd7Jwox.js → SessionDetail-BPrPyMNa.js} +2 -2
  103. package/dist/web/static/assets/{SessionDetail-Cbd7Jwox.js.map → SessionDetail-BPrPyMNa.js.map} +1 -1
  104. package/dist/web/static/assets/{Sessions-ZQSCgXyy.js → Sessions-o3EXsXz9.js} +2 -2
  105. package/dist/web/static/assets/{Sessions-ZQSCgXyy.js.map → Sessions-o3EXsXz9.js.map} +1 -1
  106. package/dist/web/static/assets/{Skills-C5-5zOSH.js → Skills-Czt5mkyc.js} +2 -2
  107. package/dist/web/static/assets/{Skills-C5-5zOSH.js.map → Skills-Czt5mkyc.js.map} +1 -1
  108. package/dist/web/static/assets/{export-CbQTOt71.js → export-C0mlC4AT.js} +2 -2
  109. package/dist/web/static/assets/{export-CbQTOt71.js.map → export-C0mlC4AT.js.map} +1 -1
  110. package/dist/web/static/assets/index-B1J7nBu0.js +3 -0
  111. package/dist/web/static/assets/index-B1J7nBu0.js.map +1 -0
  112. package/dist/web/static/assets/index-BVqk4bSO.css +1 -0
  113. package/dist/web/static/assets/{lucide-BanPULT1.js → lucide-Bu44HVAM.js} +33 -73
  114. package/dist/web/static/assets/lucide-Bu44HVAM.js.map +1 -0
  115. package/dist/web/static/index.html +3 -3
  116. package/package.json +2 -2
  117. package/dist/capability/execution-manager.d.ts +0 -96
  118. package/dist/capability/execution-manager.d.ts.map +0 -1
  119. package/dist/capability/execution-manager.js +0 -260
  120. package/dist/capability/execution-manager.js.map +0 -1
  121. package/dist/capability/executor/background-executor.d.ts +0 -58
  122. package/dist/capability/executor/background-executor.d.ts.map +0 -1
  123. package/dist/capability/executor/background-executor.js +0 -322
  124. package/dist/capability/executor/background-executor.js.map +0 -1
  125. package/dist/capability/executor/foreground-executor.d.ts +0 -26
  126. package/dist/capability/executor/foreground-executor.d.ts.map +0 -1
  127. package/dist/capability/executor/foreground-executor.js +0 -82
  128. package/dist/capability/executor/foreground-executor.js.map +0 -1
  129. package/dist/capability/executor/orchestrator.d.ts +0 -38
  130. package/dist/capability/executor/orchestrator.d.ts.map +0 -1
  131. package/dist/capability/executor/orchestrator.js +0 -158
  132. package/dist/capability/executor/orchestrator.js.map +0 -1
  133. package/dist/capability/executor/stream-parser.d.ts +0 -73
  134. package/dist/capability/executor/stream-parser.d.ts.map +0 -1
  135. package/dist/capability/executor/stream-parser.js +0 -56
  136. package/dist/capability/executor/stream-parser.js.map +0 -1
  137. package/dist/capability/executor/types.d.ts +0 -44
  138. package/dist/capability/executor/types.d.ts.map +0 -1
  139. package/dist/capability/executor/types.js +0 -9
  140. package/dist/capability/executor/types.js.map +0 -1
  141. package/dist/capability/executor/worker-auth-probe.d.ts +0 -30
  142. package/dist/capability/executor/worker-auth-probe.d.ts.map +0 -1
  143. package/dist/capability/executor/worker-auth-probe.js +0 -108
  144. package/dist/capability/executor/worker-auth-probe.js.map +0 -1
  145. package/dist/capability/methodologies/bmad.yaml +0 -81
  146. package/dist/capability/methodologies/code-quality-audit.yaml +0 -26
  147. package/dist/capability/methodologies/harness-engineering.yaml +0 -75
  148. package/dist/capability/methodologies/test-coverage-scan.yaml +0 -26
  149. package/dist/capability/methodology-planner.d.ts +0 -49
  150. package/dist/capability/methodology-planner.d.ts.map +0 -1
  151. package/dist/capability/methodology-planner.js +0 -306
  152. package/dist/capability/methodology-planner.js.map +0 -1
  153. package/dist/capability/methodology-registry.d.ts +0 -32
  154. package/dist/capability/methodology-registry.d.ts.map +0 -1
  155. package/dist/capability/methodology-registry.js +0 -113
  156. package/dist/capability/methodology-registry.js.map +0 -1
  157. package/dist/daemon/handlers/methodology-formatter.d.ts +0 -16
  158. package/dist/daemon/handlers/methodology-formatter.d.ts.map +0 -1
  159. package/dist/daemon/handlers/methodology-formatter.js +0 -119
  160. package/dist/daemon/handlers/methodology-formatter.js.map +0 -1
  161. package/dist/daemon/idle-detector.d.ts +0 -35
  162. package/dist/daemon/idle-detector.d.ts.map +0 -1
  163. package/dist/daemon/idle-detector.js +0 -56
  164. package/dist/daemon/idle-detector.js.map +0 -1
  165. package/dist/daemon/idle-trigger.d.ts +0 -53
  166. package/dist/daemon/idle-trigger.d.ts.map +0 -1
  167. package/dist/daemon/idle-trigger.js +0 -153
  168. package/dist/daemon/idle-trigger.js.map +0 -1
  169. package/dist/daemon/methodology-pending-queue.d.ts +0 -33
  170. package/dist/daemon/methodology-pending-queue.d.ts.map +0 -1
  171. package/dist/daemon/methodology-pending-queue.js +0 -120
  172. package/dist/daemon/methodology-pending-queue.js.map +0 -1
  173. package/dist/web/routes/methodology.d.ts +0 -12
  174. package/dist/web/routes/methodology.d.ts.map +0 -1
  175. package/dist/web/routes/methodology.js +0 -228
  176. package/dist/web/routes/methodology.js.map +0 -1
  177. package/dist/web/static/assets/Dashboard-Ciyyw6ph.js +0 -2
  178. package/dist/web/static/assets/Dashboard-Ciyyw6ph.js.map +0 -1
  179. package/dist/web/static/assets/Methodologies-CXNrDXwG.js +0 -5
  180. package/dist/web/static/assets/Methodologies-CXNrDXwG.js.map +0 -1
  181. package/dist/web/static/assets/MethodologyDetail-rV3W1utf.js +0 -2
  182. package/dist/web/static/assets/MethodologyDetail-rV3W1utf.js.map +0 -1
  183. package/dist/web/static/assets/index-DJK5beK6.js +0 -3
  184. package/dist/web/static/assets/index-DJK5beK6.js.map +0 -1
  185. package/dist/web/static/assets/index-phpuytMI.css +0 -1
  186. package/dist/web/static/assets/lucide-BanPULT1.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"methodology-planner.js","sourceRoot":"","sources":["../../src/capability/methodology-planner.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- /**
2
- * Methodology Registry
3
- *
4
- * 加载和管理方法论定义
5
- */
6
- import type { Methodology } from './types.js';
7
- import type { IntentAnalysis } from '../intelligence/classifier.js';
8
- export declare class MethodologyRegistry {
9
- private methodologies;
10
- constructor();
11
- /**
12
- * 加载所有方法论定义
13
- */
14
- private loadAll;
15
- /**
16
- * 根据 intent 匹配方法论
17
- */
18
- match(intent: IntentAnalysis): Methodology | null;
19
- /**
20
- * 检查方法论是否匹配 intent
21
- */
22
- private isMatch;
23
- /**
24
- * 根据 ID 获取方法论
25
- */
26
- get(id: string): Methodology | undefined;
27
- /**
28
- * 获取所有方法论
29
- */
30
- getAll(): Methodology[];
31
- }
32
- //# sourceMappingURL=methodology-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"methodology-registry.d.ts","sourceRoot":"","sources":["../../src/capability/methodology-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAMpE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,aAAa,CAAuC;;IAM5D;;OAEG;IACH,OAAO,CAAC,OAAO;IAwBf;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,IAAI;IASjD;;OAEG;IACH,OAAO,CAAC,OAAO;IAkDf;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIxC;;OAEG;IACH,MAAM,IAAI,WAAW,EAAE;CAGxB"}
@@ -1,113 +0,0 @@
1
- /**
2
- * Methodology Registry
3
- *
4
- * 加载和管理方法论定义
5
- */
6
- import { readFileSync, readdirSync } from 'fs';
7
- import { join, dirname } from 'path';
8
- import { fileURLToPath } from 'url';
9
- import { parse as parseYaml } from 'yaml';
10
- import { logger } from '../core/utils/logger.js';
11
- const __filename = fileURLToPath(import.meta.url);
12
- const __dirname = dirname(__filename);
13
- export class MethodologyRegistry {
14
- methodologies = new Map();
15
- constructor() {
16
- this.loadAll();
17
- }
18
- /**
19
- * 加载所有方法论定义
20
- */
21
- loadAll() {
22
- const methodologiesDir = join(__dirname, 'methodologies');
23
- try {
24
- const files = readdirSync(methodologiesDir).filter(f => f.endsWith('.yaml'));
25
- for (const file of files) {
26
- try {
27
- const content = readFileSync(join(methodologiesDir, file), 'utf-8');
28
- const methodology = parseYaml(content);
29
- this.methodologies.set(methodology.id, methodology);
30
- logger.info(`[MethodologyRegistry] Loaded: ${methodology.id}`);
31
- }
32
- catch (err) {
33
- logger.warn(`[MethodologyRegistry] Failed to load ${file}: ${err}`);
34
- }
35
- }
36
- logger.info(`[MethodologyRegistry] Loaded ${this.methodologies.size} methodologies`);
37
- }
38
- catch (err) {
39
- logger.warn(`[MethodologyRegistry] Failed to load methodologies: ${err}`);
40
- }
41
- }
42
- /**
43
- * 根据 intent 匹配方法论
44
- */
45
- match(intent) {
46
- for (const methodology of this.methodologies.values()) {
47
- if (this.isMatch(methodology, intent)) {
48
- return methodology;
49
- }
50
- }
51
- return null;
52
- }
53
- /**
54
- * 检查方法论是否匹配 intent
55
- */
56
- isMatch(methodology, intent) {
57
- const trigger = methodology.trigger;
58
- // Idle-only 方法论守卫:若 taskType / complexity / keywords 三个维度都未声明
59
- // (字段缺失或为空数组),说明该方法论不参与基于 intent 的匹配(例如 idle 专用)。
60
- // 否则"空数组"会被当作"无约束",从而对任意 intent 都返回 true,产生误匹配。
61
- const hasTaskType = Array.isArray(trigger.taskType) && trigger.taskType.length > 0;
62
- const hasComplexity = Array.isArray(trigger.complexity) && trigger.complexity.length > 0;
63
- const hasKeywords = Array.isArray(trigger.keywords) && trigger.keywords.length > 0;
64
- if (!hasTaskType && !hasComplexity && !hasKeywords) {
65
- logger.debug(`[MethodologyRegistry] ${methodology.id} skipped: no intent-based trigger declared (idle-only)`);
66
- return false;
67
- }
68
- // 检查 taskType
69
- if (trigger.taskType && trigger.taskType.length > 0) {
70
- if (!trigger.taskType.includes(intent.taskType)) {
71
- logger.debug(`[MethodologyRegistry] ${methodology.id} taskType mismatch: expected ${trigger.taskType.join('|')}, got ${intent.taskType}`);
72
- return false;
73
- }
74
- }
75
- // 检查 complexity
76
- if (trigger.complexity && trigger.complexity.length > 0) {
77
- if (!trigger.complexity.includes(intent.complexity)) {
78
- logger.debug(`[MethodologyRegistry] ${methodology.id} complexity mismatch: expected ${trigger.complexity.join('|')}, got ${intent.complexity}`);
79
- return false;
80
- }
81
- }
82
- // 检查 keywords - 如果 YAML 定义了 keywords(数组非空),则要求 intent.requirement
83
- // 或 intent.searchKeywords 至少命中一个 keyword(大小写不敏感、子串匹配)
84
- if (trigger.keywords && trigger.keywords.length > 0) {
85
- const haystack = [
86
- intent.requirement ?? '',
87
- ...(intent.searchKeywords ?? []),
88
- ]
89
- .join(' ')
90
- .toLowerCase();
91
- const hit = trigger.keywords.some(kw => haystack.includes(kw.toLowerCase()));
92
- if (!hit) {
93
- logger.debug(`[MethodologyRegistry] ${methodology.id} keywords not matched: requirement="${intent.requirement}", searchKeywords=${JSON.stringify(intent.searchKeywords)}, expected one of ${trigger.keywords.join('|')}`);
94
- return false;
95
- }
96
- }
97
- logger.debug(`[MethodologyRegistry] ${methodology.id} matched!`);
98
- return true;
99
- }
100
- /**
101
- * 根据 ID 获取方法论
102
- */
103
- get(id) {
104
- return this.methodologies.get(id);
105
- }
106
- /**
107
- * 获取所有方法论
108
- */
109
- getAll() {
110
- return Array.from(this.methodologies.values());
111
- }
112
- }
113
- //# sourceMappingURL=methodology-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"methodology-registry.js","sourceRoot":"","sources":["../../src/capability/methodology-registry.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Methodology Directive Formatter
3
- *
4
- * 格式化方法论执行指令(Ruflo 风格)
5
- */
6
- import type { Methodology, ExecutionPlan, PlannedPhase } from '../../capability/types.js';
7
- export declare function formatMethodologyPhaseDirective(methodology: Methodology, plan: ExecutionPlan, phase: PlannedPhase, phaseIndex: number, executionId: number): string;
8
- /**
9
- * 格式化给后台 worker 子进程的 phase directive。
10
- *
11
- * 和前台版本的区别:worker 本身**就是**那个 agent,不能再要求它调 Agent/Task 工具。
12
- * 这里直接把 phase 的 prompt 当作任务本体,让 worker 以该 agent 的身份直接完成并回写结果。
13
- */
14
- export declare function formatMethodologyPhaseDirectiveForWorker(methodology: Methodology, plan: ExecutionPlan, phase: PlannedPhase, phaseIndex: number, executionId: number): string;
15
- export declare function formatMethodologyCompletionMessage(plan: ExecutionPlan): string;
16
- //# sourceMappingURL=methodology-formatter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"methodology-formatter.d.ts","sourceRoot":"","sources":["../../../src/daemon/handlers/methodology-formatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE1F,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAkDR;AAED;;;;;GAKG;AACH,wBAAgB,wCAAwC,CACtD,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAwCR;AAED,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAiB9E"}
@@ -1,119 +0,0 @@
1
- /**
2
- * Methodology Directive Formatter
3
- *
4
- * 格式化方法论执行指令(Ruflo 风格)
5
- */
6
- export function formatMethodologyPhaseDirective(methodology, plan, phase, phaseIndex, executionId) {
7
- const totalPhases = plan.phases.length;
8
- const phaseOverview = plan.phases
9
- .map((p, i) => {
10
- const marker = i === phaseIndex ? '← YOU ARE HERE' : (i < phaseIndex ? '✓' : '');
11
- return ` ${i + 1}. ${p.id} (${p.agent}) ${marker}`;
12
- })
13
- .join('\n');
14
- return `
15
- ╔═══════════════════════════════════════════════════════════════╗
16
- ║ METHODOLOGY: ${methodology.name.padEnd(48)} ║
17
- ║ EXECUTION PLAN: ${totalPhases} phases (AI-generated)${' '.repeat(28)} ║
18
- ╠═══════════════════════════════════════════════════════════════╣
19
- ║ CRITICAL: You MUST execute phases sequentially using Agent ║
20
- ║ DO NOT execute phases yourself - delegate to specialized agents ║
21
- ╚═══════════════════════════════════════════════════════════════╝
22
-
23
- [METHODOLOGY_ACTIVE: ${methodology.id}]
24
- [EXECUTION_ID: ${executionId}]
25
- [CURRENT_PHASE: ${phaseIndex + 1}/${totalPhases}]
26
-
27
- **PHASE ${phaseIndex + 1}: ${phase.id}**
28
- Rationale: ${phase.rationale}
29
-
30
- MANDATORY ACTION - MUST EXECUTE IMMEDIATELY:
31
- Agent({
32
- subagent_type: "${phase.agent}",
33
- description: "Execute Phase ${phaseIndex + 1} of ${methodology.name}",
34
- prompt: "${phase.prompt.replace(/"/g, '\\"')}"
35
- })
36
-
37
- EXECUTION PLAN OVERVIEW:
38
- ${phaseOverview}
39
-
40
- Plan Rationale: ${plan.rationale}
41
-
42
- AFTER Phase ${phaseIndex + 1} completes:
43
- - System will verify artifacts
44
- - System will inject Phase ${phaseIndex + 2} instruction (if exists)
45
-
46
- FORBIDDEN:
47
- - Do NOT execute Phase ${phaseIndex + 1} yourself
48
- - Do NOT skip to Phase ${phaseIndex + 2}
49
- - Do NOT call wrong agent (must be "${phase.agent}")
50
- - Do NOT deviate from the execution plan
51
-
52
- See CLAUDE.md "Behavioral Rules (Always Enforced)" for routing protocol.
53
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
54
- `;
55
- }
56
- /**
57
- * 格式化给后台 worker 子进程的 phase directive。
58
- *
59
- * 和前台版本的区别:worker 本身**就是**那个 agent,不能再要求它调 Agent/Task 工具。
60
- * 这里直接把 phase 的 prompt 当作任务本体,让 worker 以该 agent 的身份直接完成并回写结果。
61
- */
62
- export function formatMethodologyPhaseDirectiveForWorker(methodology, plan, phase, phaseIndex, executionId) {
63
- const totalPhases = plan.phases.length;
64
- const phaseOverview = plan.phases
65
- .map((p, i) => {
66
- const marker = i === phaseIndex ? '← current' : (i < phaseIndex ? '(done)' : '');
67
- return ` ${i + 1}. ${p.id} (${p.agent}) ${marker}`.trimEnd();
68
- })
69
- .join('\n');
70
- return `[METHODOLOGY_WORKER: ${methodology.id}] [EXECUTION_ID: ${executionId}] [PHASE: ${phaseIndex + 1}/${totalPhases}]
71
-
72
- You ARE the \`${phase.agent}\` agent. You have been spawned as a background worker to execute phase ${phaseIndex + 1} of the "${methodology.name}" methodology.
73
-
74
- Your job for this phase is to directly carry out the following task, in your capacity as the \`${phase.agent}\` agent. Respond directly, don't delegate, don't call an Agent/Task tool — you already are the agent.
75
-
76
- ──────────────────────────────────────────────────────────────
77
- TASK (phase ${phaseIndex + 1}: ${phase.id})
78
- ──────────────────────────────────────────────────────────────
79
- ${phase.prompt}
80
-
81
- ──────────────────────────────────────────────────────────────
82
- CONTEXT
83
- ──────────────────────────────────────────────────────────────
84
- Methodology: ${methodology.name} (${methodology.id})
85
- Phase rationale: ${phase.rationale}
86
- Plan rationale: ${plan.rationale}
87
-
88
- Plan overview:
89
- ${phaseOverview}
90
-
91
- ──────────────────────────────────────────────────────────────
92
- RULES
93
- ──────────────────────────────────────────────────────────────
94
- - You are the \`${phase.agent}\` agent. Act as that role.
95
- - Do NOT invoke Agent/Task/subagent tools; those are not available and not needed.
96
- - Do NOT try to execute other phases — only phase ${phaseIndex + 1}.
97
- - When you're done, respond directly with your findings / output. The orchestrator will capture your final response and advance the plan.
98
-
99
- Respond directly, don't delegate.
100
- `;
101
- }
102
- export function formatMethodologyCompletionMessage(plan) {
103
- const phaseList = plan.phases
104
- .map((p, i) => ` ${i + 1}. ${p.id} (${p.agent}) ✓`)
105
- .join('\n');
106
- return `
107
- ╔═══════════════════════════════════════════════════════════════╗
108
- ║ METHODOLOGY EXECUTION COMPLETED ║
109
- ╚═══════════════════════════════════════════════════════════════╝
110
-
111
- All ${plan.phases.length} phases finished successfully:
112
- ${phaseList}
113
-
114
- Plan Rationale: ${plan.rationale}
115
-
116
- You may now proceed with any follow-up tasks.
117
- `;
118
- }
119
- //# sourceMappingURL=methodology-formatter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"methodology-formatter.js","sourceRoot":"","sources":["../../../src/daemon/handlers/methodology-formatter.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- /**
2
- * IdleDetector — 检测 session 空闲状态
3
- *
4
- * 职责:
5
- * 1. 跟踪每个 session 的最后活动时间
6
- * 2. 提供查询接口,返回超过阈值的空闲 session 列表
7
- *
8
- * 活动定义:UserPromptSubmit / PostToolUse / Stop 等 hook 事件
9
- */
10
- export interface IdleDetectorOptions {
11
- /**
12
- * 空闲阈值(毫秒)。超过此时长无活动即视为 idle。
13
- * 默认 5 分钟。
14
- */
15
- idleThresholdMs?: number;
16
- }
17
- export declare class IdleDetector {
18
- private lastActivityTime;
19
- private readonly idleThresholdMs;
20
- constructor(options?: IdleDetectorOptions);
21
- /**
22
- * 记录 session 活动
23
- */
24
- recordActivity(session_id: string): void;
25
- /**
26
- * 获取空闲的 session 列表
27
- */
28
- getIdleSessions(): string[];
29
- /**
30
- * 清理过期的 session 记录(可选,避免内存泄漏)
31
- * @param maxAgeMs 超过此时长的记录会被清理,默认 24 小时
32
- */
33
- cleanup(maxAgeMs?: number): number;
34
- }
35
- //# sourceMappingURL=idle-detector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"idle-detector.d.ts","sourceRoot":"","sources":["../../src/daemon/idle-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,OAAO,GAAE,mBAAwB;IAK7C;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAa3B;;;OAGG;IACH,OAAO,CAAC,QAAQ,GAAE,MAA4B,GAAG,MAAM;CAiBxD"}
@@ -1,56 +0,0 @@
1
- /**
2
- * IdleDetector — 检测 session 空闲状态
3
- *
4
- * 职责:
5
- * 1. 跟踪每个 session 的最后活动时间
6
- * 2. 提供查询接口,返回超过阈值的空闲 session 列表
7
- *
8
- * 活动定义:UserPromptSubmit / PostToolUse / Stop 等 hook 事件
9
- */
10
- import { logger } from '../core/utils/logger.js';
11
- export class IdleDetector {
12
- lastActivityTime = new Map();
13
- idleThresholdMs;
14
- constructor(options = {}) {
15
- this.idleThresholdMs = options.idleThresholdMs ?? 5 * 60 * 1000;
16
- logger.debug(`[IdleDetector] initialized with threshold=${this.idleThresholdMs}ms`);
17
- }
18
- /**
19
- * 记录 session 活动
20
- */
21
- recordActivity(session_id) {
22
- this.lastActivityTime.set(session_id, Date.now());
23
- }
24
- /**
25
- * 获取空闲的 session 列表
26
- */
27
- getIdleSessions() {
28
- const now = Date.now();
29
- const idle = [];
30
- for (const [session_id, lastTime] of this.lastActivityTime) {
31
- if (now - lastTime > this.idleThresholdMs) {
32
- idle.push(session_id);
33
- }
34
- }
35
- return idle;
36
- }
37
- /**
38
- * 清理过期的 session 记录(可选,避免内存泄漏)
39
- * @param maxAgeMs 超过此时长的记录会被清理,默认 24 小时
40
- */
41
- cleanup(maxAgeMs = 24 * 60 * 60 * 1000) {
42
- const now = Date.now();
43
- let cleaned = 0;
44
- for (const [session_id, lastTime] of this.lastActivityTime) {
45
- if (now - lastTime > maxAgeMs) {
46
- this.lastActivityTime.delete(session_id);
47
- cleaned++;
48
- }
49
- }
50
- if (cleaned > 0) {
51
- logger.debug(`[IdleDetector] cleaned ${cleaned} expired session(s)`);
52
- }
53
- return cleaned;
54
- }
55
- }
56
- //# sourceMappingURL=idle-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"idle-detector.js","sourceRoot":"","sources":["../../src/daemon/idle-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAUjD,MAAM,OAAO,YAAY;IACf,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,eAAe,CAAS;IAEzC,YAAY,UAA+B,EAAE;QAC3C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,6CAA6C,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,UAAkB;QAC/B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,eAAe;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3D,IAAI,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,WAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3D,IAAI,GAAG,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACzC,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,qBAAqB,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -1,53 +0,0 @@
1
- /**
2
- * IdleTrigger — 在 session 空闲时自动触发低优方法论
3
- *
4
- * 职责:
5
- * 1. 检测空闲 session(通过 IdleDetector)
6
- * 2. 读取 idle 方法论配置
7
- * 3. 检查触发条件(无 running methodology、未超频触发)
8
- * 4. 创建 background execution
9
- *
10
- * 借鉴 ruflo 的 12 个后台 worker 设计,在主会话空闲时自动跑低优任务。
11
- */
12
- import type { SQLiteStorage } from '../core/storage/sqlite.js';
13
- import type { MethodologyRegistry } from '../capability/methodology-registry.js';
14
- import type { ExecutionManager } from '../capability/execution-manager.js';
15
- import type { IdleDetector } from './idle-detector.js';
16
- export interface IdleMethodologyConfig {
17
- id: string;
18
- trigger_interval: number;
19
- priority: 'low' | 'medium' | 'high';
20
- }
21
- export interface IdleTriggerOptions {
22
- /**
23
- * 是否启用 idle 触发器
24
- */
25
- enabled?: boolean;
26
- }
27
- export declare class IdleTrigger {
28
- private storage;
29
- private registry;
30
- private executionManager;
31
- private idleDetector;
32
- private lastTriggerTime;
33
- private readonly enabled;
34
- constructor(storage: SQLiteStorage, registry: MethodologyRegistry, executionManager: ExecutionManager, idleDetector: IdleDetector, options?: IdleTriggerOptions);
35
- /**
36
- * 从方法论 YAML 中提取 idle 配置
37
- */
38
- private getIdleMethodologies;
39
- /**
40
- * 触发空闲方法论
41
- * 在 daemon reconcile loop 里定期调用
42
- */
43
- trigger(): Promise<void>;
44
- /**
45
- * 为单个 session 触发 idle 方法论
46
- */
47
- private triggerForSession;
48
- /**
49
- * 清理过期的触发记录
50
- */
51
- cleanup(maxAgeMs?: number): number;
52
- }
53
- //# sourceMappingURL=idle-trigger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"idle-trigger.d.ts","sourceRoot":"","sources":["../../src/daemon/idle-trigger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,WAAW;IAKpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,YAAY;IAPtB,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAGxB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,mBAAmB,EAC7B,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,YAAY,EAClC,OAAO,GAAE,kBAAuB;IAMlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B;;OAEG;YACW,iBAAiB;IAkF/B;;OAEG;IACH,OAAO,CAAC,QAAQ,GAAE,MAA4B,GAAG,MAAM;CAiBxD"}
@@ -1,153 +0,0 @@
1
- /**
2
- * IdleTrigger — 在 session 空闲时自动触发低优方法论
3
- *
4
- * 职责:
5
- * 1. 检测空闲 session(通过 IdleDetector)
6
- * 2. 读取 idle 方法论配置
7
- * 3. 检查触发条件(无 running methodology、未超频触发)
8
- * 4. 创建 background execution
9
- *
10
- * 借鉴 ruflo 的 12 个后台 worker 设计,在主会话空闲时自动跑低优任务。
11
- */
12
- import { logger } from '../core/utils/logger.js';
13
- export class IdleTrigger {
14
- storage;
15
- registry;
16
- executionManager;
17
- idleDetector;
18
- lastTriggerTime = new Map(); // `${session_id}:${methodology_id}` → timestamp
19
- enabled;
20
- constructor(storage, registry, executionManager, idleDetector, options = {}) {
21
- this.storage = storage;
22
- this.registry = registry;
23
- this.executionManager = executionManager;
24
- this.idleDetector = idleDetector;
25
- this.enabled = options.enabled ?? (process.env.ENABLE_IDLE_TRIGGER !== 'false');
26
- logger.info(`[IdleTrigger] ${this.enabled ? 'enabled' : 'disabled'}`);
27
- }
28
- /**
29
- * 从方法论 YAML 中提取 idle 配置
30
- */
31
- getIdleMethodologies() {
32
- const configs = [];
33
- for (const methodology of this.registry.getAll()) {
34
- const idleTrigger = methodology.idle_trigger;
35
- if (!idleTrigger?.enabled)
36
- continue;
37
- configs.push({
38
- id: methodology.id,
39
- trigger_interval: idleTrigger.interval ?? 3600000, // 默认 1 小时
40
- priority: idleTrigger.priority ?? 'low',
41
- });
42
- }
43
- return configs;
44
- }
45
- /**
46
- * 触发空闲方法论
47
- * 在 daemon reconcile loop 里定期调用
48
- */
49
- async trigger() {
50
- if (!this.enabled)
51
- return;
52
- const idleSessions = this.idleDetector.getIdleSessions();
53
- if (idleSessions.length === 0)
54
- return;
55
- const idleMethodologies = this.getIdleMethodologies();
56
- if (idleMethodologies.length === 0)
57
- return;
58
- for (const session_id of idleSessions) {
59
- try {
60
- await this.triggerForSession(session_id, idleMethodologies);
61
- }
62
- catch (err) {
63
- logger.warn(`[IdleTrigger] failed for session ${session_id}: ${err}`);
64
- }
65
- }
66
- }
67
- /**
68
- * 为单个 session 触发 idle 方法论
69
- */
70
- async triggerForSession(session_id, idleMethodologies) {
71
- // 检查是否已有 running methodology
72
- const activeExecution = this.storage.getActiveMethodologyExecution(session_id);
73
- if (activeExecution) {
74
- logger.debug(`[IdleTrigger] session ${session_id} has active execution, skip`);
75
- return;
76
- }
77
- // 按优先级排序(high > medium > low)
78
- const sorted = [...idleMethodologies].sort((a, b) => {
79
- const priority = { high: 3, medium: 2, low: 1 };
80
- return priority[b.priority] - priority[a.priority];
81
- });
82
- for (const config of sorted) {
83
- // 检查上次触发时间
84
- const key = `${session_id}:${config.id}`;
85
- const lastTrigger = this.lastTriggerTime.get(key) ?? 0;
86
- const now = Date.now();
87
- if (now - lastTrigger < config.trigger_interval) {
88
- logger.debug(`[IdleTrigger] ${config.id} for session ${session_id} triggered too recently, skip`);
89
- continue;
90
- }
91
- // 触发 background execution
92
- try {
93
- const methodology = this.registry.get(config.id);
94
- if (!methodology) {
95
- logger.warn(`[IdleTrigger] methodology ${config.id} not found`);
96
- continue;
97
- }
98
- // 获取 project_path(从最近的 event 推断)
99
- const recentEvents = this.storage.queryEvents({ session_id, limit: 1 });
100
- if (recentEvents.length === 0) {
101
- logger.debug(`[IdleTrigger] no events for session ${session_id}, skip`);
102
- continue;
103
- }
104
- const project_path = recentEvents[0].project_path;
105
- // 创建简单的执行计划(idle 方法论通常是单阶段扫描任务)
106
- const plan = {
107
- methodology_id: config.id,
108
- phases: [
109
- {
110
- id: 'scan',
111
- agent: 'researcher',
112
- prompt: `[Idle trigger] Run ${methodology.name}`,
113
- rationale: 'Automated background scan during idle time',
114
- },
115
- ],
116
- rationale: `Idle trigger: ${methodology.description}`,
117
- };
118
- const executionId = this.executionManager.start({
119
- session_id,
120
- methodology_id: config.id,
121
- plan,
122
- mode: 'background',
123
- trigger_type: 'idle',
124
- });
125
- this.lastTriggerTime.set(key, now);
126
- logger.info(`[IdleTrigger] triggered ${config.id} for session ${session_id} (execution=${executionId})`);
127
- // 一次只触发一个,避免资源争抢
128
- break;
129
- }
130
- catch (err) {
131
- logger.warn(`[IdleTrigger] failed to start ${config.id}: ${err}`);
132
- }
133
- }
134
- }
135
- /**
136
- * 清理过期的触发记录
137
- */
138
- cleanup(maxAgeMs = 24 * 60 * 60 * 1000) {
139
- const now = Date.now();
140
- let cleaned = 0;
141
- for (const [key, lastTime] of this.lastTriggerTime) {
142
- if (now - lastTime > maxAgeMs) {
143
- this.lastTriggerTime.delete(key);
144
- cleaned++;
145
- }
146
- }
147
- if (cleaned > 0) {
148
- logger.debug(`[IdleTrigger] cleaned ${cleaned} expired trigger record(s)`);
149
- }
150
- return cleaned;
151
- }
152
- }
153
- //# sourceMappingURL=idle-trigger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"idle-trigger.js","sourceRoot":"","sources":["../../src/daemon/idle-trigger.ts"],"names":[],"mappings":"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"}