midas-mcp 3.0.0 → 3.3.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 (118) hide show
  1. package/LICENSE +21 -0
  2. package/dist/ai.d.ts +2 -0
  3. package/dist/ai.d.ts.map +1 -1
  4. package/dist/ai.js +28 -45
  5. package/dist/ai.js.map +1 -1
  6. package/dist/analyzer.d.ts.map +1 -1
  7. package/dist/analyzer.js +129 -135
  8. package/dist/analyzer.js.map +1 -1
  9. package/dist/config.d.ts +16 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +109 -15
  12. package/dist/config.js.map +1 -1
  13. package/dist/context.d.ts +8 -1
  14. package/dist/context.d.ts.map +1 -1
  15. package/dist/context.js +76 -7
  16. package/dist/context.js.map +1 -1
  17. package/dist/docs/DEPLOYMENT.md +190 -0
  18. package/dist/index.js +4 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/monitoring.d.ts +97 -0
  21. package/dist/monitoring.d.ts.map +1 -0
  22. package/dist/monitoring.js +258 -0
  23. package/dist/monitoring.js.map +1 -0
  24. package/dist/prompts/grow.d.ts.map +1 -1
  25. package/dist/prompts/grow.js +155 -47
  26. package/dist/prompts/grow.js.map +1 -1
  27. package/dist/providers.d.ts +46 -0
  28. package/dist/providers.d.ts.map +1 -0
  29. package/dist/providers.js +349 -0
  30. package/dist/providers.js.map +1 -0
  31. package/dist/server.d.ts.map +1 -1
  32. package/dist/server.js +28 -3
  33. package/dist/server.js.map +1 -1
  34. package/dist/state/phase.d.ts +19 -4
  35. package/dist/state/phase.d.ts.map +1 -1
  36. package/dist/state/phase.js +19 -10
  37. package/dist/state/phase.js.map +1 -1
  38. package/dist/tools/analyze.d.ts.map +1 -1
  39. package/dist/tools/analyze.js +21 -9
  40. package/dist/tools/analyze.js.map +1 -1
  41. package/dist/tools/completeness.d.ts +36 -0
  42. package/dist/tools/completeness.d.ts.map +1 -0
  43. package/dist/tools/completeness.js +838 -0
  44. package/dist/tools/completeness.js.map +1 -0
  45. package/dist/tools/config.d.ts +73 -0
  46. package/dist/tools/config.d.ts.map +1 -0
  47. package/dist/tools/config.js +94 -0
  48. package/dist/tools/config.js.map +1 -0
  49. package/dist/tools/grow.d.ts +157 -0
  50. package/dist/tools/grow.d.ts.map +1 -0
  51. package/dist/tools/grow.js +532 -0
  52. package/dist/tools/grow.js.map +1 -0
  53. package/dist/tools/index.d.ts +4 -0
  54. package/dist/tools/index.d.ts.map +1 -1
  55. package/dist/tools/index.js +8 -0
  56. package/dist/tools/index.js.map +1 -1
  57. package/dist/tools/validate.d.ts +60 -0
  58. package/dist/tools/validate.d.ts.map +1 -0
  59. package/dist/tools/validate.js +234 -0
  60. package/dist/tools/validate.js.map +1 -0
  61. package/dist/tools/verify.d.ts +4 -4
  62. package/dist/tui.d.ts.map +1 -1
  63. package/dist/tui.js +302 -180
  64. package/dist/tui.js.map +1 -1
  65. package/docs/DEPLOYMENT.md +190 -0
  66. package/package.json +17 -5
  67. package/dist/tests/analyze.test.d.ts +0 -2
  68. package/dist/tests/analyze.test.d.ts.map +0 -1
  69. package/dist/tests/analyze.test.js +0 -120
  70. package/dist/tests/analyze.test.js.map +0 -1
  71. package/dist/tests/context.test.d.ts +0 -2
  72. package/dist/tests/context.test.d.ts.map +0 -1
  73. package/dist/tests/context.test.js +0 -213
  74. package/dist/tests/context.test.js.map +0 -1
  75. package/dist/tests/edge-cases.test.d.ts +0 -2
  76. package/dist/tests/edge-cases.test.d.ts.map +0 -1
  77. package/dist/tests/edge-cases.test.js +0 -234
  78. package/dist/tests/edge-cases.test.js.map +0 -1
  79. package/dist/tests/journal.test.d.ts +0 -2
  80. package/dist/tests/journal.test.d.ts.map +0 -1
  81. package/dist/tests/journal.test.js +0 -184
  82. package/dist/tests/journal.test.js.map +0 -1
  83. package/dist/tests/metrics.test.d.ts +0 -2
  84. package/dist/tests/metrics.test.d.ts.map +0 -1
  85. package/dist/tests/metrics.test.js +0 -178
  86. package/dist/tests/metrics.test.js.map +0 -1
  87. package/dist/tests/phase.test.d.ts +0 -2
  88. package/dist/tests/phase.test.d.ts.map +0 -1
  89. package/dist/tests/phase.test.js +0 -110
  90. package/dist/tests/phase.test.js.map +0 -1
  91. package/dist/tests/prompts.test.d.ts +0 -2
  92. package/dist/tests/prompts.test.d.ts.map +0 -1
  93. package/dist/tests/prompts.test.js +0 -157
  94. package/dist/tests/prompts.test.js.map +0 -1
  95. package/dist/tests/search.test.d.ts +0 -2
  96. package/dist/tests/search.test.d.ts.map +0 -1
  97. package/dist/tests/search.test.js +0 -228
  98. package/dist/tests/search.test.js.map +0 -1
  99. package/dist/tests/security.test.d.ts +0 -2
  100. package/dist/tests/security.test.d.ts.map +0 -1
  101. package/dist/tests/security.test.js +0 -105
  102. package/dist/tests/security.test.js.map +0 -1
  103. package/dist/tests/server.test.d.ts +0 -2
  104. package/dist/tests/server.test.d.ts.map +0 -1
  105. package/dist/tests/server.test.js +0 -93
  106. package/dist/tests/server.test.js.map +0 -1
  107. package/dist/tests/techstack.test.d.ts +0 -2
  108. package/dist/tests/techstack.test.d.ts.map +0 -1
  109. package/dist/tests/techstack.test.js +0 -187
  110. package/dist/tests/techstack.test.js.map +0 -1
  111. package/dist/tests/tools.test.d.ts +0 -2
  112. package/dist/tests/tools.test.d.ts.map +0 -1
  113. package/dist/tests/tools.test.js +0 -137
  114. package/dist/tests/tools.test.js.map +0 -1
  115. package/dist/tests/tracker.test.d.ts +0 -2
  116. package/dist/tests/tracker.test.d.ts.map +0 -1
  117. package/dist/tests/tracker.test.js +0 -197
  118. package/dist/tests/tracker.test.js.map +0 -1
