specweave 0.3.13 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/CLAUDE.md +17 -1
  2. package/README.md +1 -1
  3. package/bin/install-all.sh +9 -2
  4. package/bin/install-hooks.sh +57 -0
  5. package/dist/cli/commands/init.d.ts.map +1 -1
  6. package/dist/cli/commands/init.js +55 -0
  7. package/dist/cli/commands/init.js.map +1 -1
  8. package/dist/core/agent-model-manager.d.ts +52 -0
  9. package/dist/core/agent-model-manager.d.ts.map +1 -0
  10. package/dist/core/agent-model-manager.js +120 -0
  11. package/dist/core/agent-model-manager.js.map +1 -0
  12. package/dist/core/cost-tracker.d.ts +108 -0
  13. package/dist/core/cost-tracker.d.ts.map +1 -0
  14. package/dist/core/cost-tracker.js +281 -0
  15. package/dist/core/cost-tracker.js.map +1 -0
  16. package/dist/core/model-selector.d.ts +57 -0
  17. package/dist/core/model-selector.d.ts.map +1 -0
  18. package/dist/core/model-selector.js +115 -0
  19. package/dist/core/model-selector.js.map +1 -0
  20. package/dist/core/phase-detector.d.ts +62 -0
  21. package/dist/core/phase-detector.d.ts.map +1 -0
  22. package/dist/core/phase-detector.js +229 -0
  23. package/dist/core/phase-detector.js.map +1 -0
  24. package/dist/types/cost-tracking.d.ts +43 -0
  25. package/dist/types/cost-tracking.d.ts.map +1 -0
  26. package/dist/types/cost-tracking.js +8 -0
  27. package/dist/types/cost-tracking.js.map +1 -0
  28. package/dist/types/model-selection.d.ts +53 -0
  29. package/dist/types/model-selection.d.ts.map +1 -0
  30. package/dist/types/model-selection.js +12 -0
  31. package/dist/types/model-selection.js.map +1 -0
  32. package/dist/utils/cost-reporter.d.ts +58 -0
  33. package/dist/utils/cost-reporter.d.ts.map +1 -0
  34. package/dist/utils/cost-reporter.js +224 -0
  35. package/dist/utils/cost-reporter.js.map +1 -0
  36. package/dist/utils/pricing-constants.d.ts +70 -0
  37. package/dist/utils/pricing-constants.d.ts.map +1 -0
  38. package/dist/utils/pricing-constants.js +71 -0
  39. package/dist/utils/pricing-constants.js.map +1 -0
  40. package/package.json +1 -1
  41. package/src/agents/architect/AGENT.md +3 -0
  42. package/src/agents/code-reviewer.md +156 -0
  43. package/src/agents/data-scientist/AGENT.md +181 -0
  44. package/src/agents/database-optimizer/AGENT.md +147 -0
  45. package/src/agents/devops/AGENT.md +3 -0
  46. package/src/agents/diagrams-architect/AGENT.md +3 -0
  47. package/src/agents/docs-writer/AGENT.md +3 -0
  48. package/src/agents/kubernetes-architect/AGENT.md +142 -0
  49. package/src/agents/ml-engineer/AGENT.md +150 -0
  50. package/src/agents/mlops-engineer/AGENT.md +201 -0
  51. package/src/agents/network-engineer/AGENT.md +149 -0
  52. package/src/agents/observability-engineer/AGENT.md +213 -0
  53. package/src/agents/payment-integration/AGENT.md +35 -0
  54. package/src/agents/performance/AGENT.md +3 -0
  55. package/src/agents/performance-engineer/AGENT.md +153 -0
  56. package/src/agents/pm/AGENT.md +3 -0
  57. package/src/agents/qa-lead/AGENT.md +3 -0
  58. package/src/agents/security/AGENT.md +3 -0
  59. package/src/agents/sre/AGENT.md +3 -0
  60. package/src/agents/tdd-orchestrator/AGENT.md +169 -0
  61. package/src/agents/tech-lead/AGENT.md +3 -0
  62. package/src/commands/specweave.costs.md +261 -0
  63. package/src/commands/specweave.ml-pipeline.md +292 -0
  64. package/src/commands/specweave.monitor-setup.md +501 -0
  65. package/src/commands/specweave.slo-implement.md +1055 -0
  66. package/src/commands/specweave.sync-github.md +1 -1
  67. package/src/commands/specweave.tdd-cycle.md +199 -0
  68. package/src/commands/specweave.tdd-green.md +842 -0
  69. package/src/commands/specweave.tdd-red.md +135 -0
  70. package/src/commands/specweave.tdd-refactor.md +165 -0
  71. package/src/skills/SKILLS-INDEX.md +18 -10
  72. package/src/skills/billing-automation/SKILL.md +559 -0
  73. package/src/skills/distributed-tracing/SKILL.md +438 -0
  74. package/src/skills/e2e-playwright/README.md +1 -1
  75. package/src/skills/e2e-playwright/package.json +1 -1
  76. package/src/skills/gitops-workflow/SKILL.md +285 -0
  77. package/src/skills/gitops-workflow/references/argocd-setup.md +134 -0
  78. package/src/skills/gitops-workflow/references/sync-policies.md +131 -0
  79. package/src/skills/grafana-dashboards/SKILL.md +369 -0
  80. package/src/skills/helm-chart-scaffolding/SKILL.md +544 -0
  81. package/src/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  82. package/src/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  83. package/src/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  84. package/src/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  85. package/src/skills/k8s-manifest-generator/SKILL.md +511 -0
  86. package/src/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  87. package/src/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  88. package/src/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  89. package/src/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
  90. package/src/skills/k8s-manifest-generator/references/service-spec.md +724 -0
  91. package/src/skills/k8s-security-policies/SKILL.md +334 -0
  92. package/src/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
  93. package/src/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
  94. package/src/skills/ml-pipeline-workflow/SKILL.md +245 -0
  95. package/src/skills/paypal-integration/SKILL.md +467 -0
  96. package/src/skills/pci-compliance/SKILL.md +466 -0
  97. package/src/skills/prometheus-configuration/SKILL.md +392 -0
  98. package/src/skills/slo-implementation/SKILL.md +329 -0
  99. package/src/skills/stripe-integration/SKILL.md +442 -0
  100. package/src/skills/tdd-workflow/SKILL.md +378 -0
  101. package/src/templates/README.md.template +1 -1
  102. package/src/skills/bmad-method-expert/SKILL.md +0 -626
  103. package/src/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
  104. package/src/skills/bmad-method-expert/scripts/check-setup.js +0 -208
  105. package/src/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
  106. package/src/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
  107. package/src/skills/context-optimizer/SKILL.md +0 -588
  108. package/src/skills/figma-designer/SKILL.md +0 -149
  109. package/src/skills/figma-implementer/SKILL.md +0 -148
  110. package/src/skills/figma-mcp-connector/SKILL.md +0 -136
  111. package/src/skills/figma-to-code/SKILL.md +0 -128
  112. 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,43 @@
