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.
Files changed (168) hide show
  1. package/CLAUDE.md +506 -17
  2. package/README.md +100 -58
  3. package/bin/install-all.sh +9 -2
  4. package/bin/install-hooks.sh +57 -0
  5. package/bin/specweave.js +16 -0
  6. package/dist/adapters/adapter-base.d.ts +21 -0
  7. package/dist/adapters/adapter-base.d.ts.map +1 -1
  8. package/dist/adapters/adapter-base.js +28 -0
  9. package/dist/adapters/adapter-base.js.map +1 -1
  10. package/dist/adapters/adapter-interface.d.ts +41 -0
  11. package/dist/adapters/adapter-interface.d.ts.map +1 -1
  12. package/dist/adapters/claude/adapter.d.ts +36 -0
  13. package/dist/adapters/claude/adapter.d.ts.map +1 -1
  14. package/dist/adapters/claude/adapter.js +135 -0
  15. package/dist/adapters/claude/adapter.js.map +1 -1
  16. package/dist/adapters/copilot/adapter.d.ts +25 -0
  17. package/dist/adapters/copilot/adapter.d.ts.map +1 -1
  18. package/dist/adapters/copilot/adapter.js +112 -0
  19. package/dist/adapters/copilot/adapter.js.map +1 -1
  20. package/dist/adapters/cursor/adapter.d.ts +36 -0
  21. package/dist/adapters/cursor/adapter.d.ts.map +1 -1
  22. package/dist/adapters/cursor/adapter.js +140 -0
  23. package/dist/adapters/cursor/adapter.js.map +1 -1
  24. package/dist/adapters/generic/adapter.d.ts +25 -0
  25. package/dist/adapters/generic/adapter.d.ts.map +1 -1
  26. package/dist/adapters/generic/adapter.js +111 -0
  27. package/dist/adapters/generic/adapter.js.map +1 -1
  28. package/dist/cli/commands/init.d.ts.map +1 -1
  29. package/dist/cli/commands/init.js +103 -1
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/plugin.d.ts +37 -0
  32. package/dist/cli/commands/plugin.d.ts.map +1 -0
  33. package/dist/cli/commands/plugin.js +296 -0
  34. package/dist/cli/commands/plugin.js.map +1 -0
  35. package/dist/core/agent-model-manager.d.ts +52 -0
  36. package/dist/core/agent-model-manager.d.ts.map +1 -0
  37. package/dist/core/agent-model-manager.js +120 -0
  38. package/dist/core/agent-model-manager.js.map +1 -0
  39. package/dist/core/cost-tracker.d.ts +108 -0
  40. package/dist/core/cost-tracker.d.ts.map +1 -0
  41. package/dist/core/cost-tracker.js +281 -0
  42. package/dist/core/cost-tracker.js.map +1 -0
  43. package/dist/core/model-selector.d.ts +57 -0
  44. package/dist/core/model-selector.d.ts.map +1 -0
  45. package/dist/core/model-selector.js +115 -0
  46. package/dist/core/model-selector.js.map +1 -0
  47. package/dist/core/phase-detector.d.ts +62 -0
  48. package/dist/core/phase-detector.d.ts.map +1 -0
  49. package/dist/core/phase-detector.js +229 -0
  50. package/dist/core/phase-detector.js.map +1 -0
  51. package/dist/core/plugin-detector.d.ts +96 -0
  52. package/dist/core/plugin-detector.d.ts.map +1 -0
  53. package/dist/core/plugin-detector.js +349 -0
  54. package/dist/core/plugin-detector.js.map +1 -0
  55. package/dist/core/plugin-loader.d.ts +111 -0
  56. package/dist/core/plugin-loader.d.ts.map +1 -0
  57. package/dist/core/plugin-loader.js +319 -0
  58. package/dist/core/plugin-loader.js.map +1 -0
  59. package/dist/core/plugin-manager.d.ts +144 -0
  60. package/dist/core/plugin-manager.d.ts.map +1 -0
  61. package/dist/core/plugin-manager.js +393 -0
  62. package/dist/core/plugin-manager.js.map +1 -0
  63. package/dist/core/schemas/plugin-manifest.schema.json +253 -0
  64. package/dist/core/types/plugin.d.ts +252 -0
  65. package/dist/core/types/plugin.d.ts.map +1 -0
  66. package/dist/core/types/plugin.js +48 -0
  67. package/dist/core/types/plugin.js.map +1 -0
  68. package/dist/integrations/jira/jira-mapper.d.ts +2 -2
  69. package/dist/integrations/jira/jira-mapper.js +2 -2
  70. package/dist/types/cost-tracking.d.ts +43 -0
  71. package/dist/types/cost-tracking.d.ts.map +1 -0
  72. package/dist/types/cost-tracking.js +8 -0
  73. package/dist/types/cost-tracking.js.map +1 -0
  74. package/dist/types/model-selection.d.ts +53 -0
  75. package/dist/types/model-selection.d.ts.map +1 -0
  76. package/dist/types/model-selection.js +12 -0
  77. package/dist/types/model-selection.js.map +1 -0
  78. package/dist/utils/cost-reporter.d.ts +58 -0
  79. package/dist/utils/cost-reporter.d.ts.map +1 -0
  80. package/dist/utils/cost-reporter.js +224 -0
  81. package/dist/utils/cost-reporter.js.map +1 -0
  82. package/dist/utils/pricing-constants.d.ts +70 -0
  83. package/dist/utils/pricing-constants.d.ts.map +1 -0
  84. package/dist/utils/pricing-constants.js +71 -0
  85. package/dist/utils/pricing-constants.js.map +1 -0
  86. package/package.json +13 -9
  87. package/src/adapters/adapter-base.ts +33 -0
  88. package/src/adapters/adapter-interface.ts +46 -0
  89. package/src/adapters/claude/adapter.ts +164 -0
  90. package/src/adapters/copilot/adapter.ts +138 -0
  91. package/src/adapters/cursor/adapter.ts +170 -0
  92. package/src/adapters/generic/adapter.ts +137 -0
  93. package/src/agents/architect/AGENT.md +3 -0
  94. package/src/agents/code-reviewer.md +156 -0
  95. package/src/agents/data-scientist/AGENT.md +181 -0
  96. package/src/agents/database-optimizer/AGENT.md +147 -0
  97. package/src/agents/devops/AGENT.md +3 -0
  98. package/src/agents/diagrams-architect/AGENT.md +3 -0
  99. package/src/agents/docs-writer/AGENT.md +3 -0
  100. package/src/agents/kubernetes-architect/AGENT.md +142 -0
  101. package/src/agents/ml-engineer/AGENT.md +150 -0
  102. package/src/agents/mlops-engineer/AGENT.md +201 -0
  103. package/src/agents/network-engineer/AGENT.md +149 -0
  104. package/src/agents/observability-engineer/AGENT.md +213 -0
  105. package/src/agents/payment-integration/AGENT.md +35 -0
  106. package/src/agents/performance/AGENT.md +3 -0
  107. package/src/agents/performance-engineer/AGENT.md +153 -0
  108. package/src/agents/pm/AGENT.md +3 -0
  109. package/src/agents/qa-lead/AGENT.md +3 -0
  110. package/src/agents/security/AGENT.md +3 -0
  111. package/src/agents/sre/AGENT.md +3 -0
  112. package/src/agents/tdd-orchestrator/AGENT.md +169 -0
  113. package/src/agents/tech-lead/AGENT.md +3 -0
  114. package/src/commands/specweave.costs.md +261 -0
  115. package/src/commands/specweave.increment.md +48 -4
  116. package/src/commands/specweave.ml-pipeline.md +292 -0
  117. package/src/commands/specweave.monitor-setup.md +501 -0
  118. package/src/commands/specweave.slo-implement.md +1055 -0
  119. package/src/commands/specweave.sync-github.md +1 -1
  120. package/src/commands/specweave.tdd-cycle.md +199 -0
  121. package/src/commands/specweave.tdd-green.md +842 -0
  122. package/src/commands/specweave.tdd-red.md +135 -0
  123. package/src/commands/specweave.tdd-refactor.md +165 -0
  124. package/src/hooks/post-increment-plugin-detect.sh +142 -0
  125. package/src/hooks/post-task-completion.sh +53 -11
  126. package/src/hooks/pre-task-plugin-detect.sh +96 -0
  127. package/src/skills/SKILLS-INDEX.md +18 -10
  128. package/src/skills/billing-automation/SKILL.md +559 -0
  129. package/src/skills/distributed-tracing/SKILL.md +438 -0
  130. package/src/skills/e2e-playwright/README.md +1 -1
  131. package/src/skills/e2e-playwright/package.json +1 -1
  132. package/src/skills/gitops-workflow/SKILL.md +285 -0
  133. package/src/skills/gitops-workflow/references/argocd-setup.md +134 -0
  134. package/src/skills/gitops-workflow/references/sync-policies.md +131 -0
  135. package/src/skills/grafana-dashboards/SKILL.md +369 -0
  136. package/src/skills/helm-chart-scaffolding/SKILL.md +544 -0
  137. package/src/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  138. package/src/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  139. package/src/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  140. package/src/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  141. package/src/skills/k8s-manifest-generator/SKILL.md +511 -0
  142. package/src/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  143. package/src/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  144. package/src/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  145. package/src/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
  146. package/src/skills/k8s-manifest-generator/references/service-spec.md +724 -0
  147. package/src/skills/k8s-security-policies/SKILL.md +334 -0
  148. package/src/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
  149. package/src/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
  150. package/src/skills/ml-pipeline-workflow/SKILL.md +245 -0
  151. package/src/skills/paypal-integration/SKILL.md +467 -0
  152. package/src/skills/pci-compliance/SKILL.md +466 -0
  153. package/src/skills/prometheus-configuration/SKILL.md +392 -0
  154. package/src/skills/slo-implementation/SKILL.md +329 -0
  155. package/src/skills/stripe-integration/SKILL.md +442 -0
  156. package/src/skills/tdd-workflow/SKILL.md +378 -0
  157. package/src/templates/README.md.template +1 -1
  158. package/src/skills/bmad-method-expert/SKILL.md +0 -626
  159. package/src/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
  160. package/src/skills/bmad-method-expert/scripts/check-setup.js +0 -208
  161. package/src/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
  162. package/src/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
  163. package/src/skills/context-optimizer/SKILL.md +0 -588
  164. package/src/skills/figma-designer/SKILL.md +0 -149
  165. package/src/skills/figma-implementer/SKILL.md +0 -148
  166. package/src/skills/figma-mcp-connector/SKILL.md +0 -136
  167. package/src/skills/figma-to-code/SKILL.md +0 -128
  168. package/src/skills/spec-kit-expert/SKILL.md +0 -1010
