@hongmaple0820/scale-engine 0.6.0 → 0.7.1

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 (92) hide show
  1. package/README.md +29 -6
  2. package/dist/adapters/ClaudeCodeAdapter.d.ts +1 -1
  3. package/dist/adapters/ClaudeCodeAdapter.js +1 -1
  4. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  5. package/dist/adapters/QCoderAdapter.d.ts +13 -0
  6. package/dist/adapters/QCoderAdapter.js +153 -0
  7. package/dist/adapters/QCoderAdapter.js.map +1 -0
  8. package/dist/adapters/TraeAdapter.d.ts +13 -0
  9. package/dist/adapters/TraeAdapter.js +153 -0
  10. package/dist/adapters/TraeAdapter.js.map +1 -0
  11. package/dist/adapters/VSCAdapter.d.ts +13 -0
  12. package/dist/adapters/VSCAdapter.js +153 -0
  13. package/dist/adapters/VSCAdapter.js.map +1 -0
  14. package/dist/adapters/WorkBuddyAdapter.d.ts +13 -0
  15. package/dist/adapters/WorkBuddyAdapter.js +153 -0
  16. package/dist/adapters/WorkBuddyAdapter.js.map +1 -0
  17. package/dist/adapters/index.d.ts +4 -0
  18. package/dist/adapters/index.js +13 -1
  19. package/dist/adapters/index.js.map +1 -1
  20. package/dist/api/cli.js +59 -3
  21. package/dist/api/cli.js.map +1 -1
  22. package/dist/api/doctor.js +29 -10
  23. package/dist/api/doctor.js.map +1 -1
  24. package/dist/artifact/types.d.ts +3 -3
  25. package/dist/artifact/types.js.map +1 -1
  26. package/dist/context/ContextBuilder.d.ts +4 -0
  27. package/dist/context/ContextBuilder.js +43 -9
  28. package/dist/context/ContextBuilder.js.map +1 -1
  29. package/dist/dashboard/DashboardServer.d.ts +63 -0
  30. package/dist/dashboard/DashboardServer.js +167 -0
  31. package/dist/dashboard/DashboardServer.js.map +1 -0
  32. package/dist/evolution/AutoDefectCreator.d.ts +34 -0
  33. package/dist/evolution/AutoDefectCreator.js +115 -0
  34. package/dist/evolution/AutoDefectCreator.js.map +1 -0
  35. package/dist/evolution/BehaviorTracker.d.ts +8 -0
  36. package/dist/evolution/BehaviorTracker.js +18 -1
  37. package/dist/evolution/BehaviorTracker.js.map +1 -1
  38. package/dist/evolution/EvolutionEvaluator.d.ts +59 -0
  39. package/dist/evolution/EvolutionEvaluator.js +115 -0
  40. package/dist/evolution/EvolutionEvaluator.js.map +1 -0
  41. package/dist/evolution/LessonValidator.d.ts +36 -0
  42. package/dist/evolution/LessonValidator.js +136 -0
  43. package/dist/evolution/LessonValidator.js.map +1 -0
  44. package/dist/fsm/FSMAgentBridge.d.ts +59 -0
  45. package/dist/fsm/FSMAgentBridge.js +195 -0
  46. package/dist/fsm/FSMAgentBridge.js.map +1 -0
  47. package/dist/fsm/index.d.ts +2 -0
  48. package/dist/fsm/index.js +3 -0
  49. package/dist/fsm/index.js.map +1 -0
  50. package/dist/guardrails/DetectorEnhanced.d.ts +111 -0
  51. package/dist/guardrails/DetectorEnhanced.js +200 -0
  52. package/dist/guardrails/DetectorEnhanced.js.map +1 -0
  53. package/dist/hooks/HookDeployer.d.ts +44 -0
  54. package/dist/hooks/HookDeployer.js +145 -0
  55. package/dist/hooks/HookDeployer.js.map +1 -0
  56. package/dist/hooks/HookGeneratorEnhanced.d.ts +67 -0
  57. package/dist/hooks/HookGeneratorEnhanced.js +238 -0
  58. package/dist/hooks/HookGeneratorEnhanced.js.map +1 -0
  59. package/dist/hooks/index.d.ts +4 -0
  60. package/dist/hooks/index.js +4 -0
  61. package/dist/hooks/index.js.map +1 -0
  62. package/dist/index.d.ts +26 -2
  63. package/dist/index.js +21 -5
  64. package/dist/index.js.map +1 -1
  65. package/dist/knowledge/SQLiteKnowledgeBase.js +28 -28
  66. package/dist/skills/SkillDiscovery.js +8 -0
  67. package/dist/skills/SkillDiscovery.js.map +1 -1
  68. package/dist/skills/SkillExecutor.d.ts +28 -0
  69. package/dist/skills/SkillExecutor.js +84 -0
  70. package/dist/skills/SkillExecutor.js.map +1 -0
  71. package/dist/skills/SkillRegistry.d.ts +93 -0
  72. package/dist/skills/SkillRegistry.js +130 -0
  73. package/dist/skills/SkillRegistry.js.map +1 -0
  74. package/dist/skills/TriggerEngine.d.ts +43 -0
  75. package/dist/skills/TriggerEngine.js +144 -0
  76. package/dist/skills/TriggerEngine.js.map +1 -0
  77. package/dist/skills/coreSkills.d.ts +6 -0
  78. package/dist/skills/coreSkills.js +41 -0
  79. package/dist/skills/coreSkills.js.map +1 -0
  80. package/dist/skills/index.d.ts +4 -0
  81. package/dist/skills/index.js +6 -0
  82. package/dist/skills/index.js.map +1 -0
  83. package/dist/workflows/GateParser.d.ts +55 -0
  84. package/dist/workflows/GateParser.js +73 -0
  85. package/dist/workflows/GateParser.js.map +1 -0
  86. package/dist/workflows/WorkflowExecutor.d.ts +56 -0
  87. package/dist/workflows/WorkflowExecutor.js +145 -0
  88. package/dist/workflows/WorkflowExecutor.js.map +1 -0
  89. package/dist/workflows/index.d.ts +4 -0
  90. package/dist/workflows/index.js +5 -0
  91. package/dist/workflows/index.js.map +1 -0
  92. package/package.json +5 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillExecutor.js","sourceRoot":"","sources":["../../src/skills/SkillExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import type { IEventBus } from '../core/eventBus.js';