1
+ /**
2
+ * Type definitions for Cost Tracking system
3
+ *
4
+ * Tracks token usage and costs per session, agent, model, and increment.
5
+ * Calculates savings vs all-Sonnet baseline.
6
+ */
7
+ import type { Model } from './model-selection';
8
+ /**
9
+ * Token usage for a single session
10
+ */
11
+ export interface TokenUsage {
12
+ inputTokens: number;
13
+ outputTokens: number;
14
+ totalTokens: number;
15
+ }
16
+ /**
17
+ * Single cost tracking session (one agent invocation)
18
+ */
19
+ export interface CostSession {
20
+ sessionId: string;
21
+ agent: string;
22
+ model: Exclude<Model, 'auto'>;
23
+ increment?: string;
24
+ command?: string;
25
+ startedAt: string;
26
+ endedAt?: string;
27
+ tokenUsage: TokenUsage;
28
+ cost: number;
29
+ savings: number;
30
+ }
31
+ /**
32
+ * Cost report for an entire increment
33
+ */
34
+ export interface IncrementCostReport {
35
+ incrementId: string;
36
+ totalCost: number;
37
+ totalSavings: number;
38
+ totalTokens: number;
39
+ sessionCount: number;
40
+ costByModel: Record<string, number>;
41
+ costByAgent: Record<string, number>;
42
+ }
43
+ //# sourceMappingURL=cost-tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-tracking.d.ts","sourceRoot":"","sources":["../../src/types/cost-tracking.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Type definitions for Cost Tracking system
3
+ *
4
+ * Tracks token usage and costs per session, agent, model, and increment.
5
+ * Calculates savings vs all-Sonnet baseline.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=cost-tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-tracking.js","sourceRoot":"","sources":["../../src/types/cost-tracking.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Type definitions for the Intelligent Model Selection system
3
+ *
4
+ * This system automatically routes work to the optimal AI model based on:
5
+ * - Agent preferences (planning vs execution agents)
6
+ * - Phase detection (planning vs execution vs review)
7
+ * - User overrides (manual model selection)
8
+ *
9
+ * Achieves 60-70% cost savings by using Haiku for execution, Sonnet for planning.
10
+ */
11
+ /**
12
+ * Available AI models
13
+ * - sonnet: Latest Sonnet 4.5 (planning, complex analysis)
14
+ * - haiku: Latest Haiku 4.5 (execution, simple tasks)
15
+ * - opus: Latest Opus (rare, critical decisions)
16
+ * - auto: System decides based on context
17
+ */
18
+ export type Model = 'sonnet' | 'haiku' | 'opus' | 'auto';
19
+ /**
20
+ * Work phases for phase detection
21
+ */
22
+ export type Phase = 'planning' | 'execution' | 'review';
23
+ /**
24
+ * Cost profiles for agents
25
+ */
26
+ export type CostProfile = 'planning' | 'execution' | 'hybrid';
27
+ /**
28
+ * Fallback behavior when preferred model fails
29
+ */
30
+ export type FallbackBehavior = 'strict' | 'flexible' | 'auto';
31
+ /**
32
+ * Agent model preference loaded from AGENT.md frontmatter
33
+ */
34
+ export interface AgentModelPreference {
35
+ agent: string;
36
+ preference: Model;
37
+ profile: CostProfile;
38
+ fallback: FallbackBehavior;
39
+ }
40
+ /**
41
+ * Model selection decision with reasoning
42
+ */
43
+ export interface ModelSelectionDecision {
44
+ model: Exclude<Model, 'auto'>;
45
+ reason: 'user_override' | 'agent_preference' | 'phase_detection' | 'low_confidence_default' | 'cost_policy' | 'fallback';
46
+ confidence?: number;
47
+ reasoning: string;
48
+ alternatives?: Array<{
49
+ model: Model;
50
+ score: number;
51
+ }>;
52
+ }
53
+ //# sourceMappingURL=model-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-selection.d.ts","sourceRoot":"","sources":["../../src/types/model-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,eAAe,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,wBAAwB,GAAG,aAAa,GAAG,UAAU,CAAC;IACzH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvD"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Type definitions for the Intelligent Model Selection system
3
+ *
4
+ * This system automatically routes work to the optimal AI model based on:
5
+ * - Agent preferences (planning vs execution agents)
6
+ * - Phase detection (planning vs execution vs review)
7
+ * - User overrides (manual model selection)
8
+ *
9
+ * Achieves 60-70% cost savings by using Haiku for execution, Sonnet for planning.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=model-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-selection.js","sourceRoot":"","sources":["../../src/types/model-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Cost Report Generation
3
+ *
4
+ * Generates human-readable cost reports with multiple export formats:
5
+ * - JSON (machine-readable)
6
+ * - CSV (spreadsheet import)
7
+ * - ASCII Dashboard (CLI display)
8
+ */
9
+ import type { CostTracker } from '../core/cost-tracker';
10
+ import type { IncrementCostReport } from '../types/cost-tracking';
11
+ export declare class CostReporter {
12
+ private costTracker;
13
+ constructor(costTracker: CostTracker);
14
+ /**
15
+ * Generate cost report for a specific increment
16
+ *
17
+ * @param incrementId - Increment ID (e.g., '0003')
18
+ * @returns Aggregate cost report
19
+ */
20
+ generateIncrementReport(incrementId: string): IncrementCostReport;
21
+ /**
22
+ * Export report to JSON file
23
+ *
24
+ * @param incrementId - Increment ID
25
+ * @param outputPath - Output file path
26
+ */
27
+ exportToJSON(incrementId: string, outputPath: string): Promise<void>;
28
+ /**
29
+ * Export report to CSV file
30
+ *
31
+ * @param incrementId - Increment ID
32
+ * @param outputPath - Output file path
33
+ */
34
+ exportToCSV(incrementId: string, outputPath: string): Promise<void>;
35
+ /**
36
+ * Generate ASCII dashboard for CLI display
37
+ *
38
+ * @param incrementId - Optional increment ID (defaults to all increments)
39
+ * @returns ASCII table with cost breakdown
40
+ */
41
+ generateDashboard(incrementId?: string): string;
42
+ /**
43
+ * Generate dashboard for a specific increment
44
+ */
45
+ private generateIncrementDashboard;
46
+ /**
47
+ * Generate dashboard for all increments
48
+ */
49
+ private generateOverallDashboard;
50
+ /**
51
+ * Generate compact one-line summary
52
+ *
53
+ * @param incrementId - Optional increment ID
54
+ * @returns One-line summary string
55
+ */
56
+ generateSummaryLine(incrementId?: string): string;
57
+ }
58
+ //# sourceMappingURL=cost-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-reporter.d.ts","sourceRoot":"","sources":["../../src/utils/cost-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,qBAAa,YAAY;IACX,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAE5C;;;;;OAKG;IACH,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB;IAIjE;;;;;OAKG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1E;;;;;OAKG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCzE;;;;;OAKG;IACH,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAQ/C;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA8FlC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmEhC;;;;;OAKG;IACH,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;CASlD"}