@@ -0,0 +1,532 @@
1
+ /**
2
+ * GROW Phase Tools
3
+ *
4
+ * Tools for production monitoring, deployment verification,
5
+ * retrospectives, and cycle management.
6
+ */
7
+ import { z } from 'zod';
8
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { execSync } from 'child_process';
11
+ import { sanitizePath } from '../security.js';
12
+ import { loadState, saveState } from '../state/phase.js';
13
+ // ============================================================================
14
+ // SCHEMAS
15
+ // ============================================================================
16
+ export const verifyDeploySchema = z.object({
17
+ projectPath: z.string().optional().describe('Path to project root'),
18
+ environment: z.string().optional().describe('Target environment (staging, production)'),
19
+ });
20
+ export const changelogSchema = z.object({
21
+ projectPath: z.string().optional().describe('Path to project root'),
22
+ fromTag: z.string().optional().describe('Starting git tag or commit'),
23
+ toTag: z.string().optional().describe('Ending git tag or commit (default: HEAD)'),
24
+ });
25
+ export const retrospectiveSchema = z.object({
26
+ projectPath: z.string().optional().describe('Path to project root'),
27
+ worked: z.string().describe('What worked well this cycle'),
28
+ didntWork: z.string().describe('What did not work well'),
29
+ learned: z.string().describe('Key learnings and insights'),
30
+ actions: z.string().optional().describe('Action items for next cycle'),
31
+ });
32
+ export const nextCycleSchema = z.object({
33
+ projectPath: z.string().optional().describe('Path to project root'),
34
+ hypothesis: z.string().describe('What are we testing next cycle'),
35
+ scope: z.string().describe('What is in scope'),
36
+ notScope: z.string().optional().describe('What is explicitly out of scope'),
37
+ successMetrics: z.string().describe('How will we measure success'),
38
+ });
39
+ export const archiveCycleSchema = z.object({
40
+ projectPath: z.string().optional().describe('Path to project root'),
41
+ cycleName: z.string().optional().describe('Name for this cycle (default: timestamp)'),
42
+ });
43
+ export const costReportSchema = z.object({
44
+ projectPath: z.string().optional().describe('Path to project root'),
45
+ days: z.number().optional().describe('Number of days to report (default: 30)'),
46
+ });
47
+ // ============================================================================
48
+ // VERIFY DEPLOY
49
+ // ============================================================================
50
+ export function verifyDeploy(input) {
51
+ const projectPath = sanitizePath(input.projectPath || process.cwd());
52
+ const env = input.environment || 'production';
53
+ const checks = [];
54
+ const blockers = [];
55
+ const recommendations = [];
56
+ // 1. Package.json version check
57
+ const pkgPath = join(projectPath, 'package.json');
58
+ if (existsSync(pkgPath)) {
59
+ try {
60
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
61
+ checks.push({
62
+ name: 'package_version',
63
+ pass: !!pkg.version,
64
+ message: pkg.version ? `Version: ${pkg.version}` : 'No version in package.json',
65
+ });
66
+ }
67
+ catch {
68
+ checks.push({ name: 'package_version', pass: false, message: 'Failed to parse package.json' });
69
+ }
70
+ }
71
+ // 2. Build check
72
+ try {
73
+ execSync('npm run build --dry-run 2>&1 || npm run build', {
74
+ cwd: projectPath,
75
+ timeout: 30000,
76
+ stdio: 'pipe',
77
+ });
78
+ checks.push({ name: 'build', pass: true, message: 'Build succeeds' });
79
+ }
80
+ catch (e) {
81
+ checks.push({ name: 'build', pass: false, message: 'Build failed' });
82
+ blockers.push('Build is failing - fix before deploy');
83
+ }
84
+ // 3. Test check
85
+ try {
86
+ execSync('npm test 2>&1 || true', {
87
+ cwd: projectPath,
88
+ timeout: 60000,
89
+ stdio: 'pipe',
90
+ });
91
+ checks.push({ name: 'tests', pass: true, message: 'Tests pass' });
92
+ }
93
+ catch {
94
+ checks.push({ name: 'tests', pass: false, message: 'Tests failing or missing' });
95
+ blockers.push('Tests are failing - fix before deploy');
96
+ }
97
+ // 4. Lint check
98
+ try {
99
+ execSync('npm run lint 2>&1 || true', {
100
+ cwd: projectPath,
101
+ timeout: 30000,
102
+ stdio: 'pipe',
103
+ });
104
+ checks.push({ name: 'lint', pass: true, message: 'No lint errors' });
105
+ }
106
+ catch {
107
+ checks.push({ name: 'lint', pass: false, message: 'Lint errors present' });
108
+ recommendations.push('Consider fixing lint warnings before deploy');
109
+ }
110
+ // 5. Git status check
111
+ try {
112
+ const status = execSync('git status --porcelain', {
113
+ cwd: projectPath,
114
+ encoding: 'utf-8',
115
+ stdio: 'pipe',
116
+ }).trim();
117
+ const hasUncommitted = status.length > 0;
118
+ checks.push({
119
+ name: 'git_clean',
120
+ pass: !hasUncommitted,
121
+ message: hasUncommitted ? 'Uncommitted changes present' : 'Working tree clean',
122
+ });
123
+ if (hasUncommitted) {
124
+ recommendations.push('Commit all changes before deploying');
125
+ }
126
+ }
127
+ catch {
128
+ checks.push({ name: 'git_clean', pass: true, message: 'Not a git repo' });
129
+ }
130
+ // 6. Security audit
131
+ try {
132
+ const audit = execSync('npm audit --json 2>&1 || echo "{}"', {
133
+ cwd: projectPath,
134
+ encoding: 'utf-8',
135
+ timeout: 30000,
136
+ stdio: 'pipe',
137
+ });
138
+ const auditResult = JSON.parse(audit || '{}');
139
+ const vulns = auditResult.metadata?.vulnerabilities || {};
140
+ const critical = vulns.critical || 0;
141
+ const high = vulns.high || 0;
142
+ checks.push({
143
+ name: 'security_audit',
144
+ pass: critical === 0 && high === 0,
145
+ message: critical + high > 0
146
+ ? `${critical} critical, ${high} high vulnerabilities`
147
+ : 'No critical/high vulnerabilities',
148
+ });
149
+ if (critical > 0) {
150
+ blockers.push(`${critical} critical security vulnerabilities`);
151
+ }
152
+ }
153
+ catch {
154
+ checks.push({ name: 'security_audit', pass: true, message: 'Audit skipped' });
155
+ }
156
+ // 7. Environment check
157
+ if (env === 'production') {
158
+ checks.push({
159
+ name: 'environment',
160
+ pass: true,
161
+ message: `Deploying to: ${env}`,
162
+ });
163
+ recommendations.push('Consider deploying to staging first');
164
+ }
165
+ // 8. Changelog check
166
+ const changelogPath = join(projectPath, 'CHANGELOG.md');
167
+ checks.push({
168
+ name: 'changelog',
169
+ pass: existsSync(changelogPath),
170
+ message: existsSync(changelogPath) ? 'CHANGELOG.md exists' : 'No CHANGELOG.md',
171
+ });
172
+ if (!existsSync(changelogPath)) {
173
+ recommendations.push('Add CHANGELOG.md to document changes');
174
+ }
175
+ return {
176
+ ready: blockers.length === 0,
177
+ checks,
178
+ blockers,
179
+ recommendations,
180
+ };
181
+ }
182
+ // ============================================================================
183
+ // CHANGELOG GENERATOR
184
+ // ============================================================================
185
+ export function generateChangelog(input) {
186
+ const projectPath = sanitizePath(input.projectPath || process.cwd());
187
+ const to = input.toTag || 'HEAD';
188
+ try {
189
+ // Get git tags if fromTag not specified
190
+ let from = input.fromTag;
191
+ if (!from) {
192
+ try {
193
+ const tags = execSync('git tag --sort=-version:refname', {
194
+ cwd: projectPath,
195
+ encoding: 'utf-8',
196
+ stdio: 'pipe',
197
+ }).trim().split('\n').filter(Boolean);
198
+ from = tags[0] || '';
199
+ }
200
+ catch {
201
+ from = '';
202
+ }
203
+ }
204
+ // Get commit log
205
+ const range = from ? `${from}..${to}` : to;
206
+ const log = execSync(`git log ${range} --pretty=format:"%H|%s|%ai" --no-merges`, {
207
+ cwd: projectPath,
208
+ encoding: 'utf-8',
209
+ stdio: 'pipe',
210
+ }).trim();
211
+ if (!log) {
212
+ return {
213
+ success: true,
214
+ changelog: 'No changes since last tag.',
215
+ commits: [],
216
+ };
217
+ }
218
+ const commits = log.split('\n').map(line => {
219
+ const [hash, message, date] = line.split('|');
220
+ return { hash: hash?.slice(0, 7) || '', message: message || '', date: date?.slice(0, 10) || '' };
221
+ });
222
+ // Group by type (conventional commits)
223
+ const groups = {
224
+ feat: [],
225
+ fix: [],
226
+ docs: [],
227
+ refactor: [],
228
+ test: [],
229
+ chore: [],
230
+ other: [],
231
+ };
232
+ for (const c of commits) {
233
+ const match = c.message.match(/^(\w+)(?:\(.+\))?:/);
234
+ const type = match?.[1]?.toLowerCase() || 'other';
235
+ const group = groups[type] || groups.other;
236
+ group.push(`- ${c.message} (${c.hash})`);
237
+ }
238
+ // Build changelog
239
+ const lines = [`# Changelog\n`];
240
+ const date = new Date().toISOString().slice(0, 10);
241
+ lines.push(`## [Unreleased] - ${date}\n`);
242
+ if (groups.feat.length) {
243
+ lines.push('### Features\n');
244
+ lines.push(...groups.feat, '');
245
+ }
246
+ if (groups.fix.length) {
247
+ lines.push('### Bug Fixes\n');
248
+ lines.push(...groups.fix, '');
249
+ }
250
+ if (groups.docs.length) {
251
+ lines.push('### Documentation\n');
252
+ lines.push(...groups.docs, '');
253
+ }
254
+ if (groups.refactor.length) {
255
+ lines.push('### Refactoring\n');
256
+ lines.push(...groups.refactor, '');
257
+ }
258
+ if (groups.test.length) {
259
+ lines.push('### Tests\n');
260
+ lines.push(...groups.test, '');
261
+ }
262
+ if (groups.other.length) {
263
+ lines.push('### Other\n');
264
+ lines.push(...groups.other, '');
265
+ }
266
+ return {
267
+ success: true,
268
+ changelog: lines.join('\n'),
269
+ commits,
270
+ };
271
+ }
272
+ catch (error) {
273
+ return {
274
+ success: false,
275
+ changelog: '',
276
+ commits: [],
277
+ error: String(error),
278
+ };
279
+ }
280
+ }
281
+ // ============================================================================
282
+ // RETROSPECTIVE
283
+ // ============================================================================
284
+ export function saveRetrospective(input) {
285
+ const projectPath = sanitizePath(input.projectPath || process.cwd());
286
+ const midasDir = join(projectPath, '.midas');
287
+ const retrosDir = join(midasDir, 'retrospectives');
288
+ // Ensure directory exists
289
+ if (!existsSync(retrosDir)) {
290
+ mkdirSync(retrosDir, { recursive: true });
291
+ }
292
+ const timestamp = new Date().toISOString();
293
+ const filename = `retro-${timestamp.slice(0, 10)}.json`;
294
+ const filepath = join(retrosDir, filename);
295
+ const retro = {
296
+ timestamp,
297
+ worked: input.worked,
298
+ didntWork: input.didntWork,
299
+ learned: input.learned,
300
+ actions: input.actions || '',
301
+ };
302
+ writeFileSync(filepath, JSON.stringify(retro, null, 2));
303
+ // Also append to journal for searchability
304
+ const journalDir = join(midasDir, 'journal');
305
+ if (existsSync(journalDir)) {
306
+ const journalEntry = {
307
+ id: `retro-${Date.now()}`,
308
+ title: `Retrospective ${timestamp.slice(0, 10)}`,
309
+ timestamp,
310
+ phase: 'GROW:RETROSPECT',
311
+ conversation: `## What Worked\n${input.worked}\n\n## What Didn't Work\n${input.didntWork}\n\n## What We Learned\n${input.learned}\n\n## Action Items\n${input.actions || 'None specified'}`,
312
+ tags: ['retrospective', 'grow'],
313
+ };
314
+ const journalPath = join(journalDir, `retro-${Date.now()}.json`);
315
+ writeFileSync(journalPath, JSON.stringify(journalEntry, null, 2));
316
+ }
317
+ return {
318
+ success: true,
319
+ path: filepath,
320
+ message: `Retrospective saved. Key learning: ${input.learned.slice(0, 100)}...`,
321
+ };
322
+ }
323
+ // ============================================================================
324
+ // NEXT CYCLE
325
+ // ============================================================================
326
+ export function startNextCycle(input) {
327
+ const projectPath = sanitizePath(input.projectPath || process.cwd());
328
+ const midasDir = join(projectPath, '.midas');
329
+ const cyclesDir = join(midasDir, 'cycles');
330
+ // Ensure directory exists
331
+ if (!existsSync(cyclesDir)) {
332
+ mkdirSync(cyclesDir, { recursive: true });
333
+ }
334
+ const timestamp = new Date().toISOString();
335
+ const cycleId = `cycle-${Date.now()}`;
336
+ const filepath = join(cyclesDir, `${cycleId}.json`);
337
+ const cycle = {
338
+ id: cycleId,
339
+ startedAt: timestamp,
340
+ hypothesis: input.hypothesis,
341
+ scope: input.scope,
342
+ notScope: input.notScope || '',
343
+ successMetrics: input.successMetrics,
344
+ status: 'active',
345
+ };
346
+ writeFileSync(filepath, JSON.stringify(cycle, null, 2));
347
+ // Reset phase to PLAN:IDEA
348
+ const state = loadState(projectPath);
349
+ state.history.push(state.current);
350
+ state.current = { phase: 'EAGLE_SIGHT', step: 'IDEA' };
351
+ state.startedAt = timestamp;
352
+ saveState(projectPath, state);
353
+ return {
354
+ success: true,
355
+ cycleId,
356
+ message: `New cycle started. Hypothesis: ${input.hypothesis.slice(0, 80)}...`,
357
+ nextPhase: { phase: 'PLAN', step: 'IDEA' },
358
+ };
359
+ }
360
+ // ============================================================================
361
+ // ARCHIVE CYCLE
362
+ // ============================================================================
363
+ export function archiveCycle(input) {
364
+ const projectPath = sanitizePath(input.projectPath || process.cwd());
365
+ const midasDir = join(projectPath, '.midas');
366
+ const archiveDir = join(midasDir, 'archive');
367
+ // Ensure directory exists
368
+ if (!existsSync(archiveDir)) {
369
+ mkdirSync(archiveDir, { recursive: true });
370
+ }
371
+ const state = loadState(projectPath);
372
+ const timestamp = new Date().toISOString();
373
+ const archiveId = input.cycleName || `archive-${timestamp.slice(0, 10)}`;
374
+ const filepath = join(archiveDir, `${archiveId}.json`);
375
+ // Gather all cycle data
376
+ const archive = {
377
+ id: archiveId,
378
+ name: archiveId,
379
+ startedAt: state.startedAt,
380
+ endedAt: timestamp,
381
+ phase: state.current.phase,
382
+ };
383
+ // Include retrospectives
384
+ const retrosDir = join(midasDir, 'retrospectives');
385
+ if (existsSync(retrosDir)) {
386
+ const retroFiles = readdirSync(retrosDir).filter(f => f.endsWith('.json'));
387
+ if (retroFiles.length > 0) {
388
+ const latestRetro = retroFiles.sort().reverse()[0];
389
+ try {
390
+ archive.retrospective = JSON.parse(readFileSync(join(retrosDir, latestRetro), 'utf-8'));
391
+ }
392
+ catch {
393
+ // Skip if can't parse
394
+ }
395
+ }
396
+ }
397
+ // Save archive
398
+ writeFileSync(filepath, JSON.stringify(archive, null, 2));
399
+ // Calculate summary
400
+ const startDate = new Date(state.startedAt);
401
+ const endDate = new Date(timestamp);
402
+ const durationMs = endDate.getTime() - startDate.getTime();
403
+ const durationDays = Math.round(durationMs / (1000 * 60 * 60 * 24));
404
+ const journalDir = join(midasDir, 'journal');
405
+ const journalCount = existsSync(journalDir)
406
+ ? readdirSync(journalDir).filter(f => f.endsWith('.json')).length
407
+ : 0;
408
+ return {
409
+ success: true,
410
+ archiveId,
411
+ path: filepath,
412
+ summary: {
413
+ duration: `${durationDays} days`,
414
+ phases: state.history.length + 1,
415
+ entries: journalCount,
416
+ },
417
+ };
418
+ }
419
+ // ============================================================================
420
+ // COST TRACKING
421
+ // ============================================================================
422
+ // Pricing in cents per 1K tokens (approximate)
423
+ const PRICING = {
424
+ anthropic: { input: 1.5, output: 7.5, cached: 0.15 }, // Claude Opus
425
+ openai: { input: 0.5, output: 1.5 }, // GPT-4o
426
+ google: { input: 0.075, output: 0.3 }, // Gemini 2.0
427
+ xai: { input: 0.5, output: 1.5 }, // Grok 2
428
+ };
429
+ export function recordCost(projectPath, provider, inputTokens, outputTokens, cached = false) {
430
+ const safePath = sanitizePath(projectPath);
431
+ const midasDir = join(safePath, '.midas');
432
+ const costFile = join(midasDir, 'costs.json');
433
+ // Ensure directory exists
434
+ if (!existsSync(midasDir)) {
435
+ mkdirSync(midasDir, { recursive: true });
436
+ }
437
+ // Load existing costs
438
+ let costs = [];
439
+ if (existsSync(costFile)) {
440
+ try {
441
+ costs = JSON.parse(readFileSync(costFile, 'utf-8'));
442
+ }
443
+ catch {
444
+ costs = [];
445
+ }
446
+ }
447
+ // Calculate cost
448
+ const pricing = PRICING[provider] || PRICING.anthropic;
449
+ const inputCost = (inputTokens / 1000) * (cached && 'cached' in pricing ? pricing.cached : pricing.input);
450
+ const outputCost = (outputTokens / 1000) * pricing.output;
451
+ const totalCost = inputCost + outputCost;
452
+ // Add new entry
453
+ costs.push({
454
+ timestamp: new Date().toISOString(),
455
+ provider,
456
+ inputTokens,
457
+ outputTokens,
458
+ estimatedCost: Math.round(totalCost * 100) / 100, // Round to 2 decimals
459
+ });
460
+ // Keep only last 1000 entries
461
+ if (costs.length > 1000) {
462
+ costs = costs.slice(-1000);
463
+ }
464
+ writeFileSync(costFile, JSON.stringify(costs, null, 2));
465
+ }
466
+ export function getCostReport(input) {
467
+ const projectPath = sanitizePath(input.projectPath || process.cwd());
468
+ const days = input.days || 30;
469
+ const midasDir = join(projectPath, '.midas');
470
+ const costFile = join(midasDir, 'costs.json');
471
+ if (!existsSync(costFile)) {
472
+ return {
473
+ success: true,
474
+ totalCost: 0,
475
+ totalCostUSD: '$0.00',
476
+ breakdown: {},
477
+ dailyAverage: 0,
478
+ projectedMonthly: 0,
479
+ entries: 0,
480
+ period: `${days} days`,
481
+ };
482
+ }
483
+ let costs = [];
484
+ try {
485
+ costs = JSON.parse(readFileSync(costFile, 'utf-8'));
486
+ }
487
+ catch {
488
+ return {
489
+ success: false,
490
+ totalCost: 0,
491
+ totalCostUSD: '$0.00',
492
+ breakdown: {},
493
+ dailyAverage: 0,
494
+ projectedMonthly: 0,
495
+ entries: 0,
496
+ period: `${days} days`,
497
+ };
498
+ }
499
+ // Filter to period
500
+ const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
501
+ const periodCosts = costs.filter(c => new Date(c.timestamp).getTime() >= cutoff);
502
+ // Calculate breakdown
503
+ const breakdown = {};
504
+ let totalCost = 0;
505
+ for (const entry of periodCosts) {
506
+ if (!breakdown[entry.provider]) {
507
+ breakdown[entry.provider] = { calls: 0, tokens: 0, cost: 0 };
508
+ }
509
+ breakdown[entry.provider].calls++;
510
+ breakdown[entry.provider].tokens += entry.inputTokens + entry.outputTokens;
511
+ breakdown[entry.provider].cost += entry.estimatedCost;
512
+ totalCost += entry.estimatedCost;
513
+ }
514
+ const dailyAverage = days > 0 ? totalCost / days : 0;
515
+ const projectedMonthly = dailyAverage * 30;
516
+ // Budget warning at $10/month threshold
517
+ const budgetWarning = projectedMonthly > 1000
518
+ ? `Projected monthly cost ($${(projectedMonthly / 100).toFixed(2)}) exceeds $10/month budget!`
519
+ : undefined;
520
+ return {
521
+ success: true,
522
+ totalCost: Math.round(totalCost),
523
+ totalCostUSD: `$${(totalCost / 100).toFixed(2)}`,
524
+ breakdown,
525
+ dailyAverage: Math.round(dailyAverage),
526
+ projectedMonthly: Math.round(projectedMonthly),
527
+ entries: periodCosts.length,
528
+ period: `${days} days`,
529
+ budgetWarning,
530
+ };
531
+ }
532
+ //# sourceMappingURL=grow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grow.js","sourceRoot":"","sources":["../../src/tools/grow.ts"],"names":[],"mappings":"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"}
@@ -7,4 +7,8 @@ export { expandHorizon, horizonSchema } from './horizon.js';
7
7
  export { analyze, analyzeSchema, suggestPrompt, suggestPromptSchema, advancePhase, advancePhaseSchema, } from './analyze.js';
