@hongmaple0820/scale-engine 0.7.1 → 0.8.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 (209) hide show
  1. package/README.md +31 -5
  2. package/dist/adapters/ClaudeCodeAdapter.js +5 -3
  3. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  4. package/dist/adapters/CodexAdapter.js +5 -3
  5. package/dist/adapters/CodexAdapter.js.map +1 -1
  6. package/dist/adapters/CursorAdapter.js +5 -3
  7. package/dist/adapters/CursorAdapter.js.map +1 -1
  8. package/dist/adapters/GeminiAdapter.js +5 -3
  9. package/dist/adapters/GeminiAdapter.js.map +1 -1
  10. package/dist/adapters/HermesAdapter.js +5 -3
  11. package/dist/adapters/HermesAdapter.js.map +1 -1
  12. package/dist/adapters/OpenClawAdapter.js +5 -3
  13. package/dist/adapters/OpenClawAdapter.js.map +1 -1
  14. package/dist/adapters/OpenCodeAdapter.js +5 -3
  15. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  16. package/dist/adapters/QCoderAdapter.js +5 -3
  17. package/dist/adapters/QCoderAdapter.js.map +1 -1
  18. package/dist/adapters/TraeAdapter.js +5 -3
  19. package/dist/adapters/TraeAdapter.js.map +1 -1
  20. package/dist/adapters/VSCAdapter.js +5 -3
  21. package/dist/adapters/VSCAdapter.js.map +1 -1
  22. package/dist/adapters/WorkBuddyAdapter.js +5 -3
  23. package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
  24. package/dist/agents/AgentChannel.d.ts +43 -0
  25. package/dist/agents/AgentChannel.js +136 -0
  26. package/dist/agents/AgentChannel.js.map +1 -0
  27. package/dist/agents/AgentCoordinator.d.ts +29 -0
  28. package/dist/agents/AgentCoordinator.js +136 -0
  29. package/dist/agents/AgentCoordinator.js.map +1 -0
  30. package/dist/agents/AgentDispatcher.d.ts +24 -0
  31. package/dist/agents/AgentDispatcher.js +112 -0
  32. package/dist/agents/AgentDispatcher.js.map +1 -0
  33. package/dist/agents/AgentManager.d.ts +14 -0
  34. package/dist/agents/AgentManager.js +85 -0
  35. package/dist/agents/AgentManager.js.map +1 -0
  36. package/dist/agents/AgentPool.d.ts +59 -0
  37. package/dist/agents/AgentPool.js +192 -0
  38. package/dist/agents/AgentPool.js.map +1 -0
  39. package/dist/agents/AgentRegistry.d.ts +20 -0
  40. package/dist/agents/AgentRegistry.js +36 -0
  41. package/dist/agents/AgentRegistry.js.map +1 -0
  42. package/dist/agents/AgentSourceLoader.d.ts +73 -0
  43. package/dist/agents/AgentSourceLoader.js +101 -0
  44. package/dist/agents/AgentSourceLoader.js.map +1 -0
  45. package/dist/agents/IAgent.d.ts +53 -0
  46. package/dist/agents/IAgent.js +4 -0
  47. package/dist/agents/IAgent.js.map +1 -0
  48. package/dist/agents/definitions/debugger.d.ts +2 -0
  49. package/dist/agents/definitions/debugger.js +6 -0
  50. package/dist/agents/definitions/debugger.js.map +1 -0
  51. package/dist/agents/definitions/doc-writer.d.ts +2 -0
  52. package/dist/agents/definitions/doc-writer.js +6 -0
  53. package/dist/agents/definitions/doc-writer.js.map +1 -0
  54. package/dist/agents/definitions/implementer.d.ts +2 -0
  55. package/dist/agents/definitions/implementer.js +6 -0
  56. package/dist/agents/definitions/implementer.js.map +1 -0
  57. package/dist/agents/definitions/planner.d.ts +2 -0
  58. package/dist/agents/definitions/planner.js +6 -0
  59. package/dist/agents/definitions/planner.js.map +1 -0
  60. package/dist/agents/definitions/researcher.d.ts +2 -0
  61. package/dist/agents/definitions/researcher.js +6 -0
  62. package/dist/agents/definitions/researcher.js.map +1 -0
  63. package/dist/agents/definitions/reviewer.d.ts +2 -0
  64. package/dist/agents/definitions/reviewer.js +6 -0
  65. package/dist/agents/definitions/reviewer.js.map +1 -0
  66. package/dist/agents/definitions/security.d.ts +2 -0
  67. package/dist/agents/definitions/security.js +6 -0
  68. package/dist/agents/definitions/security.js.map +1 -0
  69. package/dist/agents/definitions/tester.d.ts +2 -0
  70. package/dist/agents/definitions/tester.js +6 -0
  71. package/dist/agents/definitions/tester.js.map +1 -0
  72. package/dist/agents/index.d.ts +23 -0
  73. package/dist/agents/index.js +44 -0
  74. package/dist/agents/index.js.map +1 -0
  75. package/dist/agents/profiles.d.ts +26 -0
  76. package/dist/agents/profiles.js +197 -0
  77. package/dist/agents/profiles.js.map +1 -0
  78. package/dist/agents/types.d.ts +262 -0
  79. package/dist/agents/types.js +4 -0
  80. package/dist/agents/types.js.map +1 -0
  81. package/dist/api/cli.js +121 -3
  82. package/dist/api/cli.js.map +1 -1
  83. package/dist/api/doctor.js +0 -2
  84. package/dist/api/doctor.js.map +1 -1
  85. package/dist/api/mcp.js +0 -5
  86. package/dist/api/mcp.js.map +1 -1
  87. package/dist/artifact/fsm.js +3 -5
  88. package/dist/artifact/fsm.js.map +1 -1
  89. package/dist/artifact/sqliteStore.js +1 -14
  90. package/dist/artifact/sqliteStore.js.map +1 -1
  91. package/dist/artifact/store.js +2 -4
  92. package/dist/artifact/store.js.map +1 -1
  93. package/dist/artifact/types.d.ts +94 -1
  94. package/dist/artifact/types.js +0 -3
  95. package/dist/artifact/types.js.map +1 -1
  96. package/dist/context/AntiPatternRegistry.d.ts +38 -0
  97. package/dist/context/AntiPatternRegistry.js +203 -0
  98. package/dist/context/AntiPatternRegistry.js.map +1 -0
  99. package/dist/context/CavemanCompressor.d.ts +20 -0
  100. package/dist/context/CavemanCompressor.js +14 -0
  101. package/dist/context/CavemanCompressor.js.map +1 -0
  102. package/dist/context/ContextBuilder.js +132 -4
  103. package/dist/context/ContextBuilder.js.map +1 -1
  104. package/dist/context/SessionStartSequence.d.ts +54 -0
  105. package/dist/context/SessionStartSequence.js +153 -0
  106. package/dist/context/SessionStartSequence.js.map +1 -0
  107. package/dist/core/container.js +4 -2
  108. package/dist/core/container.js.map +1 -1
  109. package/dist/core/eventBus.js +5 -6
  110. package/dist/core/eventBus.js.map +1 -1
  111. package/dist/dashboard/DashboardServer.d.ts +17 -0
  112. package/dist/dashboard/DashboardServer.js +53 -7
  113. package/dist/dashboard/DashboardServer.js.map +1 -1
  114. package/dist/dashboard/index.d.ts +2 -0
  115. package/dist/dashboard/index.js +2 -0
  116. package/dist/dashboard/index.js.map +1 -0
  117. package/dist/dashboard/server.d.ts +52 -0
  118. package/dist/dashboard/server.js +83 -0
  119. package/dist/dashboard/server.js.map +1 -0
  120. package/dist/evolution/AutoDefectCreator.js +2 -4
  121. package/dist/evolution/AutoDefectCreator.js.map +1 -1
  122. package/dist/evolution/BehaviorTracker.js +3 -5
  123. package/dist/evolution/BehaviorTracker.js.map +1 -1
  124. package/dist/evolution/EvolutionEngine.js +3 -14
  125. package/dist/evolution/EvolutionEngine.js.map +1 -1
  126. package/dist/evolution/EvolutionEvaluator.js +1 -4
  127. package/dist/evolution/EvolutionEvaluator.js.map +1 -1
  128. package/dist/evolution/LessonValidator.js +0 -4
  129. package/dist/evolution/LessonValidator.js.map +1 -1
  130. package/dist/evolution/PatternExtractor.d.ts +40 -0
  131. package/dist/evolution/PatternExtractor.js +83 -0
  132. package/dist/evolution/PatternExtractor.js.map +1 -0
  133. package/dist/evolution/SkillCreator.d.ts +75 -0
  134. package/dist/evolution/SkillCreator.js +219 -0
  135. package/dist/evolution/SkillCreator.js.map +1 -0
  136. package/dist/fsm/FSMAgentBridge.js +11 -13
  137. package/dist/fsm/FSMAgentBridge.js.map +1 -1
  138. package/dist/guardrails/DetectorEnhanced.js +32 -30
  139. package/dist/guardrails/DetectorEnhanced.js.map +1 -1
  140. package/dist/guardrails/GateEvaluator.d.ts +18 -0
  141. package/dist/guardrails/GateEvaluator.js +129 -0
  142. package/dist/guardrails/GateEvaluator.js.map +1 -0
  143. package/dist/guardrails/Gateway.js +6 -7
  144. package/dist/guardrails/Gateway.js.map +1 -1
  145. package/dist/guardrails/ReviewEnforcer.d.ts +52 -0
  146. package/dist/guardrails/ReviewEnforcer.js +117 -0
  147. package/dist/guardrails/ReviewEnforcer.js.map +1 -0
  148. package/dist/guardrails/advancedDetectors.js +33 -31
  149. package/dist/guardrails/advancedDetectors.js.map +1 -1
  150. package/dist/guardrails/detectors.js +76 -16
  151. package/dist/guardrails/detectors.js.map +1 -1
  152. package/dist/hooks/HookDeployer.js +2 -3
  153. package/dist/hooks/HookDeployer.js.map +1 -1
  154. package/dist/hooks/HookGeneratorEnhanced.js +2 -3
  155. package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
  156. package/dist/index.d.ts +20 -2
  157. package/dist/index.js +19 -2
  158. package/dist/index.js.map +1 -1
  159. package/dist/knowledge/KnowledgeBase.d.ts +26 -0
  160. package/dist/knowledge/KnowledgeBase.js +109 -8
  161. package/dist/knowledge/KnowledgeBase.js.map +1 -1
  162. package/dist/knowledge/SQLiteKnowledgeBase.js +1 -3
  163. package/dist/knowledge/SQLiteKnowledgeBase.js.map +1 -1
  164. package/dist/knowledge/UbiquitousLanguageManager.d.ts +49 -0
  165. package/dist/knowledge/UbiquitousLanguageManager.js +133 -0
  166. package/dist/knowledge/UbiquitousLanguageManager.js.map +1 -0
  167. package/dist/routing/ModelRouter.js +0 -2
  168. package/dist/routing/ModelRouter.js.map +1 -1
  169. package/dist/skills/ExternalSkills.d.ts +3 -0
  170. package/dist/skills/ExternalSkills.js +20 -0
  171. package/dist/skills/ExternalSkills.js.map +1 -0
  172. package/dist/skills/GrillingSessionSkill.d.ts +65 -0
  173. package/dist/skills/GrillingSessionSkill.js +113 -0
  174. package/dist/skills/GrillingSessionSkill.js.map +1 -0
  175. package/dist/skills/GrillingTemplates.d.ts +7 -0
  176. package/dist/skills/GrillingTemplates.js +38 -0
  177. package/dist/skills/GrillingTemplates.js.map +1 -0
  178. package/dist/skills/SkillDiscovery.d.ts +45 -20
  179. package/dist/skills/SkillDiscovery.js +201 -117
  180. package/dist/skills/SkillDiscovery.js.map +1 -1
  181. package/dist/skills/SkillExecutor.js +1 -3
  182. package/dist/skills/SkillExecutor.js.map +1 -1
  183. package/dist/skills/SkillInstaller.d.ts +40 -0
  184. package/dist/skills/SkillInstaller.js +112 -0
  185. package/dist/skills/SkillInstaller.js.map +1 -0
  186. package/dist/skills/SkillRegistry.js +1 -2
  187. package/dist/skills/SkillRegistry.js.map +1 -1
  188. package/dist/skills/TriggerEngine.js +3 -5
  189. package/dist/skills/TriggerEngine.js.map +1 -1
  190. package/dist/skills/index.d.ts +3 -0
  191. package/dist/skills/index.js +3 -0
  192. package/dist/skills/index.js.map +1 -1
  193. package/dist/tasks/IssueTriageFSM.d.ts +26 -0
  194. package/dist/tasks/IssueTriageFSM.js +107 -0
  195. package/dist/tasks/IssueTriageFSM.js.map +1 -0
  196. package/dist/tasks/TaskEngine.js +1 -5
  197. package/dist/tasks/TaskEngine.js.map +1 -1
  198. package/dist/workflows/DAGBuilder.d.ts +52 -0
  199. package/dist/workflows/DAGBuilder.js +169 -0
  200. package/dist/workflows/DAGBuilder.js.map +1 -0
  201. package/dist/workflows/WorkflowExecutor.js +2 -4
  202. package/dist/workflows/WorkflowExecutor.js.map +1 -1
  203. package/dist/workflows/WorkflowOrchestrator.d.ts +48 -0
  204. package/dist/workflows/WorkflowOrchestrator.js +181 -0
  205. package/dist/workflows/WorkflowOrchestrator.js.map +1 -0
  206. package/dist/workflows/index.d.ts +2 -4
  207. package/dist/workflows/index.js +4 -4
  208. package/dist/workflows/index.js.map +1 -1
  209. package/package.json +2 -2
