@hongmaple0820/scale-engine 0.7.2 → 0.9.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 (224) hide show
  1. package/README.en.md +220 -0
  2. package/README.md +91 -50
  3. package/dist/adapters/ClaudeCodeAdapter.d.ts +2 -0
  4. package/dist/adapters/ClaudeCodeAdapter.js +10 -3
  5. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  6. package/dist/adapters/CodexAdapter.d.ts +1 -0
  7. package/dist/adapters/CodexAdapter.js +10 -3
  8. package/dist/adapters/CodexAdapter.js.map +1 -1
  9. package/dist/adapters/CursorAdapter.js +5 -3
  10. package/dist/adapters/CursorAdapter.js.map +1 -1
  11. package/dist/adapters/GeminiAdapter.d.ts +1 -0
  12. package/dist/adapters/GeminiAdapter.js +9 -3
  13. package/dist/adapters/GeminiAdapter.js.map +1 -1
  14. package/dist/adapters/HermesAdapter.d.ts +1 -0
  15. package/dist/adapters/HermesAdapter.js +9 -3
  16. package/dist/adapters/HermesAdapter.js.map +1 -1
  17. package/dist/adapters/OpenClawAdapter.d.ts +1 -0
  18. package/dist/adapters/OpenClawAdapter.js +9 -3
  19. package/dist/adapters/OpenClawAdapter.js.map +1 -1
  20. package/dist/adapters/OpenCodeAdapter.js +5 -3
  21. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  22. package/dist/adapters/QCoderAdapter.d.ts +1 -0
  23. package/dist/adapters/QCoderAdapter.js +9 -3
  24. package/dist/adapters/QCoderAdapter.js.map +1 -1
  25. package/dist/adapters/TraeAdapter.d.ts +1 -0
  26. package/dist/adapters/TraeAdapter.js +9 -3
  27. package/dist/adapters/TraeAdapter.js.map +1 -1
  28. package/dist/adapters/VSCAdapter.d.ts +1 -0
  29. package/dist/adapters/VSCAdapter.js +9 -3
  30. package/dist/adapters/VSCAdapter.js.map +1 -1
  31. package/dist/adapters/WorkBuddyAdapter.d.ts +1 -0
  32. package/dist/adapters/WorkBuddyAdapter.js +9 -3
  33. package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
  34. package/dist/agents/AgentChannel.d.ts +43 -0
  35. package/dist/agents/AgentChannel.js +136 -0
  36. package/dist/agents/AgentChannel.js.map +1 -0
  37. package/dist/agents/AgentCoordinator.d.ts +29 -0
  38. package/dist/agents/AgentCoordinator.js +136 -0
  39. package/dist/agents/AgentCoordinator.js.map +1 -0
  40. package/dist/agents/AgentDispatcher.d.ts +24 -0
  41. package/dist/agents/AgentDispatcher.js +112 -0
  42. package/dist/agents/AgentDispatcher.js.map +1 -0
  43. package/dist/agents/AgentManager.d.ts +14 -0
  44. package/dist/agents/AgentManager.js +85 -0
  45. package/dist/agents/AgentManager.js.map +1 -0
  46. package/dist/agents/AgentPool.d.ts +59 -0
  47. package/dist/agents/AgentPool.js +192 -0
  48. package/dist/agents/AgentPool.js.map +1 -0
  49. package/dist/agents/AgentRegistry.d.ts +20 -0
  50. package/dist/agents/AgentRegistry.js +36 -0
  51. package/dist/agents/AgentRegistry.js.map +1 -0
  52. package/dist/agents/AgentSourceLoader.d.ts +73 -0
  53. package/dist/agents/AgentSourceLoader.js +101 -0
  54. package/dist/agents/AgentSourceLoader.js.map +1 -0
  55. package/dist/agents/IAgent.d.ts +53 -0
  56. package/dist/agents/IAgent.js +4 -0
  57. package/dist/agents/IAgent.js.map +1 -0
  58. package/dist/agents/definitions/debugger.d.ts +2 -0
  59. package/dist/agents/definitions/debugger.js +6 -0
  60. package/dist/agents/definitions/debugger.js.map +1 -0
  61. package/dist/agents/definitions/doc-writer.d.ts +2 -0
  62. package/dist/agents/definitions/doc-writer.js +6 -0
  63. package/dist/agents/definitions/doc-writer.js.map +1 -0
  64. package/dist/agents/definitions/implementer.d.ts +2 -0
  65. package/dist/agents/definitions/implementer.js +6 -0
  66. package/dist/agents/definitions/implementer.js.map +1 -0
  67. package/dist/agents/definitions/planner.d.ts +2 -0
  68. package/dist/agents/definitions/planner.js +6 -0
  69. package/dist/agents/definitions/planner.js.map +1 -0
  70. package/dist/agents/definitions/researcher.d.ts +2 -0
  71. package/dist/agents/definitions/researcher.js +6 -0
  72. package/dist/agents/definitions/researcher.js.map +1 -0
  73. package/dist/agents/definitions/reviewer.d.ts +2 -0
  74. package/dist/agents/definitions/reviewer.js +6 -0
  75. package/dist/agents/definitions/reviewer.js.map +1 -0
  76. package/dist/agents/definitions/security.d.ts +2 -0
  77. package/dist/agents/definitions/security.js +6 -0
  78. package/dist/agents/definitions/security.js.map +1 -0
  79. package/dist/agents/definitions/tester.d.ts +2 -0
  80. package/dist/agents/definitions/tester.js +6 -0
  81. package/dist/agents/definitions/tester.js.map +1 -0
  82. package/dist/agents/index.d.ts +23 -0
  83. package/dist/agents/index.js +44 -0
  84. package/dist/agents/index.js.map +1 -0
  85. package/dist/agents/profiles.d.ts +26 -0
  86. package/dist/agents/profiles.js +197 -0
  87. package/dist/agents/profiles.js.map +1 -0
  88. package/dist/agents/types.d.ts +262 -0
  89. package/dist/agents/types.js +4 -0
  90. package/dist/agents/types.js.map +1 -0
  91. package/dist/api/cli.js +136 -3
  92. package/dist/api/cli.js.map +1 -1
  93. package/dist/api/doctor.js +0 -2
  94. package/dist/api/doctor.js.map +1 -1
  95. package/dist/api/mcp.js +0 -5
  96. package/dist/api/mcp.js.map +1 -1
  97. package/dist/artifact/fsm.js +3 -5
  98. package/dist/artifact/fsm.js.map +1 -1
  99. package/dist/artifact/sqliteStore.js +1 -14
  100. package/dist/artifact/sqliteStore.js.map +1 -1
  101. package/dist/artifact/store.js +2 -4
  102. package/dist/artifact/store.js.map +1 -1
  103. package/dist/artifact/types.d.ts +98 -1
  104. package/dist/artifact/types.js +0 -3
  105. package/dist/artifact/types.js.map +1 -1
  106. package/dist/cli/liteCommands.d.ts +81 -0
  107. package/dist/cli/liteCommands.js +148 -0
  108. package/dist/cli/liteCommands.js.map +1 -0
  109. package/dist/cli/phaseCommands.d.ts +129 -0
  110. package/dist/cli/phaseCommands.js +572 -0
  111. package/dist/cli/phaseCommands.js.map +1 -0
  112. package/dist/context/AntiPatternRegistry.d.ts +38 -0
  113. package/dist/context/AntiPatternRegistry.js +203 -0
  114. package/dist/context/AntiPatternRegistry.js.map +1 -0
  115. package/dist/context/CavemanCompressor.d.ts +20 -0
  116. package/dist/context/CavemanCompressor.js +14 -0
  117. package/dist/context/CavemanCompressor.js.map +1 -0
  118. package/dist/context/ContextBuilder.js +132 -4
  119. package/dist/context/ContextBuilder.js.map +1 -1
  120. package/dist/context/SessionStartSequence.d.ts +54 -0
  121. package/dist/context/SessionStartSequence.js +153 -0
  122. package/dist/context/SessionStartSequence.js.map +1 -0
  123. package/dist/core/container.js +4 -2
  124. package/dist/core/container.js.map +1 -1
  125. package/dist/core/eventBus.js +5 -6
  126. package/dist/core/eventBus.js.map +1 -1
  127. package/dist/dashboard/DashboardServer.js +3 -6
  128. package/dist/dashboard/DashboardServer.js.map +1 -1
  129. package/dist/dashboard/index.d.ts +2 -0
  130. package/dist/dashboard/index.js +2 -0
  131. package/dist/dashboard/index.js.map +1 -0
  132. package/dist/dashboard/server.d.ts +52 -0
  133. package/dist/dashboard/server.js +83 -0
  134. package/dist/dashboard/server.js.map +1 -0
  135. package/dist/evolution/AutoDefectCreator.js +2 -4
  136. package/dist/evolution/AutoDefectCreator.js.map +1 -1
  137. package/dist/evolution/BehaviorTracker.js +3 -5
  138. package/dist/evolution/BehaviorTracker.js.map +1 -1
  139. package/dist/evolution/EvolutionEngine.js +3 -14
  140. package/dist/evolution/EvolutionEngine.js.map +1 -1
  141. package/dist/evolution/EvolutionEvaluator.js +1 -4
  142. package/dist/evolution/EvolutionEvaluator.js.map +1 -1
  143. package/dist/evolution/LessonValidator.js +0 -4
  144. package/dist/evolution/LessonValidator.js.map +1 -1
  145. package/dist/evolution/PatternExtractor.d.ts +40 -0
  146. package/dist/evolution/PatternExtractor.js +83 -0
  147. package/dist/evolution/PatternExtractor.js.map +1 -0
  148. package/dist/evolution/SkillCreator.d.ts +75 -0
  149. package/dist/evolution/SkillCreator.js +219 -0
  150. package/dist/evolution/SkillCreator.js.map +1 -0
  151. package/dist/fsm/FSMAgentBridge.js +11 -13
  152. package/dist/fsm/FSMAgentBridge.js.map +1 -1
  153. package/dist/guardrails/DetectorEnhanced.js +32 -30
  154. package/dist/guardrails/DetectorEnhanced.js.map +1 -1
  155. package/dist/guardrails/GateEvaluator.d.ts +18 -0
  156. package/dist/guardrails/GateEvaluator.js +129 -0
  157. package/dist/guardrails/GateEvaluator.js.map +1 -0
  158. package/dist/guardrails/Gateway.js +6 -7
  159. package/dist/guardrails/Gateway.js.map +1 -1
  160. package/dist/guardrails/ReviewEnforcer.d.ts +52 -0
  161. package/dist/guardrails/ReviewEnforcer.js +117 -0
  162. package/dist/guardrails/ReviewEnforcer.js.map +1 -0
  163. package/dist/guardrails/advancedDetectors.js +33 -31
  164. package/dist/guardrails/advancedDetectors.js.map +1 -1
  165. package/dist/guardrails/detectors.js +76 -16
  166. package/dist/guardrails/detectors.js.map +1 -1
  167. package/dist/hooks/HookDeployer.js +2 -3
  168. package/dist/hooks/HookDeployer.js.map +1 -1
  169. package/dist/hooks/HookGeneratorEnhanced.js +2 -3
  170. package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
  171. package/dist/index.d.ts +20 -2
  172. package/dist/index.js +19 -2
  173. package/dist/index.js.map +1 -1
  174. package/dist/knowledge/KnowledgeBase.d.ts +26 -0
  175. package/dist/knowledge/KnowledgeBase.js +109 -8
  176. package/dist/knowledge/KnowledgeBase.js.map +1 -1
  177. package/dist/knowledge/SQLiteKnowledgeBase.js +1 -3
  178. package/dist/knowledge/SQLiteKnowledgeBase.js.map +1 -1
  179. package/dist/knowledge/UbiquitousLanguageManager.d.ts +49 -0
  180. package/dist/knowledge/UbiquitousLanguageManager.js +133 -0
  181. package/dist/knowledge/UbiquitousLanguageManager.js.map +1 -0
  182. package/dist/routing/ModelRouter.js +0 -2
  183. package/dist/routing/ModelRouter.js.map +1 -1
  184. package/dist/skills/ExternalSkills.d.ts +3 -0
  185. package/dist/skills/ExternalSkills.js +20 -0
  186. package/dist/skills/ExternalSkills.js.map +1 -0
  187. package/dist/skills/GrillingSessionSkill.d.ts +65 -0
  188. package/dist/skills/GrillingSessionSkill.js +113 -0
  189. package/dist/skills/GrillingSessionSkill.js.map +1 -0
  190. package/dist/skills/GrillingTemplates.d.ts +7 -0
  191. package/dist/skills/GrillingTemplates.js +38 -0
  192. package/dist/skills/GrillingTemplates.js.map +1 -0
  193. package/dist/skills/SkillDiscovery.d.ts +68 -17
  194. package/dist/skills/SkillDiscovery.js +294 -115
  195. package/dist/skills/SkillDiscovery.js.map +1 -1
  196. package/dist/skills/SkillExecutor.js +1 -3
  197. package/dist/skills/SkillExecutor.js.map +1 -1
  198. package/dist/skills/SkillInstaller.d.ts +40 -0
  199. package/dist/skills/SkillInstaller.js +112 -0
  200. package/dist/skills/SkillInstaller.js.map +1 -0
  201. package/dist/skills/SkillRegistry.js +1 -2
  202. package/dist/skills/SkillRegistry.js.map +1 -1
  203. package/dist/skills/TriggerEngine.js +3 -5
  204. package/dist/skills/TriggerEngine.js.map +1 -1
  205. package/dist/skills/index.d.ts +3 -0
  206. package/dist/skills/index.js +3 -0
  207. package/dist/skills/index.js.map +1 -1
  208. package/dist/tasks/IssueTriageFSM.d.ts +26 -0
  209. package/dist/tasks/IssueTriageFSM.js +107 -0
  210. package/dist/tasks/IssueTriageFSM.js.map +1 -0
  211. package/dist/tasks/TaskEngine.js +1 -5
  212. package/dist/tasks/TaskEngine.js.map +1 -1
  213. package/dist/workflows/DAGBuilder.d.ts +52 -0
  214. package/dist/workflows/DAGBuilder.js +169 -0
  215. package/dist/workflows/DAGBuilder.js.map +1 -0
  216. package/dist/workflows/WorkflowExecutor.js +2 -4
  217. package/dist/workflows/WorkflowExecutor.js.map +1 -1
  218. package/dist/workflows/WorkflowOrchestrator.d.ts +48 -0
  219. package/dist/workflows/WorkflowOrchestrator.js +181 -0
  220. package/dist/workflows/WorkflowOrchestrator.js.map +1 -0
  221. package/dist/workflows/index.d.ts +2 -4
  222. package/dist/workflows/index.js +4 -4
  223. package/dist/workflows/index.js.map +1 -1
  224. package/package.json +2 -2