@@ -0,0 +1,296 @@
1
+ /**
2
+ * Plugin CLI Command
3
+ *
4
+ * Provides commands for managing SpecWeave plugins:
5
+ * - list: List available and enabled plugins
6
+ * - enable: Enable a plugin
7
+ * - disable: Disable a plugin
8
+ * - info: Show detailed plugin information
9
+ */
10
+ import chalk from 'chalk';
11
+ import { PluginManager } from '../../core/plugin-manager.js';
12
+ import { PluginDetector } from '../../core/plugin-detector.js';
13
+ import { AdapterLoader } from '../../adapters/adapter-loader.js';
14
+ import { fileURLToPath } from 'url';
15
+ import { dirname } from 'path';
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ /**
19
+ * List available and enabled plugins
20
+ */
21
+ export async function listPlugins(options) {
22
+ try {
23
+ console.log(chalk.blue('\n📦 SpecWeave Plugins\n'));
24
+ const projectRoot = process.cwd();
25
+ const manager = new PluginManager(projectRoot);
26
+ if (options.enabled || (!options.enabled && !options.available)) {
27
+ // Show enabled plugins
28
+ const enabledPlugins = await manager.getEnabledPlugins();
29
+ console.log(chalk.green('✅ Enabled Plugins:'));
30
+ if (enabledPlugins.length === 0) {
31
+ console.log(chalk.gray(' (none)'));
32
+ }
33
+ else {
34
+ for (const pluginName of enabledPlugins) {
35
+ try {
36
+ const plugin = manager.getPlugin(pluginName);
37
+ console.log(` ${chalk.cyan(plugin.manifest.name)} ${chalk.gray(`v${plugin.manifest.version}`)}`);
38
+ console.log(` ${chalk.gray(plugin.manifest.description)}`);
39
+ console.log(` ${chalk.gray(`Skills: ${plugin.skills.length}, Agents: ${plugin.agents.length}, Commands: ${plugin.commands.length}`)}`);
40
+ }
41
+ catch (error) {
42
+ console.log(` ${chalk.cyan(pluginName)} ${chalk.red('(error loading)')}`);
43
+ }
44
+ }
45
+ }
46
+ console.log();
47
+ }
48
+ if (options.available || (!options.enabled && !options.available)) {
49
+ // Show available plugins
50
+ const availablePlugins = await manager.getAvailablePlugins();
51
+ const enabledPlugins = await manager.getEnabledPlugins();
52
+ const disabledPlugins = availablePlugins.filter(p => !enabledPlugins.includes(p.name));
53
+ console.log(chalk.yellow('📚 Available Plugins:'));
54
+ if (disabledPlugins.length === 0) {
55
+ console.log(chalk.gray(' (all enabled)'));
56
+ }
57
+ else {
58
+ for (const plugin of disabledPlugins) {
59
+ console.log(` ${chalk.cyan(plugin.name)} ${chalk.gray(`v${plugin.version}`)}`);
60
+ console.log(` ${chalk.gray(plugin.description)}`);
61
+ }
62
+ }
63
+ console.log();
64
+ }
65
+ // Show auto-detection suggestions
66
+ const detector = new PluginDetector();
67
+ const detectionResults = await detector.detectFromProject(projectRoot);
68
+ const suggestions = detectionResults.map(r => r.pluginName);
69
+ const enabledPlugins = await manager.getEnabledPlugins();
70
+ const newSuggestions = suggestions.filter(s => !enabledPlugins.includes(s));
71
+ if (newSuggestions.length > 0) {
72
+ console.log(chalk.magenta('💡 Suggested Plugins (auto-detected):'));
73
+ for (const suggestion of newSuggestions) {
74
+ console.log(` ${chalk.cyan(suggestion)}`);
75
+ }
76
+ console.log(chalk.gray('\nRun `specweave plugin enable <name>` to enable a plugin'));
77
+ }
78
+ }
79
+ catch (error) {
80
+ console.error(chalk.red('❌ Error listing plugins:'), error instanceof Error ? error.message : error);
81
+ process.exit(1);
82
+ }
83
+ }
84
+ /**
85
+ * Enable a plugin
86
+ */
87
+ export async function enablePlugin(pluginName, options) {
88
+ try {
89
+ console.log(chalk.blue(`\n🔌 Enabling plugin: ${pluginName}\n`));
90
+ const projectRoot = process.cwd();
91
+ const adapterLoader = new AdapterLoader();
92
+ const toolName = await adapterLoader.detectTool();
93
+ const adapter = adapterLoader.getAdapter(toolName);
94
+ if (!adapter) {
95
+ throw new Error(`Adapter not found for tool: ${toolName}`);
96
+ }
97
+ const manager = new PluginManager(projectRoot);
98
+ // Check if already enabled
99
+ const enabledPlugins = await manager.getEnabledPlugins();
100
+ if (enabledPlugins.includes(pluginName) && !options.force) {
101
+ console.log(chalk.yellow(`⚠️ Plugin ${pluginName} is already enabled`));
102
+ console.log(chalk.gray('Use --force to reinstall'));
103
+ return;
104
+ }
105
+ // Load and enable plugin
106
+ const loadOptions = {
107
+ force: options.force,
108
+ autoInstallDependencies: true
109
+ };
110
+ await manager.loadPlugin(pluginName, adapter, loadOptions);
111
+ console.log(chalk.green(`\n✅ Plugin ${pluginName} enabled successfully!`));
112
+ // Show what was installed
113
+ try {
114
+ const plugin = manager.getPlugin(pluginName);
115
+ console.log(chalk.gray(`\nInstalled:`));
116
+ if (plugin.skills.length > 0) {
117
+ console.log(chalk.gray(` Skills: ${plugin.skills.map(s => s.name).join(', ')}`));
118
+ }
119
+ if (plugin.agents.length > 0) {
120
+ console.log(chalk.gray(` Agents: ${plugin.agents.map(a => a.name).join(', ')}`));
121
+ }
122
+ if (plugin.commands.length > 0) {
123
+ console.log(chalk.gray(` Commands: ${plugin.commands.map(c => c.name).join(', ')}`));
124
+ }
125
+ }
126
+ catch (error) {
127
+ // Plugin info not available, skip
128
+ }
129
+ console.log(chalk.gray(`\nPlugin installed to: ${adapter.name === 'claude' ? '.claude/' : 'AGENTS.md'}`));
130
+ if (adapter.name === 'claude') {
131
+ console.log(chalk.yellow('\n⚠️ Restart Claude Code to activate the new plugin'));
132
+ }
133
+ }
134
+ catch (error) {
135
+ console.error(chalk.red('❌ Error enabling plugin:'), error instanceof Error ? error.message : error);
136
+ process.exit(1);
137
+ }
138
+ }
139
+ /**
140
+ * Disable a plugin
141
+ */
142
+ export async function disablePlugin(pluginName, options) {
143
+ try {
144
+ console.log(chalk.blue(`\n🔌 Disabling plugin: ${pluginName}\n`));
145
+ const projectRoot = process.cwd();
146
+ const adapterLoader = new AdapterLoader();
147
+ const toolName = await adapterLoader.detectTool();
148
+ const adapter = adapterLoader.getAdapter(toolName);
149
+ if (!adapter) {
150
+ throw new Error(`Adapter not found for tool: ${toolName}`);
151
+ }
152
+ const manager = new PluginManager(projectRoot);
153
+ // Check if enabled
154
+ const enabledPlugins = await manager.getEnabledPlugins();
155
+ if (!enabledPlugins.includes(pluginName)) {
156
+ console.log(chalk.yellow(`⚠️ Plugin ${pluginName} is not currently enabled`));
157
+ return;
158
+ }
159
+ // Unload plugin
160
+ const unloadOptions = {
161
+ force: options.force
162
+ };
163
+ await manager.unloadPlugin(pluginName, adapter, unloadOptions);
164
+ console.log(chalk.green(`\n✅ Plugin ${pluginName} disabled successfully!`));
165
+ if (adapter.name === 'claude') {
166
+ console.log(chalk.yellow('\n⚠️ Restart Claude Code to deactivate the plugin'));
167
+ }
168
+ }
169
+ catch (error) {
170
+ console.error(chalk.red('❌ Error disabling plugin:'), error instanceof Error ? error.message : error);
171
+ process.exit(1);
172
+ }
173
+ }
174
+ /**
175
+ * Show detailed plugin information
176
+ */
177
+ export async function pluginInfo(pluginName) {
178
+ try {
179
+ console.log(chalk.blue(`\n📋 Plugin Information: ${pluginName}\n`));
180
+ const projectRoot = process.cwd();
181
+ const manager = new PluginManager(projectRoot);
182
+ const { PluginLoader } = await import('../../core/plugin-loader.js');
183
+ // Check if plugin exists
184
+ const availablePlugins = await manager.getAvailablePlugins();
185
+ const basicInfo = availablePlugins.find(p => p.name === pluginName);
186
+ if (!basicInfo) {
187
+ console.log(chalk.red(`❌ Plugin ${pluginName} not found`));
188
+ console.log(chalk.gray('\nRun `specweave plugin list --available` to see available plugins'));
189
+ return;
190
+ }
191
+ // Load full plugin to get manifest details
192
+ const loader = new PluginLoader();
193
+ const plugin = await loader.loadFromDirectory(basicInfo.path);
194
+ const manifest = plugin.manifest;
195
+ // Basic info
196
+ console.log(chalk.cyan('Name:'), manifest.name);
197
+ console.log(chalk.cyan('Version:'), manifest.version);
198
+ console.log(chalk.cyan('Description:'), manifest.description);
199
+ if (manifest.author) {
200
+ console.log(chalk.cyan('Author:'), manifest.author);
201
+ }
202
+ if (manifest.license) {
203
+ console.log(chalk.cyan('License:'), manifest.license);
204
+ }
205
+ console.log(chalk.cyan('SpecWeave Core Version:'), manifest.specweave_core_version);
206
+ // Status
207
+ const enabledPlugins = await manager.getEnabledPlugins();
208
+ const isEnabled = enabledPlugins.includes(pluginName);
209
+ console.log(chalk.cyan('Status:'), isEnabled ? chalk.green('✅ Enabled') : chalk.gray('⚪ Disabled'));
210
+ // Provides
211
+ console.log(chalk.cyan('\nProvides:'));
212
+ console.log(` Skills: ${manifest.provides.skills.length > 0 ? manifest.provides.skills.join(', ') : chalk.gray('(none)')}`);
213
+ console.log(` Agents: ${manifest.provides.agents.length > 0 ? manifest.provides.agents.join(', ') : chalk.gray('(none)')}`);
214
+ console.log(` Commands: ${manifest.provides.commands.length > 0 ? manifest.provides.commands.join(', ') : chalk.gray('(none)')}`);
215
+ // Dependencies
216
+ if (manifest.dependencies?.plugins && manifest.dependencies.plugins.length > 0) {
217
+ console.log(chalk.cyan('\nDependencies:'));
218
+ for (const dep of manifest.dependencies.plugins) {
219
+ console.log(` - ${dep}`);
220
+ }
221
+ }
222
+ // Auto-detection
223
+ if (manifest.auto_detect) {
224
+ console.log(chalk.cyan('\nAuto-Detection Triggers:'));
225
+ if (manifest.auto_detect.files) {
226
+ console.log(` Files: ${manifest.auto_detect.files.join(', ')}`);
227
+ }
228
+ if (manifest.auto_detect.packages) {
229
+ console.log(` Packages: ${manifest.auto_detect.packages.join(', ')}`);
230
+ }
231
+ if (manifest.auto_detect.env_vars) {
232
+ console.log(` Environment Variables: ${manifest.auto_detect.env_vars.join(', ')}`);
233
+ }
234
+ if (manifest.auto_detect.git_remote_pattern) {
235
+ console.log(` Git Remote Pattern: ${manifest.auto_detect.git_remote_pattern}`);
236
+ }
237
+ }
238
+ // Credits
239
+ if (manifest.credits) {
240
+ console.log(chalk.cyan('\nCredits:'));
241
+ if (manifest.credits.based_on) {
242
+ console.log(` Based on: ${manifest.credits.based_on}`);
243
+ }
244
+ if (manifest.credits.original_author) {
245
+ console.log(` Original Author: ${manifest.credits.original_author}`);
246
+ }
247
+ if (manifest.credits.contributors && manifest.credits.contributors.length > 0) {
248
+ console.log(` Contributors: ${manifest.credits.contributors.join(', ')}`);
249
+ }
250
+ }
251
+ console.log();
252
+ }
253
+ catch (error) {
254
+ console.error(chalk.red('❌ Error getting plugin info:'), error instanceof Error ? error.message : error);
255
+ process.exit(1);
256
+ }
257
+ }
258
+ /**
259
+ * Main plugin command handler
260
+ */
261
+ export async function pluginCommand(action, pluginName, options) {
262
+ switch (action) {
263
+ case 'list':
264
+ await listPlugins(options || {});
265
+ break;
266
+ case 'enable':
267
+ if (!pluginName) {
268
+ console.error(chalk.red('❌ Plugin name required for enable command'));
269
+ console.log(chalk.gray('Usage: specweave plugin enable <plugin-name>'));
270
+ process.exit(1);
271
+ }
272
+ await enablePlugin(pluginName, options || {});
273
+ break;
274
+ case 'disable':
275
+ if (!pluginName) {
276
+ console.error(chalk.red('❌ Plugin name required for disable command'));
277
+ console.log(chalk.gray('Usage: specweave plugin disable <plugin-name>'));
278
+ process.exit(1);
279
+ }
280
+ await disablePlugin(pluginName, options || {});
281
+ break;
282
+ case 'info':
283
+ if (!pluginName) {
284
+ console.error(chalk.red('❌ Plugin name required for info command'));
285
+ console.log(chalk.gray('Usage: specweave plugin info <plugin-name>'));
286
+ process.exit(1);
287
+ }
288
+ await pluginInfo(pluginName);
289
+ break;
290
+ default:
291
+ console.error(chalk.red(`❌ Unknown plugin action: ${action}`));
292
+ console.log(chalk.gray('Valid actions: list, enable, disable, info'));
293
+ process.exit(1);
294
+ }
295
+ }
296
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/cli/commands/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Agent Model Manager
3
+ *
4
+ * Loads and manages agent model preferences from AGENT.md frontmatter.
5
+ * Each agent declares:
6
+ * - model_preference: sonnet | haiku | opus | auto
7
+ * - cost_profile: planning | execution | hybrid
8
+ * - fallback_behavior: strict | flexible | auto
9
+ *
10
+ * Planning agents (PM, Architect, Security) prefer Sonnet.
11
+ * Execution agents (Frontend, Backend, DevOps) prefer Haiku.
12
+ * Hybrid agents (Diagrams, Docs) use auto (context-dependent).
13
+ */
14
+ import type { AgentModelPreference, Model, CostProfile, FallbackBehavior } from '../types/model-selection';
15
+ export declare class AgentModelManager {
16
+ private preferences;
17
+ private agentsPath;
18
+ constructor(agentsPath?: string);
19
+ /**
20
+ * Load all agent preferences from src/agents/
21
+ */
22
+ loadAllPreferences(): Promise<void>;
23
+ /**
24
+ * Load preference for a specific agent
25
+ */
26
+ loadAgentPreference(agentName: string): Promise<AgentModelPreference | null>;
27
+ /**
28
+ * Extract YAML frontmatter from markdown content
29
+ */
30
+ private extractFrontmatter;
31
+ /**
32
+ * Get preferred model for an agent (returns 'auto' if not found)
33
+ */
34
+ getPreferredModel(agentName: string): Model;
35
+ /**
36
+ * Get cost profile for an agent (returns 'hybrid' if not found)
37
+ */
38
+ getCostProfile(agentName: string): CostProfile;
39
+ /**
40
+ * Get fallback behavior for an agent
41
+ */
42
+ getFallbackBehavior(agentName: string): FallbackBehavior;
43
+ /**
44
+ * Get all loaded preferences (for debugging/reporting)
45
+ */
46
+ getAllPreferences(): Map<string, AgentModelPreference>;
47
+ /**
48
+ * Check if an agent has explicit preference (not 'auto')
49
+ */
50
+ hasExplicitPreference(agentName: string): boolean;
51
+ }
52
+ //# sourceMappingURL=agent-model-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-model-manager.d.ts","sourceRoot":"","sources":["../../src/core/agent-model-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE3G,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAgD;IACnE,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,CAAC,EAAE,MAAM;IAK/B;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBzC;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IA2BlF;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK;IAK3C;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW;IAK9C;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAKxD;;OAEG;IACH,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAItD;;OAEG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAIlD"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Agent Model Manager
3
+ *
4
+ * Loads and manages agent model preferences from AGENT.md frontmatter.
5
+ * Each agent declares:
6
+ * - model_preference: sonnet | haiku | opus | auto
7
+ * - cost_profile: planning | execution | hybrid
8
+ * - fallback_behavior: strict | flexible | auto
9
+ *
10
+ * Planning agents (PM, Architect, Security) prefer Sonnet.
11
+ * Execution agents (Frontend, Backend, DevOps) prefer Haiku.
12
+ * Hybrid agents (Diagrams, Docs) use auto (context-dependent).
13
+ */
14
+ import fs from 'fs-extra';
15
+ import path from 'path';
16
+ import yaml from 'js-yaml';
17
+ export class AgentModelManager {
18
+ constructor(agentsPath) {
19
+ this.preferences = new Map();
20
+ // Default to src/agents (works in development and after build)
21
+ this.agentsPath = agentsPath || path.join(__dirname, '../agents');
22
+ }
23
+ /**
24
+ * Load all agent preferences from src/agents/
25
+ */
26
+ async loadAllPreferences() {
27
+ try {
28
+ const agentDirs = await fs.readdir(this.agentsPath);
29
+ for (const agentDir of agentDirs) {
30
+ const agentMdPath = path.join(this.agentsPath, agentDir, 'AGENT.md');
31
+ if (await fs.pathExists(agentMdPath)) {
32
+ const preference = await this.loadAgentPreference(agentDir);
33
+ if (preference) {
34
+ this.preferences.set(agentDir, preference);
35
+ }
36
+ }
37
+ }
38
+ }
39
+ catch (error) {
40
+ console.warn('Failed to load agent preferences:', error);
41
+ // Continue with empty preferences (fallback to defaults)
42
+ }
43
+ }
44
+ /**
45
+ * Load preference for a specific agent
46
+ */
47
+ async loadAgentPreference(agentName) {
48
+ const agentMdPath = path.join(this.agentsPath, agentName, 'AGENT.md');
49
+ if (!await fs.pathExists(agentMdPath)) {
50
+ return null;
51
+ }
52
+ try {
53
+ const content = await fs.readFile(agentMdPath, 'utf-8');
54
+ const frontmatter = this.extractFrontmatter(content);
55
+ if (!frontmatter) {
56
+ return null;
57
+ }
58
+ return {
59
+ agent: agentName,
60
+ preference: frontmatter.model_preference || 'auto',
61
+ profile: frontmatter.cost_profile || 'hybrid',
62
+ fallback: frontmatter.fallback_behavior || 'auto',
63
+ };
64
+ }
65
+ catch (error) {
66
+ console.warn(`Failed to load preference for agent ${agentName}:`, error);
67
+ return null;
68
+ }
69
+ }
70
+ /**
71
+ * Extract YAML frontmatter from markdown content
72
+ */
73
+ extractFrontmatter(content) {
74
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
75
+ if (!match)
76
+ return null;
77
+ try {
78
+ return yaml.load(match[1]);
79
+ }
80
+ catch (error) {
81
+ console.error('Failed to parse YAML frontmatter:', error);
82
+ return null;
83
+ }
84
+ }
85
+ /**
86
+ * Get preferred model for an agent (returns 'auto' if not found)
87
+ */
88
+ getPreferredModel(agentName) {
89
+ const preference = this.preferences.get(agentName);
90
+ return preference?.preference || 'auto';
91
+ }
92
+ /**
93
+ * Get cost profile for an agent (returns 'hybrid' if not found)
94
+ */
95
+ getCostProfile(agentName) {
96
+ const preference = this.preferences.get(agentName);
97
+ return preference?.profile || 'hybrid';
98
+ }
99
+ /**
100
+ * Get fallback behavior for an agent
101
+ */
102
+ getFallbackBehavior(agentName) {
103
+ const preference = this.preferences.get(agentName);
104
+ return preference?.fallback || 'auto';
105
+ }
106
+ /**
107
+ * Get all loaded preferences (for debugging/reporting)
108
+ */
109
+ getAllPreferences() {
110
+ return new Map(this.preferences);
111
+ }
112
+ /**
113
+ * Check if an agent has explicit preference (not 'auto')
114
+ */
115
+ hasExplicitPreference(agentName) {
116
+ const pref = this.getPreferredModel(agentName);
117
+ return pref !== 'auto';
118
+ }
119
+ }
120
+ //# sourceMappingURL=agent-model-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-model-manager.js","sourceRoot":"","sources":["../../src/core/agent-model-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Cost Tracker Service
3
+ *
4
+ * Real-time cost tracking for agent executions. Tracks token usage, calculates
5
+ * costs, aggregates by increment, and calculates savings vs baseline (Sonnet-only).
6
+ *
7
+ * Persistence: Stores data in .specweave/logs/costs.json
8
+ */
9
+ import type { Model } from '../types/model-selection';
10
+ import type { CostSession, IncrementCostReport } from '../types/cost-tracking';
11
+ interface CostTrackerConfig {
12
+ logPath?: string;
13
+ autoSave?: boolean;
14
+ }
15
+ export declare class CostTracker {
16
+ private sessions;
17
+ private currentSessionId;
18
+ private logPath;
19
+ private autoSave;
20
+ constructor(config?: CostTrackerConfig);
21
+ /**
22
+ * Start a new tracking session
23
+ *
24
+ * @param agent - Agent name (e.g., 'pm', 'frontend')
25
+ * @param model - Model used ('sonnet', 'haiku', 'opus')
26
+ * @param increment - Optional increment ID (e.g., '0003')
27
+ * @param command - Optional command that triggered this (e.g., '/specweave.inc')
28
+ * @returns Session ID
29
+ */
30
+ startSession(agent: string, model: Exclude<Model, 'auto'>, increment?: string, command?: string): string;
31
+ /**
32
+ * Record token usage for current session
33
+ *
34
+ * @param inputTokens - Number of input tokens
35
+ * @param outputTokens - Number of output tokens
36
+ * @param sessionId - Optional session ID (defaults to current)
37
+ */
38
+ recordTokens(inputTokens: number, outputTokens: number, sessionId?: string): void;
39
+ /**
40
+ * End current session
41
+ *
42
+ * @param sessionId - Optional session ID (defaults to current)
43
+ */
44
+ endSession(sessionId?: string): void;
45
+ /**
46
+ * Get session by ID
47
+ */
48
+ getSession(sessionId: string): CostSession | undefined;
49
+ /**
50
+ * Get current session
51
+ */
52
+ getCurrentSession(): CostSession | undefined;
53
+ /**
54
+ * Get all sessions for a specific increment
55
+ *
56
+ * @param incrementId - Increment ID (e.g., '0003')
57
+ * @returns Array of sessions for this increment
58
+ */
59
+ getIncrementSessions(incrementId: string): CostSession[];
60
+ /**
61
+ * Get cost report for a specific increment
62
+ *
63
+ * @param incrementId - Increment ID (e.g., '0003')
64
+ * @returns Aggregate cost report
65
+ */
66
+ getIncrementCost(incrementId: string): IncrementCostReport;
67
+ /**
68
+ * Get total cost across all sessions
69
+ */
70
+ getTotalCost(): number;
71
+ /**
72
+ * Get total savings across all sessions
73
+ */
74
+ getTotalSavings(): number;
75
+ /**
76
+ * Get all sessions
77
+ */
78
+ getAllSessions(): CostSession[];
79
+ /**
80
+ * Clear all sessions (useful for testing)
81
+ */
82
+ clearSessions(): void;
83
+ /**
84
+ * Save sessions to disk
85
+ */
86
+ saveToDisk(): Promise<void>;
87
+ /**
88
+ * Load sessions from disk
89
+ */
90
+ loadFromDisk(): Promise<void>;
91
+ /**
92
+ * Generate unique session ID
93
+ */
94
+ private generateSessionId;
95
+ /**
96
+ * Get summary statistics
97
+ */
98
+ getSummary(): {
99
+ totalSessions: number;
100
+ totalCost: number;
101
+ totalSavings: number;
102
+ savingsPercentage: number;
103
+ mostExpensiveAgent: string | null;
104
+ cheapestAgent: string | null;
105
+ };
106
+ }
107
+ export {};
108
+ //# sourceMappingURL=cost-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../src/core/cost-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAc,WAAW,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG3F,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAU;gBAEd,MAAM,GAAE,iBAAsB;IAK1C;;;;;;;;OAQG;IACH,YAAY,CACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAC7B,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM;IAwBT;;;;;;OAMG;IACH,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI;IA+BP;;;;OAIG;IACH,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAuBpC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAItD;;OAEG;IACH,iBAAiB,IAAI,WAAW,GAAG,SAAS;IAM5C;;;;;OAKG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE;IAMxD;;;;;OAKG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB;IA+C1D;;OAEG;IACH,YAAY,IAAI,MAAM;IAOtB;;OAEG;IACH,eAAe,IAAI,MAAM;IAOzB;;OAEG;IACH,cAAc,IAAI,WAAW,EAAE;IAI/B;;OAEG;IACH,aAAa,IAAI,IAAI;IAKrB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBjC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBnC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,UAAU,IAAI;QACZ,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B;CAwCF"}