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.
- package/LICENSE +21 -0
- package/dist/ai.d.ts +2 -0
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +28 -45
- package/dist/ai.js.map +1 -1
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +129 -135
- package/dist/analyzer.js.map +1 -1
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +109 -15
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +8 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +76 -7
- package/dist/context.js.map +1 -1
- package/dist/docs/DEPLOYMENT.md +190 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/monitoring.d.ts +97 -0
- package/dist/monitoring.d.ts.map +1 -0
- package/dist/monitoring.js +258 -0
- package/dist/monitoring.js.map +1 -0
- package/dist/prompts/grow.d.ts.map +1 -1
- package/dist/prompts/grow.js +155 -47
- package/dist/prompts/grow.js.map +1 -1
- package/dist/providers.d.ts +46 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +349 -0
- package/dist/providers.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +28 -3
- package/dist/server.js.map +1 -1
- package/dist/state/phase.d.ts +19 -4
- package/dist/state/phase.d.ts.map +1 -1
- package/dist/state/phase.js +19 -10
- package/dist/state/phase.js.map +1 -1
- package/dist/tools/analyze.d.ts.map +1 -1
- package/dist/tools/analyze.js +21 -9
- package/dist/tools/analyze.js.map +1 -1
- package/dist/tools/completeness.d.ts +36 -0
- package/dist/tools/completeness.d.ts.map +1 -0
- package/dist/tools/completeness.js +838 -0
- package/dist/tools/completeness.js.map +1 -0
- package/dist/tools/config.d.ts +73 -0
- package/dist/tools/config.d.ts.map +1 -0
- package/dist/tools/config.js +94 -0
- package/dist/tools/config.js.map +1 -0
- package/dist/tools/grow.d.ts +157 -0
- package/dist/tools/grow.d.ts.map +1 -0
- package/dist/tools/grow.js +532 -0
- package/dist/tools/grow.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/validate.d.ts +60 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +234 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tools/verify.d.ts +4 -4
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +302 -180
- package/dist/tui.js.map +1 -1
- package/docs/DEPLOYMENT.md +190 -0
- package/package.json +17 -5
- package/dist/tests/analyze.test.d.ts +0 -2
- package/dist/tests/analyze.test.d.ts.map +0 -1
- package/dist/tests/analyze.test.js +0 -120
- package/dist/tests/analyze.test.js.map +0 -1
- package/dist/tests/context.test.d.ts +0 -2
- package/dist/tests/context.test.d.ts.map +0 -1
- package/dist/tests/context.test.js +0 -213
- package/dist/tests/context.test.js.map +0 -1
- package/dist/tests/edge-cases.test.d.ts +0 -2
- package/dist/tests/edge-cases.test.d.ts.map +0 -1
- package/dist/tests/edge-cases.test.js +0 -234
- package/dist/tests/edge-cases.test.js.map +0 -1
- package/dist/tests/journal.test.d.ts +0 -2
- package/dist/tests/journal.test.d.ts.map +0 -1
- package/dist/tests/journal.test.js +0 -184
- package/dist/tests/journal.test.js.map +0 -1
- package/dist/tests/metrics.test.d.ts +0 -2
- package/dist/tests/metrics.test.d.ts.map +0 -1
- package/dist/tests/metrics.test.js +0 -178
- package/dist/tests/metrics.test.js.map +0 -1
- package/dist/tests/phase.test.d.ts +0 -2
- package/dist/tests/phase.test.d.ts.map +0 -1
- package/dist/tests/phase.test.js +0 -110
- package/dist/tests/phase.test.js.map +0 -1
- package/dist/tests/prompts.test.d.ts +0 -2
- package/dist/tests/prompts.test.d.ts.map +0 -1
- package/dist/tests/prompts.test.js +0 -157
- package/dist/tests/prompts.test.js.map +0 -1
- package/dist/tests/search.test.d.ts +0 -2
- package/dist/tests/search.test.d.ts.map +0 -1
- package/dist/tests/search.test.js +0 -228
- package/dist/tests/search.test.js.map +0 -1
- package/dist/tests/security.test.d.ts +0 -2
- package/dist/tests/security.test.d.ts.map +0 -1
- package/dist/tests/security.test.js +0 -105
- package/dist/tests/security.test.js.map +0 -1
- package/dist/tests/server.test.d.ts +0 -2
- package/dist/tests/server.test.d.ts.map +0 -1
- package/dist/tests/server.test.js +0 -93
- package/dist/tests/server.test.js.map +0 -1
- package/dist/tests/techstack.test.d.ts +0 -2
- package/dist/tests/techstack.test.d.ts.map +0 -1
- package/dist/tests/techstack.test.js +0 -187
- package/dist/tests/techstack.test.js.map +0 -1
- package/dist/tests/tools.test.d.ts +0 -2
- package/dist/tests/tools.test.d.ts.map +0 -1
- package/dist/tests/tools.test.js +0 -137
- package/dist/tests/tools.test.js.map +0 -1
- package/dist/tests/tracker.test.d.ts +0 -2
- package/dist/tests/tracker.test.d.ts.map +0 -1
- package/dist/tests/tracker.test.js +0 -197
- 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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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
package/dist/tools/index.js.map
CHANGED
|
@@ -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
|