@@ -0,0 +1,133 @@
1
+ // SCALE Engine - Ubiquitous Language Manager (mattpocock/skills style)
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from "node:fs";
3
+ import { join, dirname } from "node:path";
4
+ import { logger } from "../core/logger.js";
5
+ export class UbiquitousLanguageManager {
6
+ constructor(projectDir, eventBus, contextMdPath, adrDir) {
7
+ this.terms = new Map();
8
+ this.adrs = new Map();
9
+ this.dirty = false;
10
+ this.contextMdPath = contextMdPath ?? join(projectDir, "CONTEXT.md");
11
+ this.adrDir = adrDir ?? join(projectDir, "docs", "adr");
12
+ this.eventBus = eventBus ?? null;
13
+ this.loadFromFiles();
14
+ }
15
+ loadContextMd() {
16
+ if (!existsSync(this.contextMdPath))
17
+ return this.terms;
18
+ const content = readFileSync(this.contextMdPath, "utf-8");
19
+ this.terms = this.parseContextMd(content);
20
+ logger.info({ count: this.terms.size }, "Loaded terms");
21
+ return this.terms;
22
+ }
23
+ updateTerm(term, definition, source) {
24
+ const existing = this.terms.get(term);
25
+ this.terms.set(term, { term, definition, examples: existing?.examples ?? [], aliases: existing?.aliases ?? [], lastUpdated: Date.now(), source });
26
+ this.dirty = true;
27
+ this.eventBus?.emit("term.updated", { term, source });
28
+ }
29
+ removeTerm(term) { this.terms.delete(term); this.dirty = true; }
30
+ detectAmbiguity() {
31
+ const reports = [];
32
+ for (const [term, def] of this.terms) {
33
+ for (const alias of def.aliases) {
34
+ const aliasDef = this.terms.get(alias);
35
+ if (aliasDef && aliasDef.definition !== def.definition)
36
+ reports.push({ term, definitions: [def.definition, aliasDef.definition], sources: [def.source, aliasDef.source] });
37
+ }
38
+ }
39
+ if (reports.length)
40
+ this.eventBus?.emit("term.ambiguity_detected", { reports });
41
+ return reports;
42
+ }
43
+ getTerm(term) { return this.terms.get(term); }
44
+ listTerms() { return Array.from(this.terms.values()); }
45
+ proposeADR(title, context, decision) {
46
+ const now = Date.now();
47
+ const num = this.getNextADRNumber();
48
+ const id = "ADR-" + num + "-" + this.slugify(title);
49
+ const adr = { id, title, status: "proposed", context, decision, consequences: "", createdAt: now, updatedAt: now };
50
+ this.adrs.set(id, adr);
51
+ this.dirty = true;
52
+ this.eventBus?.emit("adr.proposed", { adrId: id });
53
+ return adr;
54
+ }
55
+ acceptADR(id) {
56
+ const adr = this.adrs.get(id);
57
+ if (!adr || adr.status !== "proposed")
58
+ return;
59
+ adr.status = "accepted";
60
+ adr.updatedAt = Date.now();
61
+ this.dirty = true;
62
+ this.eventBus?.emit("adr.accepted", { adrId: id });
63
+ }
64
+ deprecateADR(id, supersededBy) {
65
+ const adr = this.adrs.get(id);
66
+ if (!adr || adr.status !== "accepted")
67
+ return;
68
+ adr.status = "deprecated";
69
+ adr.supersededBy = supersededBy;
70
+ adr.updatedAt = Date.now();
71
+ this.dirty = true;
72
+ this.eventBus?.emit("adr.deprecated", { adrId: id, supersededBy });
73
+ }
74
+ getADR(id) { return this.adrs.get(id); }
75
+ listADRs() { return Array.from(this.adrs.values()); }
76
+ generateContextMd() {
77
+ const lines = ["# CONTEXT.md", "", "| Term | Definition | Examples | Aliases | Source |", "|------|------------|----------|---------|--------|"];
78
+ for (const t of this.terms.values())
79
+ lines.push("| " + t.term + " | " + t.definition + " | " + (t.examples.join("; ") || "-") + " | " + (t.aliases.join(", ") || "-") + " | " + t.source + " |");
80
+ return lines.join("\n");
81
+ }
82
+ generateADRMarkdown(adr) {
83
+ return "# " + adr.id + ": " + adr.title + "\n\n**Status**: " + adr.status + "\n\n## Context\n" + adr.context + "\n\n## Decision\n" + adr.decision;
84
+ }
85
+ async sync() {
86
+ if (!this.dirty)
87
+ return;
88
+ this.ensureDir(dirname(this.contextMdPath));
89
+ writeFileSync(this.contextMdPath, this.generateContextMd(), "utf-8");
90
+ this.ensureDir(this.adrDir);
91
+ for (const adr of this.adrs.values())
92
+ writeFileSync(join(this.adrDir, adr.id + ".md"), this.generateADRMarkdown(adr), "utf-8");
93
+ this.dirty = false;
94
+ }
95
+ loadFromFiles() { this.loadContextMd(); this.loadADRs(); }
96
+ loadADRs() {
97
+ if (!existsSync(this.adrDir))
98
+ return;
99
+ for (const file of readdirSync(this.adrDir)) {
100
+ if (!file.endsWith(".md") || !file.startsWith("ADR-"))
101
+ continue;
102
+ const adr = this.parseADRMarkdown(readFileSync(join(this.adrDir, file), "utf-8"), file.replace(".md", ""));
103
+ if (adr)
104
+ this.adrs.set(adr.id, adr);
105
+ }
106
+ }
107
+ parseContextMd(content) {
108
+ const terms = new Map();
109
+ for (const line of content.split("\n")) {
110
+ if (line.startsWith("|") && !line.includes("Term") && !line.includes("------")) {
111
+ const parts = line.split("|").map(p => p.trim()).filter(Boolean);
112
+ if (parts.length >= 5)
113
+ terms.set(parts[0], { term: parts[0], definition: parts[1], examples: parts[2] === "-" ? [] : parts[2].split("; "), aliases: parts[3] === "-" ? [] : parts[3].split(", "), lastUpdated: Date.now(), source: parts[4] || "user-defined" });
114
+ }
115
+ }
116
+ return terms;
117
+ }
118
+ parseADRMarkdown(content, id) {
119
+ const titleMatch = /^# ADR-\d+: (.+)$/m.exec(content);
120
+ const statusMatch = /\*\*Status\*\*:\s*(\w+)/.exec(content);
121
+ return { id, title: titleMatch?.[1] ?? "Untitled", status: statusMatch?.[1] ?? "proposed", context: "", decision: "", consequences: "", createdAt: Date.now(), updatedAt: Date.now() };
122
+ }
123
+ getNextADRNumber() { let max = 0; for (const adr of this.adrs.values()) {
124
+ const m = /^ADR-(\d+)/.exec(adr.id);
125
+ if (m)
126
+ max = Math.max(max, parseInt(m[1], 10));
127
+ } return max + 1; }
128
+ slugify(title) { return title.toLowerCase().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").slice(0, 50); }
129
+ ensureDir(path) { if (!existsSync(path))
130
+ mkdirSync(path, { recursive: true }); }
131
+ }
132
+ export function createUbiquitousLanguageManager(projectDir, eventBus) { return new UbiquitousLanguageManager(projectDir, eventBus); }
133
+ //# sourceMappingURL=UbiquitousLanguageManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UbiquitousLanguageManager.js","sourceRoot":"","sources":["../../src/knowledge/UbiquitousLanguageManager.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,6 @@ export const DEFAULT_MODELS = {
9
9
  local: { tier: 'local', name: 'local-llm', maxTokens: 32_000, costPerMToken: 0.0 },
10
10
  };
