midas-mcp 5.44.4 → 5.44.6

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 (61) hide show
  1. package/.claude/PLUGIN.md +124 -0
  2. package/.claude/agents/midas-coach.md +108 -0
  3. package/.claude/agents/midas-reviewer.md +93 -0
  4. package/.claude/agents/midas-verifier.md +81 -0
  5. package/.claude/hooks/hooks.json +67 -0
  6. package/.claude/settings.json +41 -0
  7. package/.claude/skills/build-debug/SKILL.md +106 -0
  8. package/.claude/skills/build-implement/SKILL.md +81 -0
  9. package/.claude/skills/build-rules/SKILL.md +80 -0
  10. package/.claude/skills/build-test/SKILL.md +89 -0
  11. package/.claude/skills/horizon-expand/SKILL.md +103 -0
  12. package/.claude/skills/oneshot-retry/SKILL.md +96 -0
  13. package/.claude/skills/plan-brainlift/SKILL.md +65 -0
  14. package/.claude/skills/plan-gameplan/SKILL.md +71 -0
  15. package/.claude/skills/plan-idea/SKILL.md +51 -0
  16. package/.claude/skills/plan-prd/SKILL.md +79 -0
  17. package/.claude/skills/plan-research/SKILL.md +63 -0
  18. package/.claude/skills/tornado-debug/SKILL.md +128 -0
  19. package/README.md +51 -1
  20. package/dist/.claude/PLUGIN.md +124 -0
  21. package/dist/.claude/agents/midas-coach.md +108 -0
  22. package/dist/.claude/agents/midas-reviewer.md +93 -0
  23. package/dist/.claude/agents/midas-verifier.md +81 -0
  24. package/dist/.claude/hooks/hooks.json +67 -0
  25. package/dist/.claude/settings.json +41 -0
  26. package/dist/.claude/skills/build-debug/SKILL.md +106 -0
  27. package/dist/.claude/skills/build-implement/SKILL.md +81 -0
  28. package/dist/.claude/skills/build-rules/SKILL.md +80 -0
  29. package/dist/.claude/skills/build-test/SKILL.md +89 -0
  30. package/dist/.claude/skills/horizon-expand/SKILL.md +103 -0
  31. package/dist/.claude/skills/oneshot-retry/SKILL.md +96 -0
  32. package/dist/.claude/skills/plan-brainlift/SKILL.md +65 -0
  33. package/dist/.claude/skills/plan-gameplan/SKILL.md +71 -0
  34. package/dist/.claude/skills/plan-idea/SKILL.md +51 -0
  35. package/dist/.claude/skills/plan-prd/SKILL.md +79 -0
  36. package/dist/.claude/skills/plan-research/SKILL.md +63 -0
  37. package/dist/.claude/skills/tornado-debug/SKILL.md +128 -0
  38. package/dist/cli.d.ts.map +1 -1
  39. package/dist/cli.js +56 -2
  40. package/dist/cli.js.map +1 -1
  41. package/dist/github-integration.d.ts +37 -0
  42. package/dist/github-integration.d.ts.map +1 -0
  43. package/dist/github-integration.js +219 -0
  44. package/dist/github-integration.js.map +1 -0
  45. package/dist/phase-detector.d.ts +46 -0
  46. package/dist/phase-detector.d.ts.map +1 -0
  47. package/dist/phase-detector.js +251 -0
  48. package/dist/phase-detector.js.map +1 -0
  49. package/dist/pilot.d.ts +51 -0
  50. package/dist/pilot.d.ts.map +1 -1
  51. package/dist/pilot.js +50 -6
  52. package/dist/pilot.js.map +1 -1
  53. package/dist/tools/journal.d.ts +10 -1
  54. package/dist/tools/journal.d.ts.map +1 -1
  55. package/dist/tools/journal.js +38 -2
  56. package/dist/tools/journal.js.map +1 -1
  57. package/dist/tui-lite.d.ts +23 -0
  58. package/dist/tui-lite.d.ts.map +1 -0
  59. package/dist/tui-lite.js +188 -0
  60. package/dist/tui-lite.js.map +1 -0
  61. package/package.json +3 -2
