@cluesmith/codev 2.0.0-rc.1 → 2.0.0-rc.10

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 (145) hide show
  1. package/bin/porch.js +9 -4
  2. package/dist/agent-farm/cli.d.ts.map +1 -1
  3. package/dist/agent-farm/cli.js +2 -14
  4. package/dist/agent-farm/cli.js.map +1 -1
  5. package/dist/agent-farm/commands/kickoff.d.ts +1 -0
  6. package/dist/agent-farm/commands/kickoff.d.ts.map +1 -1
  7. package/dist/agent-farm/commands/kickoff.js +82 -78
  8. package/dist/agent-farm/commands/kickoff.js.map +1 -1
  9. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  10. package/dist/agent-farm/commands/spawn.js +30 -54
  11. package/dist/agent-farm/commands/spawn.js.map +1 -1
  12. package/dist/agent-farm/commands/start.d.ts.map +1 -1
  13. package/dist/agent-farm/commands/start.js +8 -50
  14. package/dist/agent-farm/commands/start.js.map +1 -1
  15. package/dist/agent-farm/servers/dashboard-server.js +0 -14
  16. package/dist/agent-farm/servers/dashboard-server.js.map +1 -1
  17. package/dist/agent-farm/state.d.ts +0 -10
  18. package/dist/agent-farm/state.d.ts.map +1 -1
  19. package/dist/agent-farm/state.js +0 -24
  20. package/dist/agent-farm/state.js.map +1 -1
  21. package/dist/cli.d.ts.map +1 -1
  22. package/dist/cli.js +5 -17
  23. package/dist/cli.js.map +1 -1
  24. package/dist/commands/adopt.d.ts.map +1 -1
  25. package/dist/commands/adopt.js +17 -1
  26. package/dist/commands/adopt.js.map +1 -1
  27. package/dist/commands/consult/index.d.ts.map +1 -1
  28. package/dist/commands/consult/index.js +2 -1
  29. package/dist/commands/consult/index.js.map +1 -1
  30. package/dist/commands/init.d.ts.map +1 -1
  31. package/dist/commands/init.js +17 -1
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/commands/porch/checks.d.ts +16 -29
  34. package/dist/commands/porch/checks.d.ts.map +1 -1
  35. package/dist/commands/porch/checks.js +90 -144
  36. package/dist/commands/porch/checks.js.map +1 -1
  37. package/dist/commands/porch/claude.d.ts +29 -0
  38. package/dist/commands/porch/claude.d.ts.map +1 -0
  39. package/dist/commands/porch/claude.js +79 -0
  40. package/dist/commands/porch/claude.js.map +1 -0
  41. package/dist/commands/porch/index.d.ts +21 -43
  42. package/dist/commands/porch/index.d.ts.map +1 -1
  43. package/dist/commands/porch/index.js +449 -753
  44. package/dist/commands/porch/index.js.map +1 -1
  45. package/dist/commands/porch/plan.d.ts +60 -0
  46. package/dist/commands/porch/plan.d.ts.map +1 -0
  47. package/dist/commands/porch/plan.js +162 -0
  48. package/dist/commands/porch/plan.js.map +1 -0
  49. package/dist/commands/porch/prompts.d.ts +19 -0
  50. package/dist/commands/porch/prompts.d.ts.map +1 -0
  51. package/dist/commands/porch/prompts.js +259 -0
  52. package/dist/commands/porch/prompts.js.map +1 -0
  53. package/dist/commands/porch/protocol.d.ts +57 -0
  54. package/dist/commands/porch/protocol.d.ts.map +1 -0
  55. package/dist/commands/porch/protocol.js +250 -0
  56. package/dist/commands/porch/protocol.js.map +1 -0
  57. package/dist/commands/porch/repl.d.ts +33 -0
  58. package/dist/commands/porch/repl.d.ts.map +1 -0
  59. package/dist/commands/porch/repl.js +206 -0
  60. package/dist/commands/porch/repl.js.map +1 -0
  61. package/dist/commands/porch/run.d.ts +15 -0
  62. package/dist/commands/porch/run.d.ts.map +1 -0
  63. package/dist/commands/porch/run.js +551 -0
  64. package/dist/commands/porch/run.js.map +1 -0
  65. package/dist/commands/porch/signals.d.ts +35 -0
  66. package/dist/commands/porch/signals.d.ts.map +1 -0
  67. package/dist/commands/porch/signals.js +76 -0
  68. package/dist/commands/porch/signals.js.map +1 -0
  69. package/dist/commands/porch/state.d.ts +19 -112
  70. package/dist/commands/porch/state.d.ts.map +1 -1
  71. package/dist/commands/porch/state.js +78 -685
  72. package/dist/commands/porch/state.js.map +1 -1
  73. package/dist/commands/porch/types.d.ts +65 -173
  74. package/dist/commands/porch/types.d.ts.map +1 -1
  75. package/dist/commands/porch/types.js +2 -1
  76. package/dist/commands/porch/types.js.map +1 -1
  77. package/dist/commands/update.d.ts.map +1 -1
  78. package/dist/commands/update.js +19 -0
  79. package/dist/commands/update.js.map +1 -1
  80. package/dist/lib/scaffold.d.ts +24 -0
  81. package/dist/lib/scaffold.d.ts.map +1 -1
  82. package/dist/lib/scaffold.js +78 -0
  83. package/dist/lib/scaffold.js.map +1 -1
  84. package/package.json +5 -2
  85. package/skeleton/protocols/spider/prompts/defend.md +215 -0
  86. package/skeleton/protocols/spider/prompts/evaluate.md +241 -0
  87. package/skeleton/protocols/spider/prompts/implement.md +149 -0
  88. package/skeleton/protocols/spider/prompts/plan.md +214 -0
  89. package/skeleton/protocols/spider/prompts/review.md +217 -0
  90. package/skeleton/protocols/spider/prompts/specify.md +174 -0
  91. package/skeleton/protocols/spider/protocol.json +79 -147
  92. package/skeleton/protocols/spider/templates/plan.md +14 -0
  93. package/skeleton/roles/architect.md +40 -48
  94. package/skeleton/roles/builder.md +152 -29
  95. package/templates/dashboard/index.html +0 -27
  96. package/templates/dashboard/js/utils.js +0 -86
  97. package/dist/agent-farm/commands/rename.d.ts +0 -13
  98. package/dist/agent-farm/commands/rename.d.ts.map +0 -1
  99. package/dist/agent-farm/commands/rename.js +0 -33
  100. package/dist/agent-farm/commands/rename.js.map +0 -1
  101. package/dist/commands/pcheck/cache.d.ts +0 -48
  102. package/dist/commands/pcheck/cache.d.ts.map +0 -1
  103. package/dist/commands/pcheck/cache.js +0 -170
  104. package/dist/commands/pcheck/cache.js.map +0 -1
  105. package/dist/commands/pcheck/evaluator.d.ts +0 -15
  106. package/dist/commands/pcheck/evaluator.d.ts.map +0 -1
  107. package/dist/commands/pcheck/evaluator.js +0 -246
  108. package/dist/commands/pcheck/evaluator.js.map +0 -1
  109. package/dist/commands/pcheck/index.d.ts +0 -12
  110. package/dist/commands/pcheck/index.d.ts.map +0 -1
  111. package/dist/commands/pcheck/index.js +0 -249
  112. package/dist/commands/pcheck/index.js.map +0 -1
  113. package/dist/commands/pcheck/parser.d.ts +0 -39
  114. package/dist/commands/pcheck/parser.d.ts.map +0 -1
  115. package/dist/commands/pcheck/parser.js +0 -155
  116. package/dist/commands/pcheck/parser.js.map +0 -1
  117. package/dist/commands/pcheck/types.d.ts +0 -82
  118. package/dist/commands/pcheck/types.d.ts.map +0 -1
  119. package/dist/commands/pcheck/types.js +0 -5
  120. package/dist/commands/pcheck/types.js.map +0 -1
  121. package/dist/commands/porch/consultation.d.ts +0 -56
  122. package/dist/commands/porch/consultation.d.ts.map +0 -1
  123. package/dist/commands/porch/consultation.js +0 -330
  124. package/dist/commands/porch/consultation.js.map +0 -1
  125. package/dist/commands/porch/notifications.d.ts +0 -99
  126. package/dist/commands/porch/notifications.d.ts.map +0 -1
  127. package/dist/commands/porch/notifications.js +0 -223
  128. package/dist/commands/porch/notifications.js.map +0 -1
  129. package/dist/commands/porch/plan-parser.d.ts +0 -38
  130. package/dist/commands/porch/plan-parser.d.ts.map +0 -1
  131. package/dist/commands/porch/plan-parser.js +0 -166
  132. package/dist/commands/porch/plan-parser.js.map +0 -1
  133. package/dist/commands/porch/protocol-loader.d.ts +0 -46
  134. package/dist/commands/porch/protocol-loader.d.ts.map +0 -1
  135. package/dist/commands/porch/protocol-loader.js +0 -249
  136. package/dist/commands/porch/protocol-loader.js.map +0 -1
  137. package/dist/commands/porch/signal-parser.d.ts +0 -88
  138. package/dist/commands/porch/signal-parser.d.ts.map +0 -1
  139. package/dist/commands/porch/signal-parser.js +0 -148
  140. package/dist/commands/porch/signal-parser.js.map +0 -1
  141. package/skeleton/porch/protocols/bugfix.json +0 -85
  142. package/skeleton/porch/protocols/spider.json +0 -135
  143. package/skeleton/porch/protocols/tick.json +0 -76
  144. package/templates/dashboard/css/activity.css +0 -151
  145. package/templates/dashboard/js/activity.js +0 -112
