@cluesmith/codev 2.0.0-rc.2 → 2.0.0-rc.4
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/dist/agent-farm/commands/kickoff.d.ts.map +1 -1
- package/dist/agent-farm/commands/kickoff.js +86 -24
- package/dist/agent-farm/commands/kickoff.js.map +1 -1
- package/dist/commands/porch/index.d.ts +1 -1
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +194 -18
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/state.d.ts.map +1 -1
- package/dist/commands/porch/state.js +14 -0
- package/dist/commands/porch/state.js.map +1 -1
- package/package.json +1 -1
- package/skeleton/protocols/spider/prompts/defend.md +215 -0
- package/skeleton/protocols/spider/prompts/evaluate.md +241 -0
- package/skeleton/protocols/spider/prompts/implement.md +149 -0
- package/skeleton/protocols/spider/prompts/plan.md +214 -0
- package/skeleton/protocols/spider/prompts/review.md +217 -0
- package/skeleton/protocols/spider/prompts/specify.md +167 -0
- package/skeleton/protocols/spider/protocol.json +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kickoff.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/kickoff.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"kickoff.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/kickoff.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAqKD;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6MpE"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 3. Starting the porch loop in the builder
|
|
8
8
|
*/
|
|
9
9
|
import { resolve, basename } from 'node:path';
|
|
10
|
-
import { existsSync, writeFileSync, chmodSync, symlinkSync } from 'node:fs';
|
|
10
|
+
import { existsSync, readFileSync, writeFileSync, chmodSync, symlinkSync } from 'node:fs';
|
|
11
11
|
import { readdir } from 'node:fs/promises';
|
|
12
12
|
import { getConfig, ensureDirectories, getResolvedCommands } from '../utils/index.js';
|
|
13
13
|
import { logger, fatal } from '../utils/logger.js';
|
|
@@ -63,6 +63,36 @@ async function findSpecFile(codevDir, projectId) {
|
|
|
63
63
|
}
|
|
64
64
|
return null;
|
|
65
65
|
}
|
|
66
|
+
async function findPorchState(codevDir, projectId) {
|
|
67
|
+
const projectsDir = resolve(codevDir, 'projects');
|
|
68
|
+
if (!existsSync(projectsDir)) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
const dirs = await readdir(projectsDir);
|
|
72
|
+
for (const dir of dirs) {
|
|
73
|
+
if (dir.startsWith(`${projectId}-`)) {
|
|
74
|
+
const statusPath = resolve(projectsDir, dir, 'status.yaml');
|
|
75
|
+
if (existsSync(statusPath)) {
|
|
76
|
+
const content = readFileSync(statusPath, 'utf-8');
|
|
77
|
+
// Simple YAML parsing for the fields we need
|
|
78
|
+
const idMatch = content.match(/^id:\s*"?([^"\n]+)"?/m);
|
|
79
|
+
const titleMatch = content.match(/^title:\s*"?([^"\n]+)"?/m);
|
|
80
|
+
const protocolMatch = content.match(/^protocol:\s*"?([^"\n]+)"?/m);
|
|
81
|
+
const stateMatch = content.match(/^state:\s*"?([^"\n]+)"?/m);
|
|
82
|
+
if (idMatch && titleMatch) {
|
|
83
|
+
return {
|
|
84
|
+
id: idMatch[1],
|
|
85
|
+
title: titleMatch[1],
|
|
86
|
+
protocol: protocolMatch?.[1] || 'spider',
|
|
87
|
+
state: stateMatch?.[1] || 'unknown',
|
|
88
|
+
statusPath,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
66
96
|
/**
|
|
67
97
|
* Create git branch and worktree
|
|
68
98
|
*/
|
|
@@ -123,30 +153,45 @@ async function getPorchCommand() {
|
|
|
123
153
|
export async function kickoff(options) {
|
|
124
154
|
const { project: projectId, protocol: protocolName = 'spider', noRole, resume } = options;
|
|
125
155
|
const config = getConfig();
|
|
126
|
-
// Find spec file
|
|
156
|
+
// Find spec file OR porch state
|
|
127
157
|
const specFile = await findSpecFile(config.codevDir, projectId);
|
|
128
|
-
|
|
129
|
-
|
|
158
|
+
const porchState = await findPorchState(config.codevDir, projectId);
|
|
159
|
+
// Need either a spec or porch state to proceed
|
|
160
|
+
if (!specFile && !porchState) {
|
|
161
|
+
fatal(`No spec or porch state found for project: ${projectId}\n` +
|
|
162
|
+
`Either create a spec file (codev/specs/${projectId}-*.md) or initialize porch:\n` +
|
|
163
|
+
` porch init ${protocolName} ${projectId} <project-name>`);
|
|
130
164
|
}
|
|
131
|
-
|
|
165
|
+
// Derive names from spec or porch state
|
|
166
|
+
const specName = specFile ? basename(specFile, '.md') : `${projectId}-${porchState.title}`;
|
|
132
167
|
const builderId = projectId;
|
|
133
|
-
const safeName =
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const
|
|
168
|
+
const safeName = specFile
|
|
169
|
+
? specName.toLowerCase().replace(/[^a-z0-9_-]/g, '-').replace(/-+/g, '-')
|
|
170
|
+
: porchState.title.toLowerCase().replace(/[^a-z0-9_-]/g, '-').replace(/-+/g, '-');
|
|
171
|
+
const actualProtocol = porchState?.protocol || protocolName;
|
|
172
|
+
// Use worktrees/ directory with protocol-prefixed naming per spec 0073
|
|
173
|
+
const worktreesDir = resolve(config.projectRoot, 'worktrees');
|
|
174
|
+
const worktreeName = `${actualProtocol.toLowerCase()}_${projectId}_${safeName}`;
|
|
175
|
+
const branchName = `builder/${projectId}-${safeName}`;
|
|
176
|
+
const worktreePath = resolve(worktreesDir, worktreeName);
|
|
177
|
+
// Check for plan file (only if spec exists)
|
|
178
|
+
const planFile = specFile ? resolve(config.codevDir, 'plans', `${basename(specFile, '.md')}.md`) : null;
|
|
179
|
+
const hasPlan = planFile ? existsSync(planFile) : false;
|
|
139
180
|
// Check if porch state already exists
|
|
140
|
-
const
|
|
141
|
-
const hasExistingState = existsSync(porchStatusPath);
|
|
181
|
+
const hasExistingState = !!porchState;
|
|
142
182
|
logger.header(`Kickoff Builder ${builderId}`);
|
|
143
|
-
logger.kv('Spec', specFile);
|
|
144
|
-
logger.kv('Protocol', protocolName.toUpperCase());
|
|
183
|
+
logger.kv('Spec', specFile || '(to be created)');
|
|
184
|
+
logger.kv('Protocol', (porchState?.protocol || protocolName).toUpperCase());
|
|
145
185
|
logger.kv('Branch', branchName);
|
|
146
186
|
logger.kv('Worktree', worktreePath);
|
|
147
187
|
logger.kv('Porch State', hasExistingState ? 'exists (resume)' : 'new');
|
|
148
188
|
await ensureDirectories(config);
|
|
149
189
|
await checkDependencies();
|
|
190
|
+
// Ensure worktrees directory exists
|
|
191
|
+
if (!existsSync(worktreesDir)) {
|
|
192
|
+
const { mkdir } = await import('node:fs/promises');
|
|
193
|
+
await mkdir(worktreesDir, { recursive: true });
|
|
194
|
+
}
|
|
150
195
|
// Check if worktree already exists
|
|
151
196
|
if (existsSync(worktreePath)) {
|
|
152
197
|
if (resume) {
|
|
@@ -175,25 +220,42 @@ export async function kickoff(options) {
|
|
|
175
220
|
}
|
|
176
221
|
}
|
|
177
222
|
// Build the prompt
|
|
178
|
-
const specRelPath = `codev/specs/${
|
|
179
|
-
const planRelPath = `codev/plans/${
|
|
180
|
-
const protocolPath = `codev/protocols/${
|
|
223
|
+
const specRelPath = specFile ? `codev/specs/${basename(specFile)}` : `codev/specs/${projectId}-${safeName}.md`;
|
|
224
|
+
const planRelPath = `codev/plans/${projectId}-${safeName}.md`;
|
|
225
|
+
const protocolPath = `codev/protocols/${actualProtocol.toLowerCase()}/protocol.md`;
|
|
181
226
|
let initialPrompt = `## Protocol
|
|
182
|
-
Follow the ${
|
|
227
|
+
Follow the ${actualProtocol.toUpperCase()} protocol STRICTLY: ${protocolPath}
|
|
183
228
|
Read and internalize the protocol before starting any work.
|
|
184
229
|
|
|
185
230
|
## Porch Orchestration
|
|
186
231
|
This builder is orchestrated by Porch. Check your current state with:
|
|
187
232
|
porch status ${projectId}
|
|
188
233
|
|
|
189
|
-
|
|
234
|
+
Current porch state: ${porchState?.state || 'initializing'}
|
|
235
|
+
|
|
236
|
+
## Task`;
|
|
237
|
+
if (specFile) {
|
|
238
|
+
initialPrompt += `
|
|
190
239
|
Implement the feature specified in ${specRelPath}.`;
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
240
|
+
if (hasPlan) {
|
|
241
|
+
initialPrompt += ` Follow the implementation plan in ${planRelPath}.`;
|
|
242
|
+
}
|
|
243
|
+
initialPrompt += `
|
|
195
244
|
|
|
196
245
|
Start by reading the protocol, spec${hasPlan ? ', and plan' : ''}, then begin implementation.`;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// No spec yet - builder starts from specify phase
|
|
249
|
+
initialPrompt += `
|
|
250
|
+
Project: ${porchState?.title || safeName}
|
|
251
|
+
|
|
252
|
+
You are starting from the SPECIFY phase. Your first task is to:
|
|
253
|
+
1. Read the protocol (${protocolPath})
|
|
254
|
+
2. Understand what "${porchState?.title || safeName}" means
|
|
255
|
+
3. Create the specification file at ${specRelPath}
|
|
256
|
+
|
|
257
|
+
The porch orchestrator will guide you through each phase. Follow the signals it expects.`;
|
|
258
|
+
}
|
|
197
259
|
const builderPrompt = `You are a Builder. Read codev/roles/builder.md for your full role definition.
|
|
198
260
|
|
|
199
261
|
${initialPrompt}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kickoff.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/kickoff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kickoff.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/kickoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ export declare function loadProtocol(name: string, projectRoot?: string): Protoc
|
|
|
21
21
|
*/
|
|
22
22
|
export declare function init(protocolName: string, projectId: string, projectName: string, options?: PorchInitOptions): Promise<void>;
|
|
23
23
|
/**
|
|
24
|
-
* Run the protocol loop for a project
|
|
24
|
+
* Run the protocol loop for a project (Interactive REPL mode)
|
|
25
25
|
*/
|
|
26
26
|
export declare function run(projectId: string, options?: PorchRunOptions): Promise<void>;
|
|
27
27
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,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;AAgJD;;GAEG;AACH,wBAAsB,GAAG,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAocf;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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import * as fs from 'node:fs';
|
|
9
9
|
import * as path from 'node:path';
|
|
10
|
+
import * as readline from 'node:readline';
|
|
10
11
|
import { spawn } from 'node:child_process';
|
|
11
12
|
import chalk from 'chalk';
|
|
12
13
|
import { findProjectRoot, getSkeletonDir } from '../../lib/skeleton.js';
|
|
@@ -286,8 +287,65 @@ function getNextIDEState(protocol, currentState, planPhases, signal) {
|
|
|
286
287
|
}
|
|
287
288
|
return 'complete';
|
|
288
289
|
}
|
|
290
|
+
// ============================================================================
|
|
291
|
+
// Interactive REPL
|
|
292
|
+
// ============================================================================
|
|
293
|
+
/**
|
|
294
|
+
* Create a readline interface for interactive input
|
|
295
|
+
*/
|
|
296
|
+
function createRepl() {
|
|
297
|
+
return readline.createInterface({
|
|
298
|
+
input: process.stdin,
|
|
299
|
+
output: process.stdout,
|
|
300
|
+
terminal: true,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Prompt user for input with a given message
|
|
305
|
+
*/
|
|
306
|
+
async function prompt(rl, message) {
|
|
307
|
+
return new Promise((resolve) => {
|
|
308
|
+
rl.question(message, (answer) => {
|
|
309
|
+
resolve(answer.trim().toLowerCase());
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Show REPL help
|
|
315
|
+
*/
|
|
316
|
+
function showReplHelp() {
|
|
317
|
+
console.log('');
|
|
318
|
+
console.log(chalk.blue('Porch REPL Commands:'));
|
|
319
|
+
console.log(' ' + chalk.green('approve') + ' [gate] - Approve pending gate (or current if omitted)');
|
|
320
|
+
console.log(' ' + chalk.green('status') + ' - Show current project status');
|
|
321
|
+
console.log(' ' + chalk.green('continue') + ' - Continue to next iteration');
|
|
322
|
+
console.log(' ' + chalk.green('skip') + ' - Skip current phase (use with caution)');
|
|
323
|
+
console.log(' ' + chalk.green('help') + ' - Show this help');
|
|
324
|
+
console.log(' ' + chalk.green('quit') + ' - Exit porch');
|
|
325
|
+
console.log('');
|
|
326
|
+
}
|
|
289
327
|
/**
|
|
290
|
-
*
|
|
328
|
+
* Display current status summary
|
|
329
|
+
*/
|
|
330
|
+
function displayStatus(state, protocol) {
|
|
331
|
+
console.log('');
|
|
332
|
+
console.log(chalk.blue('─'.repeat(50)));
|
|
333
|
+
console.log(chalk.blue(`Project: ${state.id} - ${state.title}`));
|
|
334
|
+
console.log(chalk.blue(`Protocol: ${state.protocol}`));
|
|
335
|
+
console.log(chalk.blue(`State: ${state.current_state}`));
|
|
336
|
+
console.log(chalk.blue(`Iteration: ${state.iteration}`));
|
|
337
|
+
// Show pending gates
|
|
338
|
+
const pendingGates = Object.entries(state.gates)
|
|
339
|
+
.filter(([, g]) => g.status === 'pending' && g.requested_at)
|
|
340
|
+
.map(([id]) => id);
|
|
341
|
+
if (pendingGates.length > 0) {
|
|
342
|
+
console.log(chalk.yellow(`Pending gates: ${pendingGates.join(', ')}`));
|
|
343
|
+
}
|
|
344
|
+
console.log(chalk.blue('─'.repeat(50)));
|
|
345
|
+
console.log('');
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Run the protocol loop for a project (Interactive REPL mode)
|
|
291
349
|
*/
|
|
292
350
|
export async function run(projectId, options = {}) {
|
|
293
351
|
const projectRoot = findProjectRoot();
|
|
@@ -303,13 +361,22 @@ export async function run(projectId, options = {}) {
|
|
|
303
361
|
throw new Error(`Could not read state from: ${statusFilePath}`);
|
|
304
362
|
}
|
|
305
363
|
const protocol = loadProtocol(state.protocol, projectRoot);
|
|
306
|
-
const pollInterval = options.pollInterval || protocol.config?.poll_interval || 30;
|
|
307
364
|
const maxIterations = protocol.config?.max_iterations || 100;
|
|
308
365
|
// Create notifier for this project (desktop notifications for important events)
|
|
309
366
|
const notifier = createNotifier(projectId, { desktop: true });
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
console.log(
|
|
367
|
+
// Create REPL interface
|
|
368
|
+
const rl = createRepl();
|
|
369
|
+
console.log('');
|
|
370
|
+
console.log(chalk.green('═'.repeat(50)));
|
|
371
|
+
console.log(chalk.green(` PORCH - Protocol Orchestrator`));
|
|
372
|
+
console.log(chalk.green('═'.repeat(50)));
|
|
373
|
+
console.log(chalk.blue(` Project: ${state.id} - ${state.title}`));
|
|
374
|
+
console.log(chalk.blue(` Protocol: ${state.protocol}`));
|
|
375
|
+
console.log(chalk.blue(` State: ${state.current_state}`));
|
|
376
|
+
console.log(chalk.green('═'.repeat(50)));
|
|
377
|
+
console.log('');
|
|
378
|
+
console.log(chalk.gray('Type "help" for commands, "quit" to exit'));
|
|
379
|
+
console.log('');
|
|
313
380
|
let currentState = state;
|
|
314
381
|
// Extract plan phases if not already done and we're past planning
|
|
315
382
|
if (!currentState.plan_phases || currentState.plan_phases.length === 0) {
|
|
@@ -366,6 +433,7 @@ export async function run(projectId, options = {}) {
|
|
|
366
433
|
console.log(chalk.green(`[porch] ${state.protocol} loop COMPLETE`));
|
|
367
434
|
console.log(chalk.green(`[porch] Project ${projectId} finished all phases`));
|
|
368
435
|
console.log(chalk.green('━'.repeat(40)));
|
|
436
|
+
rl.close();
|
|
369
437
|
return;
|
|
370
438
|
}
|
|
371
439
|
// Check if there's a pending gate from a previous iteration (step already executed)
|
|
@@ -395,11 +463,48 @@ export async function run(projectId, options = {}) {
|
|
|
395
463
|
}
|
|
396
464
|
}
|
|
397
465
|
else if (currentState.gates[gateId]?.requested_at) {
|
|
398
|
-
// Gate requested but not approved -
|
|
399
|
-
console.log(
|
|
400
|
-
console.log(chalk.yellow(
|
|
401
|
-
console.log(chalk.yellow(`
|
|
402
|
-
|
|
466
|
+
// Gate requested but not approved - prompt user interactively
|
|
467
|
+
console.log('');
|
|
468
|
+
console.log(chalk.yellow('═'.repeat(50)));
|
|
469
|
+
console.log(chalk.yellow(` GATE PENDING: ${gateId}`));
|
|
470
|
+
console.log(chalk.yellow('═'.repeat(50)));
|
|
471
|
+
console.log(chalk.cyan(` Phase: ${phaseId}`));
|
|
472
|
+
console.log(chalk.cyan(` State: ${currentState.current_state}`));
|
|
473
|
+
console.log('');
|
|
474
|
+
// Interactive gate approval loop
|
|
475
|
+
let gateHandled = false;
|
|
476
|
+
while (!gateHandled) {
|
|
477
|
+
const answer = await prompt(rl, chalk.yellow(`Approve ${gateId}? [y/n/help]: `));
|
|
478
|
+
switch (answer) {
|
|
479
|
+
case 'y':
|
|
480
|
+
case 'yes':
|
|
481
|
+
case 'approve':
|
|
482
|
+
currentState = approveGate(currentState, gateId);
|
|
483
|
+
await writeState(statusFilePath, currentState);
|
|
484
|
+
console.log(chalk.green(`✓ Gate ${gateId} approved`));
|
|
485
|
+
gateHandled = true;
|
|
486
|
+
break;
|
|
487
|
+
case 'n':
|
|
488
|
+
case 'no':
|
|
489
|
+
console.log(chalk.yellow('Gate not approved. Staying in current state.'));
|
|
490
|
+
console.log(chalk.gray('Type "quit" to exit or wait for changes.'));
|
|
491
|
+
break;
|
|
492
|
+
case 'status':
|
|
493
|
+
displayStatus(currentState, protocol);
|
|
494
|
+
break;
|
|
495
|
+
case 'help':
|
|
496
|
+
case '?':
|
|
497
|
+
showReplHelp();
|
|
498
|
+
break;
|
|
499
|
+
case 'quit':
|
|
500
|
+
case 'exit':
|
|
501
|
+
console.log(chalk.blue('Exiting porch...'));
|
|
502
|
+
rl.close();
|
|
503
|
+
return;
|
|
504
|
+
default:
|
|
505
|
+
console.log(chalk.gray('Type "y" to approve, "n" to decline, or "help" for commands'));
|
|
506
|
+
}
|
|
507
|
+
}
|
|
403
508
|
continue;
|
|
404
509
|
}
|
|
405
510
|
// If gate not yet requested, fall through to execute phase first
|
|
@@ -497,15 +602,53 @@ export async function run(projectId, options = {}) {
|
|
|
497
602
|
await writeState(statusFilePath, currentState);
|
|
498
603
|
await notifier.gatePending(phaseId, escalationGateId);
|
|
499
604
|
}
|
|
500
|
-
//
|
|
501
|
-
|
|
605
|
+
// Prompt user to approve escalation gate
|
|
606
|
+
console.log('');
|
|
607
|
+
console.log(chalk.red('═'.repeat(50)));
|
|
608
|
+
console.log(chalk.red(` ESCALATION: ${escalationGateId}`));
|
|
609
|
+
console.log(chalk.red('═'.repeat(50)));
|
|
610
|
+
console.log(chalk.yellow(` Consultation failed after ${attemptCount} attempts`));
|
|
611
|
+
console.log('');
|
|
612
|
+
let escalationHandled = false;
|
|
613
|
+
while (!escalationHandled) {
|
|
614
|
+
const answer = await prompt(rl, chalk.red(`Override and continue? [y/n/help]: `));
|
|
615
|
+
switch (answer) {
|
|
616
|
+
case 'y':
|
|
617
|
+
case 'yes':
|
|
618
|
+
case 'approve':
|
|
619
|
+
case 'override':
|
|
620
|
+
currentState = approveGate(currentState, escalationGateId);
|
|
621
|
+
currentState = resetConsultationAttempts(currentState, stateKey);
|
|
622
|
+
await writeState(statusFilePath, currentState);
|
|
623
|
+
console.log(chalk.green(`✓ Escalation gate ${escalationGateId} approved`));
|
|
624
|
+
escalationHandled = true;
|
|
625
|
+
break;
|
|
626
|
+
case 'n':
|
|
627
|
+
case 'no':
|
|
628
|
+
console.log(chalk.yellow('Escalation not approved. Consultation loop will continue.'));
|
|
629
|
+
break;
|
|
630
|
+
case 'status':
|
|
631
|
+
displayStatus(currentState, protocol);
|
|
632
|
+
break;
|
|
633
|
+
case 'help':
|
|
634
|
+
case '?':
|
|
635
|
+
showReplHelp();
|
|
636
|
+
break;
|
|
637
|
+
case 'quit':
|
|
638
|
+
case 'exit':
|
|
639
|
+
console.log(chalk.blue('Exiting porch...'));
|
|
640
|
+
rl.close();
|
|
641
|
+
return;
|
|
642
|
+
default:
|
|
643
|
+
console.log(chalk.gray('Type "y" to override and continue, "n" to decline, or "help" for commands'));
|
|
644
|
+
}
|
|
645
|
+
}
|
|
502
646
|
continue;
|
|
503
647
|
}
|
|
504
648
|
}
|
|
505
649
|
else {
|
|
506
650
|
console.log(chalk.yellow(`[porch] Consultation requested changes (attempt ${attemptCount}/${maxRounds}), continuing for revision`));
|
|
507
651
|
// Stay in same state for Claude to revise on next iteration
|
|
508
|
-
await new Promise(r => setTimeout(r, 2000));
|
|
509
652
|
continue;
|
|
510
653
|
}
|
|
511
654
|
}
|
|
@@ -539,11 +682,44 @@ export async function run(projectId, options = {}) {
|
|
|
539
682
|
console.log(chalk.yellow(`[porch] Step complete. Gate approval requested: ${gateId}`));
|
|
540
683
|
await notifier.gatePending(phaseId, gateId);
|
|
541
684
|
}
|
|
542
|
-
// Gate not yet approved -
|
|
685
|
+
// Gate not yet approved - prompt user interactively
|
|
543
686
|
if (currentState.gates[gateId]?.status !== 'passed') {
|
|
544
|
-
console.log(
|
|
545
|
-
console.log(chalk.yellow(
|
|
546
|
-
|
|
687
|
+
console.log('');
|
|
688
|
+
console.log(chalk.yellow('═'.repeat(50)));
|
|
689
|
+
console.log(chalk.yellow(` GATE PENDING: ${gateId}`));
|
|
690
|
+
console.log(chalk.yellow('═'.repeat(50)));
|
|
691
|
+
let gateHandled = false;
|
|
692
|
+
while (!gateHandled) {
|
|
693
|
+
const answer = await prompt(rl, chalk.yellow(`Approve ${gateId}? [y/n/help]: `));
|
|
694
|
+
switch (answer) {
|
|
695
|
+
case 'y':
|
|
696
|
+
case 'yes':
|
|
697
|
+
case 'approve':
|
|
698
|
+
currentState = approveGate(currentState, gateId);
|
|
699
|
+
await writeState(statusFilePath, currentState);
|
|
700
|
+
console.log(chalk.green(`✓ Gate ${gateId} approved`));
|
|
701
|
+
gateHandled = true;
|
|
702
|
+
break;
|
|
703
|
+
case 'n':
|
|
704
|
+
case 'no':
|
|
705
|
+
console.log(chalk.yellow('Gate not approved. Staying in current state.'));
|
|
706
|
+
break;
|
|
707
|
+
case 'status':
|
|
708
|
+
displayStatus(currentState, protocol);
|
|
709
|
+
break;
|
|
710
|
+
case 'help':
|
|
711
|
+
case '?':
|
|
712
|
+
showReplHelp();
|
|
713
|
+
break;
|
|
714
|
+
case 'quit':
|
|
715
|
+
case 'exit':
|
|
716
|
+
console.log(chalk.blue('Exiting porch...'));
|
|
717
|
+
rl.close();
|
|
718
|
+
return;
|
|
719
|
+
default:
|
|
720
|
+
console.log(chalk.gray('Type "y" to approve, "n" to decline, or "help" for commands'));
|
|
721
|
+
}
|
|
722
|
+
}
|
|
547
723
|
continue;
|
|
548
724
|
}
|
|
549
725
|
}
|
|
@@ -580,8 +756,8 @@ export async function run(projectId, options = {}) {
|
|
|
580
756
|
else {
|
|
581
757
|
console.log(chalk.yellow(`[porch] No transition defined, staying in current state`));
|
|
582
758
|
}
|
|
583
|
-
await new Promise(r => setTimeout(r, 2000));
|
|
584
759
|
}
|
|
760
|
+
rl.close();
|
|
585
761
|
throw new Error(`Max iterations (${maxIterations}) reached!`);
|
|
586
762
|
}
|
|
587
763
|
/**
|