@@ -0,0 +1,219 @@
1
+ /**
2
+ * GitHub Integration for Midas
3
+ *
4
+ * Integrates with Claude Code's --from-pr flag for PR-based automation.
5
+ *
6
+ * Features:
7
+ * - Process PRs with Midas methodology context
8
+ * - Run verification gates on PR code
9
+ * - Add PR review comments based on phase
10
+ * - Auto-update gameplan based on merged PRs
11
+ */
12
+ import { spawn } from 'child_process';
13
+ import { detectPhaseFromArtifacts } from './phase-detector.js';
14
+ import { sanitizePath } from './security.js';
15
+ /**
16
+ * Parse a GitHub PR URL into components
17
+ */
18
+ export function parsePRUrl(url) {
19
+ // Match: https://github.com/owner/repo/pull/123
20
+ const match = url.match(/github\.com\/([^\/]+)\/([^\/]+)\/pull\/(\d+)/);
21
+ if (!match)
22
+ return null;
23
+ return {
24
+ owner: match[1],
25
+ repo: match[2],
26
+ prNumber: parseInt(match[3], 10),
27
+ url,
28
+ };
29
+ }
30
+ /**
31
+ * Review a PR using Claude Code's --from-pr flag with Midas methodology
32
+ */
33
+ export async function reviewPR(prUrl, projectPath = process.cwd()) {
34
+ const safePath = sanitizePath(projectPath);
35
+ const pr = parsePRUrl(prUrl);
36
+ if (!pr) {
37
+ return {
38
+ success: false,
39
+ phase: 'unknown',
40
+ comments: ['Invalid PR URL format'],
41
+ gatesPass: false,
42
+ recommendation: 'comment',
43
+ };
44
+ }
45
+ // Detect current phase
46
+ const detection = detectPhaseFromArtifacts(safePath);
47
+ const phase = detection.phase.phase === 'IDLE'
48
+ ? 'PLAN'
49
+ : detection.phase.phase;
50
+ // Build review prompt based on phase
51
+ const reviewPrompt = buildReviewPrompt(phase, pr);
52
+ return new Promise((resolve) => {
53
+ const args = [
54
+ '--from-pr', prUrl,
55
+ '-p', reviewPrompt,
56
+ '--output-format', 'json',
57
+ '--json-schema', JSON.stringify(PR_REVIEW_SCHEMA),
58
+ '--max-turns', '5',
59
+ ];
60
+ let output = '';
61
+ let stderr = '';
62
+ const proc = spawn('claude', args, {
63
+ cwd: safePath,
64
+ env: process.env,
65
+ stdio: ['pipe', 'pipe', 'pipe'],
66
+ });
67
+ proc.stdout.on('data', (data) => {
68
+ output += data.toString();
69
+ });
70
+ proc.stderr.on('data', (data) => {
71
+ stderr += data.toString();
72
+ });
73
+ proc.on('error', () => {
74
+ resolve({
75
+ success: false,
76
+ phase,
77
+ comments: ['Failed to spawn claude CLI'],
78
+ gatesPass: false,
79
+ recommendation: 'comment',
80
+ });
81
+ });
82
+ proc.on('close', (code) => {
83
+ if (code !== 0) {
84
+ resolve({
85
+ success: false,
86
+ phase,
87
+ comments: [`Review failed with exit code ${code}`],
88
+ gatesPass: false,
89
+ recommendation: 'comment',
90
+ });
91
+ return;
92
+ }
93
+ try {
94
+ const result = JSON.parse(output);
95
+ resolve({
96
+ success: true,
97
+ phase,
98
+ comments: result.comments || [],
99
+ gatesPass: result.gatesPass ?? false,
100
+ recommendation: result.recommendation || 'comment',
101
+ });
102
+ }
103
+ catch {
104
+ resolve({
105
+ success: true,
106
+ phase,
107
+ comments: [output.slice(0, 500)],
108
+ gatesPass: false,
109
+ recommendation: 'comment',
110
+ });
111
+ }
112
+ });
113
+ });
114
+ }
115
+ /**
116
+ * Build a phase-appropriate review prompt
117
+ */
118
+ function buildReviewPrompt(phase, pr) {
119
+ const basePrompt = `Review this PR (#${pr.prNumber}) using the Midas Golden Code methodology.
120
+
121
+ Current project phase: ${phase}
122
+
123
+ Review criteria:`;
124
+ const phasePrompts = {
125
+ PLAN: `
126
+ - Does this PR add/update planning documents?
127
+ - Is the brainlift, PRD, or gameplan being properly structured?
128
+ - Are requirements clearly defined?
129
+ - Check for scope creep against the PRD.`,
130
+ BUILD: `
131
+ - Does the code follow the project's .cursorrules conventions?
132
+ - Are there tests for new functionality?
133
+ - Is error handling implemented properly?
134
+ - Check for common issues: hardcoded secrets, console.log, TODO comments
135
+ - Verify the implementation matches the gameplan task.`,
136
+ SHIP: `
137
+ - Are all verification gates passing (build, test, lint)?
138
+ - Is the code production-ready (no debug code, proper logging)?
139
+ - Are there security concerns (secrets, injection, auth)?
140
+ - Is the version appropriately bumped?
141
+ - Is documentation updated?`,
142
+ GROW: `
143
+ - Does this PR address user feedback?
144
+ - Are metrics/monitoring properly integrated?
145
+ - Does it maintain backward compatibility?
146
+ - Is the change documented for users?`,
147
+ };
148
+ return basePrompt + (phasePrompts[phase] || phasePrompts.BUILD) + `
149
+
150
+ Respond with:
151
+ 1. List of specific comments/issues found
152
+ 2. Whether this would pass gates (build/test/lint)
153
+ 3. Your recommendation: approve, request_changes, or comment`;
154
+ }
155
+ /**
156
+ * JSON Schema for structured PR review output
157
+ */
158
+ const PR_REVIEW_SCHEMA = {
159
+ type: 'object',
160
+ properties: {
161
+ comments: {
162
+ type: 'array',
163
+ items: { type: 'string' },
164
+ description: 'Specific review comments or issues found',
165
+ },
166
+ gatesPass: {
167
+ type: 'boolean',
168
+ description: 'Whether this PR would pass build/test/lint gates',
169
+ },
170
+ recommendation: {
171
+ type: 'string',
172
+ enum: ['approve', 'request_changes', 'comment'],
173
+ description: 'Overall review recommendation',
174
+ },
175
+ summary: {
176
+ type: 'string',
177
+ description: 'Brief summary of the review',
178
+ },
179
+ },
180
+ required: ['comments', 'gatesPass', 'recommendation'],
181
+ };
182
+ /**
183
+ * CLI handler for: midas pr <url>
184
+ */
185
+ export async function runPRReview(args) {
186
+ const prUrl = args[0];
187
+ if (!prUrl) {
188
+ console.log('\n Usage: midas pr <github-pr-url>');
189
+ console.log(' Example: midas pr https://github.com/owner/repo/pull/123\n');
190
+ return;
191
+ }
192
+ console.log('\n Reviewing PR with Midas methodology...\n');
193
+ const result = await reviewPR(prUrl);
194
+ const colors = {
195
+ green: '\x1b[32m',
196
+ red: '\x1b[31m',
197
+ yellow: '\x1b[33m',
198
+ reset: '\x1b[0m',
199
+ bold: '\x1b[1m',
200
+ dim: '\x1b[2m',
201
+ };
202
+ // Display result
203
+ console.log(` ${colors.bold}Phase:${colors.reset} ${result.phase}`);
204
+ console.log(` ${colors.bold}Gates:${colors.reset} ${result.gatesPass ? colors.green + 'PASS' : colors.red + 'FAIL'}${colors.reset}`);
205
+ const recColors = {
206
+ approve: colors.green,
207
+ request_changes: colors.red,
208
+ comment: colors.yellow,
209
+ };
210
+ console.log(` ${colors.bold}Recommendation:${colors.reset} ${recColors[result.recommendation]}${result.recommendation}${colors.reset}`);
211
+ if (result.comments.length > 0) {
212
+ console.log(`\n ${colors.bold}Comments:${colors.reset}`);
213
+ for (const comment of result.comments) {
214
+ console.log(` ${colors.dim}-${colors.reset} ${comment}`);
215
+ }
216
+ }
217
+ console.log('');
218
+ }
219
+ //# sourceMappingURL=github-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-integration.js","sourceRoot":"","sources":["../src/github-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Deterministic Phase Detection
3
+ *
4
+ * This module detects the current development phase based on artifacts and file
5
+ * existence, NOT AI inference. This provides consistent, reproducible results.
6
+ *
7
+ * Phase detection rules:
8
+ *
9
+ * PLAN phase:
10
+ * - IDEA: No planning docs exist
11
+ * - RESEARCH: Only partial ideas documented
12
+ * - BRAINLIFT: brainlift.md missing or incomplete
13
+ * - PRD: prd.md missing or incomplete
14
+ * - GAMEPLAN: gameplan.md missing or incomplete
15
+ *
16
+ * BUILD phase:
17
+ * - RULES: .cursorrules missing
18
+ * - INDEX/READ/RESEARCH: Early development, few source files
19
+ * - IMPLEMENT: Active development, gameplan tasks in progress
20
+ * - TEST: Tests exist but may be failing
21
+ * - DEBUG: Gates failing, errors present
22
+ *
23
+ * SHIP phase:
24
+ * - REVIEW: All gates pass, preparing for release
25
+ * - DEPLOY: Version bumped, deploying
26
+ * - MONITOR: Deployed, watching
27
+ *
28
+ * GROW phase:
29
+ * - DONE: Project shipped and live
30
+ */
31
+ import type { Phase } from './state/phase.js';
32
+ export interface DetectionResult {
33
+ phase: Phase;
34
+ confidence: number;
35
+ reason: string;
36
+ artifacts: string[];
37
+ }
38
+ /**
39
+ * Detect current phase from artifacts only - no AI calls
40
+ */
41
+ export declare function detectPhaseFromArtifacts(projectPath: string): DetectionResult;
42
+ /**
43
+ * Format detection result for display
44
+ */
45
+ export declare function formatDetection(result: DetectionResult): string;
46
+ //# sourceMappingURL=phase-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-detector.d.ts","sourceRoot":"","sources":["../src/phase-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAKH,OAAO,KAAK,EAAE,KAAK,EAA2C,MAAM,kBAAkB,CAAC;AAMvF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAwJ7E;AA+ED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAQ/D"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Deterministic Phase Detection
3
+ *
4
+ * This module detects the current development phase based on artifacts and file
5
+ * existence, NOT AI inference. This provides consistent, reproducible results.
6
+ *
7
+ * Phase detection rules:
8
+ *
9
+ * PLAN phase:
10
+ * - IDEA: No planning docs exist
11
+ * - RESEARCH: Only partial ideas documented
12
+ * - BRAINLIFT: brainlift.md missing or incomplete
13
+ * - PRD: prd.md missing or incomplete
14
+ * - GAMEPLAN: gameplan.md missing or incomplete
15
+ *
16
+ * BUILD phase:
17
+ * - RULES: .cursorrules missing
18
+ * - INDEX/READ/RESEARCH: Early development, few source files
19
+ * - IMPLEMENT: Active development, gameplan tasks in progress
20
+ * - TEST: Tests exist but may be failing
21
+ * - DEBUG: Gates failing, errors present
22
+ *
23
+ * SHIP phase:
24
+ * - REVIEW: All gates pass, preparing for release
25
+ * - DEPLOY: Version bumped, deploying
26
+ * - MONITOR: Deployed, watching
27
+ *
28
+ * GROW phase:
29
+ * - DONE: Project shipped and live
30
+ */
31
+ import { existsSync, readdirSync } from 'fs';
32
+ import { join } from 'path';
33
+ import { execSync } from 'child_process';
34
+ import { discoverDocsSync } from './docs-discovery.js';
35
+ import { getGatesStatus } from './tracker.js';
36
+ import { getGameplanProgress } from './gameplan-tracker.js';
37
+ import { sanitizePath, isShellSafe } from './security.js';
38
+ /**
39
+ * Detect current phase from artifacts only - no AI calls
40
+ */
41
+ export function detectPhaseFromArtifacts(projectPath) {
42
+ const safePath = sanitizePath(projectPath);
43
+ // Check planning docs
44
+ const docs = discoverDocsSync(safePath);
45
+ const hasBrainlift = !!docs.brainlift;
46
+ const hasPrd = !!docs.prd;
47
+ const hasGameplan = !!docs.gameplan;
48
+ const hasCursorrules = existsSync(join(safePath, '.cursorrules'));
49
+ // Check source files
50
+ const hasSrc = existsSync(join(safePath, 'src'));
51
+ const srcFileCount = hasSrc ? countFiles(join(safePath, 'src')) : 0;
52
+ // Check tests
53
+ const hasTests = existsSync(join(safePath, 'src', 'tests')) ||
54
+ existsSync(join(safePath, 'tests')) ||
55
+ existsSync(join(safePath, '__tests__'));
56
+ // Check gates
57
+ const gates = getGatesStatus(safePath);
58
+ // Check git for version/deploy signals
59
+ const gitSignals = getGitSignals(safePath);
60
+ // Check gameplan progress
61
+ const gameplan = getGameplanProgress(safePath);
62
+ // Decision tree (order matters - most specific first)
63
+ // GROW: Deployed and live
64
+ if (gitSignals.hasVersionTag && gitSignals.recentPublish) {
65
+ return {
66
+ phase: { phase: 'GROW', step: 'DONE' },
67
+ confidence: 90,
68
+ reason: 'Project has version tags and recent publish commits',
69
+ artifacts: ['git tags', 'publish commits'],
70
+ };
71
+ }
72
+ // SHIP: Gates pass, preparing for release
73
+ if (gates.allPass && hasGameplan && gameplan.actual >= 80) {
74
+ if (gitSignals.hasVersionBump) {
75
+ return {
76
+ phase: { phase: 'SHIP', step: 'DEPLOY' },
77
+ confidence: 85,
78
+ reason: 'Version bumped, ready to deploy',
79
+ artifacts: ['package.json version', 'passing gates'],
80
+ };
81
+ }
82
+ return {
83
+ phase: { phase: 'SHIP', step: 'REVIEW' },
84
+ confidence: 80,
85
+ reason: 'All gates pass, gameplan mostly complete',
86
+ artifacts: ['gates', 'gameplan progress'],
87
+ };
88
+ }
89
+ // BUILD: Active development
90
+ if (hasCursorrules && hasSrc) {
91
+ // DEBUG: Gates failing
92
+ if (gates.failing.length > 0) {
93
+ return {
94
+ phase: { phase: 'BUILD', step: 'DEBUG' },
95
+ confidence: 85,
96
+ reason: `Gates failing: ${gates.failing.join(', ')}`,
97
+ artifacts: ['gates status'],
98
+ };
99
+ }
100
+ // TEST: Tests exist, running verification
101
+ if (hasTests && gates.allPass) {
102
+ return {
103
+ phase: { phase: 'BUILD', step: 'TEST' },
104
+ confidence: 75,
105
+ reason: 'Tests present and passing, verifying',
106
+ artifacts: ['tests', 'gates'],
107
+ };
108
+ }
109
+ // IMPLEMENT: Actively coding
110
+ if (srcFileCount > 5) {
111
+ return {
112
+ phase: { phase: 'BUILD', step: 'IMPLEMENT' },
113
+ confidence: 70,
114
+ reason: 'Active development with source files',
115
+ artifacts: ['src files', '.cursorrules'],
116
+ };
117
+ }
118
+ // INDEX/READ: Early development
119
+ return {
120
+ phase: { phase: 'BUILD', step: 'INDEX' },
121
+ confidence: 65,
122
+ reason: 'Project initialized, exploring codebase',
123
+ artifacts: ['.cursorrules'],
124
+ };
125
+ }
126
+ // BUILD:RULES - Need to set up conventions
127
+ if (hasGameplan && !hasCursorrules) {
128
+ return {
129
+ phase: { phase: 'BUILD', step: 'RULES' },
130
+ confidence: 80,
131
+ reason: 'Gameplan exists but .cursorrules missing',
132
+ artifacts: ['gameplan.md'],
133
+ };
134
+ }
135
+ // PLAN phase - determine which step based on docs
136
+ if (!hasBrainlift) {
137
+ if (!docs.brainlift && !docs.prd && !docs.gameplan) {
138
+ return {
139
+ phase: { phase: 'PLAN', step: 'IDEA' },
140
+ confidence: 90,
141
+ reason: 'No planning docs exist',
142
+ artifacts: [],
143
+ };
144
+ }
145
+ return {
146
+ phase: { phase: 'PLAN', step: 'BRAINLIFT' },
147
+ confidence: 80,
148
+ reason: 'brainlift.md missing',
149
+ artifacts: [],
150
+ };
151
+ }
152
+ if (!hasPrd) {
153
+ return {
154
+ phase: { phase: 'PLAN', step: 'PRD' },
155
+ confidence: 80,
156
+ reason: 'prd.md missing',
157
+ artifacts: ['brainlift.md'],
158
+ };
159
+ }
160
+ if (!hasGameplan) {
161
+ return {
162
+ phase: { phase: 'PLAN', step: 'GAMEPLAN' },
163
+ confidence: 80,
164
+ reason: 'gameplan.md missing',
165
+ artifacts: ['brainlift.md', 'prd.md'],
166
+ };
167
+ }
168
+ // All planning docs exist but no .cursorrules - ready to build
169
+ return {
170
+ phase: { phase: 'BUILD', step: 'RULES' },
171
+ confidence: 85,
172
+ reason: 'All planning docs complete, ready to start building',
173
+ artifacts: ['brainlift.md', 'prd.md', 'gameplan.md'],
174
+ };
175
+ }
176
+ /**
177
+ * Count files in a directory recursively
178
+ */
179
+ function countFiles(dir, depth = 0) {
180
+ if (depth > 5 || !existsSync(dir))
181
+ return 0;
182
+ let count = 0;
183
+ const ignore = ['node_modules', '.git', 'dist', 'build', '.next', '__pycache__'];
184
+ try {
185
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
186
+ if (ignore.includes(entry.name) || entry.name.startsWith('.'))
187
+ continue;
188
+ if (entry.isDirectory()) {
189
+ count += countFiles(join(dir, entry.name), depth + 1);
190
+ }
191
+ else if (entry.name.endsWith('.ts') || entry.name.endsWith('.js') ||
192
+ entry.name.endsWith('.tsx') || entry.name.endsWith('.jsx')) {
193
+ count++;
194
+ }
195
+ }
196
+ }
197
+ catch {
198
+ // Ignore errors
199
+ }
200
+ return count;
201
+ }
202
+ /**
203
+ * Get signals from git history about deployment status
204
+ */
205
+ function getGitSignals(projectPath) {
206
+ const signals = {
207
+ hasVersionTag: false,
208
+ hasVersionBump: false,
209
+ recentPublish: false,
210
+ };
211
+ if (!existsSync(join(projectPath, '.git')) || !isShellSafe(projectPath)) {
212
+ return signals;
213
+ }
214
+ try {
215
+ // Check for version tags
216
+ const tags = execSync('git tag -l "v*"', {
217
+ cwd: projectPath,
218
+ encoding: 'utf-8',
219
+ timeout: 5000,
220
+ }).trim();
221
+ signals.hasVersionTag = tags.length > 0;
222
+ // Check recent commits for version bump / publish
223
+ const recentCommits = execSync('git log -10 --format=%s', {
224
+ cwd: projectPath,
225
+ encoding: 'utf-8',
226
+ timeout: 5000,
227
+ }).toLowerCase();
228
+ signals.hasVersionBump = recentCommits.includes('bump') ||
229
+ recentCommits.includes('version') ||
230
+ /\d+\.\d+\.\d+/.test(recentCommits);
231
+ signals.recentPublish = recentCommits.includes('publish') ||
232
+ recentCommits.includes('release') ||
233
+ recentCommits.includes('deploy');
234
+ }
235
+ catch {
236
+ // Ignore git errors
237
+ }
238
+ return signals;
239
+ }
240
+ /**
241
+ * Format detection result for display
242
+ */
243
+ export function formatDetection(result) {
244
+ const phase = result.phase;
245
+ const phaseStr = phase.phase === 'IDLE' ? 'IDLE' :
246
+ `${phase.phase}:${phase.step}`;
247
+ return `Phase: ${phaseStr} (${result.confidence}% confidence)
248
+ Reason: ${result.reason}
249
+ Artifacts: ${result.artifacts.length > 0 ? result.artifacts.join(', ') : 'none'}`;
250
+ }
251
+ //# sourceMappingURL=phase-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-detector.js","sourceRoot":"","sources":["../src/phase-detector.ts"],"names":[],"mappings":"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"}
package/dist/pilot.d.ts CHANGED
@@ -28,6 +28,55 @@ export interface PilotConfig {
28
28
  allowedTools: string[];
29
29
  pollInterval: number;
30
30
  outputFormat: 'text' | 'json' | 'stream-json';
31
+ useStructuredOutput: boolean;
32
+ }
33
+ /**
34
+ * JSON Schema for structured pilot execution results
35
+ * Using Claude Code's --json-schema flag for guaranteed valid output
36
+ */
37
+ export declare const PILOT_RESULT_SCHEMA: {
38
+ readonly type: "object";
39
+ readonly properties: {
40
+ readonly success: {
41
+ readonly type: "boolean";
42
+ readonly description: "Whether the task was completed successfully";
43
+ };
44
+ readonly summary: {
45
+ readonly type: "string";
46
+ readonly description: "Brief summary of what was accomplished";
47
+ };
48
+ readonly filesChanged: {
49
+ readonly type: "array";
50
+ readonly items: {
51
+ readonly type: "string";
52
+ };
53
+ readonly description: "List of files that were modified";
54
+ };
55
+ readonly testsPass: {
56
+ readonly type: "boolean";
57
+ readonly description: "Whether tests pass after the changes";
58
+ };
59
+ readonly nextSuggestion: {
60
+ readonly type: "string";
61
+ readonly description: "Suggested next action from gameplan";
62
+ };
63
+ readonly errors: {
64
+ readonly type: "array";
65
+ readonly items: {
66
+ readonly type: "string";
67
+ };
68
+ readonly description: "Any errors encountered";
69
+ };
70
+ };
71
+ readonly required: readonly ["success", "summary"];
72
+ };
73
+ export interface StructuredPilotResult {
74
+ success: boolean;
75
+ summary: string;
76
+ filesChanged?: string[];
77
+ testsPass?: boolean;
78
+ nextSuggestion?: string;
79
+ errors?: string[];
31
80
  }
32
81
  export interface ExecutionResult {
33
82
  success: boolean;
@@ -38,6 +87,8 @@ export interface ExecutionResult {
38
87
  }
39
88
  /**
40
89
  * Execute a prompt via Claude Code CLI
90
+ *
91
+ * Supports structured output via --json-schema for deterministic parsing
41
92
  */
42
93
  export declare function executeClaudeCode(prompt: string, config?: Partial<PilotConfig>): Promise<ExecutionResult>;
43
94
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pilot.d.ts","sourceRoot":"","sources":["../src/pilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,QAAQ,GAAG,MAAM,GAAG,cAAc,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAChC,OAAO,CAAC,eAAe,CAAC,CA4E1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAChC,OAAO,CAAC,eAAe,CAAC,CAU1B;AAMD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAChC,OAAO,CAAC,eAAe,CAAC,CA6C1B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAW1B;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAYD;;GAEG;AACH,wBAAsB,YAAY,CAAC,YAAY,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDrE;AA0JD;;GAEG;AACH,wBAAsB,aAAa,CAAC,YAAY,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmHtE;AA0CD;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD/D"}
1
+ {"version":3,"file":"pilot.d.ts","sourceRoot":"","sources":["../src/pilot.ts"],"names":[],"mappings":"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"}