11
11
  export class ModelRouter {
12
- eventBus;
13
- models;
14
12
  constructor(eventBus, models) {
15
13
  this.eventBus = eventBus;
16
14
  this.models = { ...DEFAULT_MODELS, ...models };
@@ -1 +1 @@
1
- {"version":3,"file":"ModelRouter.js","sourceRoot":"","sources":["../../src/routing/ModelRouter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModelRouter.js","sourceRoot":"","sources":["../../src/routing/ModelRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SkillRegistry } from './SkillRegistry.js';
2
+ import type { IEventBus } from '../core/eventBus.js';
3
+ export declare function registerExternalSkills(registry: SkillRegistry, eventBus: IEventBus): void;
@@ -0,0 +1,20 @@
1
+ export function registerExternalSkills(registry, eventBus) {
2
+ const skills = [
3
+ { id: 'web-access', name: 'Web Access', description: 'CDP browser automation', domain: 'execution', triggers: [{ type: 'taskType', value: ['web-scraping'], weight: 1.0 }], execution: { type: 'skill-file', config: { skillPath: '~/.claude/skills/web-access/SKILL.md' } }, priority: 85, installed: true },
4
+ { id: 'playwright', name: 'Playwright', description: 'CLI browser automation', domain: 'execution', triggers: [{ type: 'taskType', value: ['e2e-testing'], weight: 0.9 }], execution: { type: 'skill-file', config: { skillPath: '~/.claude/skills/playwright/SKILL.md' } }, priority: 75, installed: true },
5
+ { id: 'playwright-interactive', name: 'Playwright Interactive', description: 'Persistent session UI debug', domain: 'verification', triggers: [{ type: 'taskType', value: ['ui-debugging'], weight: 0.95 }], execution: { type: 'skill-file', config: { skillPath: '~/.claude/skills/playwright-interactive/SKILL.md' } }, priority: 80, installed: true },
6
+ { id: 'cua', name: 'CUA', description: 'Computer use agent', domain: 'execution', triggers: [{ type: 'taskType', value: ['desktop-automation'], weight: 1.0 }], execution: { type: 'cli-command', config: { command: 'npx @anthropic/mcp-cua' } }, priority: 90, installed: false, source: 'https://github.com/trycua/cua' },
7
+ { id: 'awesome-design-md', name: 'Awesome Design', description: 'Brand design specs', domain: 'planning', triggers: [{ type: 'taskType', value: ['ui-design'], weight: 1.0 }], execution: { type: 'skill-file', config: { skillPath: '~/.claude/skills/awesome-design-md/SKILL.md' } }, priority: 88, installed: true },
8
+ { id: 'ui-ux-pro-max', name: 'UI/UX Pro Max', description: 'UX guidelines database', domain: 'planning', triggers: [{ type: 'taskType', value: ['ui-design'], weight: 0.95 }], execution: { type: 'skill-file', config: { skillPath: '~/.claude/skills/ui-ux-pro-max/SKILL.md' } }, priority: 85, installed: true },
9
+ { id: 'graphify', name: 'Graphify', description: 'Knowledge graph generator', domain: 'context', triggers: [{ type: 'taskType', value: ['knowledge-graph'], weight: 1.0 }], execution: { type: 'skill-file', config: { skillPath: '~/.claude/skills/graphify/SKILL.md' } }, priority: 90, installed: true },
10
+ // 未安装技能(SkillInstaller 可交互式安装)
11
+ { id: 'fireworks-tech-graph', name: 'Fireworks Tech Graph', description: 'Tech flow diagrams', domain: 'planning', triggers: [{ type: 'taskType', value: ['diagram'], weight: 1.0 }], execution: { type: 'skill-file', config: { skillPath: '~/.claude/skills/fireworks-tech-graph/SKILL.md' } }, priority: 82, installed: false, source: 'https://github.com/yizhiyanhua-ai/fireworks-tech-graph' },
12
+ { id: 'excalidraw-diagram-generator', name: 'Excalidraw Generator', description: 'Hand-drawn style diagrams', domain: 'planning', triggers: [{ type: 'taskType', value: ['sketch-diagram'], weight: 0.9 }], execution: { type: 'skill-file', config: { skillPath: '~/.claude/skills/excalidraw-diagram-generator/SKILL.md' } }, priority: 78, installed: false, source: 'https://github.com/github/awesome-copilot/tree/main/skills/excalidraw-diagram-generator' },
13
+ { id: 'architecture-diagram-generator', name: 'Architecture Diagram', description: 'System architecture diagrams', domain: 'planning', triggers: [{ type: 'taskType', value: ['architecture-diagram'], weight: 1.0 }], execution: { type: 'skill-file', config: { skillPath: '~/.claude/skills/architecture-diagram-generator/SKILL.md' } }, priority: 85, installed: false, source: 'https://github.com/Cocoon-AI/architecture-diagram-generator' },
14
+ { id: 'hyperframes', name: 'Hyperframes', description: 'HeyGen video generation', domain: 'execution', triggers: [{ type: 'taskType', value: ['video-generation'], weight: 1.0 }], execution: { type: 'cli-command', config: { command: 'npx @heygen/hyperframes' } }, priority: 75, installed: false, source: 'https://github.com/heygen-com/hyperframes' },
15
+ { id: 'guizang-ppt-skill', name: 'Guizang PPT', description: 'PPT auto generation', domain: 'execution', triggers: [{ type: 'taskType', value: ['ppt-generation'], weight: 1.0 }], execution: { type: 'skill-file', config: { skillPath: '~/.claude/skills/guizang-ppt-skill/SKILL.md' } }, priority: 70, installed: false, source: 'https://github.com/op7418/guizang-ppt-skill' },
16
+ ];
17
+ registry.registerBatch(skills);
18
+ eventBus.emit('external-skills.registered', { count: skills.length });
19
+ }
20
+ //# sourceMappingURL=ExternalSkills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalSkills.js","sourceRoot":"","sources":["../../src/skills/ExternalSkills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { IEventBus } from "../core/eventBus.js";
2
+ import type { Timestamp } from "../artifact/types.js";
3
+ import { type GrillingTopic } from "./GrillingTemplates.js";
4
+ export interface GrillingOption {
5
+ id: string;
6
+ label: string;
7
+ explanation: string;
8
+ risk?: string;
9
+ }
10
+ export interface GrillingQuestion {
11
+ id: string;
12
+ question: string;
13
+ options: GrillingOption[];
14
+ branchMap: Record<string, string>;
15
+ contextHint?: string;
16
+ }
17
+ export interface GrillingSession {
18
+ id: string;
19
+ topic: GrillingTopic;
20
+ currentNodeId: string;
21
+ history: Array<{
22
+ questionId: string;
23
+ selectedOption: string;
24
+ timestamp: Timestamp;
25
+ }>;
26
+ concluded: boolean;
27
+ conclusion?: GrillingConclusion;
28
+ }
29
+ export interface GrillingConclusion {
30
+ summary: string;
31
+ decisions: string[];
32
+ risks: string[];
33
+ nextSteps: string[];
34
+ artifactsToUpdate: string[];
35
+ }
36
+ export interface GrillingResponse {
37
+ type: "question" | "conclusion";
38
+ question?: GrillingQuestion;
39
+ conclusion?: GrillingConclusion;
40
+ }
41
+ export interface IGrillingSessionManager {
42
+ startSession(topic: GrillingTopic): GrillingSession;
43
+ handleAnswer(sessionId: string, selectedOption: string): GrillingResponse;
44
+ getSession(sessionId: string): GrillingSession | undefined;
45
+ endSession(sessionId: string): GrillingConclusion | undefined;
46
+ }
47
+ export declare class GrillingSessionManager implements IGrillingSessionManager {
48
+ private sessions;
49
+ private templates;
50
+ private eventBus;
51
+ constructor(eventBus?: IEventBus);
52
+ startSession(topic: GrillingTopic): GrillingSession;
53
+ handleAnswer(sessionId: string, selectedOption: string): GrillingResponse;
54
+ getSession(sessionId: string): GrillingSession | undefined;
55
+ endSession(sessionId: string): GrillingConclusion | undefined;
56
+ private getCurrentQuestion;
57
+ private concludeSession;
58
+ private extractDecisions;
59
+ private extractRisks;
60
+ private findQuestion;
61
+ private generateSummary;
62
+ private generateNextSteps;
63
+ private suggestArtifactUpdates;
64
+ }
65
+ export declare function createGrillingSessionManager(eventBus?: IEventBus): IGrillingSessionManager;
@@ -0,0 +1,113 @@
1
+ // SCALE Engine - Grilling Session Skill (mattpocock/skills style)
2
+ // 递归决策树探索,一次一个问题
3
+ import { getGrillingTemplate } from "./GrillingTemplates.js";
4
+ import { logger } from "../core/logger.js";
5
+ export class GrillingSessionManager {
6
+ constructor(eventBus) {
7
+ this.sessions = new Map();
8
+ this.eventBus = eventBus ?? null;
9
+ this.templates = getGrillingTemplate;
10
+ }
11
+ startSession(topic) {
12
+ const template = this.templates[topic] ?? getGrillingTemplate(topic);
13
+ const id = "GRILL-" + Date.now() + "-" + Math.random().toString(36).slice(2, 6);
14
+ const session = { id, topic, currentNodeId: template[0]?.id ?? "Q1", history: [], concluded: false };
15
+ this.sessions.set(id, session);
16
+ logger.info({ sessionId: id, topic }, "Grilling session started");
17
+ this.eventBus?.emit("grilling.session_started", { sessionId: id, topic });
18
+ return session;
19
+ }
20
+ handleAnswer(sessionId, selectedOption) {
21
+ const session = this.sessions.get(sessionId);
22
+ if (!session || session.concluded)
23
+ return { type: "conclusion", conclusion: session?.conclusion };
24
+ session.history.push({ questionId: session.currentNodeId, selectedOption, timestamp: Date.now() });
25
+ const currentQuestion = this.getCurrentQuestion(session);
26
+ if (!currentQuestion)
27
+ return this.concludeSession(session);
28
+ const nextNodeId = currentQuestion.branchMap[selectedOption];
29
+ if (nextNodeId === "CONCLUSION" || !nextNodeId)
30
+ return this.concludeSession(session);
31
+ session.currentNodeId = nextNodeId;
32
+ const nextQuestion = this.getCurrentQuestion(session);
33
+ return { type: "question", question: nextQuestion };
34
+ }
35
+ getSession(sessionId) { return this.sessions.get(sessionId); }
36
+ endSession(sessionId) {
37
+ const session = this.sessions.get(sessionId);
38
+ if (!session)
39
+ return undefined;
40
+ if (!session.concluded)
41
+ this.concludeSession(session);
42
+ this.sessions.delete(sessionId);
43
+ this.eventBus?.emit("grilling.session_ended", { sessionId });
44
+ return session.conclusion;
45
+ }
46
+ getCurrentQuestion(session) {
47
+ const template = this.templates[session.topic];
48
+ return template?.find(q => q.id === session.currentNodeId);
49
+ }
50
+ concludeSession(session) {
51
+ session.concluded = true;
52
+ const decisions = this.extractDecisions(session.history);
53
+ const risks = this.extractRisks(session.history);
54
+ session.conclusion = {
55
+ summary: this.generateSummary(decisions),
56
+ decisions,
57
+ risks,
58
+ nextSteps: this.generateNextSteps(decisions),
59
+ artifactsToUpdate: this.suggestArtifactUpdates(decisions),
60
+ };
61
+ logger.info({ sessionId: session.id, decisions: decisions.length }, "Grilling concluded");
62
+ this.eventBus?.emit("grilling.concluded", { sessionId: session.id, conclusion: session.conclusion });
63
+ return { type: "conclusion", conclusion: session.conclusion };
64
+ }
65
+ extractDecisions(history) {
66
+ return history.map(h => h.selectedOption);
67
+ }
68
+ extractRisks(history) {
69
+ const risks = [];
70
+ for (const h of history) {
71
+ const question = this.findQuestion(h.questionId);
72
+ const option = question?.options.find(o => o.id === h.selectedOption);
73
+ if (option?.risk)
74
+ risks.push(option.risk);
75
+ }
76
+ return risks;
77
+ }
78
+ findQuestion(id) {
79
+ for (const template of Object.values(this.templates)) {
80
+ const q = template.find(t => t.id === id);
81
+ if (q)
82
+ return q;
83
+ }
84
+ return undefined;
85
+ }
86
+ generateSummary(decisions) {
87
+ return "Decisions made: " + decisions.join(" -> ");
88
+ }
89
+ generateNextSteps(decisions) {
90
+ const steps = [];
91
+ if (decisions.includes("internal"))
92
+ steps.push("Review internal user workflow");
93
+ if (decisions.includes("external"))
94
+ steps.push("Design public UX");
95
+ if (decisions.includes("deep"))
96
+ steps.push("Define interface contract");
97
+ if (decisions.includes("shallow"))
98
+ steps.push("Plan module composition");
99
+ return steps;
100
+ }
101
+ suggestArtifactUpdates(decisions) {
102
+ const artifacts = [];
103
+ if (decisions.length > 3)
104
+ artifacts.push("CONTEXT.md");
105
+ if (decisions.includes("enterprise") || decisions.includes("k8s"))
106
+ artifacts.push("ADR");
107
+ return artifacts;
108
+ }
109
+ }
110
+ export function createGrillingSessionManager(eventBus) {
111
+ return new GrillingSessionManager(eventBus);
112
+ }
113
+ //# sourceMappingURL=GrillingSessionSkill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrillingSessionSkill.js","sourceRoot":"","sources":["../../src/skills/GrillingSessionSkill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { GrillingQuestion } from "./GrillingSessionSkill.js";
2
+ export declare const REQUIREMENT_CLARITY_TREE: GrillingQuestion[];
3
+ export declare const DESIGN_DEPTH_TREE: GrillingQuestion[];
4
+ export declare const TECH_SELECTION_TREE: GrillingQuestion[];
5
+ export type GrillingTopic = "requirement-clarity" | "design-depth" | "tech-selection";
6
+ export declare const GRILLING_TEMPLATES: Record<GrillingTopic, GrillingQuestion[]>;
7
+ export declare function getGrillingTemplate(topic: GrillingTopic): GrillingQuestion[];
@@ -0,0 +1,38 @@
1
+ // SCALE Engine - Grilling Templates (mattpocock/skills style)
2
+ // 预定义决策树模板
3
+ // ========== Requirement Clarity 决策树 ==========
4
+ export const REQUIREMENT_CLARITY_TREE = [
5
+ { id: "Q1", question: "Target users?", options: [{ id: "internal", label: "Internal users", explanation: "Team/company internal" }, { id: "external", label: "External users", explanation: "Public users" }, { id: "both", label: "Mixed", explanation: "Both types" }], branchMap: { internal: "Q2", external: "Q3", both: "Q4" } },
6
+ { id: "Q2", question: "Internal complexity level?", options: [{ id: "simple", label: "Simple", explanation: "Basic workflow" }, { id: "moderate", label: "Moderate", explanation: "Multiple steps" }, { id: "complex", label: "Complex", explanation: "Enterprise-grade" }], branchMap: { simple: "CONCLUSION", moderate: "CONCLUSION", complex: "Q5" } },
7
+ { id: "Q3", question: "External user scale?", options: [{ id: "small", label: "Small (<100)", explanation: "Limited user base" }, { id: "medium", label: "Medium (100-10k)", explanation: "Growing user base" }, { id: "large", label: "Large (>10k)", explanation: "High scale, need optimization" }], branchMap: { small: "CONCLUSION", medium: "Q6", large: "Q7" } },
8
+ { id: "Q4", question: "Primary user focus?", options: [{ id: "internal", label: "Internal priority", explanation: "Internal needs first" }, { id: "external", label: "External priority", explanation: "Public users first" }, { id: "balanced", label: "Balanced", explanation: "Equal consideration" }], branchMap: { internal: "Q2", external: "Q3", balanced: "Q8" } },
9
+ { id: "Q5", question: "Security requirements?", options: [{ id: "basic", label: "Basic auth", explanation: "Simple authentication" }, { id: "advanced", label: "Role-based", explanation: "RBAC permissions" }, { id: "enterprise", label: "Enterprise SSO", explanation: "SSO integration required" }], branchMap: { basic: "CONCLUSION", advanced: "CONCLUSION", enterprise: "CONCLUSION" } },
10
+ { id: "Q6", question: "User registration needed?", options: [{ id: "optional", label: "Optional", explanation: "Guest access available" }, { id: "required", label: "Required", explanation: "Must register to use" }, { id: "social", label: "Social login", explanation: "OAuth/Social auth" }], branchMap: { optional: "CONCLUSION", required: "CONCLUSION", social: "CONCLUSION" } },
11
+ { id: "Q7", question: "Performance critical?", options: [{ id: "yes", label: "Yes - high traffic", explanation: "Need high performance" }, { id: "no", label: "No - normal traffic", explanation: "Standard performance OK" }], branchMap: { yes: "CONCLUSION", no: "CONCLUSION" } },
12
+ { id: "Q8", question: "UX consistency priority?", options: [{ id: "high", label: "High - unified UX", explanation: "Consistent across all" }, { id: "medium", label: "Medium", explanation: "Some variation OK" }, { id: "low", label: "Low - separate UX", explanation: "Different UX per segment" }], branchMap: { high: "CONCLUSION", medium: "CONCLUSION", low: "CONCLUSION" } },
13
+ ];
14
+ // ========== Design Depth 决策树 ==========
15
+ export const DESIGN_DEPTH_TREE = [
16
+ { id: "Q1", question: "Interface depth preference?", options: [{ id: "shallow", label: "Shallow (single responsibility)", explanation: "Simple interfaces, compose multiple calls" }, { id: "deep", label: "Deep (rich functionality)", explanation: "Rich interfaces, one call does more" }], branchMap: { shallow: "Q2", deep: "Q3" }, contextHint: "Deep Modules: interface depth = caller leverage + maintainer locality" },
17
+ { id: "Q2", question: "Composition approach?", options: [{ id: "chain", label: "Chain pattern", explanation: "Sequential composition" }, { id: "pipeline", label: "Pipeline", explanation: "Data flow pipeline" }, { id: "orchestrator", label: "Orchestrator", explanation: "Central coordinator" }], branchMap: { chain: "CONCLUSION", pipeline: "CONCLUSION", orchestrator: "CONCLUSION" } },
18
+ { id: "Q3", question: "Parameter count tolerance?", options: [{ id: "low", label: "Low (<=3 params)", explanation: "Minimal parameters" }, { id: "medium", label: "Medium (3-7)", explanation: "Moderate parameters" }, { id: "high", label: "High (>=7)", explanation: "Many parameters acceptable" }], branchMap: { low: "Q4", medium: "CONCLUSION", high: "Q5" } },
19
+ { id: "Q4", question: "Object pattern acceptable?", options: [{ id: "yes", label: "Yes - options object", explanation: "Use options object pattern" }, { id: "no", label: "No - explicit params", explanation: "Prefer explicit parameters" }], branchMap: { yes: "CONCLUSION", no: "CONCLUSION" } },
20
+ { id: "Q5", question: "Builder pattern needed?", options: [{ id: "yes", label: "Yes - fluent API", explanation: "Builder pattern for complex construction" }, { id: "no", label: "No - direct call", explanation: "Direct constructor call" }], branchMap: { yes: "CONCLUSION", no: "CONCLUSION" } },
21
+ ];
22
+ // ========== Tech Selection 决策树 ==========
23
+ export const TECH_SELECTION_TREE = [
24
+ { id: "Q1", question: "Technology domain?", options: [{ id: "frontend", label: "Frontend", explanation: "UI/UX, client-side" }, { id: "backend", label: "Backend", explanation: "Server-side, APIs" }, { id: "testing", label: "Testing", explanation: "Test frameworks" }, { id: "infra", label: "Infrastructure", explanation: "Deployment, DevOps" }], branchMap: { frontend: "Q2", backend: "Q3", testing: "Q4", infra: "Q5" } },
25
+ { id: "Q2", question: "Framework preference?", options: [{ id: "react", label: "React", explanation: "Component-based, Facebook" }, { id: "vue", label: "Vue", explanation: "Progressive, easy learning" }, { id: "svelte", label: "Svelte", explanation: "Compile-time, no runtime" }, { id: "vanilla", label: "Vanilla JS", explanation: "No framework, pure JS" }], branchMap: { react: "CONCLUSION", vue: "CONCLUSION", svelte: "CONCLUSION", vanilla: "CONCLUSION" } },
26
+ { id: "Q3", question: "Runtime preference?", options: [{ id: "nodejs", label: "Node.js", explanation: "Established, large ecosystem" }, { id: "deno", label: "Deno", explanation: "Modern, TypeScript-first" }, { id: "bun", label: "Bun", explanation: "Fast, native bundler" }], branchMap: { nodejs: "CONCLUSION", deno: "CONCLUSION", bun: "CONCLUSION" } },
27
+ { id: "Q4", question: "Test framework?", options: [{ id: "vitest", label: "Vitest", explanation: "Fast, Vite-native" }, { id: "jest", label: "Jest", explanation: "Established, feature-rich" }, { id: "playwright", label: "Playwright", explanation: "E2E, cross-browser" }], branchMap: { vitest: "CONCLUSION", jest: "CONCLUSION", playwright: "CONCLUSION" } },
28
+ { id: "Q5", question: "Deployment target?", options: [{ id: "vercel", label: "Vercel", explanation: "Edge, serverless" }, { id: "docker", label: "Docker", explanation: "Containerized" }, { id: "k8s", label: "Kubernetes", explanation: "Orchestrated containers" }, { id: "bare", label: "Bare metal", explanation: "Direct server deploy" }], branchMap: { vercel: "CONCLUSION", docker: "CONCLUSION", k8s: "CONCLUSION", bare: "CONCLUSION" } },
29
+ ];
30
+ export const GRILLING_TEMPLATES = {
31
+ "requirement-clarity": REQUIREMENT_CLARITY_TREE,
32
+ "design-depth": DESIGN_DEPTH_TREE,
33
+ "tech-selection": TECH_SELECTION_TREE,
34
+ };
35
+ export function getGrillingTemplate(topic) {
36
+ return GRILLING_TEMPLATES[topic] ?? REQUIREMENT_CLARITY_TREE;
37
+ }
38
+ //# sourceMappingURL=GrillingTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrillingTemplates.js","sourceRoot":"","sources":["../../src/skills/GrillingTemplates.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,79 @@
1
- import type { AgentPlatform, SkillRef, SkillScanResult } from '../artifact/types.js';
2
- export declare class SkillDiscovery {
1
+ import type { IEventBus } from '../core/eventBus.js';
2
+ import type { SkillRegistry } from './SkillRegistry.js';
3
+ import type { SkillInstallConfig, ISkillInstaller } from './SkillInstaller.js';
4
+ import type { AgentPlatform, SkillRef, SkillScanResult, DevelopmentPhase } from '../artifact/types.js';
5
+ /** Phase-based skill scan result */
6
+ export interface PhaseSkillScanResult {
7
+ phase: DevelopmentPhase;
8
+ skills: SkillRef[];
9
+ count: number;
10
+ }
11
+ /** 发现上下文 - Agent 执行任务时的场景 */
12
+ export interface DiscoveryContext {
13
+ taskType: string;
14
+ missingCapabilities: string[];
15
+ phase: 'explore' | 'plan' | 'execute' | 'verify' | 'deliver';
16
+ keywords: string[];
17
+ }
18
+ /** 发现结果 */
19
+ export interface DiscoveryResult {
20
+ skillId: string;
21
+ sourceUrl: string;
22
+ quality: number;
23
+ relevance: number;
24
+ description: string;
25
+ alreadyInstalled: boolean;
26
+ installConfig?: SkillInstallConfig;
27
+ }
28
+ /** Agent 主动技能发现接口 */
29
+ export interface ISkillDiscovery {
30
+ discover(context: DiscoveryContext): Promise<DiscoveryResult[]>;
31
+ recommendInstall(context: DiscoveryContext): Promise<SkillInstallConfig[]>;
32
+ periodicScan(): Promise<DiscoveryResult[]>;
33
+ checkDuringExecution(taskType: string, capabilities: string[]): Promise<DiscoveryResult[]>;
34
+ scanSkills(platform: AgentPlatform): SkillScanResult;
35
+ scanPhaseSkills(projectDir?: string): Map<DevelopmentPhase, PhaseSkillScanResult>;
36
+ getSkillsForPhase(phase: DevelopmentPhase, projectDir?: string): SkillRef[];
37
+ detectPlatform(): AgentPlatform | null;
38
+ }
39
+ export declare class SkillDiscovery implements ISkillDiscovery {
40
+ private registry;
41
+ private installer;
42
+ private eventBus;
3
43
  private projectDir;
4
- constructor(projectDir?: string);
5
44
  /**
6
- * Detect the active agent platform based on config files present in the project.
7
- * Returns the most likely platform, or null if indeterminate.
45
+ * 构造函数支持两种模式:
46
+ * 1. 独立模式(仅 projectDir):用于平台检测和技能扫描
47
+ * 2. 增强模式(完整参数):用于 Agent 主动发现和推荐安装
8
48
  */
49
+ constructor(registryOrProjectDir: SkillRegistry | string, installer?: ISkillInstaller, eventBus?: IEventBus, projectDir?: string);
50
+ discover(context: DiscoveryContext): Promise<DiscoveryResult[]>;
51
+ recommendInstall(context: DiscoveryContext): Promise<SkillInstallConfig[]>;
52
+ periodicScan(): Promise<DiscoveryResult[]>;
53
+ checkDuringExecution(taskType: string, capabilities: string[]): Promise<DiscoveryResult[]>;
9
54
  detectPlatform(): AgentPlatform | null;
55
+ scanSkills(platform: AgentPlatform): SkillScanResult;
56
+ generateSkillsMd(skills: SkillRef[]): string;
10
57
  /**
11
- * Scan the skills directory for a given platform.
12
- * Returns structured skill references.
58
+ * Scan skills organized by development phase
59
+ * @param projectDir - Project directory containing skills/ folder
60
+ * @returns Map of phase to skill scan results
13
61
  */
14
- scanSkills(platform: AgentPlatform): SkillScanResult;
62
+ scanPhaseSkills(projectDir?: string): Map<DevelopmentPhase, PhaseSkillScanResult>;
15
63
  /**
16
- * Generate a skills.md document from discovered skills.
17
- * Useful for injecting into agent knowledge docs.
64
+ * Get skills available for a specific development phase
65
+ * @param phase - Development phase (DEFINE, PLAN, BUILD, VERIFY, REVIEW, SHIP, ANTI-PATTERNS)
66
+ * @param projectDir - Project directory
67
+ * @returns List of skills for the phase
18
68
  */
19
- generateSkillsMd(skills: SkillRef[]): string;
69
+ getSkillsForPhase(phase: DevelopmentPhase, projectDir?: string): SkillRef[];
20
70
  /**
21
- * Full discovery pipeline: detect platform → scan → generate doc.
71
+ * Generate phase-based skills index markdown
22
72
  */
23
- discover(): {
24
- platform: AgentPlatform | null;
25
- skills: SkillRef[];
26
- skillsMd: string;
27
- };
73
+ generatePhaseSkillsMd(scanResult: Map<DevelopmentPhase, PhaseSkillScanResult>): string;
74
+ private matchCategory;
75
+ private calculateRelevance;
76
+ private detectMissingCapabilities;
77
+ private createInstallConfig;
78
+ private extractSkillDescription;
28
79
  }