@@ -1,195 +1,141 @@
1
1
  /**
2
- * Defense Checks
2
+ * Porch Check Runner
3
3
  *
4
- * Runs build/test commands defined in protocol phases.
5
- * Supports retry logic and configurable failure behavior.
4
+ * Runs check commands (npm test, npm run build, etc.)
5
+ * with timeout support.
6
6
  */
7
7
  import { spawn } from 'node:child_process';
8
- import chalk from 'chalk';
8
+ /** Default timeout for checks: 5 minutes */
9
+ const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
9
10
  /**
10
- * Run a single command with timeout
11
+ * Run a single check command
11
12
  */
12
- async function runCommand(command, options = {}) {
13
+ export async function runCheck(name, command, cwd, env, timeoutMs = DEFAULT_TIMEOUT_MS) {
13
14
  const startTime = Date.now();
14
- const timeout = options.timeout || 300000; // 5 minutes default
15
15
  return new Promise((resolve) => {
16
- const [cmd, ...args] = command.split(/\s+/);
17
- const proc = spawn(cmd, args, {
18
- cwd: options.cwd,
16
+ let stdout = '';
17
+ let stderr = '';
18
+ let killed = false;
19
+ // Parse command into executable and args
20
+ const parts = command.split(/\s+/);
21
+ const executable = parts[0];
22
+ const args = parts.slice(1);
23
+ const proc = spawn(executable, args, {
24
+ cwd,
19
25
  shell: true,
20
26
  stdio: ['ignore', 'pipe', 'pipe'],
27
+ env: {
28
+ ...process.env,
29
+ PROJECT_ID: env.PROJECT_ID,
30
+ PROJECT_TITLE: env.PROJECT_TITLE,
31
+ },
21
32
  });
22
- let output = '';
23
- let stderr = '';
24
- let timedOut = false;
25
- const timeoutId = setTimeout(() => {
26
- timedOut = true;
33
+ // Set up timeout
34
+ const timeout = setTimeout(() => {
35
+ killed = true;
27
36
  proc.kill('SIGTERM');
28
- }, timeout);
37
+ setTimeout(() => {
38
+ if (!proc.killed) {
39
+ proc.kill('SIGKILL');
40
+ }
41
+ }, 5000);
42
+ }, timeoutMs);
29
43
  proc.stdout.on('data', (data) => {
30
- output += data.toString();
44
+ stdout += data.toString();
31
45
  });
32
46
  proc.stderr.on('data', (data) => {
33
47
  stderr += data.toString();
34
48
  });
35
49
  proc.on('close', (code) => {
36
- clearTimeout(timeoutId);
50
+ clearTimeout(timeout);
37
51
  const duration = Date.now() - startTime;
38
- if (timedOut) {
52
+ if (killed) {
39
53
  resolve({
40
- success: false,
41
- output,
42
- error: `Command timed out after ${timeout}ms`,
43
- duration,
54
+ name,
55
+ command,
56
+ passed: false,
57
+ error: `Timed out after ${timeoutMs / 1000}s`,
58
+ duration_ms: duration,
59
+ });
60
+ }
61
+ else if (code === 0) {
62
+ resolve({
63
+ name,
64
+ command,
65
+ passed: true,
66
+ output: stdout.trim(),
67
+ duration_ms: duration,
44
68
  });
45
69
  }
46
70
  else {
47
71
  resolve({
48
- success: code === 0,
49
- output: output + stderr,
50
- error: code !== 0 ? `Exit code: ${code}` : undefined,
51
- duration,
72
+ name,
73
+ command,
74
+ passed: false,
75
+ output: stdout.trim(),
76
+ error: stderr.trim() || `Exit code ${code}`,
77
+ duration_ms: duration,
52
78
  });
53
79
  }
54
80
  });
55
81
  proc.on('error', (err) => {
56
- clearTimeout(timeoutId);
82
+ clearTimeout(timeout);
57
83
  resolve({
58
- success: false,
59
- output: '',
84
+ name,
85
+ command,
86
+ passed: false,
60
87
  error: err.message,
61
- duration: Date.now() - startTime,
88
+ duration_ms: Date.now() - startTime,
62
89
  });
63
90
  });
64
91
  });
65
92
  }
66
93
  /**
67
- * Run a check with retry logic
94
+ * Run multiple checks for a phase
68
95
  */
69
- async function runCheckWithRetry(name, check, options = {}) {
70
- const maxRetries = check.max_retries || 3;
71
- const retryDelay = check.retry_delay || 5; // seconds
72
- let attempts = 0;
73
- let lastResult = null;
74
- while (attempts < maxRetries) {
75
- attempts++;
76
- console.log(chalk.blue(`[check] Running ${name} (attempt ${attempts}/${maxRetries}): ${check.command}`));
77
- lastResult = await runCommand(check.command, options);
78
- if (lastResult.success) {
79
- console.log(chalk.green(`[check] ${name} passed (${lastResult.duration}ms)`));
80
- return {
81
- name,
82
- success: true,
83
- output: lastResult.output,
84
- attempts,
85
- duration: lastResult.duration,
86
- };
87
- }
88
- console.log(chalk.yellow(`[check] ${name} failed: ${lastResult.error}`));
89
- // Only retry if on_fail is 'retry'
90
- if (check.on_fail !== 'retry' || attempts >= maxRetries) {
96
+ export async function runPhaseChecks(checks, cwd, env, timeoutMs = DEFAULT_TIMEOUT_MS) {
97
+ const results = [];
98
+ for (const [name, command] of Object.entries(checks)) {
99
+ const result = await runCheck(name, command, cwd, env, timeoutMs);
100
+ results.push(result);
101
+ // Stop on first failure
102
+ if (!result.passed) {
91
103
  break;
92
104
  }
93
- console.log(chalk.blue(`[check] Retrying in ${retryDelay}s...`));
94
- await new Promise(r => setTimeout(r, retryDelay * 1000));
95
105
  }
96
- return {
97
- name,
98
- success: false,
99
- output: lastResult?.output || '',
100
- error: lastResult?.error,
101
- attempts,
102
- duration: lastResult?.duration || 0,
103
- };
106
+ return results;
104
107
  }
108
+ // ============================================================================
109
+ // Result Formatting
110
+ // ============================================================================
105
111
  /**
106
- * Run all checks for a phase
112
+ * Format check results for terminal output
107
113
  */
108
- export async function runPhaseChecks(phase, options = {}) {
109
- if (!phase.checks || Object.keys(phase.checks).length === 0) {
110
- return { success: true, checks: [] };
111
- }
112
- if (options.dryRun) {
113
- console.log(chalk.yellow(`[check] [DRY RUN] Would run checks for phase ${phase.id}:`));
114
- for (const [name, check] of Object.entries(phase.checks)) {
115
- console.log(chalk.yellow(` - ${name}: ${check.command}`));
116
- }
117
- return { success: true, checks: [] };
118
- }
119
- const results = [];
120
- let returnTo;
121
- for (const [name, check] of Object.entries(phase.checks)) {
122
- const result = await runCheckWithRetry(name, check, { cwd: options.cwd });
123
- results.push(result);
124
- if (!result.success) {
125
- console.log(chalk.red(`[check] ${name} failed after ${result.attempts} attempts`));
126
- // Determine failure action
127
- if (check.on_fail === 'retry') {
128
- // Already retried, now fail
129
- returnTo = undefined;
114
+ export function formatCheckResults(results) {
115
+ const lines = [];
116
+ for (const result of results) {
117
+ const status = result.passed ? '✓' : '✗';
118
+ const duration = result.duration_ms
119
+ ? ` (${(result.duration_ms / 1000).toFixed(1)}s)`
120
+ : '';
121
+ lines.push(` ${status} ${result.name}${duration}`);
122
+ if (!result.passed && result.error) {
123
+ // Indent error message
124
+ const errorLines = result.error.split('\n').slice(0, 5);
125
+ for (const line of errorLines) {
126
+ lines.push(` ${line}`);
130
127
  }
131
- else {
132
- // on_fail specifies a phase to return to
133
- returnTo = check.on_fail;
128
+ if (result.error.split('\n').length > 5) {
129
+ lines.push(' ...');
134
130
  }
135
- return {
136
- success: false,
137
- checks: results,
138
- returnTo,
139
- };
140
131
  }
141
132
  }
142
- console.log(chalk.green(`[check] All checks passed for phase ${phase.id}`));
143
- return {
144
- success: true,
145
- checks: results,
146
- };
147
- }
148
- /**
149
- * Create default checks for common phases
150
- */
151
- export function getDefaultChecks(phaseName) {
152
- switch (phaseName.toLowerCase()) {
153
- case 'implement':
154
- return {
155
- build: {
156
- command: 'npm run build',
157
- on_fail: 'retry',
158
- max_retries: 2,
159
- },
160
- };
161
- case 'defend':
162
- return {
163
- tests: {
164
- command: 'npm test',
165
- on_fail: 'implement', // Return to implement on test failure
166
- max_retries: 1,
167
- },
168
- };
169
- default:
170
- return {};
171
- }
133
+ return lines.join('\n');
172
134
  }
173
135
  /**
174
- * Format check results for display
136
+ * Check if all results passed
175
137
  */
176
- export function formatCheckResults(results) {
177
- if (results.checks.length === 0) {
178
- return 'No checks ran';
179
- }
180
- const lines = ['Check Results:'];
181
- for (const check of results.checks) {
182
- const status = check.success ? '✓' : '✗';
183
- const duration = `(${check.duration}ms)`;
184
- const attempts = check.attempts > 1 ? ` [${check.attempts} attempts]` : '';
185
- lines.push(` ${status} ${check.name} ${duration}${attempts}`);
186
- if (!check.success && check.error) {
187
- lines.push(` Error: ${check.error}`);
188
- }
189
- }
190
- if (results.returnTo) {
191
- lines.push(` → Returning to phase: ${results.returnTo}`);
192
- }
193
- return lines.join('\n');
138
+ export function allChecksPassed(results) {
139
+ return results.every(r => r.passed);
194
140
  }
195
141
  //# sourceMappingURL=checks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/commands/porch/checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Claude process management for Porch
3
+ *
4
+ * Spawns Claude with output to a file for monitoring.
5
+ */
6
+ export interface ClaudeProcess {
7
+ /**
8
+ * Kill the Claude process.
9
+ */
10
+ kill(): void;
11
+ /**
12
+ * Check if Claude is still running.
13
+ */
14
+ isRunning(): boolean;
15
+ /**
16
+ * Get the exit code (null if still running).
17
+ */
18
+ getExitCode(): number | null;
19
+ /**
20
+ * Register a callback for when Claude exits.
21
+ */
22
+ onExit(callback: (code: number) => void): void;
23
+ }
24
+ /**
25
+ * Spawn Claude with the given prompt.
26
+ * Output goes to the specified file.
27
+ */
28
+ export declare function spawnClaude(prompt: string, outputPath: string, cwd: string): ClaudeProcess;
29
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/claude.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC;IAErB;;OAEG;IACH,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAE7B;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;CAChD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,aAAa,CA2Ef"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Claude process management for Porch
3
+ *
4
+ * Spawns Claude with output to a file for monitoring.
5
+ */
6
+ import { spawn } from 'node:child_process';
7
+ import * as fs from 'node:fs';
8
+ /**
9
+ * Spawn Claude with the given prompt.
10
+ * Output goes to the specified file.
11
+ */
12
+ export function spawnClaude(prompt, outputPath, cwd) {
13
+ // Open file for writing
14
+ const outputFd = fs.openSync(outputPath, 'w');
15
+ // Save prompt to file for reference
16
+ const promptFile = outputPath.replace(/\.txt$/, '-prompt.txt');
17
+ fs.writeFileSync(promptFile, prompt);
18
+ // Spawn Claude with prompt as command-line argument
19
+ // Node's spawn handles escaping correctly for long prompts
20
+ // Using --dangerously-skip-permissions so Claude can write files without prompts
21
+ const proc = spawn('claude', [
22
+ '--dangerously-skip-permissions',
23
+ '-p',
24
+ prompt, // Pass prompt directly as argument
25
+ ], {
26
+ cwd,
27
+ stdio: ['ignore', outputFd, outputFd],
28
+ env: {
29
+ ...process.env,
30
+ // Ensure Claude doesn't try to use interactive features
31
+ CI: '1',
32
+ },
33
+ });
34
+ let exitCode = null;
35
+ let running = true;
36
+ const exitCallbacks = [];
37
+ proc.on('close', (code) => {
38
+ exitCode = code ?? 1;
39
+ running = false;
40
+ fs.closeSync(outputFd);
41
+ for (const callback of exitCallbacks) {
42
+ callback(exitCode);
43
+ }
44
+ });
45
+ proc.on('error', (err) => {
46
+ console.error('Claude spawn error:', err.message);
47
+ running = false;
48
+ fs.closeSync(outputFd);
49
+ });
50
+ return {
51
+ kill() {
52
+ if (running) {
53
+ proc.kill('SIGTERM');
54
+ // Give it a moment, then force kill if needed
55
+ setTimeout(() => {
56
+ if (running) {
57
+ proc.kill('SIGKILL');
58
+ }
59
+ }, 3000);
60
+ }
61
+ },
62
+ isRunning() {
63
+ return running;
64
+ },
65
+ getExitCode() {
66
+ return exitCode;
67
+ },
68
+ onExit(callback) {
69
+ if (!running && exitCode !== null) {
70
+ // Already exited, call immediately
71
+ callback(exitCode);
72
+ }
73
+ else {
74
+ exitCallbacks.push(callback);
75
+ }
76
+ },
77
+ };
78
+ }
79
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/commands/porch/claude.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAwB9B;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,UAAkB,EAClB,GAAW;IAEX,wBAAwB;IACxB,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAE9C,oCAAoC;IACpC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC/D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAErC,oDAAoD;IACpD,2DAA2D;IAC3D,iFAAiF;IACjF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;QAC3B,gCAAgC;QAChC,IAAI;QACJ,MAAM,EAAG,mCAAmC;KAC7C,EAAE;QACD,GAAG;QACH,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACrC,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,wDAAwD;YACxD,EAAE,EAAE,GAAG;SACR;KACF,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,MAAM,aAAa,GAAkC,EAAE,CAAC;IAExD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC;QACrB,OAAO,GAAG,KAAK,CAAC;QAChB,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEvB,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;YACrC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,GAAG,KAAK,CAAC;QAChB,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI;YACF,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrB,8CAA8C;gBAC9C,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,OAAO,EAAE,CAAC;wBACZ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QAED,SAAS;YACP,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,WAAW;YACT,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,QAAQ;YACb,IAAI,CAAC,OAAO,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAClC,mCAAmC;gBACnC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,60 +1,38 @@
1
1
  /**
2
2
  * Porch - Protocol Orchestrator
3
3
  *
4
- * Generic loop orchestrator that reads protocol definitions from JSON
5
- * and executes them with Claude. Implements the Ralph pattern: fresh
6
- * context per iteration with state persisted to files.
4
+ * Claude calls porch as a tool; porch returns prescriptive instructions.
5
+ * All commands produce clear, actionable output.
7
6
  */
8
- import type { Protocol, PorchRunOptions, PorchInitOptions } from './types.js';
9
7
  /**
10
- * List available protocols
11
- * Delegates to protocol-loader.ts for proper conversion
8
+ * porch status <id>
9
+ * Shows current state and prescriptive next steps.
12
10
  */
13
- export declare function listProtocols(projectRoot?: string): string[];
11
+ export declare function status(projectRoot: string, projectId: string): Promise<void>;
14
12
  /**
15
- * Load a protocol definition
16
- * Delegates to protocol-loader.ts which properly converts steps→substates
13
+ * porch check <id>
14
+ * Runs the phase checks and reports results.
17
15
  */
18
- export declare function loadProtocol(name: string, projectRoot?: string): Protocol;
16
+ export declare function check(projectRoot: string, projectId: string): Promise<void>;
19
17
  /**
20
- * Initialize a new project with a protocol
18
+ * porch done <id>
19
+ * Advances to next phase if checks pass. Refuses if checks fail.
21
20
  */
22
- export declare function init(protocolName: string, projectId: string, projectName: string, options?: PorchInitOptions): Promise<void>;
21
+ export declare function done(projectRoot: string, projectId: string): Promise<void>;
23
22
  /**
24
- * Run the protocol loop for a project
23
+ * porch gate <id>
24
+ * Requests human approval for current gate.
25
25
  */
26
- export declare function run(projectId: string, options?: PorchRunOptions): Promise<void>;
26
+ export declare function gate(projectRoot: string, projectId: string): Promise<void>;
27
27
  /**
28
- * Approve a gate
28
+ * porch approve <id> <gate> --a-human-explicitly-approved-this
29
+ * Human approves a gate. Requires explicit flag to prevent automated approvals.
29
30
  */
30
- export declare function approve(projectId: string, gateId: string): Promise<void>;
31
+ export declare function approve(projectRoot: string, projectId: string, gateName: string, hasHumanFlag: boolean): Promise<void>;
31
32
  /**
32
- * Show project status
33
+ * porch init <protocol> <id> <name>
34
+ * Initialize a new project.
33
35
  */
34
- export declare function status(projectId?: string): Promise<void>;
35
- /**
36
- * List available protocols
37
- */
38
- export declare function list(): Promise<void>;
39
- /**
40
- * Show protocol definition
41
- */
42
- export declare function show(protocolName: string): Promise<void>;
43
- /**
44
- * Show pending gates across all projects
45
- */
46
- export declare function pending(): Promise<void>;
47
- /**
48
- * Main porch entry point - handles subcommands
49
- */
50
- export interface PorchOptions {
51
- subcommand: string;
52
- args: string[];
53
- dryRun?: boolean;
54
- noClaude?: boolean;
55
- pollInterval?: number;
56
- description?: string;
57
- worktree?: string;
58
- }
59
- export declare function porch(options: PorchOptions): Promise<void>;
36
+ export declare function init(projectRoot: string, protocolName: string, projectId: string, projectName: string): Promise<void>;
37
+ export declare function cli(args: string[]): Promise<void>;
60
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EACV,QAAQ,EAGR,eAAe,EACf,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA+CpB;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAG5D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,CASzE;AA8MD;;GAEG;AACH,wBAAsB,IAAI,CACxB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAiBf;AAgFD;;GAEG;AACH,wBAAsB,GAAG,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAwUf;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9E;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6E9D;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB1C;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9D;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAe7C;AAyDD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyDH;;;GAGG;AACH,wBAAsB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FlF;AAED;;;GAGG;AACH,wBAAsB,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCjF;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGhF;AAiED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDhF;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC,CA2Df;AAED;;;GAGG;AACH,wBAAsB,IAAI,CACxB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAkBf;AA2DD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEvD"}