@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.
- package/README.en.md +220 -0
- package/README.md +91 -50
- package/dist/adapters/ClaudeCodeAdapter.d.ts +2 -0
- package/dist/adapters/ClaudeCodeAdapter.js +10 -3
- package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
- package/dist/adapters/CodexAdapter.d.ts +1 -0
- package/dist/adapters/CodexAdapter.js +10 -3
- package/dist/adapters/CodexAdapter.js.map +1 -1
- package/dist/adapters/CursorAdapter.js +5 -3
- package/dist/adapters/CursorAdapter.js.map +1 -1
- package/dist/adapters/GeminiAdapter.d.ts +1 -0
- package/dist/adapters/GeminiAdapter.js +9 -3
- package/dist/adapters/GeminiAdapter.js.map +1 -1
- package/dist/adapters/HermesAdapter.d.ts +1 -0
- package/dist/adapters/HermesAdapter.js +9 -3
- package/dist/adapters/HermesAdapter.js.map +1 -1
- package/dist/adapters/OpenClawAdapter.d.ts +1 -0
- package/dist/adapters/OpenClawAdapter.js +9 -3
- package/dist/adapters/OpenClawAdapter.js.map +1 -1
- package/dist/adapters/OpenCodeAdapter.js +5 -3
- package/dist/adapters/OpenCodeAdapter.js.map +1 -1
- package/dist/adapters/QCoderAdapter.d.ts +1 -0
- package/dist/adapters/QCoderAdapter.js +9 -3
- package/dist/adapters/QCoderAdapter.js.map +1 -1
- package/dist/adapters/TraeAdapter.d.ts +1 -0
- package/dist/adapters/TraeAdapter.js +9 -3
- package/dist/adapters/TraeAdapter.js.map +1 -1
- package/dist/adapters/VSCAdapter.d.ts +1 -0
- package/dist/adapters/VSCAdapter.js +9 -3
- package/dist/adapters/VSCAdapter.js.map +1 -1
- package/dist/adapters/WorkBuddyAdapter.d.ts +1 -0
- package/dist/adapters/WorkBuddyAdapter.js +9 -3
- package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
- package/dist/agents/AgentChannel.d.ts +43 -0
- package/dist/agents/AgentChannel.js +136 -0
- package/dist/agents/AgentChannel.js.map +1 -0
- package/dist/agents/AgentCoordinator.d.ts +29 -0
- package/dist/agents/AgentCoordinator.js +136 -0
- package/dist/agents/AgentCoordinator.js.map +1 -0
- package/dist/agents/AgentDispatcher.d.ts +24 -0
- package/dist/agents/AgentDispatcher.js +112 -0
- package/dist/agents/AgentDispatcher.js.map +1 -0
- package/dist/agents/AgentManager.d.ts +14 -0
- package/dist/agents/AgentManager.js +85 -0
- package/dist/agents/AgentManager.js.map +1 -0
- package/dist/agents/AgentPool.d.ts +59 -0
- package/dist/agents/AgentPool.js +192 -0
- package/dist/agents/AgentPool.js.map +1 -0
- package/dist/agents/AgentRegistry.d.ts +20 -0
- package/dist/agents/AgentRegistry.js +36 -0
- package/dist/agents/AgentRegistry.js.map +1 -0
- package/dist/agents/AgentSourceLoader.d.ts +73 -0
- package/dist/agents/AgentSourceLoader.js +101 -0
- package/dist/agents/AgentSourceLoader.js.map +1 -0
- package/dist/agents/IAgent.d.ts +53 -0
- package/dist/agents/IAgent.js +4 -0
- package/dist/agents/IAgent.js.map +1 -0
- package/dist/agents/definitions/debugger.d.ts +2 -0
- package/dist/agents/definitions/debugger.js +6 -0
- package/dist/agents/definitions/debugger.js.map +1 -0
- package/dist/agents/definitions/doc-writer.d.ts +2 -0
- package/dist/agents/definitions/doc-writer.js +6 -0
- package/dist/agents/definitions/doc-writer.js.map +1 -0
- package/dist/agents/definitions/implementer.d.ts +2 -0
- package/dist/agents/definitions/implementer.js +6 -0
- package/dist/agents/definitions/implementer.js.map +1 -0
- package/dist/agents/definitions/planner.d.ts +2 -0
- package/dist/agents/definitions/planner.js +6 -0
- package/dist/agents/definitions/planner.js.map +1 -0
- package/dist/agents/definitions/researcher.d.ts +2 -0
- package/dist/agents/definitions/researcher.js +6 -0
- package/dist/agents/definitions/researcher.js.map +1 -0
- package/dist/agents/definitions/reviewer.d.ts +2 -0
- package/dist/agents/definitions/reviewer.js +6 -0
- package/dist/agents/definitions/reviewer.js.map +1 -0
- package/dist/agents/definitions/security.d.ts +2 -0
- package/dist/agents/definitions/security.js +6 -0
- package/dist/agents/definitions/security.js.map +1 -0
- package/dist/agents/definitions/tester.d.ts +2 -0
- package/dist/agents/definitions/tester.js +6 -0
- package/dist/agents/definitions/tester.js.map +1 -0
- package/dist/agents/index.d.ts +23 -0
- package/dist/agents/index.js +44 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/profiles.d.ts +26 -0
- package/dist/agents/profiles.js +197 -0
- package/dist/agents/profiles.js.map +1 -0
- package/dist/agents/types.d.ts +262 -0
- package/dist/agents/types.js +4 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/api/cli.js +136 -3
- package/dist/api/cli.js.map +1 -1
- package/dist/api/doctor.js +0 -2
- package/dist/api/doctor.js.map +1 -1
- package/dist/api/mcp.js +0 -5
- package/dist/api/mcp.js.map +1 -1
- package/dist/artifact/fsm.js +3 -5
- package/dist/artifact/fsm.js.map +1 -1
- package/dist/artifact/sqliteStore.js +1 -14
- package/dist/artifact/sqliteStore.js.map +1 -1
- package/dist/artifact/store.js +2 -4
- package/dist/artifact/store.js.map +1 -1
- package/dist/artifact/types.d.ts +98 -1
- package/dist/artifact/types.js +0 -3
- package/dist/artifact/types.js.map +1 -1
- package/dist/cli/liteCommands.d.ts +81 -0
- package/dist/cli/liteCommands.js +148 -0
- package/dist/cli/liteCommands.js.map +1 -0
- package/dist/cli/phaseCommands.d.ts +129 -0
- package/dist/cli/phaseCommands.js +572 -0
- package/dist/cli/phaseCommands.js.map +1 -0
- package/dist/context/AntiPatternRegistry.d.ts +38 -0
- package/dist/context/AntiPatternRegistry.js +203 -0
- package/dist/context/AntiPatternRegistry.js.map +1 -0
- package/dist/context/CavemanCompressor.d.ts +20 -0
- package/dist/context/CavemanCompressor.js +14 -0
- package/dist/context/CavemanCompressor.js.map +1 -0
- package/dist/context/ContextBuilder.js +132 -4
- package/dist/context/ContextBuilder.js.map +1 -1
- package/dist/context/SessionStartSequence.d.ts +54 -0
- package/dist/context/SessionStartSequence.js +153 -0
- package/dist/context/SessionStartSequence.js.map +1 -0
- package/dist/core/container.js +4 -2
- package/dist/core/container.js.map +1 -1
- package/dist/core/eventBus.js +5 -6
- package/dist/core/eventBus.js.map +1 -1
- package/dist/dashboard/DashboardServer.js +3 -6
- package/dist/dashboard/DashboardServer.js.map +1 -1
- package/dist/dashboard/index.d.ts +2 -0
- package/dist/dashboard/index.js +2 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/server.d.ts +52 -0
- package/dist/dashboard/server.js +83 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/evolution/AutoDefectCreator.js +2 -4
- package/dist/evolution/AutoDefectCreator.js.map +1 -1
- package/dist/evolution/BehaviorTracker.js +3 -5
- package/dist/evolution/BehaviorTracker.js.map +1 -1
- package/dist/evolution/EvolutionEngine.js +3 -14
- package/dist/evolution/EvolutionEngine.js.map +1 -1
- package/dist/evolution/EvolutionEvaluator.js +1 -4
- package/dist/evolution/EvolutionEvaluator.js.map +1 -1
- package/dist/evolution/LessonValidator.js +0 -4
- package/dist/evolution/LessonValidator.js.map +1 -1
- package/dist/evolution/PatternExtractor.d.ts +40 -0
- package/dist/evolution/PatternExtractor.js +83 -0
- package/dist/evolution/PatternExtractor.js.map +1 -0
- package/dist/evolution/SkillCreator.d.ts +75 -0
- package/dist/evolution/SkillCreator.js +219 -0
- package/dist/evolution/SkillCreator.js.map +1 -0
- package/dist/fsm/FSMAgentBridge.js +11 -13
- package/dist/fsm/FSMAgentBridge.js.map +1 -1
- package/dist/guardrails/DetectorEnhanced.js +32 -30
- package/dist/guardrails/DetectorEnhanced.js.map +1 -1
- package/dist/guardrails/GateEvaluator.d.ts +18 -0
- package/dist/guardrails/GateEvaluator.js +129 -0
- package/dist/guardrails/GateEvaluator.js.map +1 -0
- package/dist/guardrails/Gateway.js +6 -7
- package/dist/guardrails/Gateway.js.map +1 -1
- package/dist/guardrails/ReviewEnforcer.d.ts +52 -0
- package/dist/guardrails/ReviewEnforcer.js +117 -0
- package/dist/guardrails/ReviewEnforcer.js.map +1 -0
- package/dist/guardrails/advancedDetectors.js +33 -31
- package/dist/guardrails/advancedDetectors.js.map +1 -1
- package/dist/guardrails/detectors.js +76 -16
- package/dist/guardrails/detectors.js.map +1 -1
- package/dist/hooks/HookDeployer.js +2 -3
- package/dist/hooks/HookDeployer.js.map +1 -1
- package/dist/hooks/HookGeneratorEnhanced.js +2 -3
- package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
- package/dist/index.d.ts +20 -2
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/knowledge/KnowledgeBase.d.ts +26 -0
- package/dist/knowledge/KnowledgeBase.js +109 -8
- package/dist/knowledge/KnowledgeBase.js.map +1 -1
- package/dist/knowledge/SQLiteKnowledgeBase.js +1 -3
- package/dist/knowledge/SQLiteKnowledgeBase.js.map +1 -1
- package/dist/knowledge/UbiquitousLanguageManager.d.ts +49 -0
- package/dist/knowledge/UbiquitousLanguageManager.js +133 -0
- package/dist/knowledge/UbiquitousLanguageManager.js.map +1 -0
- package/dist/routing/ModelRouter.js +0 -2
- package/dist/routing/ModelRouter.js.map +1 -1
- package/dist/skills/ExternalSkills.d.ts +3 -0
- package/dist/skills/ExternalSkills.js +20 -0
- package/dist/skills/ExternalSkills.js.map +1 -0
- package/dist/skills/GrillingSessionSkill.d.ts +65 -0
- package/dist/skills/GrillingSessionSkill.js +113 -0
- package/dist/skills/GrillingSessionSkill.js.map +1 -0
- package/dist/skills/GrillingTemplates.d.ts +7 -0
- package/dist/skills/GrillingTemplates.js +38 -0
- package/dist/skills/GrillingTemplates.js.map +1 -0
- package/dist/skills/SkillDiscovery.d.ts +68 -17
- package/dist/skills/SkillDiscovery.js +294 -115
- package/dist/skills/SkillDiscovery.js.map +1 -1
- package/dist/skills/SkillExecutor.js +1 -3
- package/dist/skills/SkillExecutor.js.map +1 -1
- package/dist/skills/SkillInstaller.d.ts +40 -0
- package/dist/skills/SkillInstaller.js +112 -0
- package/dist/skills/SkillInstaller.js.map +1 -0
- package/dist/skills/SkillRegistry.js +1 -2
- package/dist/skills/SkillRegistry.js.map +1 -1
- package/dist/skills/TriggerEngine.js +3 -5
- package/dist/skills/TriggerEngine.js.map +1 -1
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.js +3 -0
- package/dist/skills/index.js.map +1 -1
- package/dist/tasks/IssueTriageFSM.d.ts +26 -0
- package/dist/tasks/IssueTriageFSM.js +107 -0
- package/dist/tasks/IssueTriageFSM.js.map +1 -0
- package/dist/tasks/TaskEngine.js +1 -5
- package/dist/tasks/TaskEngine.js.map +1 -1
- package/dist/workflows/DAGBuilder.d.ts +52 -0
- package/dist/workflows/DAGBuilder.js +169 -0
- package/dist/workflows/DAGBuilder.js.map +1 -0
- package/dist/workflows/WorkflowExecutor.js +2 -4
- package/dist/workflows/WorkflowExecutor.js.map +1 -1
- package/dist/workflows/WorkflowOrchestrator.d.ts +48 -0
- package/dist/workflows/WorkflowOrchestrator.js +181 -0
- package/dist/workflows/WorkflowOrchestrator.js.map +1 -0
- package/dist/workflows/index.d.ts +2 -4
- package/dist/workflows/index.js +4 -4
- package/dist/workflows/index.js.map +1 -1
- 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":"AAAA,mCAAmC;AACnC,cAAc;AACd,qCAAqC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAW1C,MAAM,CAAC,MAAM,cAAc,GAAmC;IAC5D,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE;IACrF,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE;IAC7F,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE;IAC5F,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE;CACnF,CAAA;AAgBD,MAAM,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"ModelRouter.js","sourceRoot":"","sources":["../../src/routing/ModelRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAIA,MAAM,UAAU,sBAAsB,CAAC,QAAuB,EAAE,QAAmB;IACjF,MAAM,MAAM,GAAsB;QAChC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,sCAAsC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QAC7S,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,sCAAsC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QAC5S,EAAE,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,wBAAwB,EAAE,WAAW,EAAE,6BAA6B,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,kDAAkD,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QAC1V,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,+BAA+B,EAAE;QAC5T,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,6CAA6C,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QACvT,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,yCAAyC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QACnT,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,oCAAoC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QAC3S,+BAA+B;QAC/B,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,gDAAgD,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,wDAAwD,EAAE;QACpY,EAAE,EAAE,EAAE,8BAA8B,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,wDAAwD,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,yFAAyF,EAAE;QACnc,EAAE,EAAE,EAAE,gCAAgC,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,8BAA8B,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,0DAA0D,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,6DAA6D,EAAE;QACpb,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,2CAA2C,EAAE;QAC5V,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,6CAA6C,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,6CAA6C,EAAE;KACpX,CAAA;IACD,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B,QAAQ,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;AACvE,CAAC"}
|
|
@@ -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 {
|
|
2
|
-
|
|
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
|
-
*
|
|
7
|
-
*
|
|
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
|
|
12
|
-
*
|
|
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
|
-
|
|
62
|
+
scanPhaseSkills(projectDir?: string): Map<DevelopmentPhase, PhaseSkillScanResult>;
|
|
15
63
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
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
|
-
|
|
69
|
+
getSkillsForPhase(phase: DevelopmentPhase, projectDir?: string): SkillRef[];
|
|
20
70
|
/**
|
|
21
|
-
*
|
|
71
|
+
* Generate phase-based skills index markdown
|
|
22
72
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
}
|