@@ -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,53 @@
1
+ import type { IEventBus } from '../core/eventBus.js';
2
+ import type { SkillRegistry } from './SkillRegistry.js';
3
+ import type { SkillInstallConfig, ISkillInstaller } from './SkillInstaller.js';
1
4
  import type { AgentPlatform, SkillRef, SkillScanResult } from '../artifact/types.js';
2
- export declare class SkillDiscovery {
5
+ /** 发现上下文 - Agent 执行任务时的场景 */
6
+ export interface DiscoveryContext {
7
+ taskType: string;
8
+ missingCapabilities: string[];
9
+ phase: 'explore' | 'plan' | 'execute' | 'verify' | 'deliver';
10
+ keywords: string[];
11
+ }
12
+ /** 发现结果 */
13
+ export interface DiscoveryResult {
14
+ skillId: string;
15
+ sourceUrl: string;
16
+ quality: number;
17
+ relevance: number;
18
+ description: string;
19
+ alreadyInstalled: boolean;
20
+ installConfig?: SkillInstallConfig;
21
+ }
22
+ /** Agent 主动技能发现接口 */
23
+ export interface ISkillDiscovery {
24
+ discover(context: DiscoveryContext): Promise<DiscoveryResult[]>;
25
+ recommendInstall(context: DiscoveryContext): Promise<SkillInstallConfig[]>;
26
+ periodicScan(): Promise<DiscoveryResult[]>;
27
+ checkDuringExecution(taskType: string, capabilities: string[]): Promise<DiscoveryResult[]>;
28
+ scanSkills(platform: AgentPlatform): SkillScanResult;
29
+ detectPlatform(): AgentPlatform | null;
30
+ }
31
+ export declare class SkillDiscovery implements ISkillDiscovery {
32
+ private registry;
33
+ private installer;
34
+ private eventBus;
3
35
  private projectDir;
4
- constructor(projectDir?: string);
5
36
  /**
6
- * Detect the active agent platform based on config files present in the project.
7
- * Returns the most likely platform, or null if indeterminate.
37
+ * 构造函数支持两种模式:
38
+ * 1. 独立模式(仅 projectDir):用于平台检测和技能扫描
39
+ * 2. 增强模式(完整参数):用于 Agent 主动发现和推荐安装
8
40
  */
41
+ constructor(registryOrProjectDir: SkillRegistry | string, installer?: ISkillInstaller, eventBus?: IEventBus, projectDir?: string);
42
+ discover(context: DiscoveryContext): Promise<DiscoveryResult[]>;
43
+ recommendInstall(context: DiscoveryContext): Promise<SkillInstallConfig[]>;
44
+ periodicScan(): Promise<DiscoveryResult[]>;
45
+ checkDuringExecution(taskType: string, capabilities: string[]): Promise<DiscoveryResult[]>;
9
46
  detectPlatform(): AgentPlatform | null;
10
- /**
11
- * Scan the skills directory for a given platform.
12
- * Returns structured skill references.
13
- */
14
47
  scanSkills(platform: AgentPlatform): SkillScanResult;
15
- /**
16
- * Generate a skills.md document from discovered skills.
17
- * Useful for injecting into agent knowledge docs.
18
- */
19
48
  generateSkillsMd(skills: SkillRef[]): string;
20
- /**
21
- * Full discovery pipeline: detect platform → scan → generate doc.
22
- */
23
- discover(): {
24
- platform: AgentPlatform | null;
25
- skills: SkillRef[];
26
- skillsMd: string;
27
- };
49
+ private matchCategory;
50
+ private calculateRelevance;
51
+ private detectMissingCapabilities;
52
+ private createInstallConfig;
28
53
  }