create-claude-pipeline 0.4.1 → 0.4.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-claude-pipeline",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "Claude Code 파이프라인 시스템을 프로젝트에 설치하고 대시보드를 실행합니다",
5
5
  "bin": {
6
6
  "create-claude-pipeline": "./bin/cli.js"
@@ -20,7 +20,7 @@ export function CheckpointBanner({ checkpoint, onRespond }: CheckpointBannerProp
20
20
  value={feedback}
21
21
  onChange={(e) => setFeedback(e.target.value)}
22
22
  className="w-full bg-[#111827] border border-border rounded-lg p-2 text-text-primary text-sm resize-none h-20 focus:outline-none focus:border-accent-purple"
23
- placeholder="피드백을 입력하세요..."
23
+ placeholder="추가 지시사항을 입력하세요..."
24
24
  autoFocus
25
25
  />
26
26
  <div className="flex justify-end gap-2 mt-2">
@@ -29,9 +29,16 @@ export function CheckpointBanner({ checkpoint, onRespond }: CheckpointBannerProp
29
29
  </button>
30
30
  <button
31
31
  onClick={() => onRespond("reject", feedback)}
32
+ disabled={!feedback.trim()}
33
+ className="px-3 py-1 text-[11px] text-white bg-red-500/80 rounded-md disabled:opacity-50"
34
+ >
35
+ 거절 + 재작업
36
+ </button>
37
+ <button
38
+ onClick={() => onRespond("approve", feedback)}
32
39
  className="px-3 py-1 text-[11px] text-white bg-gradient-to-r from-accent-purple to-accent-purple-light rounded-md"
33
40
  >
34
- 전송
41
+ 피드백과 함께 승인
35
42
  </button>
36
43
  </div>
37
44
  </div>
@@ -268,65 +268,85 @@ async function main() {
268
268
  contextWatcher.start();
269
269
  stateManager.setStatus("running");
270
270
  stateManager.addActivity("system", "info", "파이프라인 시작");
271
+ let lastFeedback = "";
271
272
  // ── Run phases sequentially ─────────────────────────────────────
272
273
  for (const phaseConfig of PHASES) {
273
274
  const { phase, name, buildPrompt, expectedFiles, checkpoint } = phaseConfig;
274
- console.log(`\n[Runner] ── Phase ${phase}: ${name} ──`);
275
- stateManager.setPhase(phase);
276
- stateManager.addActivity("system", "info", `Phase ${phase} 시작: ${name}`);
277
- // Build and run prompt
278
- const prompt = buildPrompt();
279
- const result = await runClaude(prompt);
280
- if (result.code !== 0) {
281
- stateManager.setStatus("failed");
282
- stateManager.addActivity("system", "error", `Phase ${phase} 실패 (exit code: ${result.code})`);
283
- break;
284
- }
285
- // Log Claude's output as activity (truncated)
286
- const summary = result.stdout.trim().slice(0, 200);
287
- if (summary) {
288
- stateManager.addActivity("system", "progress", summary + (result.stdout.length > 200 ? "..." : ""));
289
- }
290
- // Register output files
291
- for (const file of expectedFiles) {
292
- if (fs.existsSync(path.join(contextDir, file))) {
293
- stateManager.addOutput(`context/${file}`, phase);
294
- stateManager.addActivity("system", "success", `산출물 생성: ${file}`);
275
+ const MAX_RETRIES = 3;
276
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
277
+ const isRetry = attempt > 0;
278
+ console.log(`\n[Runner] ── Phase ${phase}: ${name}${isRetry ? ` (재시도 #${attempt})` : ""} ──`);
279
+ stateManager.setPhase(phase);
280
+ stateManager.setStatus("running");
281
+ if (!isRetry) {
282
+ stateManager.addActivity("system", "info", `Phase ${phase} 시작: ${name}`);
295
283
  }
296
- }
297
- // Also register any unexpected context files
298
- for (const file of listContextFiles()) {
299
- const existing = stateManager.read();
300
- if (existing && !existing.outputs.some((o) => o.filename === `context/${file}`)) {
301
- const filePhase = phase;
302
- stateManager.addOutput(`context/${file}`, filePhase);
284
+ // Build prompt (on retry, append feedback)
285
+ let prompt = buildPrompt();
286
+ if (isRetry && lastFeedback) {
287
+ prompt += `\n\n## 사용자 피드백 (수정 요청)\n${lastFeedback}\n\n위 피드백을 반영하여 이 Phase를 다시 수행해주세요.`;
303
288
  }
304
- }
305
- // ── Checkpoint: wait for user approval ──────────────────────
306
- stateManager.addActivity("system", "info", `Checkpoint Phase ${phase}: ${checkpoint}`);
307
- stateManager.setStatus("paused");
308
- console.log(`[Runner] Checkpoint Phase ${phase}: waiting for approval...`);
309
- try {
310
- const response = await waitForCheckpoint(PIPELINES_DIR, PIPELINE_ID);
311
- if (response.action === "approve") {
312
- stateManager.addActivity("system", "success", `Checkpoint Phase ${phase} approved`);
313
- stateManager.setStatus("running");
314
- console.log(`[Runner] Phase ${phase} approved`);
289
+ const result = await runClaude(prompt);
290
+ if (result.code !== 0) {
291
+ stateManager.setStatus("failed");
292
+ stateManager.addActivity("system", "error", `Phase ${phase} 실패 (exit code: ${result.code})`);
293
+ contextWatcher.stop();
294
+ return;
315
295
  }
316
- else {
317
- const feedback = response.message || "수정 요청";
318
- stateManager.addActivity("system", "info", `Checkpoint Phase ${phase} rejected: ${feedback}`);
296
+ // Log Claude's output as activity (truncated)
297
+ const summary = result.stdout.trim().slice(0, 200);
298
+ if (summary) {
299
+ stateManager.addActivity("system", "progress", summary + (result.stdout.length > 200 ? "..." : ""));
300
+ }
301
+ // Register output files
302
+ for (const file of expectedFiles) {
303
+ if (fs.existsSync(path.join(contextDir, file))) {
304
+ stateManager.addOutput(`context/${file}`, phase);
305
+ stateManager.addActivity("system", "success", `산출물 생성: ${file}`);
306
+ }
307
+ }
308
+ for (const file of listContextFiles()) {
309
+ const existing = stateManager.read();
310
+ if (existing && !existing.outputs.some((o) => o.filename === `context/${file}`)) {
311
+ stateManager.addOutput(`context/${file}`, phase);
312
+ }
313
+ }
314
+ // ── Checkpoint: wait for user approval ──────────────────────
315
+ stateManager.addActivity("system", "info", `Checkpoint Phase ${phase}: ${checkpoint}`);
316
+ stateManager.setStatus("paused");
317
+ console.log(`[Runner] Checkpoint Phase ${phase}: waiting for approval...`);
318
+ try {
319
+ const response = await waitForCheckpoint(PIPELINES_DIR, PIPELINE_ID);
320
+ if (response.action === "approve") {
321
+ const msg = response.message
322
+ ? `Checkpoint Phase ${phase} approved (피드백: ${response.message})`
323
+ : `Checkpoint Phase ${phase} approved`;
324
+ stateManager.addActivity("system", "success", msg);
325
+ console.log(`[Runner] Phase ${phase} approved`);
326
+ lastFeedback = "";
327
+ break; // Exit retry loop, proceed to next phase
328
+ }
329
+ else {
330
+ // Reject → retry this phase with feedback
331
+ lastFeedback = response.message || "수정 요청";
332
+ stateManager.addActivity("system", "info", `Phase ${phase} 수정 요청: ${lastFeedback}`);
333
+ console.log(`[Runner] Phase ${phase} revision requested: ${lastFeedback}`);
334
+ if (attempt === MAX_RETRIES) {
335
+ stateManager.setStatus("failed");
336
+ stateManager.addActivity("system", "error", `Phase ${phase}: 최대 재시도 횟수(${MAX_RETRIES}) 초과`);
337
+ contextWatcher.stop();
338
+ return;
339
+ }
340
+ // Continue retry loop
341
+ }
342
+ }
343
+ catch (err) {
344
+ console.error("[Runner] Checkpoint error:", err);
319
345
  stateManager.setStatus("failed");
320
- stateManager.addActivity("system", "error", `Phase ${phase}에서 사용자가 거절함`);
321
- console.log(`[Runner] Phase ${phase} rejected: ${feedback}`);
322
- break;
346
+ contextWatcher.stop();
347
+ return;
323
348
  }
324
349
  }
325
- catch (err) {
326
- console.error("[Runner] Checkpoint error:", err);
327
- stateManager.setStatus("failed");
328
- break;
329
- }
330
350
  }
331
351
  // ── Finalize ──────────────────────────────────────────────────
332
352
  const finalState = stateManager.read();
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-runner.js","sourceRoot":"","sources":["../src/pipeline-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-runner.js","sourceRoot":"","sources":["../src/pipeline-runner.ts"],"names":[],"mappings":"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"}
@@ -305,84 +305,99 @@ async function main(): Promise<void> {
305
305
  stateManager.setStatus("running");
306
306
  stateManager.addActivity("system", "info", "파이프라인 시작");
307
307
 
308
+ let lastFeedback = "";
309
+
308
310
  // ── Run phases sequentially ─────────────────────────────────────
309
311
  for (const phaseConfig of PHASES) {
310
312
  const { phase, name, buildPrompt, expectedFiles, checkpoint } = phaseConfig;
313
+ const MAX_RETRIES = 3;
311
314
 
312
- console.log(`\n[Runner] ── Phase ${phase}: ${name} ──`);
313
- stateManager.setPhase(phase);
314
- stateManager.addActivity("system", "info", `Phase ${phase} 시작: ${name}`);
315
-
316
- // Build and run prompt
317
- const prompt = buildPrompt();
318
- const result = await runClaude(prompt);
319
-
320
- if (result.code !== 0) {
321
- stateManager.setStatus("failed");
322
- stateManager.addActivity(
323
- "system",
324
- "error",
325
- `Phase ${phase} 실패 (exit code: ${result.code})`,
326
- );
327
- break;
328
- }
315
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
316
+ const isRetry = attempt > 0;
329
317
 
330
- // Log Claude's output as activity (truncated)
331
- const summary = result.stdout.trim().slice(0, 200);
332
- if (summary) {
333
- stateManager.addActivity("system", "progress", summary + (result.stdout.length > 200 ? "..." : ""));
334
- }
318
+ console.log(`\n[Runner] ── Phase ${phase}: ${name}${isRetry ? ` (재시도 #${attempt})` : ""} ──`);
319
+ stateManager.setPhase(phase);
320
+ stateManager.setStatus("running");
335
321
 
336
- // Register output files
337
- for (const file of expectedFiles) {
338
- if (fs.existsSync(path.join(contextDir, file))) {
339
- stateManager.addOutput(`context/${file}`, phase);
340
- stateManager.addActivity("system", "success", `산출물 생성: ${file}`);
322
+ if (!isRetry) {
323
+ stateManager.addActivity("system", "info", `Phase ${phase} 시작: ${name}`);
341
324
  }
342
- }
343
325
 
344
- // Also register any unexpected context files
345
- for (const file of listContextFiles()) {
346
- const existing = stateManager.read();
347
- if (existing && !existing.outputs.some((o) => o.filename === `context/${file}`)) {
348
- const filePhase = phase;
349
- stateManager.addOutput(`context/${file}`, filePhase);
326
+ // Build prompt (on retry, append feedback)
327
+ let prompt = buildPrompt();
328
+ if (isRetry && lastFeedback) {
329
+ prompt += `\n\n## 사용자 피드백 (수정 요청)\n${lastFeedback}\n\n위 피드백을 반영하여 Phase를 다시 수행해주세요.`;
350
330
  }
351
- }
352
331
 
353
- // ── Checkpoint: wait for user approval ──────────────────────
354
- stateManager.addActivity(
355
- "system",
356
- "info",
357
- `Checkpoint Phase ${phase}: ${checkpoint}`,
358
- );
359
- stateManager.setStatus("paused");
360
-
361
- console.log(`[Runner] Checkpoint Phase ${phase}: waiting for approval...`);
362
-
363
- try {
364
- const response = await waitForCheckpoint(PIPELINES_DIR!, PIPELINE_ID!);
365
-
366
- if (response.action === "approve") {
367
- stateManager.addActivity("system", "success", `Checkpoint Phase ${phase} approved`);
368
- stateManager.setStatus("running");
369
- console.log(`[Runner] Phase ${phase} approved`);
370
- } else {
371
- const feedback = response.message || "수정 요청";
372
- stateManager.addActivity(
373
- "system",
374
- "info",
375
- `Checkpoint Phase ${phase} rejected: ${feedback}`,
376
- );
332
+ const result = await runClaude(prompt);
333
+
334
+ if (result.code !== 0) {
335
+ stateManager.setStatus("failed");
336
+ stateManager.addActivity("system", "error", `Phase ${phase} 실패 (exit code: ${result.code})`);
337
+ contextWatcher.stop();
338
+ return;
339
+ }
340
+
341
+ // Log Claude's output as activity (truncated)
342
+ const summary = result.stdout.trim().slice(0, 200);
343
+ if (summary) {
344
+ stateManager.addActivity("system", "progress", summary + (result.stdout.length > 200 ? "..." : ""));
345
+ }
346
+
347
+ // Register output files
348
+ for (const file of expectedFiles) {
349
+ if (fs.existsSync(path.join(contextDir, file))) {
350
+ stateManager.addOutput(`context/${file}`, phase);
351
+ stateManager.addActivity("system", "success", `산출물 생성: ${file}`);
352
+ }
353
+ }
354
+ for (const file of listContextFiles()) {
355
+ const existing = stateManager.read();
356
+ if (existing && !existing.outputs.some((o) => o.filename === `context/${file}`)) {
357
+ stateManager.addOutput(`context/${file}`, phase);
358
+ }
359
+ }
360
+
361
+ // ── Checkpoint: wait for user approval ──────────────────────
362
+ stateManager.addActivity("system", "info", `Checkpoint Phase ${phase}: ${checkpoint}`);
363
+ stateManager.setStatus("paused");
364
+ console.log(`[Runner] Checkpoint Phase ${phase}: waiting for approval...`);
365
+
366
+ try {
367
+ const response = await waitForCheckpoint(PIPELINES_DIR!, PIPELINE_ID!);
368
+
369
+ if (response.action === "approve") {
370
+ const msg = response.message
371
+ ? `Checkpoint Phase ${phase} approved (피드백: ${response.message})`
372
+ : `Checkpoint Phase ${phase} approved`;
373
+ stateManager.addActivity("system", "success", msg);
374
+ console.log(`[Runner] Phase ${phase} approved`);
375
+ lastFeedback = "";
376
+ break; // Exit retry loop, proceed to next phase
377
+ } else {
378
+ // Reject → retry this phase with feedback
379
+ lastFeedback = response.message || "수정 요청";
380
+ stateManager.addActivity(
381
+ "system",
382
+ "info",
383
+ `Phase ${phase} 수정 요청: ${lastFeedback}`,
384
+ );
385
+ console.log(`[Runner] Phase ${phase} revision requested: ${lastFeedback}`);
386
+
387
+ if (attempt === MAX_RETRIES) {
388
+ stateManager.setStatus("failed");
389
+ stateManager.addActivity("system", "error", `Phase ${phase}: 최대 재시도 횟수(${MAX_RETRIES}) 초과`);
390
+ contextWatcher.stop();
391
+ return;
392
+ }
393
+ // Continue retry loop
394
+ }
395
+ } catch (err) {
396
+ console.error("[Runner] Checkpoint error:", err);
377
397
  stateManager.setStatus("failed");
378
- stateManager.addActivity("system", "error", `Phase ${phase}에서 사용자가 거절함`);
379
- console.log(`[Runner] Phase ${phase} rejected: ${feedback}`);
380
- break;
398
+ contextWatcher.stop();
399
+ return;
381
400
  }
382
- } catch (err) {
383
- console.error("[Runner] Checkpoint error:", err);
384
- stateManager.setStatus("failed");
385
- break;
386
401
  }
387
402
  }
388
403