specweave 0.3.13 → 0.4.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.
- package/CLAUDE.md +506 -17
- package/README.md +100 -58
- package/bin/install-all.sh +9 -2
- package/bin/install-hooks.sh +57 -0
- package/bin/specweave.js +16 -0
- package/dist/adapters/adapter-base.d.ts +21 -0
- package/dist/adapters/adapter-base.d.ts.map +1 -1
- package/dist/adapters/adapter-base.js +28 -0
- package/dist/adapters/adapter-base.js.map +1 -1
- package/dist/adapters/adapter-interface.d.ts +41 -0
- package/dist/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.d.ts +36 -0
- package/dist/adapters/claude/adapter.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.js +135 -0
- package/dist/adapters/claude/adapter.js.map +1 -1
- package/dist/adapters/copilot/adapter.d.ts +25 -0
- package/dist/adapters/copilot/adapter.d.ts.map +1 -1
- package/dist/adapters/copilot/adapter.js +112 -0
- package/dist/adapters/copilot/adapter.js.map +1 -1
- package/dist/adapters/cursor/adapter.d.ts +36 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -1
- package/dist/adapters/cursor/adapter.js +140 -0
- package/dist/adapters/cursor/adapter.js.map +1 -1
- package/dist/adapters/generic/adapter.d.ts +25 -0
- package/dist/adapters/generic/adapter.d.ts.map +1 -1
- package/dist/adapters/generic/adapter.js +111 -0
- package/dist/adapters/generic/adapter.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +103 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts +37 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +296 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/core/agent-model-manager.d.ts +52 -0
- package/dist/core/agent-model-manager.d.ts.map +1 -0
- package/dist/core/agent-model-manager.js +120 -0
- package/dist/core/agent-model-manager.js.map +1 -0
- package/dist/core/cost-tracker.d.ts +108 -0
- package/dist/core/cost-tracker.d.ts.map +1 -0
- package/dist/core/cost-tracker.js +281 -0
- package/dist/core/cost-tracker.js.map +1 -0
- package/dist/core/model-selector.d.ts +57 -0
- package/dist/core/model-selector.d.ts.map +1 -0
- package/dist/core/model-selector.js +115 -0
- package/dist/core/model-selector.js.map +1 -0
- package/dist/core/phase-detector.d.ts +62 -0
- package/dist/core/phase-detector.d.ts.map +1 -0
- package/dist/core/phase-detector.js +229 -0
- package/dist/core/phase-detector.js.map +1 -0
- package/dist/core/plugin-detector.d.ts +96 -0
- package/dist/core/plugin-detector.d.ts.map +1 -0
- package/dist/core/plugin-detector.js +349 -0
- package/dist/core/plugin-detector.js.map +1 -0
- package/dist/core/plugin-loader.d.ts +111 -0
- package/dist/core/plugin-loader.d.ts.map +1 -0
- package/dist/core/plugin-loader.js +319 -0
- package/dist/core/plugin-loader.js.map +1 -0
- package/dist/core/plugin-manager.d.ts +144 -0
- package/dist/core/plugin-manager.d.ts.map +1 -0
- package/dist/core/plugin-manager.js +393 -0
- package/dist/core/plugin-manager.js.map +1 -0
- package/dist/core/schemas/plugin-manifest.schema.json +253 -0
- package/dist/core/types/plugin.d.ts +252 -0
- package/dist/core/types/plugin.d.ts.map +1 -0
- package/dist/core/types/plugin.js +48 -0
- package/dist/core/types/plugin.js.map +1 -0
- package/dist/integrations/jira/jira-mapper.d.ts +2 -2
- package/dist/integrations/jira/jira-mapper.js +2 -2
- package/dist/types/cost-tracking.d.ts +43 -0
- package/dist/types/cost-tracking.d.ts.map +1 -0
- package/dist/types/cost-tracking.js +8 -0
- package/dist/types/cost-tracking.js.map +1 -0
- package/dist/types/model-selection.d.ts +53 -0
- package/dist/types/model-selection.d.ts.map +1 -0
- package/dist/types/model-selection.js +12 -0
- package/dist/types/model-selection.js.map +1 -0
- package/dist/utils/cost-reporter.d.ts +58 -0
- package/dist/utils/cost-reporter.d.ts.map +1 -0
- package/dist/utils/cost-reporter.js +224 -0
- package/dist/utils/cost-reporter.js.map +1 -0
- package/dist/utils/pricing-constants.d.ts +70 -0
- package/dist/utils/pricing-constants.d.ts.map +1 -0
- package/dist/utils/pricing-constants.js +71 -0
- package/dist/utils/pricing-constants.js.map +1 -0
- package/package.json +13 -9
- package/src/adapters/adapter-base.ts +33 -0
- package/src/adapters/adapter-interface.ts +46 -0
- package/src/adapters/claude/adapter.ts +164 -0
- package/src/adapters/copilot/adapter.ts +138 -0
- package/src/adapters/cursor/adapter.ts +170 -0
- package/src/adapters/generic/adapter.ts +137 -0
- package/src/agents/architect/AGENT.md +3 -0
- package/src/agents/code-reviewer.md +156 -0
- package/src/agents/data-scientist/AGENT.md +181 -0
- package/src/agents/database-optimizer/AGENT.md +147 -0
- package/src/agents/devops/AGENT.md +3 -0
- package/src/agents/diagrams-architect/AGENT.md +3 -0
- package/src/agents/docs-writer/AGENT.md +3 -0
- package/src/agents/kubernetes-architect/AGENT.md +142 -0
- package/src/agents/ml-engineer/AGENT.md +150 -0
- package/src/agents/mlops-engineer/AGENT.md +201 -0
- package/src/agents/network-engineer/AGENT.md +149 -0
- package/src/agents/observability-engineer/AGENT.md +213 -0
- package/src/agents/payment-integration/AGENT.md +35 -0
- package/src/agents/performance/AGENT.md +3 -0
- package/src/agents/performance-engineer/AGENT.md +153 -0
- package/src/agents/pm/AGENT.md +3 -0
- package/src/agents/qa-lead/AGENT.md +3 -0
- package/src/agents/security/AGENT.md +3 -0
- package/src/agents/sre/AGENT.md +3 -0
- package/src/agents/tdd-orchestrator/AGENT.md +169 -0
- package/src/agents/tech-lead/AGENT.md +3 -0
- package/src/commands/specweave.costs.md +261 -0
- package/src/commands/specweave.increment.md +48 -4
- package/src/commands/specweave.ml-pipeline.md +292 -0
- package/src/commands/specweave.monitor-setup.md +501 -0
- package/src/commands/specweave.slo-implement.md +1055 -0
- package/src/commands/specweave.sync-github.md +1 -1
- package/src/commands/specweave.tdd-cycle.md +199 -0
- package/src/commands/specweave.tdd-green.md +842 -0
- package/src/commands/specweave.tdd-red.md +135 -0
- package/src/commands/specweave.tdd-refactor.md +165 -0
- package/src/hooks/post-increment-plugin-detect.sh +142 -0
- package/src/hooks/post-task-completion.sh +53 -11
- package/src/hooks/pre-task-plugin-detect.sh +96 -0
- package/src/skills/SKILLS-INDEX.md +18 -10
- package/src/skills/billing-automation/SKILL.md +559 -0
- package/src/skills/distributed-tracing/SKILL.md +438 -0
- package/src/skills/e2e-playwright/README.md +1 -1
- package/src/skills/e2e-playwright/package.json +1 -1
- package/src/skills/gitops-workflow/SKILL.md +285 -0
- package/src/skills/gitops-workflow/references/argocd-setup.md +134 -0
- package/src/skills/gitops-workflow/references/sync-policies.md +131 -0
- package/src/skills/grafana-dashboards/SKILL.md +369 -0
- package/src/skills/helm-chart-scaffolding/SKILL.md +544 -0
- package/src/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
- package/src/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
- package/src/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
- package/src/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
- package/src/skills/k8s-manifest-generator/SKILL.md +511 -0
- package/src/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/src/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/src/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/src/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
- package/src/skills/k8s-manifest-generator/references/service-spec.md +724 -0
- package/src/skills/k8s-security-policies/SKILL.md +334 -0
- package/src/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
- package/src/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
- package/src/skills/ml-pipeline-workflow/SKILL.md +245 -0
- package/src/skills/paypal-integration/SKILL.md +467 -0
- package/src/skills/pci-compliance/SKILL.md +466 -0
- package/src/skills/prometheus-configuration/SKILL.md +392 -0
- package/src/skills/slo-implementation/SKILL.md +329 -0
- package/src/skills/stripe-integration/SKILL.md +442 -0
- package/src/skills/tdd-workflow/SKILL.md +378 -0
- package/src/templates/README.md.template +1 -1
- package/src/skills/bmad-method-expert/SKILL.md +0 -626
- package/src/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
- package/src/skills/bmad-method-expert/scripts/check-setup.js +0 -208
- package/src/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
- package/src/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
- package/src/skills/context-optimizer/SKILL.md +0 -588
- package/src/skills/figma-designer/SKILL.md +0 -149
- package/src/skills/figma-implementer/SKILL.md +0 -148
- package/src/skills/figma-mcp-connector/SKILL.md +0 -136
- package/src/skills/figma-to-code/SKILL.md +0 -128
- package/src/skills/spec-kit-expert/SKILL.md +0 -1010
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase Detector
|
|
3
|
+
*
|
|
4
|
+
* Multi-signal phase detection algorithm that analyzes user prompts and context
|
|
5
|
+
* to determine whether work is in planning, execution, or review phase.
|
|
6
|
+
*
|
|
7
|
+
* Uses 4 signals with weighted scoring:
|
|
8
|
+
* 1. Keyword analysis (40%) - Planning/execution/review keywords
|
|
9
|
+
* 2. Command analysis (30%) - Slash commands hint at phase
|
|
10
|
+
* 3. Context analysis (20%) - Increment state, file types
|
|
11
|
+
* 4. Explicit hints (10%) - User explicitly states phase
|
|
12
|
+
*
|
|
13
|
+
* Target accuracy: >95%
|
|
14
|
+
*/
|
|
15
|
+
export class PhaseDetector {
|
|
16
|
+
constructor() {
|
|
17
|
+
// Keyword dictionaries for each phase
|
|
18
|
+
this.planningKeywords = [
|
|
19
|
+
'plan', 'design', 'analyze', 'research', 'architecture', 'decide',
|
|
20
|
+
'strategy', 'requirements', 'specification', 'feasibility', 'explore',
|
|
21
|
+
'brainstorm', 'assess', 'evaluate', 'investigate', 'study', 'conceive',
|
|
22
|
+
'blueprint', 'roadmap', 'scope', 'estimate', 'proposal'
|
|
23
|
+
];
|
|
24
|
+
this.executionKeywords = [
|
|
25
|
+
'implement', 'build', 'create', 'write', 'code', 'generate',
|
|
26
|
+
'develop', 'construct', 'refactor', 'fix', 'update', 'modify',
|
|
27
|
+
'add', 'delete', 'remove', 'change', 'integrate', 'deploy',
|
|
28
|
+
'setup', 'configure', 'install', 'run', 'execute'
|
|
29
|
+
];
|
|
30
|
+
this.reviewKeywords = [
|
|
31
|
+
'review', 'validate', 'audit', 'assess', 'check', 'verify',
|
|
32
|
+
'test', 'evaluate', 'inspect', 'examine', 'quality',
|
|
33
|
+
'debug', 'troubleshoot', 'analyze error', 'find bug', 'measure'
|
|
34
|
+
];
|
|
35
|
+
// Command-to-phase mapping
|
|
36
|
+
this.commandPhaseMap = {
|
|
37
|
+
'/specweave.inc': 'planning',
|
|
38
|
+
'/specweave': 'planning',
|
|
39
|
+
'/increment': 'planning',
|
|
40
|
+
'/specweave.do': 'execution',
|
|
41
|
+
'/do': 'execution',
|
|
42
|
+
'/specweave.validate': 'review',
|
|
43
|
+
'/validate': 'review',
|
|
44
|
+
'/specweave.done': 'review',
|
|
45
|
+
'/spec-driven-brainstorming': 'planning',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Detect phase from user prompt and execution context
|
|
50
|
+
*/
|
|
51
|
+
detect(prompt, context = {}) {
|
|
52
|
+
const scores = {
|
|
53
|
+
planning: 0,
|
|
54
|
+
execution: 0,
|
|
55
|
+
review: 0,
|
|
56
|
+
};
|
|
57
|
+
const signals = {
|
|
58
|
+
keywords: [],
|
|
59
|
+
context: [],
|
|
60
|
+
};
|
|
61
|
+
// Signal 1: Keyword analysis (40% weight)
|
|
62
|
+
const keywordScore = this.analyzeKeywords(prompt, scores, signals);
|
|
63
|
+
// Signal 2: Command analysis (30% weight)
|
|
64
|
+
const commandScore = this.analyzeCommand(context, scores, signals);
|
|
65
|
+
// Signal 3: Context analysis (20% weight)
|
|
66
|
+
const contextScore = this.analyzeContext(context, scores, signals);
|
|
67
|
+
// Signal 4: Explicit hints (10% weight)
|
|
68
|
+
const hintScore = this.analyzeHints(prompt, scores, signals);
|
|
69
|
+
// Calculate total signal strength
|
|
70
|
+
const totalSignals = keywordScore + commandScore + contextScore + hintScore;
|
|
71
|
+
// Determine winning phase
|
|
72
|
+
const phase = Object.keys(scores).reduce((a, b) => scores[a] > scores[b] ? a : b);
|
|
73
|
+
// Calculate confidence (normalized score of winning phase)
|
|
74
|
+
const maxScore = Math.max(...Object.values(scores));
|
|
75
|
+
const confidence = maxScore > 0 ? scores[phase] / maxScore : 0.5;
|
|
76
|
+
return {
|
|
77
|
+
phase,
|
|
78
|
+
confidence,
|
|
79
|
+
signals,
|
|
80
|
+
reasoning: this.generateReasoning(phase, confidence, signals, totalSignals),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Analyze keywords in prompt
|
|
85
|
+
*/
|
|
86
|
+
analyzeKeywords(prompt, scores, signals) {
|
|
87
|
+
const lowerPrompt = prompt.toLowerCase();
|
|
88
|
+
let matchCount = 0;
|
|
89
|
+
// Check planning keywords
|
|
90
|
+
for (const keyword of this.planningKeywords) {
|
|
91
|
+
if (lowerPrompt.includes(keyword)) {
|
|
92
|
+
scores.planning++;
|
|
93
|
+
if (signals.keywords.length < 5) { // Limit to first 5
|
|
94
|
+
signals.keywords.push(`planning:${keyword}`);
|
|
95
|
+
}
|
|
96
|
+
matchCount++;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Check execution keywords
|
|
100
|
+
for (const keyword of this.executionKeywords) {
|
|
101
|
+
if (lowerPrompt.includes(keyword)) {
|
|
102
|
+
scores.execution++;
|
|
103
|
+
if (signals.keywords.length < 5) {
|
|
104
|
+
signals.keywords.push(`execution:${keyword}`);
|
|
105
|
+
}
|
|
106
|
+
matchCount++;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Check review keywords
|
|
110
|
+
for (const keyword of this.reviewKeywords) {
|
|
111
|
+
if (lowerPrompt.includes(keyword)) {
|
|
112
|
+
scores.review++;
|
|
113
|
+
if (signals.keywords.length < 5) {
|
|
114
|
+
signals.keywords.push(`review:${keyword}`);
|
|
115
|
+
}
|
|
116
|
+
matchCount++;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return matchCount > 0 ? 1 : 0;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Analyze command hints
|
|
123
|
+
*/
|
|
124
|
+
analyzeCommand(context, scores, signals) {
|
|
125
|
+
if (context.command && this.commandPhaseMap[context.command]) {
|
|
126
|
+
const phase = this.commandPhaseMap[context.command];
|
|
127
|
+
scores[phase] += 3; // Strong signal
|
|
128
|
+
signals.command = context.command;
|
|
129
|
+
return 1;
|
|
130
|
+
}
|
|
131
|
+
return 0;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Analyze execution context
|
|
135
|
+
*/
|
|
136
|
+
analyzeContext(context, scores, signals) {
|
|
137
|
+
let signalCount = 0;
|
|
138
|
+
// Increment state signals
|
|
139
|
+
if (context.incrementState === 'backlog' || context.incrementState === 'planned') {
|
|
140
|
+
scores.planning++;
|
|
141
|
+
signals.context.push(`increment:${context.incrementState}`);
|
|
142
|
+
signalCount++;
|
|
143
|
+
}
|
|
144
|
+
else if (context.incrementState === 'in-progress') {
|
|
145
|
+
scores.execution++;
|
|
146
|
+
signals.context.push('increment:in-progress');
|
|
147
|
+
signalCount++;
|
|
148
|
+
}
|
|
149
|
+
else if (context.incrementState === 'completed') {
|
|
150
|
+
scores.review++;
|
|
151
|
+
signals.context.push('increment:completed');
|
|
152
|
+
signalCount++;
|
|
153
|
+
}
|
|
154
|
+
// File modification signals
|
|
155
|
+
if (context.filesModified && context.filesModified.length > 0) {
|
|
156
|
+
const hasArchitectureDocs = context.filesModified.some(f => f.includes('/architecture/') || f.includes('/adr/') || f.includes('spec.md') || f.includes('plan.md'));
|
|
157
|
+
const hasCodeFiles = context.filesModified.some(f => f.endsWith('.ts') || f.endsWith('.js') || f.endsWith('.py') ||
|
|
158
|
+
f.endsWith('.tsx') || f.endsWith('.jsx') || f.endsWith('.java'));
|
|
159
|
+
const hasTestFiles = context.filesModified.some(f => f.includes('.test.') || f.includes('.spec.') || f.includes('__tests__/'));
|
|
160
|
+
if (hasArchitectureDocs) {
|
|
161
|
+
scores.planning++;
|
|
162
|
+
signals.context.push('files:architecture-docs');
|
|
163
|
+
signalCount++;
|
|
164
|
+
}
|
|
165
|
+
if (hasCodeFiles) {
|
|
166
|
+
scores.execution++;
|
|
167
|
+
signals.context.push('files:code-files');
|
|
168
|
+
signalCount++;
|
|
169
|
+
}
|
|
170
|
+
if (hasTestFiles) {
|
|
171
|
+
scores.review++;
|
|
172
|
+
signals.context.push('files:test-files');
|
|
173
|
+
signalCount++;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return signalCount > 0 ? 1 : 0;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Analyze explicit hints in prompt
|
|
180
|
+
*/
|
|
181
|
+
analyzeHints(prompt, scores, signals) {
|
|
182
|
+
const lowerPrompt = prompt.toLowerCase();
|
|
183
|
+
// Explicit phase mentions
|
|
184
|
+
if (lowerPrompt.includes('planning phase') || lowerPrompt.includes('plan for')) {
|
|
185
|
+
scores.planning += 2;
|
|
186
|
+
return 1;
|
|
187
|
+
}
|
|
188
|
+
if (lowerPrompt.includes('implementation') || lowerPrompt.includes('execution phase') || lowerPrompt.includes('build phase')) {
|
|
189
|
+
scores.execution += 2;
|
|
190
|
+
return 1;
|
|
191
|
+
}
|
|
192
|
+
if (lowerPrompt.includes('review phase') || lowerPrompt.includes('validation phase')) {
|
|
193
|
+
scores.review += 2;
|
|
194
|
+
return 1;
|
|
195
|
+
}
|
|
196
|
+
return 0;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Generate human-readable reasoning
|
|
200
|
+
*/
|
|
201
|
+
generateReasoning(phase, confidence, signals, totalSignals) {
|
|
202
|
+
const reasons = [];
|
|
203
|
+
if (signals.command) {
|
|
204
|
+
reasons.push(`command '${signals.command}' indicates ${phase}`);
|
|
205
|
+
}
|
|
206
|
+
const planningKeywords = signals.keywords.filter(k => k.startsWith('planning:')).map(k => k.substring(9));
|
|
207
|
+
const executionKeywords = signals.keywords.filter(k => k.startsWith('execution:')).map(k => k.substring(10));
|
|
208
|
+
const reviewKeywords = signals.keywords.filter(k => k.startsWith('review:')).map(k => k.substring(7));
|
|
209
|
+
if (planningKeywords.length > 0) {
|
|
210
|
+
reasons.push(`planning keywords: ${planningKeywords.slice(0, 3).join(', ')}`);
|
|
211
|
+
}
|
|
212
|
+
if (executionKeywords.length > 0) {
|
|
213
|
+
reasons.push(`execution keywords: ${executionKeywords.slice(0, 3).join(', ')}`);
|
|
214
|
+
}
|
|
215
|
+
if (reviewKeywords.length > 0) {
|
|
216
|
+
reasons.push(`review keywords: ${reviewKeywords.slice(0, 3).join(', ')}`);
|
|
217
|
+
}
|
|
218
|
+
if (signals.context.length > 0) {
|
|
219
|
+
reasons.push(`context: ${signals.context.join(', ')}`);
|
|
220
|
+
}
|
|
221
|
+
const confidencePercent = (confidence * 100).toFixed(0);
|
|
222
|
+
const signalStrength = totalSignals >= 3 ? 'strong' : totalSignals >= 2 ? 'moderate' : 'weak';
|
|
223
|
+
if (reasons.length === 0) {
|
|
224
|
+
return `${phase} phase (${confidencePercent}% confidence, ${signalStrength} signals) - defaulting due to low signal`;
|
|
225
|
+
}
|
|
226
|
+
return `${phase} phase (${confidencePercent}% confidence, ${signalStrength} signals) - ${reasons.join('; ')}`;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=phase-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase-detector.js","sourceRoot":"","sources":["../../src/core/phase-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Detector
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects which plugins should be enabled based on:
|
|
5
|
+
* 1. Project structure (package.json, directories, env vars, git remote)
|
|
6
|
+
* 2. Spec content (keywords, domain analysis)
|
|
7
|
+
* 3. Task descriptions (pre-task hook)
|
|
8
|
+
* 4. Git changes (post-increment hook)
|
|
9
|
+
*
|
|
10
|
+
* @module core/plugin-detector
|
|
11
|
+
* @version 0.4.0
|
|
12
|
+
*/
|
|
13
|
+
import type { DetectionResult } from './types/plugin.js';
|
|
14
|
+
/**
|
|
15
|
+
* PluginDetector - Auto-detects relevant plugins for a project
|
|
16
|
+
*/
|
|
17
|
+
export declare class PluginDetector {
|
|
18
|
+
private loader;
|
|
19
|
+
private availablePlugins;
|
|
20
|
+
private pluginsDir;
|
|
21
|
+
/**
|
|
22
|
+
* Create a new PluginDetector
|
|
23
|
+
*
|
|
24
|
+
* @param pluginsDir - Path to plugins directory (default: src/plugins)
|
|
25
|
+
*/
|
|
26
|
+
constructor(pluginsDir?: string);
|
|
27
|
+
/**
|
|
28
|
+
* Load available plugins for detection
|
|
29
|
+
*
|
|
30
|
+
* Scans plugins directory and loads all plugin manifests
|
|
31
|
+
*/
|
|
32
|
+
loadAvailablePlugins(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Phase 1: Init-time detection
|
|
35
|
+
*
|
|
36
|
+
* Detects plugins based on project structure during `specweave init`
|
|
37
|
+
*
|
|
38
|
+
* @param projectPath - Path to project root
|
|
39
|
+
* @returns Array of detection results with confidence scores
|
|
40
|
+
*/
|
|
41
|
+
detectFromProject(projectPath: string): Promise<DetectionResult[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Phase 2: Spec-based detection
|
|
44
|
+
*
|
|
45
|
+
* Detects plugins based on increment spec content during `/specweave.inc`
|
|
46
|
+
*
|
|
47
|
+
* @param specContent - Content of spec.md
|
|
48
|
+
* @returns Array of detection results
|
|
49
|
+
*/
|
|
50
|
+
detectFromSpec(specContent: string): Promise<DetectionResult[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Phase 3: Task-based detection
|
|
53
|
+
*
|
|
54
|
+
* Detects plugins based on task description (pre-task hook)
|
|
55
|
+
*
|
|
56
|
+
* @param taskContent - Content of task description
|
|
57
|
+
* @returns Array of detection results
|
|
58
|
+
*/
|
|
59
|
+
detectFromTask(taskContent: string): Promise<DetectionResult[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Phase 4: Git diff detection
|
|
62
|
+
*
|
|
63
|
+
* Detects plugins based on recent git changes (post-increment hook)
|
|
64
|
+
*
|
|
65
|
+
* @param diff - Git diff output
|
|
66
|
+
* @returns Array of detection results
|
|
67
|
+
*/
|
|
68
|
+
detectFromChanges(diff: string): Promise<DetectionResult[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Combine detection results from multiple sources
|
|
71
|
+
*
|
|
72
|
+
* Merges results and adjusts confidence scores
|
|
73
|
+
*
|
|
74
|
+
* @param results - Array of detection result arrays
|
|
75
|
+
* @returns Merged and deduplicated results
|
|
76
|
+
*/
|
|
77
|
+
combineResults(...results: DetectionResult[][]): DetectionResult[];
|
|
78
|
+
/**
|
|
79
|
+
* Get high-confidence suggestions
|
|
80
|
+
*
|
|
81
|
+
* Filters detection results by confidence threshold
|
|
82
|
+
*
|
|
83
|
+
* @param results - Detection results
|
|
84
|
+
* @param threshold - Minimum confidence (default: 0.6)
|
|
85
|
+
* @returns High-confidence plugin suggestions
|
|
86
|
+
*/
|
|
87
|
+
getHighConfidenceSuggestions(results: DetectionResult[], threshold?: number): string[];
|
|
88
|
+
/**
|
|
89
|
+
* Format detection results for display
|
|
90
|
+
*
|
|
91
|
+
* @param results - Detection results
|
|
92
|
+
* @returns Formatted string for CLI output
|
|
93
|
+
*/
|
|
94
|
+
formatResults(results: DetectionResult[]): string;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=plugin-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-detector.d.ts","sourceRoot":"","sources":["../../src/core/plugin-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAU,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGjE;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,UAAU,CAAS;IAE3B;;;;OAIG;gBACS,UAAU,CAAC,EAAE,MAAM;IAK/B;;;;OAIG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3C;;;;;;;OAOG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAoFxE;;;;;;;OAOG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA4CrE;;;;;;;OAOG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAyCrE;;;;;;;OAOG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAqEjE;;;;;;;OAOG;IACH,cAAc,CAAC,GAAG,OAAO,EAAE,eAAe,EAAE,EAAE,GAAG,eAAe,EAAE;IAwBlE;;;;;;;;OAQG;IACH,4BAA4B,CAC1B,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,GAAE,MAAY,GACtB,MAAM,EAAE;IAMX;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM;CAkBlD"}
|