specweave 0.8.2 → 0.8.4
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-plugin/marketplace.json +11 -0
- package/dist/adapters/adapter-loader.d.ts +4 -4
- package/dist/adapters/adapter-loader.d.ts.map +1 -1
- package/dist/adapters/adapter-loader.js +8 -7
- package/dist/adapters/adapter-loader.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +78 -21
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts +1 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts.map +1 -1
- package/dist/metrics/calculators/change-failure-rate.js +1 -1
- package/dist/metrics/calculators/change-failure-rate.js.map +1 -1
- package/dist/metrics/calculators/deployment-frequency.d.ts +1 -1
- package/dist/metrics/calculators/deployment-frequency.d.ts.map +1 -1
- package/dist/metrics/calculators/deployment-frequency.js +1 -1
- package/dist/metrics/calculators/deployment-frequency.js.map +1 -1
- package/dist/metrics/calculators/lead-time.d.ts +1 -1
- package/dist/metrics/calculators/lead-time.d.ts.map +1 -1
- package/dist/metrics/calculators/lead-time.js +2 -2
- package/dist/metrics/calculators/lead-time.js.map +1 -1
- package/dist/metrics/calculators/mttr.d.ts +1 -1
- package/dist/metrics/calculators/mttr.d.ts.map +1 -1
- package/dist/metrics/calculators/mttr.js +2 -2
- package/dist/metrics/calculators/mttr.js.map +1 -1
- package/dist/metrics/dora-calculator.d.ts +2 -2
- package/dist/metrics/dora-calculator.d.ts.map +1 -1
- package/dist/metrics/dora-calculator.js +5 -5
- package/dist/metrics/dora-calculator.js.map +1 -1
- package/dist/metrics/github-client.d.ts +1 -1
- package/dist/metrics/github-client.d.ts.map +1 -1
- package/dist/metrics/utils/tier-classifier.d.ts +1 -1
- package/dist/metrics/utils/tier-classifier.d.ts.map +1 -1
- package/dist/utils/docs-preview/config-generator.d.ts +46 -0
- package/dist/utils/docs-preview/config-generator.d.ts.map +1 -0
- package/dist/utils/docs-preview/config-generator.js +377 -0
- package/dist/utils/docs-preview/config-generator.js.map +1 -0
- package/dist/utils/docs-preview/docusaurus-setup.d.ts +38 -0
- package/dist/utils/docs-preview/docusaurus-setup.d.ts.map +1 -0
- package/dist/utils/docs-preview/docusaurus-setup.js +177 -0
- package/dist/utils/docs-preview/docusaurus-setup.js.map +1 -0
- package/dist/utils/docs-preview/index.d.ts +11 -0
- package/dist/utils/docs-preview/index.d.ts.map +1 -0
- package/dist/utils/docs-preview/index.js +17 -0
- package/dist/utils/docs-preview/index.js.map +1 -0
- package/dist/utils/docs-preview/package-installer.d.ts +42 -0
- package/dist/utils/docs-preview/package-installer.d.ts.map +1 -0
- package/dist/utils/docs-preview/package-installer.js +182 -0
- package/dist/utils/docs-preview/package-installer.js.map +1 -0
- package/dist/utils/docs-preview/server-manager.d.ts +30 -0
- package/dist/utils/docs-preview/server-manager.d.ts.map +1 -0
- package/dist/utils/docs-preview/server-manager.js +207 -0
- package/dist/utils/docs-preview/server-manager.js.map +1 -0
- package/dist/utils/docs-preview/sidebar-builder.d.ts +31 -0
- package/dist/utils/docs-preview/sidebar-builder.d.ts.map +1 -0
- package/dist/utils/docs-preview/sidebar-builder.js +202 -0
- package/dist/utils/docs-preview/sidebar-builder.js.map +1 -0
- package/dist/utils/docs-preview/types.d.ts +60 -0
- package/dist/utils/docs-preview/types.d.ts.map +1 -0
- package/dist/utils/docs-preview/types.js +5 -0
- package/dist/utils/docs-preview/types.js.map +1 -0
- package/dist/utils/docs-preview.bak/config-generator.d.ts +46 -0
- package/dist/utils/docs-preview.bak/config-generator.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/config-generator.js +377 -0
- package/dist/utils/docs-preview.bak/config-generator.js.map +1 -0
- package/dist/utils/docs-preview.bak/package-installer.d.ts +42 -0
- package/dist/utils/docs-preview.bak/package-installer.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/package-installer.js +182 -0
- package/dist/utils/docs-preview.bak/package-installer.js.map +1 -0
- package/dist/utils/docs-preview.bak/server-manager.d.ts +30 -0
- package/dist/utils/docs-preview.bak/server-manager.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/server-manager.js +207 -0
- package/dist/utils/docs-preview.bak/server-manager.js.map +1 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.d.ts +31 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.js +202 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.js.map +1 -0
- package/dist/utils/docs-preview.bak/types.d.ts +60 -0
- package/dist/utils/docs-preview.bak/types.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/types.js +5 -0
- package/dist/utils/docs-preview.bak/types.js.map +1 -0
- package/package.json +2 -1
- package/dist/cli/commands/plugin.js +0 -322
- package/dist/cli/commands/plugin.js.map +0 -1
- package/dist/core/plugin-detector.d.ts +0 -97
- package/dist/core/plugin-detector.d.ts.map +0 -1
- package/dist/core/plugin-detector.js +0 -374
- package/dist/core/plugin-detector.js.map +0 -1
- package/dist/core/plugin-manager.d.ts +0 -144
- package/dist/core/plugin-manager.d.ts.map +0 -1
- package/dist/core/plugin-manager.js +0 -393
- package/dist/core/plugin-manager.js.map +0 -1
- package/dist/utils/plugin-detection.js +0 -229
- package/dist/utils/plugin-detection.js.map +0 -1
|
@@ -1,374 +0,0 @@
|
|
|
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 * as path from 'path';
|
|
14
|
-
import * as fs from 'fs-extra';
|
|
15
|
-
import { PluginLoader } from './plugin-loader.js';
|
|
16
|
-
/**
|
|
17
|
-
* PluginDetector - Auto-detects relevant plugins for a project
|
|
18
|
-
*/
|
|
19
|
-
export class PluginDetector {
|
|
20
|
-
/**
|
|
21
|
-
* Create a new PluginDetector
|
|
22
|
-
*
|
|
23
|
-
* @param pluginsDir - Path to plugins directory (default: src/plugins)
|
|
24
|
-
*/
|
|
25
|
-
constructor(pluginsDir) {
|
|
26
|
-
this.availablePlugins = [];
|
|
27
|
-
this.loader = new PluginLoader();
|
|
28
|
-
this.pluginsDir = pluginsDir || path.join(process.cwd(), 'src', 'plugins');
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Load available plugins for detection
|
|
32
|
-
*
|
|
33
|
-
* Scans plugins directory and loads all plugin manifests
|
|
34
|
-
*/
|
|
35
|
-
async loadAvailablePlugins() {
|
|
36
|
-
this.availablePlugins = [];
|
|
37
|
-
if (!(await fs.pathExists(this.pluginsDir))) {
|
|
38
|
-
return; // No plugins available
|
|
39
|
-
}
|
|
40
|
-
const dirs = await fs.readdir(this.pluginsDir);
|
|
41
|
-
for (const dir of dirs) {
|
|
42
|
-
const pluginPath = path.join(this.pluginsDir, dir);
|
|
43
|
-
const stat = await fs.stat(pluginPath);
|
|
44
|
-
if (stat.isDirectory()) {
|
|
45
|
-
try {
|
|
46
|
-
const plugin = await this.loader.loadFromDirectory(pluginPath);
|
|
47
|
-
this.availablePlugins.push(plugin);
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
console.warn(`⚠️ Failed to load plugin ${dir}: ${error.message}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Phase 1: Init-time detection
|
|
57
|
-
*
|
|
58
|
-
* Detects plugins based on project structure during `specweave init`
|
|
59
|
-
* NOW uses the new plugin-detection.ts utility for comprehensive scanning
|
|
60
|
-
*
|
|
61
|
-
* @param projectPath - Path to project root
|
|
62
|
-
* @returns Array of detection results with confidence scores
|
|
63
|
-
*/
|
|
64
|
-
async detectFromProject(projectPath) {
|
|
65
|
-
const results = [];
|
|
66
|
-
// NEW: Use plugin-detection.ts utility for comprehensive scanning
|
|
67
|
-
try {
|
|
68
|
-
const { scanProjectStructure, detectPlugins } = await import('../utils/plugin-detection.js');
|
|
69
|
-
const signals = await scanProjectStructure(projectPath);
|
|
70
|
-
const detected = detectPlugins(signals);
|
|
71
|
-
// Convert to DetectionResult format
|
|
72
|
-
for (const plugin of detected) {
|
|
73
|
-
// Map confidence levels to scores
|
|
74
|
-
const confidenceMap = { high: 0.9, medium: 0.6, low: 0.3 };
|
|
75
|
-
const confidence = confidenceMap[plugin.confidence];
|
|
76
|
-
results.push({
|
|
77
|
-
pluginName: plugin.name,
|
|
78
|
-
confidence,
|
|
79
|
-
reason: plugin.reason,
|
|
80
|
-
trigger: plugin.signals.join(', '), // Join array into string
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
return results;
|
|
84
|
-
}
|
|
85
|
-
catch (error) {
|
|
86
|
-
// Fallback to old detection method if new utility fails
|
|
87
|
-
console.warn('⚠️ New plugin detection failed, falling back to legacy method');
|
|
88
|
-
}
|
|
89
|
-
// LEGACY: Old detection method (fallback)
|
|
90
|
-
// Ensure plugins are loaded
|
|
91
|
-
if (this.availablePlugins.length === 0) {
|
|
92
|
-
await this.loadAvailablePlugins();
|
|
93
|
-
}
|
|
94
|
-
// Check each plugin's auto_detect rules
|
|
95
|
-
for (const plugin of this.availablePlugins) {
|
|
96
|
-
const { auto_detect } = plugin.manifest;
|
|
97
|
-
if (!auto_detect)
|
|
98
|
-
continue;
|
|
99
|
-
let confidence = 0;
|
|
100
|
-
const reasons = [];
|
|
101
|
-
// Check files/directories
|
|
102
|
-
if (auto_detect.files) {
|
|
103
|
-
for (const pattern of auto_detect.files) {
|
|
104
|
-
const filePath = path.join(projectPath, pattern);
|
|
105
|
-
if (await fs.pathExists(filePath)) {
|
|
106
|
-
confidence += 0.3;
|
|
107
|
-
reasons.push(`Found ${pattern}`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
// Check package.json dependencies
|
|
112
|
-
if (auto_detect.packages) {
|
|
113
|
-
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
114
|
-
if (await fs.pathExists(packageJsonPath)) {
|
|
115
|
-
const packageJson = await fs.readJSON(packageJsonPath);
|
|
116
|
-
const allDeps = {
|
|
117
|
-
...packageJson.dependencies,
|
|
118
|
-
...packageJson.devDependencies
|
|
119
|
-
};
|
|
120
|
-
for (const pkg of auto_detect.packages) {
|
|
121
|
-
if (allDeps[pkg]) {
|
|
122
|
-
confidence += 0.25;
|
|
123
|
-
reasons.push(`Uses ${pkg}`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
// Check environment variables
|
|
129
|
-
if (auto_detect.env_vars) {
|
|
130
|
-
for (const envVar of auto_detect.env_vars) {
|
|
131
|
-
if (process.env[envVar]) {
|
|
132
|
-
confidence += 0.2;
|
|
133
|
-
reasons.push(`Env var ${envVar} set`);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
// Check git remote pattern
|
|
138
|
-
if (auto_detect.git_remote_pattern) {
|
|
139
|
-
const gitConfigPath = path.join(projectPath, '.git', 'config');
|
|
140
|
-
if (await fs.pathExists(gitConfigPath)) {
|
|
141
|
-
const gitConfig = await fs.readFile(gitConfigPath, 'utf-8');
|
|
142
|
-
const regex = new RegExp(auto_detect.git_remote_pattern);
|
|
143
|
-
if (regex.test(gitConfig)) {
|
|
144
|
-
confidence += 0.25;
|
|
145
|
-
reasons.push(`Git remote matches ${auto_detect.git_remote_pattern}`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
// Add to results if confidence > 0
|
|
150
|
-
if (confidence > 0) {
|
|
151
|
-
results.push({
|
|
152
|
-
pluginName: plugin.manifest.name,
|
|
153
|
-
confidence: Math.min(confidence, 1.0), // Cap at 1.0
|
|
154
|
-
reason: reasons.join(', '),
|
|
155
|
-
trigger: 'project-structure'
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
// Sort by confidence (highest first)
|
|
160
|
-
return results.sort((a, b) => b.confidence - a.confidence);
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Phase 2: Spec-based detection
|
|
164
|
-
*
|
|
165
|
-
* Detects plugins based on increment spec content during `/specweave.inc`
|
|
166
|
-
*
|
|
167
|
-
* @param specContent - Content of spec.md
|
|
168
|
-
* @returns Array of detection results
|
|
169
|
-
*/
|
|
170
|
-
async detectFromSpec(specContent) {
|
|
171
|
-
const results = [];
|
|
172
|
-
// Ensure plugins are loaded
|
|
173
|
-
if (this.availablePlugins.length === 0) {
|
|
174
|
-
await this.loadAvailablePlugins();
|
|
175
|
-
}
|
|
176
|
-
const normalizedContent = specContent.toLowerCase();
|
|
177
|
-
// Check each plugin's trigger keywords
|
|
178
|
-
for (const plugin of this.availablePlugins) {
|
|
179
|
-
const { triggers } = plugin.manifest;
|
|
180
|
-
if (!triggers || triggers.length === 0)
|
|
181
|
-
continue;
|
|
182
|
-
let matchCount = 0;
|
|
183
|
-
const matchedTriggers = [];
|
|
184
|
-
for (const trigger of triggers) {
|
|
185
|
-
const regex = new RegExp(`\\b${trigger.toLowerCase()}\\b`, 'gi');
|
|
186
|
-
const matches = normalizedContent.match(regex);
|
|
187
|
-
if (matches) {
|
|
188
|
-
matchCount += matches.length;
|
|
189
|
-
matchedTriggers.push(trigger);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
if (matchCount > 0) {
|
|
193
|
-
// Confidence based on frequency (capped at 1.0)
|
|
194
|
-
const confidence = Math.min(matchCount * 0.1, 1.0);
|
|
195
|
-
results.push({
|
|
196
|
-
pluginName: plugin.manifest.name,
|
|
197
|
-
confidence,
|
|
198
|
-
reason: `Spec mentions: ${matchedTriggers.join(', ')}`,
|
|
199
|
-
trigger: 'spec-keywords'
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
// Sort by confidence
|
|
204
|
-
return results.sort((a, b) => b.confidence - a.confidence);
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Phase 3: Task-based detection
|
|
208
|
-
*
|
|
209
|
-
* Detects plugins based on task description (pre-task hook)
|
|
210
|
-
*
|
|
211
|
-
* @param taskContent - Content of task description
|
|
212
|
-
* @returns Array of detection results
|
|
213
|
-
*/
|
|
214
|
-
async detectFromTask(taskContent) {
|
|
215
|
-
const results = [];
|
|
216
|
-
// Ensure plugins are loaded
|
|
217
|
-
if (this.availablePlugins.length === 0) {
|
|
218
|
-
await this.loadAvailablePlugins();
|
|
219
|
-
}
|
|
220
|
-
const normalizedContent = taskContent.toLowerCase();
|
|
221
|
-
// Check each plugin's trigger keywords
|
|
222
|
-
for (const plugin of this.availablePlugins) {
|
|
223
|
-
const { triggers } = plugin.manifest;
|
|
224
|
-
if (!triggers || triggers.length === 0)
|
|
225
|
-
continue;
|
|
226
|
-
const matchedTriggers = [];
|
|
227
|
-
for (const trigger of triggers) {
|
|
228
|
-
const regex = new RegExp(`\\b${trigger.toLowerCase()}\\b`, 'i');
|
|
229
|
-
if (regex.test(normalizedContent)) {
|
|
230
|
-
matchedTriggers.push(trigger);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
if (matchedTriggers.length > 0) {
|
|
234
|
-
// Task-based detection has moderate confidence
|
|
235
|
-
const confidence = 0.6;
|
|
236
|
-
results.push({
|
|
237
|
-
pluginName: plugin.manifest.name,
|
|
238
|
-
confidence,
|
|
239
|
-
reason: `Task mentions: ${matchedTriggers.join(', ')}`,
|
|
240
|
-
trigger: 'task-keywords'
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
// Sort by confidence
|
|
245
|
-
return results.sort((a, b) => b.confidence - a.confidence);
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Phase 4: Git diff detection
|
|
249
|
-
*
|
|
250
|
-
* Detects plugins based on recent git changes (post-increment hook)
|
|
251
|
-
*
|
|
252
|
-
* @param diff - Git diff output
|
|
253
|
-
* @returns Array of detection results
|
|
254
|
-
*/
|
|
255
|
-
async detectFromChanges(diff) {
|
|
256
|
-
const results = [];
|
|
257
|
-
// Ensure plugins are loaded
|
|
258
|
-
if (this.availablePlugins.length === 0) {
|
|
259
|
-
await this.loadAvailablePlugins();
|
|
260
|
-
}
|
|
261
|
-
const normalizedDiff = diff.toLowerCase();
|
|
262
|
-
// Check for new file patterns
|
|
263
|
-
for (const plugin of this.availablePlugins) {
|
|
264
|
-
const { auto_detect } = plugin.manifest;
|
|
265
|
-
if (!auto_detect?.files)
|
|
266
|
-
continue;
|
|
267
|
-
const matchedFiles = [];
|
|
268
|
-
for (const pattern of auto_detect.files) {
|
|
269
|
-
// Check if diff contains new files matching pattern
|
|
270
|
-
const regex = new RegExp(`\\+\\+\\+.*${pattern}`, 'i');
|
|
271
|
-
if (regex.test(normalizedDiff)) {
|
|
272
|
-
matchedFiles.push(pattern);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
if (matchedFiles.length > 0) {
|
|
276
|
-
results.push({
|
|
277
|
-
pluginName: plugin.manifest.name,
|
|
278
|
-
confidence: 0.7,
|
|
279
|
-
reason: `Added files: ${matchedFiles.join(', ')}`,
|
|
280
|
-
trigger: 'git-changes'
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
// Check for new package.json dependencies
|
|
285
|
-
const packageJsonMatch = diff.match(/\+\+\+ b\/package\.json([\s\S]+?)(?=\+\+\+|$)/);
|
|
286
|
-
if (packageJsonMatch) {
|
|
287
|
-
const addedLines = packageJsonMatch[1]
|
|
288
|
-
.split('\n')
|
|
289
|
-
.filter(line => line.startsWith('+') && !line.startsWith('+++'));
|
|
290
|
-
for (const plugin of this.availablePlugins) {
|
|
291
|
-
const { auto_detect } = plugin.manifest;
|
|
292
|
-
if (!auto_detect?.packages)
|
|
293
|
-
continue;
|
|
294
|
-
const matchedPackages = [];
|
|
295
|
-
for (const pkg of auto_detect.packages) {
|
|
296
|
-
if (addedLines.some(line => line.includes(`"${pkg}"`))) {
|
|
297
|
-
matchedPackages.push(pkg);
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
if (matchedPackages.length > 0) {
|
|
301
|
-
results.push({
|
|
302
|
-
pluginName: plugin.manifest.name,
|
|
303
|
-
confidence: 0.8,
|
|
304
|
-
reason: `Added dependencies: ${matchedPackages.join(', ')}`,
|
|
305
|
-
trigger: 'package-json-changes'
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
// Sort by confidence
|
|
311
|
-
return results.sort((a, b) => b.confidence - a.confidence);
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Combine detection results from multiple sources
|
|
315
|
-
*
|
|
316
|
-
* Merges results and adjusts confidence scores
|
|
317
|
-
*
|
|
318
|
-
* @param results - Array of detection result arrays
|
|
319
|
-
* @returns Merged and deduplicated results
|
|
320
|
-
*/
|
|
321
|
-
combineResults(...results) {
|
|
322
|
-
const combined = new Map();
|
|
323
|
-
for (const resultArray of results) {
|
|
324
|
-
for (const result of resultArray) {
|
|
325
|
-
const existing = combined.get(result.pluginName);
|
|
326
|
-
if (existing) {
|
|
327
|
-
// Boost confidence if detected from multiple sources
|
|
328
|
-
existing.confidence = Math.min(existing.confidence + result.confidence * 0.3, 1.0);
|
|
329
|
-
existing.reason += `; ${result.reason}`;
|
|
330
|
-
}
|
|
331
|
-
else {
|
|
332
|
-
combined.set(result.pluginName, { ...result });
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
// Convert to array and sort
|
|
337
|
-
return Array.from(combined.values()).sort((a, b) => b.confidence - a.confidence);
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* Get high-confidence suggestions
|
|
341
|
-
*
|
|
342
|
-
* Filters detection results by confidence threshold
|
|
343
|
-
*
|
|
344
|
-
* @param results - Detection results
|
|
345
|
-
* @param threshold - Minimum confidence (default: 0.6)
|
|
346
|
-
* @returns High-confidence plugin suggestions
|
|
347
|
-
*/
|
|
348
|
-
getHighConfidenceSuggestions(results, threshold = 0.6) {
|
|
349
|
-
return results
|
|
350
|
-
.filter(r => r.confidence >= threshold)
|
|
351
|
-
.map(r => r.pluginName);
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Format detection results for display
|
|
355
|
-
*
|
|
356
|
-
* @param results - Detection results
|
|
357
|
-
* @returns Formatted string for CLI output
|
|
358
|
-
*/
|
|
359
|
-
formatResults(results) {
|
|
360
|
-
if (results.length === 0) {
|
|
361
|
-
return 'No plugins detected for this project.';
|
|
362
|
-
}
|
|
363
|
-
let output = '\n📦 Detected plugins:\n\n';
|
|
364
|
-
for (const result of results) {
|
|
365
|
-
const confidenceBar = '█'.repeat(Math.floor(result.confidence * 10));
|
|
366
|
-
const confidencePercent = Math.floor(result.confidence * 100);
|
|
367
|
-
output += ` ${result.pluginName}\n`;
|
|
368
|
-
output += ` Confidence: ${confidenceBar} ${confidencePercent}%\n`;
|
|
369
|
-
output += ` Reason: ${result.reason}\n\n`;
|
|
370
|
-
}
|
|
371
|
-
return output;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
//# sourceMappingURL=plugin-detector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-detector.js","sourceRoot":"","sources":["../../src/core/plugin-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Plugin Manager
|
|
3
|
-
*
|
|
4
|
-
* Central orchestrator for plugin lifecycle management.
|
|
5
|
-
* Handles loading/unloading, dependency resolution, configuration management.
|
|
6
|
-
*
|
|
7
|
-
* @module core/plugin-manager
|
|
8
|
-
* @version 0.4.0
|
|
9
|
-
*/
|
|
10
|
-
import type { Plugin, PluginInfo, PluginLoadOptions, PluginUnloadOptions } from './types/plugin.js';
|
|
11
|
-
import type { IAdapter } from '../adapters/adapter-interface.js';
|
|
12
|
-
/**
|
|
13
|
-
* PluginManager - Manages plugin lifecycle and configuration
|
|
14
|
-
*/
|
|
15
|
-
export declare class PluginManager {
|
|
16
|
-
private projectPath;
|
|
17
|
-
private loader;
|
|
18
|
-
private configPath;
|
|
19
|
-
private pluginsDir;
|
|
20
|
-
private loadedPlugins;
|
|
21
|
-
/**
|
|
22
|
-
* Create a new PluginManager
|
|
23
|
-
*
|
|
24
|
-
* @param projectPath - Path to project root
|
|
25
|
-
* @param pluginsDir - Path to plugins directory (default: src/plugins)
|
|
26
|
-
*/
|
|
27
|
-
constructor(projectPath?: string, pluginsDir?: string);
|
|
28
|
-
/**
|
|
29
|
-
* Load (enable) a plugin
|
|
30
|
-
*
|
|
31
|
-
* 1. Load plugin from src/plugins/
|
|
32
|
-
* 2. Check dependencies
|
|
33
|
-
* 3. Install via adapter
|
|
34
|
-
* 4. Update config
|
|
35
|
-
*
|
|
36
|
-
* @param name - Plugin name (e.g., "github", "kubernetes")
|
|
37
|
-
* @param adapter - Adapter to use for installation
|
|
38
|
-
* @param options - Load options
|
|
39
|
-
*/
|
|
40
|
-
loadPlugin(name: string, adapter: IAdapter, options?: PluginLoadOptions): Promise<void>;
|
|
41
|
-
/**
|
|
42
|
-
* Unload (disable) a plugin
|
|
43
|
-
*
|
|
44
|
-
* @param name - Plugin name
|
|
45
|
-
* @param adapter - Adapter to use for uninstallation
|
|
46
|
-
* @param options - Unload options
|
|
47
|
-
*/
|
|
48
|
-
unloadPlugin(name: string, adapter: IAdapter, options?: PluginUnloadOptions): Promise<void>;
|
|
49
|
-
/**
|
|
50
|
-
* Get all available plugins (scan src/plugins/)
|
|
51
|
-
*
|
|
52
|
-
* @returns Array of plugin info
|
|
53
|
-
*/
|
|
54
|
-
getAvailablePlugins(): Promise<PluginInfo[]>;
|
|
55
|
-
/**
|
|
56
|
-
* Get enabled plugins from config
|
|
57
|
-
*
|
|
58
|
-
* @returns Array of enabled plugin names
|
|
59
|
-
*/
|
|
60
|
-
getEnabledPlugins(): Promise<string[]>;
|
|
61
|
-
/**
|
|
62
|
-
* Check if a plugin is enabled
|
|
63
|
-
*
|
|
64
|
-
* @param name - Plugin name
|
|
65
|
-
* @returns True if enabled
|
|
66
|
-
*/
|
|
67
|
-
isPluginEnabled(name: string): Promise<boolean>;
|
|
68
|
-
/**
|
|
69
|
-
* Update plugin configuration
|
|
70
|
-
*
|
|
71
|
-
* @param name - Plugin name
|
|
72
|
-
* @param action - 'enable' or 'disable'
|
|
73
|
-
*/
|
|
74
|
-
private updateConfig;
|
|
75
|
-
/**
|
|
76
|
-
* Load plugin configuration from .specweave/config.yaml
|
|
77
|
-
*
|
|
78
|
-
* @returns Plugin configuration
|
|
79
|
-
*/
|
|
80
|
-
private loadConfig;
|
|
81
|
-
/**
|
|
82
|
-
* Save plugin configuration to .specweave/config.yaml
|
|
83
|
-
*
|
|
84
|
-
* @param pluginConfig - Plugin configuration to save
|
|
85
|
-
*/
|
|
86
|
-
private saveConfig;
|
|
87
|
-
/**
|
|
88
|
-
* Check plugin dependencies
|
|
89
|
-
*
|
|
90
|
-
* Ensures all required plugins are loaded
|
|
91
|
-
*
|
|
92
|
-
* @param plugin - Plugin to check
|
|
93
|
-
* @throws PluginDependencyError if dependencies are not met
|
|
94
|
-
*/
|
|
95
|
-
checkDependencies(plugin: Plugin): Promise<void>;
|
|
96
|
-
/**
|
|
97
|
-
* Resolve dependency graph for a plugin
|
|
98
|
-
*
|
|
99
|
-
* Returns all plugins that need to be loaded (including transitive deps)
|
|
100
|
-
*
|
|
101
|
-
* @param plugin - Plugin to resolve
|
|
102
|
-
* @returns Array of plugins in load order
|
|
103
|
-
*/
|
|
104
|
-
resolveDependencies(plugin: Plugin): Promise<Plugin[]>;
|
|
105
|
-
/**
|
|
106
|
-
* Get plugins that depend on a given plugin
|
|
107
|
-
*
|
|
108
|
-
* @param name - Plugin name
|
|
109
|
-
* @returns Array of dependent plugin names
|
|
110
|
-
*/
|
|
111
|
-
private getDependents;
|
|
112
|
-
/**
|
|
113
|
-
* Validate plugin configuration
|
|
114
|
-
*
|
|
115
|
-
* Checks for circular dependencies, missing plugins, etc.
|
|
116
|
-
*
|
|
117
|
-
* @returns Validation result
|
|
118
|
-
*/
|
|
119
|
-
validateConfig(): Promise<{
|
|
120
|
-
valid: boolean;
|
|
121
|
-
errors: string[];
|
|
122
|
-
}>;
|
|
123
|
-
/**
|
|
124
|
-
* Get plugin by name
|
|
125
|
-
*
|
|
126
|
-
* @param name - Plugin name
|
|
127
|
-
* @returns Loaded plugin
|
|
128
|
-
* @throws PluginNotFoundError if plugin is not loaded
|
|
129
|
-
*/
|
|
130
|
-
getPlugin(name: string): Plugin;
|
|
131
|
-
/**
|
|
132
|
-
* Get all loaded plugins
|
|
133
|
-
*
|
|
134
|
-
* @returns Map of loaded plugins
|
|
135
|
-
*/
|
|
136
|
-
getLoadedPlugins(): Map<string, Plugin>;
|
|
137
|
-
/**
|
|
138
|
-
* Clear loaded plugins cache
|
|
139
|
-
*
|
|
140
|
-
* Useful for testing or forcing reload
|
|
141
|
-
*/
|
|
142
|
-
clearCache(): void;
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=plugin-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../../src/core/plugin-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EAEV,iBAAiB,EACjB,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAEjE;;GAEG;AACH,qBAAa,aAAa;IAatB,OAAO,CAAC,WAAW;IAZrB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAsB;IAE3C;;;;;OAKG;gBAEO,WAAW,GAAE,MAAsB,EAC3C,UAAU,CAAC,EAAE,MAAM;IAQrB;;;;;;;;;;;OAWG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,EACjB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC;IAmDhB;;;;;;OAMG;IACG,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,EACjB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC;IAkChB;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAwClD;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5C;;;;;OAKG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD;;;;;OAKG;YACW,YAAY;IAc1B;;;;OAIG;YACW,UAAU;IA4BxB;;;;OAIG;YACW,UAAU;IAgBxB;;;;;;;OAOG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBtD;;;;;;;OAOG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4B5D;;;;;OAKG;YACW,aAAa;IAgB3B;;;;;;OAMG;IACG,cAAc,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAuDrE;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQ/B;;;;OAIG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIvC;;;;OAIG;IACH,UAAU,IAAI,IAAI;CAGnB"}
|