2
+ export type SkillDomain = 'context' | 'planning' | 'execution' | 'verification' | 'evolution' | 'deployment';
3
+ export type SkillExecutionType = 'cli-command' | 'agent-delegate' | 'mcp-tool' | 'skill-file' | 'builtin-function';
4
+ export type SkillTriggerType = 'taskType' | 'phase' | 'detectorTriggered' | 'complexity' | 'keyword' | 'manual' | 'artifactType' | 'artifactStatus';
5
+ export interface SkillTrigger {
6
+ type: SkillTriggerType;
7
+ value: string | string[];
8
+ weight: number;
9
+ }
10
+ export interface SkillExecution {
11
+ type: SkillExecutionType;
12
+ config: {
13
+ command?: string;
14
+ agentType?: string;
15
+ toolName?: string;
16
+ skillPath?: string;
17
+ functionName?: string;
18
+ parameters?: Record<string, unknown>;
19
+ };
20
+ timeout?: number;
21
+ retryPolicy?: {
22
+ maxRetries: number;
23
+ backoffMs: number;
24
+ };
25
+ }
26
+ export interface SkillDefinition {
27
+ id: string;
28
+ name: string;
29
+ description: string;
30
+ domain: SkillDomain;
31
+ triggers: SkillTrigger[];
32
+ execution: SkillExecution;
33
+ prerequisites?: string[];
34
+ conflicts?: string[];
35
+ priority: number;
36
+ installed: boolean;
37
+ installedAt?: number;
38
+ source?: string;
39
+ }
40
+ export interface SkillRecommendation {
41
+ skillId: string;
42
+ priority: number;
43
+ reason: string;
44
+ triggeredBy: SkillTrigger[];
45
+ executionType: SkillExecutionType;
46
+ }
47
+ export interface SkillTriggerCondition {
48
+ taskType?: string;
49
+ phase?: 'explore' | 'plan' | 'implement' | 'verify' | 'evolve';
50
+ detectorTriggered?: string;
51
+ complexity?: 'simple' | 'medium' | 'complex';
52
+ keywords?: string[];
53
+ artifactType?: string;
54
+ artifactStatus?: string;
55
+ }
56
+ export interface ISkillRegistry {
57
+ register(skill: SkillDefinition): void;
58
+ unregister(skillId: string): void;
59
+ get(skillId: string): SkillDefinition | undefined;
60
+ listAll(domain?: SkillDomain): SkillDefinition[];
61
+ listInstalled(): SkillDefinition[];
62
+ recommend(context: SkillTriggerCondition): SkillRecommendation[];
63
+ evaluateTriggers(skill: SkillDefinition, context: SkillTriggerCondition): {
64
+ matched: SkillTrigger[];
65
+ score: number;
66
+ };
67
+ setInstalled(skillId: string, installed: boolean): void;
68
+ getDependencies(skillId: string): SkillDefinition[];
69
+ checkConflicts(skillId: string): string[];
70
+ }
71
+ export declare class SkillRegistry implements ISkillRegistry {
72
+ private skills;
73
+ private eventBus;
74
+ constructor(eventBus: IEventBus);
75
+ register(skill: SkillDefinition): void;
76
+ unregister(skillId: string): void;
77
+ get(skillId: string): SkillDefinition | undefined;
78
+ listAll(domain?: SkillDomain): SkillDefinition[];
79
+ listInstalled(): SkillDefinition[];
80
+ recommend(context: SkillTriggerCondition): SkillRecommendation[];
81
+ evaluateTriggers(skill: SkillDefinition, context: SkillTriggerCondition): {
82
+ matched: SkillTrigger[];
83
+ score: number;
84
+ };
85
+ setInstalled(skillId: string, installed: boolean): void;
86
+ getDependencies(skillId: string): SkillDefinition[];
87
+ checkConflicts(skillId: string): string[];
88
+ private matchesTrigger;
89
+ private calculatePriority;
90
+ private generateReason;
91
+ registerBatch(skills: SkillDefinition[]): void;
92
+ clear(): void;
93
+ }
@@ -0,0 +1,130 @@
1
+ // SCALE Engine — Skill Registry (v0.7.0)
2
+ // 技能注册表:存储、查询、推荐技能
3
+ import { logger } from '../core/logger.js';
4
+ // ============================================================================
5
+ // SkillRegistry Implementation
6
+ // ============================================================================
7
+ export class SkillRegistry {
8
+ skills = new Map();
9
+ eventBus;
10
+ constructor(eventBus) {
11
+ this.eventBus = eventBus;
12
+ }
13
+ register(skill) {
14
+ if (!skill.id || !skill.name || !skill.execution) {
15
+ throw new Error('Invalid skill definition: missing required fields');
16
+ }
17
+ if (this.skills.has(skill.id) && !skill.installed) {
18
+ logger.warn({ skillId: skill.id }, 'Skill already registered, skipping');
19
+ return;
20
+ }
21
+ this.skills.set(skill.id, skill);
22
+ this.eventBus.emit('skill.registered', { skillId: skill.id, domain: skill.domain, installed: skill.installed });
23
+ logger.info({ skillId: skill.id, domain: skill.domain }, 'Skill registered');
24
+ }
25
+ unregister(skillId) {
26
+ const skill = this.skills.get(skillId);
27
+ if (!skill)
28
+ return;
29
+ this.skills.delete(skillId);
30
+ this.eventBus.emit('skill.unregistered', { skillId });
31
+ logger.info({ skillId }, 'Skill unregistered');
32
+ }
33
+ get(skillId) {
34
+ return this.skills.get(skillId);
35
+ }
36
+ listAll(domain) {
37
+ const all = [...this.skills.values()];
38
+ if (domain)
39
+ return all.filter(s => s.domain === domain);
40
+ return all.sort((a, b) => b.priority - a.priority);
41
+ }
42
+ listInstalled() {
43
+ return [...this.skills.values()].filter(s => s.installed).sort((a, b) => b.priority - a.priority);
44
+ }
45
+ recommend(context) {
46
+ const candidates = [];
47
+ for (const skill of this.skills.values()) {
48
+ if (!skill.installed)
49
+ continue;
50
+ const { matched, score } = this.evaluateTriggers(skill, context);
51
+ if (matched.length > 0 && score > 0.3) {
52
+ const priority = this.calculatePriority(skill, score, context);
53
+ candidates.push({
54
+ skillId: skill.id, priority, reason: this.generateReason(skill, matched),
55
+ triggeredBy: matched, executionType: skill.execution.type,
56
+ });
57
+ }
58
+ }
59
+ return candidates.sort((a, b) => b.priority - a.priority).slice(0, 5);
60
+ }
61
+ evaluateTriggers(skill, context) {
62
+ const matched = [];
63
+ let totalWeight = 0, matchedWeight = 0;
64
+ for (const trigger of skill.triggers) {
65
+ totalWeight += trigger.weight;
66
+ if (this.matchesTrigger(trigger, context)) {
67
+ matched.push(trigger);
68
+ matchedWeight += trigger.weight;
69
+ }
70
+ }
71
+ return { matched, score: totalWeight > 0 ? matchedWeight / totalWeight : 0 };
72
+ }
73
+ setInstalled(skillId, installed) {
74
+ const skill = this.skills.get(skillId);
75
+ if (!skill)
76
+ return;
77
+ skill.installed = installed;
78
+ skill.installedAt = installed ? Date.now() : undefined;
79
+ this.eventBus.emit('skill.installation_changed', { skillId, installed });
80
+ }
81
+ getDependencies(skillId) {
82
+ const skill = this.skills.get(skillId);
83
+ if (!skill?.prerequisites)
84
+ return [];
85
+ return skill.prerequisites.map(id => this.skills.get(id)).filter(Boolean);
86
+ }
87
+ checkConflicts(skillId) {
88
+ const skill = this.skills.get(skillId);
89
+ if (!skill?.conflicts)
90
+ return [];
91
+ return skill.conflicts.filter(id => this.skills.get(id)?.installed);
92
+ }
93
+ matchesTrigger(trigger, context) {
94
+ switch (trigger.type) {
95
+ case 'taskType':
96
+ return context.taskType === trigger.value || (Array.isArray(trigger.value) && trigger.value.includes(context.taskType ?? ''));
97
+ case 'phase': return context.phase === trigger.value;
98
+ case 'detectorTriggered':
99
+ return context.detectorTriggered === trigger.value || (Array.isArray(trigger.value) && trigger.value.includes(context.detectorTriggered ?? ''));
100
+ case 'complexity': return context.complexity === trigger.value;
101
+ case 'keyword':
102
+ if (!context.keywords)
103
+ return false;
104
+ const triggerKeywords = Array.isArray(trigger.value) ? trigger.value : [trigger.value];
105
+ return triggerKeywords.some(k => context.keywords.some(ck => ck.toLowerCase().includes(k.toLowerCase())));
106
+ case 'manual': return false;
107
+ default: return false;
108
+ }
109
+ }
110
+ calculatePriority(skill, triggerScore, context) {
111
+ let priority = skill.priority + triggerScore * 30;
112
+ if (context.complexity === 'complex' && skill.domain === 'planning')
113
+ priority += 10;
114
+ if (context.phase === 'verify' && skill.domain === 'verification')
115
+ priority += 15;
116
+ if (context.phase === 'implement' && skill.domain === 'execution')
117
+ priority += 15;
118
+ if (context.detectorTriggered && skill.domain === 'verification')
119
+ priority += 20;
120
+ return Math.min(100, Math.max(0, priority));
121
+ }
122
+ generateReason(skill, matched) {
123
+ const triggerNames = matched.map(t => t.type).join(', ');
124
+ return matched.length === 1 ? `${skill.name} 触发条件匹配: ${triggerNames}` : `${skill.name} 多条件匹配: ${triggerNames} (${matched.length} 个触发器)`;
125
+ }
126
+ registerBatch(skills) { for (const skill of skills)
127
+ this.register(skill); }
128
+ clear() { this.skills.clear(); this.eventBus.emit('skills.cleared', { clearedAt: Date.now() }); }
129
+ }
130
+ //# sourceMappingURL=SkillRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillRegistry.js","sourceRoot":"","sources":["../../src/skills/SkillRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { IEventBus } from '../core/eventBus.js';
2
+ import type { ISkillRegistry, SkillTriggerCondition, SkillRecommendation } from './SkillRegistry.js';
3
+ export interface TriggerEvent {
4
+ type: 'tool_used' | 'artifact_created' | 'artifact_transitioned' | 'detector_triggered' | 'phase_changed' | 'error_occurred';
5
+ payload: Record<string, unknown>;
6
+ sessionId: string;
7
+ timestamp: number;
8
+ }
9
+ export interface ITriggerEngine {
10
+ start(): void;
11
+ stop(): void;
12
+ subscribe(eventType: string, handler: (event: TriggerEvent) => void): void;
13
+ emit(event: TriggerEvent): void;
14
+ triggerSkillRecommendation(context: SkillTriggerCondition): Promise<SkillRecommendation[]>;
15
+ injectRecommendationToContext(sessionId: string, recommendations: SkillRecommendation[]): void;
16
+ updateSessionContext(sessionId: string, updates: Partial<SkillTriggerCondition>): void;
17
+ getSessionContext(sessionId: string): SkillTriggerCondition | undefined;
18
+ }
19
+ export declare class TriggerEngine implements ITriggerEngine {
20
+ private eventBus;
21
+ private skillRegistry;
22
+ private subscriptions;
23
+ private sessionContexts;
24
+ private running;
25
+ constructor(eventBus: IEventBus, skillRegistry: ISkillRegistry);
26
+ start(): void;
27
+ stop(): void;
28
+ subscribe(eventType: string, handler: (event: TriggerEvent) => void): void;
29
+ emit(event: TriggerEvent): void;
30
+ triggerSkillRecommendation(context: SkillTriggerCondition): Promise<SkillRecommendation[]>;
31
+ injectRecommendationToContext(sessionId: string, recommendations: SkillRecommendation[]): void;
32
+ private handleToolUsed;
33
+ private handleArtifactCreated;
34
+ private handleArtifactTransitioned;
35
+ private handleDetectorTriggered;
36
+ private triggerAndInject;
37
+ private formatRecommendationBlock;
38
+ private extractKeywords;
39
+ private mapArtifactToTask;
40
+ private mapStatusToPhase;
41
+ updateSessionContext(sessionId: string, updates: Partial<SkillTriggerCondition>): void;
42
+ getSessionContext(sessionId: string): SkillTriggerCondition | undefined;
43
+ }
@@ -0,0 +1,144 @@
1
+ // SCALE Engine — Trigger Engine (v0.7.0)
2
+ // 技能触发引擎:监听事件,触发技能推荐
3
+ import { logger } from '../core/logger.js';
4
+ export class TriggerEngine {
5
+ eventBus;
6
+ skillRegistry;
7
+ subscriptions = new Map();
8
+ sessionContexts = new Map();
9
+ running = false;
10
+ constructor(eventBus, skillRegistry) {
11
+ this.eventBus = eventBus;
12
+ this.skillRegistry = skillRegistry;
13
+ }
14
+ start() {
15
+ if (this.running)
16
+ return;
17
+ this.running = true;
18
+ this.eventBus.on('tool.used', (e) => this.handleToolUsed(e.payload));
19
+ this.eventBus.on('artifact.created', (e) => this.handleArtifactCreated(e.payload));
20
+ this.eventBus.on('artifact.transitioned', (e) => this.handleArtifactTransitioned(e.payload));
21
+ this.eventBus.on('detector.triggered', (e) => this.handleDetectorTriggered(e.payload));
22
+ logger.info('TriggerEngine started');
23
+ }
24
+ stop() {
25
+ this.running = false;
26
+ this.subscriptions.clear();
27
+ this.sessionContexts.clear();
28
+ logger.info('TriggerEngine stopped');
29
+ }
30
+ subscribe(eventType, handler) {
31
+ const subs = this.subscriptions.get(eventType) ?? [];
32
+ subs.push(handler);
33
+ this.subscriptions.set(eventType, subs);
34
+ }
35
+ emit(event) {
36
+ const subs = this.subscriptions.get(event.type);
37
+ if (!subs)
38
+ return;
39
+ for (const handler of subs) {
40
+ try {
41
+ handler(event);
42
+ }
43
+ catch (err) {
44
+ logger.error({ err }, 'Trigger handler error');
45
+ }
46
+ }
47
+ }
48
+ async triggerSkillRecommendation(context) {
49
+ const recommendations = this.skillRegistry.recommend(context);
50
+ if (recommendations.length > 0) {
51
+ logger.info({ count: recommendations.length, topSkill: recommendations[0]?.skillId }, 'Skills recommended');
52
+ this.eventBus.emit('skill.recommended', { recommendations, context });
53
+ }
54
+ return recommendations;
55
+ }
56
+ injectRecommendationToContext(sessionId, recommendations) {
57
+ if (recommendations.length === 0)
58
+ return;
59
+ const block = this.formatRecommendationBlock(recommendations);
60
+ this.eventBus.emit('context.inject', { sessionId, block, type: 'skill_recommendations' });
61
+ }
62
+ handleToolUsed(data) {
63
+ const sessionId = data.sessionId ?? 'default';
64
+ const tool = data.tool;
65
+ const context = this.sessionContexts.get(sessionId) ?? {};
66
+ if (tool === 'Bash') {
67
+ const cmd = (data.args?.command) ?? '';
68
+ context.keywords = this.extractKeywords(cmd);
69
+ }
70
+ this.sessionContexts.set(sessionId, context);
71
+ this.emit({ type: 'tool_used', payload: { tool }, sessionId, timestamp: Date.now() });
72
+ this.triggerAndInject(sessionId, context);
73
+ }
74
+ handleArtifactCreated(data) {
75
+ const sessionId = data.sessionId ?? 'default';
76
+ const artifactType = data.type;
77
+ const context = this.sessionContexts.get(sessionId) ?? {};
78
+ context.artifactType = artifactType;
79
+ context.taskType = this.mapArtifactToTask(artifactType);
80
+ this.sessionContexts.set(sessionId, context);
81
+ this.emit({ type: 'artifact_created', payload: { artifactId: data.id, type: artifactType }, sessionId, timestamp: Date.now() });
82
+ this.triggerAndInject(sessionId, context);
83
+ }
84
+ handleArtifactTransitioned(data) {
85
+ const sessionId = data.sessionId ?? 'default';
86
+ const newStatus = data.newStatus;
87
+ const context = this.sessionContexts.get(sessionId) ?? {};
88
+ context.artifactStatus = newStatus;
89
+ context.phase = this.mapStatusToPhase(newStatus);
90
+ this.sessionContexts.set(sessionId, context);
91
+ this.emit({ type: 'artifact_transitioned', payload: { artifactId: data.id, newStatus }, sessionId, timestamp: Date.now() });
92
+ this.triggerAndInject(sessionId, context);
93
+ }
94
+ handleDetectorTriggered(data) {
95
+ const sessionId = data.sessionId ?? 'default';
96
+ const detector = data.detector;
97
+ const context = this.sessionContexts.get(sessionId) ?? {};
98
+ context.detectorTriggered = detector;
99
+ this.sessionContexts.set(sessionId, context);
100
+ this.emit({ type: 'detector_triggered', payload: { detector }, sessionId, timestamp: Date.now() });
101
+ this.triggerAndInject(sessionId, context);
102
+ }
103
+ async triggerAndInject(sessionId, context) {
104
+ const recommendations = await this.triggerSkillRecommendation(context);
105
+ this.injectRecommendationToContext(sessionId, recommendations);
106
+ }
107
+ formatRecommendationBlock(recommendations) {
108
+ const lines = recommendations.map((r, i) => `${i + 1}. **${r.skillId}** (priority ${r.priority}) - ${r.reason}`);
109
+ return `\n## Recommended Skills\n\n${lines.join('\n')}\n`;
110
+ }
111
+ extractKeywords(cmd) {
112
+ const keywords = [];
113
+ if (/test|spec|verify/i.test(cmd))
114
+ keywords.push('test');
115
+ if (/build|compile|make/i.test(cmd))
116
+ keywords.push('build');
117
+ if (/lint|check|audit/i.test(cmd))
118
+ keywords.push('lint');
119
+ if (/fix|bug|error|issue/i.test(cmd))
120
+ keywords.push('bug-fix');
121
+ if (/refactor|clean|optimize/i.test(cmd))
122
+ keywords.push('refactor');
123
+ if (/add|create|new|implement/i.test(cmd))
124
+ keywords.push('feature');
125
+ return keywords;
126
+ }
127
+ mapArtifactToTask(type) {
128
+ const map = { Spec: 'planning', Plan: 'planning', Task: 'execution', Change: 'execution', Defect: 'bug-fix', Evidence: 'verification', Lesson: 'evolution' };
129
+ return map[type] ?? 'unknown';
130
+ }
131
+ mapStatusToPhase(status) {
132
+ const map = { DRAFT: 'plan', REVIEWING: 'plan', FROZEN: 'plan', APPROVED: 'implement', IN_PROGRESS: 'implement', BLOCKED: 'implement', DONE: 'verify', CLOSED: 'evolve' };
133
+ return map[status] ?? 'explore';
134
+ }
135
+ updateSessionContext(sessionId, updates) {
136
+ const ctx = this.sessionContexts.get(sessionId) ?? {};
137
+ Object.assign(ctx, updates);
138
+ this.sessionContexts.set(sessionId, ctx);
139
+ }
140
+ getSessionContext(sessionId) {
141
+ return this.sessionContexts.get(sessionId);
142
+ }
143
+ }
144
+ //# sourceMappingURL=TriggerEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerEngine.js","sourceRoot":"","sources":["../../src/skills/TriggerEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { SkillDefinition } from "./SkillRegistry.js";
2
+ export declare const CORE_SKILLS: SkillDefinition[];
3
+ export declare function getCoreSkill(id: string): SkillDefinition | undefined;
4
+ export declare function registerCoreSkills(registry: {
5
+ registerBatch: (skills: SkillDefinition[]) => void;
6
+ }): void;
@@ -0,0 +1,41 @@
1
+ // SCALE Engine — Core Skills (v0.7.0)
2
+ // 10 个内置技能定义
3
+ export const CORE_SKILLS = [
4
+ { id: "brainstorming", name: "Brainstorming", description: "需求精炼与方案探索", domain: "planning",
5
+ triggers: [{ type: "taskType", value: "feature", weight: 0.8 }, { type: "phase", value: "plan", weight: 0.9 }],
6
+ execution: { type: "agent-delegate", config: { agentType: "planner" } }, priority: 80, installed: true },
7
+ { id: "tdd-guide", name: "TDD Guide", description: "测试驱动开发指导", domain: "execution",
8
+ triggers: [{ type: "taskType", value: ["feature", "bug-fix"], weight: 0.7 }, { type: "phase", value: "implement", weight: 0.8 }],
9
+ execution: { type: "builtin-function", config: { functionName: "tdd_check" } }, priority: 75, installed: true },
10
+ { id: "systematic-debugging", name: "Systematic Debugging", description: "系统性调试", domain: "verification",
11
+ triggers: [{ type: "detectorTriggered", value: "brute-retry", weight: 0.9 }, { type: "keyword", value: ["bug", "error", "fix"], weight: 0.6 }],
12
+ execution: { type: "agent-delegate", config: { agentType: "debugger" } }, priority: 85, installed: true },
13
+ { id: "code-review", name: "Code Review", description: "代码审查", domain: "verification",
14
+ triggers: [{ type: "phase", value: "verify", weight: 0.8 }, { type: "artifactStatus", value: "DONE", weight: 0.7 }],
15
+ execution: { type: "agent-delegate", config: { agentType: "reviewer" } }, priority: 70, installed: true },
16
+ { id: "security-review", name: "Security Review", description: "安全审查", domain: "verification",
17
+ triggers: [{ type: "keyword", value: ["auth", "payment", "credential"], weight: 0.9 }],
18
+ execution: { type: "agent-delegate", config: { agentType: "security-reviewer" } }, priority: 90, installed: true },
19
+ { id: "verification", name: "Verification Gate", description: "验证门控", domain: "verification",
20
+ triggers: [{ type: "phase", value: "verify", weight: 0.9 }],
21
+ execution: { type: "builtin-function", config: { functionName: "verify_status" } }, priority: 65, installed: true },
22
+ { id: "lesson-extractor", name: "Lesson Extractor", description: "经验提取", domain: "evolution",
23
+ triggers: [{ type: "phase", value: "evolve", weight: 0.9 }, { type: "artifactType", value: "Defect", weight: 0.8 }],
24
+ execution: { type: "cli-command", config: { command: "scale evolve" } }, priority: 60, installed: true },
25
+ { id: "context-builder", name: "Context Builder", description: "上下文构建", domain: "context",
26
+ triggers: [{ type: "complexity", value: "complex", weight: 0.7 }],
27
+ execution: { type: "cli-command", config: { command: "scale context build" } }, priority: 55, installed: true },
28
+ { id: "workflow-guide", name: "Workflow Guide", description: "工作流指导", domain: "planning",
29
+ triggers: [{ type: "taskType", value: "planning", weight: 0.8 }],
30
+ execution: { type: "cli-command", config: { command: "scale workflow start" } }, priority: 50, installed: true },
31
+ { id: "fsm-check", name: "FSM Status Check", description: "FSM状态检查", domain: "execution",
32
+ triggers: [{ type: "keyword", value: ["approve", "complete", "transition"], weight: 0.6 }],
33
+ execution: { type: "cli-command", config: { command: "scale fsm status" } }, priority: 45, installed: true },
34
+ ];
35
+ export function getCoreSkill(id) {
36
+ return CORE_SKILLS.find(s => s.id === id);
37
+ }
38
+ export function registerCoreSkills(registry) {
39
+ registry.registerBatch(CORE_SKILLS);
40
+ }
41
+ //# sourceMappingURL=coreSkills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coreSkills.js","sourceRoot":"","sources":["../../src/skills/coreSkills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { SkillRegistry, type ISkillRegistry, type SkillDefinition, type SkillTrigger, type SkillExecution, type SkillRecommendation, type SkillTriggerCondition, type SkillDomain, type SkillExecutionType } from "./SkillRegistry.js";
2
+ export { TriggerEngine, type ITriggerEngine, type TriggerEvent } from "./TriggerEngine.js";
3
+ export { SkillExecutor, type ISkillExecutor, type SkillExecutionResult } from "./SkillExecutor.js";
4
+ export { CORE_SKILLS, getCoreSkill, registerCoreSkills } from "./coreSkills.js";
@@ -0,0 +1,6 @@
1
+ // SCALE Engine — Skills Module Index (v0.7.0)
2
+ export { SkillRegistry } from "./SkillRegistry.js";
3
+ export { TriggerEngine } from "./TriggerEngine.js";
4
+ export { SkillExecutor } from "./SkillExecutor.js";
5
+ export { CORE_SKILLS, getCoreSkill, registerCoreSkills } from "./coreSkills.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,EAAE,aAAa,EAAsL,MAAM,oBAAoB,CAAA;AACtO,OAAO,EAAE,aAAa,EAA0C,MAAM,oBAAoB,CAAA;AAC1F,OAAO,EAAE,aAAa,EAAkD,MAAM,oBAAoB,CAAA;AAClG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,55 @@
1
+ import type { Artifact } from "../artifact/types.js";
2
+ export interface GateExpression {
3
+ type: "comparison" | "status_check" | "command_check" | "approval_check" | "compound";
4
+ field?: string;
5
+ operator?: string;
6
+ value?: string | number;
7
+ command?: string;
8
+ expressions?: GateExpression[];
9
+ connector?: "and" | "or";
10
+ }
11
+ export interface GateResult {
12
+ passed: boolean;
13
+ expression: string;
14
+ evaluated: GateExpression;
15
+ reason: string;
16
+ details?: Record<string, unknown>;
17
+ }
18
+ export interface IGateParser {
19
+ parse(expression: string): GateExpression;
20
+ evaluate(expr: GateExpression, context: {
21
+ artifact?: Artifact;
22
+ runCommand?: (cmd: string) => Promise<{
23
+ success: boolean;
24
+ output: string;
25
+ }>;
26
+ }): Promise<GateResult>;
27
+ evaluateString(expression: string, context: {
28
+ artifact?: Artifact;
29
+ runCommand?: (cmd: string) => Promise<{
30
+ success: boolean;
31
+ output: string;
32
+ }>;
33
+ }): Promise<GateResult>;
34
+ }
35
+ export declare class GateParser implements IGateParser {
36
+ parse(expression: string): GateExpression;
37
+ evaluate(expr: GateExpression, ctx: {
38
+ artifact?: Artifact;
39
+ runCommand?: (cmd: string) => Promise<{
40
+ success: boolean;
41
+ output: string;
42
+ }>;
43
+ }): Promise<GateResult>;
44
+ evaluateString(expr: string, ctx: {
45
+ artifact?: Artifact;
46
+ runCommand?: (cmd: string) => Promise<{
47
+ success: boolean;
48
+ output: string;
49
+ }>;
50
+ }): Promise<GateResult>;
51
+ private evalComparison;
52
+ private evalStatus;
53
+ private evalCommand;
54
+ private evalCompound;
55
+ }