8
8
  export { saveToJournal, saveJournalSchema, getJournalEntries, getJournalSchema, searchJournal, searchJournalSchema, } from './journal.js';
9
9
  export { verify, verifySchema, smartSuggest, smartSuggestSchema, setTask, setTaskSchema, updateTask, updateTaskSchema, clearTask, clearTaskSchema, recordErrorTool, recordErrorSchema, recordFix, recordFixSchema, getStuck, getStuckSchema, } from './verify.js';
10
+ export { getProvider, getProviderSchema, setProvider, setProviderSchema, setApiKey, setApiKeySchema, listProviders, listProvidersSchema, } from './config.js';
11
+ export { verifyDeploy, verifyDeploySchema, generateChangelog, changelogSchema, saveRetrospective, retrospectiveSchema, startNextCycle, nextCycleSchema, archiveCycle, archiveCycleSchema, getCostReport, costReportSchema, recordCost, } from './grow.js';
12
+ export { checkCompleteness, completenessSchema, } from './completeness.js';
13
+ export { validateGates, validateGatesSchema, enforceGatesAndAdvance, enforceGatesSchema, } from './validate.js';
10
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGvD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG5D,OAAO,EACL,OAAO,EACP,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,QAAQ,EACR,cAAc,GACf,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGvD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG5D,OAAO,EACL,OAAO,EACP,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,QAAQ,EACR,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,aAAa,EACb,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAC"}
@@ -16,4 +16,12 @@ export { analyze, analyzeSchema, suggestPrompt, suggestPromptSchema, advancePhas
16
16
  export { saveToJournal, saveJournalSchema, getJournalEntries, getJournalSchema, searchJournal, searchJournalSchema, } from './journal.js';
17
17
  // Verification and smart suggestion tools
18
18
  export { verify, verifySchema, smartSuggest, smartSuggestSchema, setTask, setTaskSchema, updateTask, updateTaskSchema, clearTask, clearTaskSchema, recordErrorTool, recordErrorSchema, recordFix, recordFixSchema, getStuck, getStuckSchema, } from './verify.js';
19
+ // Provider/config tools
20
+ export { getProvider, getProviderSchema, setProvider, setProviderSchema, setApiKey, setApiKeySchema, listProviders, listProvidersSchema, } from './config.js';
21
+ // GROW phase tools - deployment, retrospectives, cycles
22
+ export { verifyDeploy, verifyDeploySchema, generateChangelog, changelogSchema, saveRetrospective, retrospectiveSchema, startNextCycle, nextCycleSchema, archiveCycle, archiveCycleSchema, getCostReport, costReportSchema, recordCost, } from './grow.js';
23
+ // Completeness model - 12-category scoring
24
+ export { checkCompleteness, completenessSchema, } from './completeness.js';
25
+ // Validation pipeline - enforce gates before phase advance
26
+ export { validateGates, validateGatesSchema, enforceGatesAndAdvance, enforceGatesSchema, } from './validate.js';
19
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,aAAa;AACb,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhD,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEvD,eAAe;AACf,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE/D,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7D,eAAe;AACf,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE5D,2BAA2B;AAC3B,OAAO,EACL,OAAO,EACP,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,sDAAsD;AACtD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,0CAA0C;AAC1C,OAAO,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,QAAQ,EACR,cAAc,GACf,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,aAAa;AACb,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhD,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEvD,eAAe;AACf,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE/D,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7D,eAAe;AACf,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE5D,2BAA2B;AAC3B,OAAO,EACL,OAAO,EACP,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,sDAAsD;AACtD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,0CAA0C;AAC1C,OAAO,EACL,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,QAAQ,EACR,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,wBAAwB;AACxB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,aAAa,EACb,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,wDAAwD;AACxD,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,2CAA2C;AAC3C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,2DAA2D;AAC3D,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Validation Pipeline
3
+ *
4
+ * Enforces compile/type/lint/test gates before phase advancement.
5
+ * Gates must pass before moving from BUILD to SHIP phase.
6
+ */
7
+ import { z } from 'zod';
8
+ import { type Phase } from '../state/phase.js';
9
+ export declare const validateGatesSchema: z.ZodObject<{
10
+ projectPath: z.ZodOptional<z.ZodString>;
11
+ autoFix: z.ZodOptional<z.ZodBoolean>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ projectPath?: string | undefined;
14
+ autoFix?: boolean | undefined;
15
+ }, {
16
+ projectPath?: string | undefined;
17
+ autoFix?: boolean | undefined;
18
+ }>;
19
+ export declare const enforceGatesSchema: z.ZodObject<{
20
+ projectPath: z.ZodOptional<z.ZodString>;
21
+ targetPhase: z.ZodString;
22
+ targetStep: z.ZodString;
23
+ force: z.ZodOptional<z.ZodBoolean>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ targetPhase: string;
26
+ targetStep: string;
27
+ projectPath?: string | undefined;
28
+ force?: boolean | undefined;
29
+ }, {
30
+ targetPhase: string;
31
+ targetStep: string;
32
+ projectPath?: string | undefined;
33
+ force?: boolean | undefined;
34
+ }>;
35
+ export type ValidateGatesInput = z.infer<typeof validateGatesSchema>;
36
+ export type EnforceGatesInput = z.infer<typeof enforceGatesSchema>;
37
+ interface GateResult {
38
+ name: string;
39
+ pass: boolean;
40
+ output: string;
41
+ duration: number;
42
+ skipped?: boolean;
43
+ command?: string;
44
+ }
45
+ interface ValidationResult {
46
+ allPass: boolean;
47
+ gates: GateResult[];
48
+ canAdvance: boolean;
49
+ blockedBy: string[];
50
+ summary: string;
51
+ }
52
+ export declare function validateGates(input: ValidateGatesInput): ValidationResult;
53
+ export declare function enforceGatesAndAdvance(input: EnforceGatesInput): {
54
+ success: boolean;
55
+ newPhase: Phase;
56
+ validation: ValidationResult;
57
+ message: string;
58
+ };
59
+ export {};
60
+ //# sourceMappingURL=validate.d.ts.map