@cluesmith/codev 2.0.0-rc.7 → 2.0.0-rc.9

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 (126) hide show
  1. package/bin/porch.js +6 -35
  2. package/dist/agent-farm/cli.d.ts.map +1 -1
  3. package/dist/agent-farm/cli.js +0 -14
  4. package/dist/agent-farm/cli.js.map +1 -1
  5. package/dist/agent-farm/commands/kickoff.d.ts.map +1 -1
  6. package/dist/agent-farm/commands/kickoff.js +22 -86
  7. package/dist/agent-farm/commands/kickoff.js.map +1 -1
  8. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  9. package/dist/agent-farm/commands/spawn.js +30 -54
  10. package/dist/agent-farm/commands/spawn.js.map +1 -1
  11. package/dist/agent-farm/commands/start.d.ts.map +1 -1
  12. package/dist/agent-farm/commands/start.js +8 -50
  13. package/dist/agent-farm/commands/start.js.map +1 -1
  14. package/dist/agent-farm/servers/dashboard-server.js +0 -14
  15. package/dist/agent-farm/servers/dashboard-server.js.map +1 -1
  16. package/dist/agent-farm/state.d.ts +0 -10
  17. package/dist/agent-farm/state.d.ts.map +1 -1
  18. package/dist/agent-farm/state.js +0 -24
  19. package/dist/agent-farm/state.js.map +1 -1
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +5 -17
  22. package/dist/cli.js.map +1 -1
  23. package/dist/commands/adopt.d.ts.map +1 -1
  24. package/dist/commands/adopt.js +17 -1
  25. package/dist/commands/adopt.js.map +1 -1
  26. package/dist/commands/consult/index.d.ts.map +1 -1
  27. package/dist/commands/consult/index.js +2 -1
  28. package/dist/commands/consult/index.js.map +1 -1
  29. package/dist/commands/init.d.ts.map +1 -1
  30. package/dist/commands/init.js +17 -1
  31. package/dist/commands/init.js.map +1 -1
  32. package/dist/commands/porch/checks.d.ts +16 -29
  33. package/dist/commands/porch/checks.d.ts.map +1 -1
  34. package/dist/commands/porch/checks.js +90 -144
  35. package/dist/commands/porch/checks.js.map +1 -1
  36. package/dist/commands/porch/claude.d.ts +29 -0
  37. package/dist/commands/porch/claude.d.ts.map +1 -0
  38. package/dist/commands/porch/claude.js +79 -0
  39. package/dist/commands/porch/claude.js.map +1 -0
  40. package/dist/commands/porch/index.d.ts +21 -43
  41. package/dist/commands/porch/index.d.ts.map +1 -1
  42. package/dist/commands/porch/index.js +429 -1121
  43. package/dist/commands/porch/index.js.map +1 -1
  44. package/dist/commands/porch/plan.d.ts +60 -0
  45. package/dist/commands/porch/plan.d.ts.map +1 -0
  46. package/dist/commands/porch/plan.js +162 -0
  47. package/dist/commands/porch/plan.js.map +1 -0
  48. package/dist/commands/porch/prompts.d.ts +19 -0
  49. package/dist/commands/porch/prompts.d.ts.map +1 -0
  50. package/dist/commands/porch/prompts.js +259 -0
  51. package/dist/commands/porch/prompts.js.map +1 -0
  52. package/dist/commands/porch/protocol-loader.d.ts.map +1 -1
  53. package/dist/commands/porch/protocol-loader.js +9 -0
  54. package/dist/commands/porch/protocol-loader.js.map +1 -1
  55. package/dist/commands/porch/protocol.d.ts +57 -0
  56. package/dist/commands/porch/protocol.d.ts.map +1 -0
  57. package/dist/commands/porch/protocol.js +250 -0
  58. package/dist/commands/porch/protocol.js.map +1 -0
  59. package/dist/commands/porch/repl.d.ts +33 -0
  60. package/dist/commands/porch/repl.d.ts.map +1 -0
  61. package/dist/commands/porch/repl.js +206 -0
  62. package/dist/commands/porch/repl.js.map +1 -0
  63. package/dist/commands/porch/run.d.ts +15 -0
  64. package/dist/commands/porch/run.d.ts.map +1 -0
  65. package/dist/commands/porch/run.js +551 -0
  66. package/dist/commands/porch/run.js.map +1 -0
  67. package/dist/commands/porch/signal-parser.d.ts +17 -3
  68. package/dist/commands/porch/signal-parser.d.ts.map +1 -1
  69. package/dist/commands/porch/signal-parser.js +71 -20
  70. package/dist/commands/porch/signal-parser.js.map +1 -1
  71. package/dist/commands/porch/signals.d.ts +35 -0
  72. package/dist/commands/porch/signals.d.ts.map +1 -0
  73. package/dist/commands/porch/signals.js +76 -0
  74. package/dist/commands/porch/signals.js.map +1 -0
  75. package/dist/commands/porch/state.d.ts +16 -114
  76. package/dist/commands/porch/state.d.ts.map +1 -1
  77. package/dist/commands/porch/state.js +62 -709
  78. package/dist/commands/porch/state.js.map +1 -1
  79. package/dist/commands/porch/types.d.ts +65 -173
  80. package/dist/commands/porch/types.d.ts.map +1 -1
  81. package/dist/commands/porch/types.js +2 -1
  82. package/dist/commands/porch/types.js.map +1 -1
  83. package/dist/commands/porch2/checks.d.ts +29 -0
  84. package/dist/commands/porch2/checks.d.ts.map +1 -0
  85. package/dist/commands/porch2/checks.js +141 -0
  86. package/dist/commands/porch2/checks.js.map +1 -0
  87. package/dist/commands/porch2/index.d.ts +38 -0
  88. package/dist/commands/porch2/index.d.ts.map +1 -0
  89. package/dist/commands/porch2/index.js +483 -0
  90. package/dist/commands/porch2/index.js.map +1 -0
  91. package/dist/commands/porch2/plan.d.ts +70 -0
  92. package/dist/commands/porch2/plan.d.ts.map +1 -0
  93. package/dist/commands/porch2/plan.js +227 -0
  94. package/dist/commands/porch2/plan.js.map +1 -0
  95. package/dist/commands/porch2/protocol.d.ts +37 -0
  96. package/dist/commands/porch2/protocol.d.ts.map +1 -0
  97. package/dist/commands/porch2/protocol.js +183 -0
  98. package/dist/commands/porch2/protocol.js.map +1 -0
  99. package/dist/commands/porch2/state.d.ts +35 -0
  100. package/dist/commands/porch2/state.d.ts.map +1 -0
  101. package/dist/commands/porch2/state.js +124 -0
  102. package/dist/commands/porch2/state.js.map +1 -0
  103. package/dist/commands/porch2/types.d.ts +79 -0
  104. package/dist/commands/porch2/types.d.ts.map +1 -0
  105. package/dist/commands/porch2/types.js +8 -0
  106. package/dist/commands/porch2/types.js.map +1 -0
  107. package/dist/commands/update.d.ts.map +1 -1
  108. package/dist/commands/update.js +19 -0
  109. package/dist/commands/update.js.map +1 -1
  110. package/dist/lib/scaffold.d.ts +24 -0
  111. package/dist/lib/scaffold.d.ts.map +1 -1
  112. package/dist/lib/scaffold.js +78 -0
  113. package/dist/lib/scaffold.js.map +1 -1
  114. package/package.json +3 -1
  115. package/skeleton/protocols/spider/prompts/specify.md +9 -2
  116. package/skeleton/protocols/spider/protocol.json +79 -153
  117. package/skeleton/protocols/spider/templates/plan.md +14 -0
  118. package/skeleton/roles/architect.md +40 -48
  119. package/skeleton/roles/builder.md +152 -29
  120. package/templates/dashboard/index.html +0 -27
  121. package/templates/dashboard/js/utils.js +0 -86
  122. package/skeleton/porch/protocols/bugfix.json +0 -85
  123. package/skeleton/porch/protocols/spider.json +0 -135
  124. package/skeleton/porch/protocols/tick.json +0 -76
  125. package/templates/dashboard/css/activity.css +0 -151
  126. package/templates/dashboard/js/activity.js +0 -112
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Porch REPL - Interactive command loop while Claude runs
3
+ *
4
+ * Commands:
5
+ * t / tail - Tail Claude's output file
6
+ * c / claude - Kill current Claude and invoke manually (interactive)
7
+ * a / approve - Approve current gate
8
+ * s / status - Show current status
9
+ * q / quit - Kill Claude and exit
10
+ * Enter - Refresh status display
11
+ */
12
+ import { type Signal } from './signals.js';
13
+ import type { ClaudeProcess } from './claude.js';
14
+ import type { ProjectState, Protocol } from './types.js';
15
+ export type ReplAction = {
16
+ type: 'quit';
17
+ } | {
18
+ type: 'signal';
19
+ signal: Signal;
20
+ } | {
21
+ type: 'claude_exit';
22
+ exitCode: number;
23
+ } | {
24
+ type: 'approved';
25
+ } | {
26
+ type: 'manual_claude';
27
+ };
28
+ /**
29
+ * Run the REPL while Claude is working.
30
+ * Returns when Claude exits, a signal is detected, or user quits.
31
+ */
32
+ export declare function runRepl(state: ProjectState, claude: ClaudeProcess, outputPath: string, statusPath: string, projectRoot: string, protocol: Protocol): Promise<ReplAction>;
33
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/repl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAE9B;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,UAAU,CAAC,CAmIrB"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Porch REPL - Interactive command loop while Claude runs
3
+ *
4
+ * Commands:
5
+ * t / tail - Tail Claude's output file
6
+ * c / claude - Kill current Claude and invoke manually (interactive)
7
+ * a / approve - Approve current gate
8
+ * s / status - Show current status
9
+ * q / quit - Kill Claude and exit
10
+ * Enter - Refresh status display
11
+ */
12
+ import * as readline from 'node:readline';
13
+ import { spawn } from 'node:child_process';
14
+ import chalk from 'chalk';
15
+ import { writeState } from './state.js';
16
+ import { getPhaseConfig, isPhased, getPhaseGate } from './protocol.js';
17
+ import { getCurrentPlanPhase } from './plan.js';
18
+ import { watchForSignal } from './signals.js';
19
+ /**
20
+ * Run the REPL while Claude is working.
21
+ * Returns when Claude exits, a signal is detected, or user quits.
22
+ */
23
+ export async function runRepl(state, claude, outputPath, statusPath, projectRoot, protocol) {
24
+ const startTime = Date.now();
25
+ // Start watching for signals
26
+ const signalWatcher = watchForSignal(outputPath);
27
+ // Set up readline for user input
28
+ const rl = readline.createInterface({
29
+ input: process.stdin,
30
+ output: process.stdout,
31
+ });
32
+ // Track tail process if running
33
+ let tailProcess = null;
34
+ return new Promise((resolve) => {
35
+ let resolved = false;
36
+ const cleanup = () => {
37
+ if (resolved)
38
+ return;
39
+ resolved = true;
40
+ signalWatcher.stop();
41
+ rl.close();
42
+ if (tailProcess) {
43
+ tailProcess.kill();
44
+ tailProcess = null;
45
+ }
46
+ };
47
+ // Check for signals periodically
48
+ const signalInterval = setInterval(async () => {
49
+ const signal = await signalWatcher.check();
50
+ if (signal) {
51
+ cleanup();
52
+ resolve({ type: 'signal', signal });
53
+ }
54
+ }, 1000);
55
+ // Handle Claude exit
56
+ claude.onExit((code) => {
57
+ clearInterval(signalInterval);
58
+ cleanup();
59
+ resolve({ type: 'claude_exit', exitCode: code });
60
+ });
61
+ // Show initial prompt
62
+ showPrompt(state, startTime, claude);
63
+ // Handle user input
64
+ rl.on('line', async (input) => {
65
+ const cmd = input.trim().toLowerCase();
66
+ // Stop tail if running
67
+ if (tailProcess) {
68
+ tailProcess.kill();
69
+ tailProcess = null;
70
+ }
71
+ switch (cmd) {
72
+ case '':
73
+ // Refresh status
74
+ showStatus(state, protocol, startTime, claude);
75
+ showPrompt(state, startTime, claude);
76
+ break;
77
+ case 't':
78
+ case 'tail':
79
+ console.log(chalk.dim('\nTailing Claude output (Ctrl+C to stop)...\n'));
80
+ tailProcess = spawn('tail', ['-f', outputPath], {
81
+ stdio: 'inherit',
82
+ });
83
+ tailProcess.on('close', () => {
84
+ tailProcess = null;
85
+ showPrompt(state, startTime, claude);
86
+ });
87
+ break;
88
+ case 'c':
89
+ case 'claude':
90
+ // Kill current Claude and return to spawn manually
91
+ console.log(chalk.yellow('\nKilling current Claude session...'));
92
+ claude.kill();
93
+ console.log(chalk.cyan('Returning to porch. Claude will be respawned.'));
94
+ console.log(chalk.dim('Use this to intervene manually or adjust approach.'));
95
+ clearInterval(signalInterval);
96
+ cleanup();
97
+ resolve({ type: 'manual_claude' });
98
+ break;
99
+ case 'a':
100
+ case 'approve':
101
+ const gateName = getPhaseGate(protocol, state.phase);
102
+ if (gateName && state.gates[gateName]?.status === 'pending') {
103
+ state.gates[gateName].status = 'approved';
104
+ state.gates[gateName].approved_at = new Date().toISOString();
105
+ writeState(statusPath, state);
106
+ console.log(chalk.green(`\nGate ${gateName} approved.`));
107
+ clearInterval(signalInterval);
108
+ cleanup();
109
+ resolve({ type: 'approved' });
110
+ }
111
+ else {
112
+ console.log(chalk.dim('\nNo gate pending approval.'));
113
+ showPrompt(state, startTime, claude);
114
+ }
115
+ break;
116
+ case 's':
117
+ case 'status':
118
+ showStatus(state, protocol, startTime, claude);
119
+ showPrompt(state, startTime, claude);
120
+ break;
121
+ case 'q':
122
+ case 'quit':
123
+ clearInterval(signalInterval);
124
+ cleanup();
125
+ resolve({ type: 'quit' });
126
+ break;
127
+ case 'help':
128
+ case '?':
129
+ showHelp();
130
+ showPrompt(state, startTime, claude);
131
+ break;
132
+ default:
133
+ console.log(chalk.dim(`Unknown command: ${cmd}. Type 'help' for commands.`));
134
+ showPrompt(state, startTime, claude);
135
+ }
136
+ });
137
+ });
138
+ }
139
+ /**
140
+ * Show the REPL prompt with status.
141
+ */
142
+ function showPrompt(state, startTime, claude) {
143
+ const elapsed = formatElapsed(Date.now() - startTime);
144
+ const status = claude.isRunning() ? chalk.green('running') : chalk.red('exited');
145
+ process.stdout.write(chalk.cyan(`[${state.id}] claude: ${status} (${elapsed}) > `));
146
+ }
147
+ /**
148
+ * Show detailed status.
149
+ */
150
+ function showStatus(state, protocol, startTime, claude) {
151
+ const phaseConfig = getPhaseConfig(protocol, state.phase);
152
+ const elapsed = formatElapsed(Date.now() - startTime);
153
+ console.log('');
154
+ console.log(chalk.bold('─'.repeat(50)));
155
+ console.log(` Project: ${state.id} - ${state.title}`);
156
+ console.log(` Protocol: ${state.protocol}`);
157
+ console.log(` Phase: ${state.phase} (${phaseConfig?.name || 'unknown'})`);
158
+ if (isPhased(protocol, state.phase) && state.plan_phases.length > 0) {
159
+ const currentPlanPhase = getCurrentPlanPhase(state.plan_phases);
160
+ if (currentPlanPhase) {
161
+ console.log(` Plan Phase: ${currentPlanPhase.id} - ${currentPlanPhase.title}`);
162
+ }
163
+ }
164
+ const gateName = getPhaseGate(protocol, state.phase);
165
+ if (gateName) {
166
+ const gateStatus = state.gates[gateName]?.status || 'pending';
167
+ const icon = gateStatus === 'approved' ? chalk.green('✓') : chalk.yellow('○');
168
+ console.log(` Gate: ${gateName} ${icon}`);
169
+ }
170
+ console.log(` Claude: ${claude.isRunning() ? 'running' : 'exited'} (${elapsed})`);
171
+ console.log(chalk.bold('─'.repeat(50)));
172
+ console.log('');
173
+ }
174
+ /**
175
+ * Show help text.
176
+ */
177
+ function showHelp() {
178
+ console.log('');
179
+ console.log(chalk.bold('Commands:'));
180
+ console.log(' t / tail - Tail Claude output');
181
+ console.log(' c / claude - Kill Claude and respawn (for manual intervention)');
182
+ console.log(' a / approve - Approve pending gate');
183
+ console.log(' s / status - Show detailed status');
184
+ console.log(' q / quit - Kill Claude and exit porch');
185
+ console.log(' Enter - Refresh prompt');
186
+ console.log(' help / ? - Show this help');
187
+ console.log('');
188
+ }
189
+ /**
190
+ * Format elapsed time.
191
+ */
192
+ function formatElapsed(ms) {
193
+ const seconds = Math.floor(ms / 1000);
194
+ const minutes = Math.floor(seconds / 60);
195
+ const hours = Math.floor(minutes / 60);
196
+ if (hours > 0) {
197
+ return `${hours}h ${minutes % 60}m`;
198
+ }
199
+ else if (minutes > 0) {
200
+ return `${minutes}m ${seconds % 60}s`;
201
+ }
202
+ else {
203
+ return `${seconds}s`;
204
+ }
205
+ }
206
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../../src/commands/porch/repl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * porch run - Main run loop (Build-Verify design)
3
+ *
4
+ * Porch orchestrates build-verify cycles:
5
+ * 1. BUILD: Spawn Claude to create artifact
6
+ * 2. VERIFY: Run 3-way consultation (Gemini, Codex, Claude)
7
+ * 3. ITERATE: If any REQUEST_CHANGES, feed back to Claude
8
+ * 4. COMPLETE: When all APPROVE (or max iterations), commit + push + gate
9
+ */
10
+ /**
11
+ * Main run loop for porch.
12
+ * Spawns Claude for each phase and monitors until protocol complete.
13
+ */
14
+ export declare function run(projectRoot: string, projectId: string): Promise<void>;
15
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwCH;;;GAGG;AACH,wBAAsB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6M/E"}