@scanton/phase2s 1.1.0 → 1.9.0

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/README.md +19 -1
  2. package/dist/src/cli/doctor.d.ts +39 -0
  3. package/dist/src/cli/doctor.d.ts.map +1 -0
  4. package/dist/src/cli/doctor.js +244 -0
  5. package/dist/src/cli/doctor.js.map +1 -0
  6. package/dist/src/cli/goal.d.ts +36 -1
  7. package/dist/src/cli/goal.d.ts.map +1 -1
  8. package/dist/src/cli/goal.js +243 -16
  9. package/dist/src/cli/goal.js.map +1 -1
  10. package/dist/src/cli/index.d.ts.map +1 -1
  11. package/dist/src/cli/index.js +117 -9
  12. package/dist/src/cli/index.js.map +1 -1
  13. package/dist/src/cli/init.d.ts +73 -0
  14. package/dist/src/cli/init.d.ts.map +1 -0
  15. package/dist/src/cli/init.js +366 -0
  16. package/dist/src/cli/init.js.map +1 -0
  17. package/dist/src/cli/lint.d.ts +32 -0
  18. package/dist/src/cli/lint.d.ts.map +1 -0
  19. package/dist/src/cli/lint.js +171 -0
  20. package/dist/src/cli/lint.js.map +1 -0
  21. package/dist/src/cli/report.d.ts +62 -0
  22. package/dist/src/cli/report.d.ts.map +1 -0
  23. package/dist/src/cli/report.js +188 -0
  24. package/dist/src/cli/report.js.map +1 -0
  25. package/dist/src/cli/upgrade.d.ts +35 -0
  26. package/dist/src/cli/upgrade.d.ts.map +1 -0
  27. package/dist/src/cli/upgrade.js +126 -0
  28. package/dist/src/cli/upgrade.js.map +1 -0
  29. package/dist/src/core/config.d.ts +60 -8
  30. package/dist/src/core/config.d.ts.map +1 -1
  31. package/dist/src/core/config.js +31 -1
  32. package/dist/src/core/config.js.map +1 -1
  33. package/dist/src/core/notify.d.ts +41 -0
  34. package/dist/src/core/notify.d.ts.map +1 -0
  35. package/dist/src/core/notify.js +153 -0
  36. package/dist/src/core/notify.js.map +1 -0
  37. package/dist/src/core/run-logger.d.ts +83 -0
  38. package/dist/src/core/run-logger.d.ts.map +1 -0
  39. package/dist/src/core/run-logger.js +70 -0
  40. package/dist/src/core/run-logger.js.map +1 -0
  41. package/dist/src/mcp/server.d.ts +9 -0
  42. package/dist/src/mcp/server.d.ts.map +1 -1
  43. package/dist/src/mcp/server.js +148 -1
  44. package/dist/src/mcp/server.js.map +1 -1
  45. package/dist/src/providers/gemini.d.ts +29 -0
  46. package/dist/src/providers/gemini.d.ts.map +1 -0
  47. package/dist/src/providers/gemini.js +47 -0
  48. package/dist/src/providers/gemini.js.map +1 -0
  49. package/dist/src/providers/index.d.ts +2 -0
  50. package/dist/src/providers/index.d.ts.map +1 -1
  51. package/dist/src/providers/index.js +8 -0
  52. package/dist/src/providers/index.js.map +1 -1
  53. package/dist/src/providers/openrouter.d.ts +25 -0
  54. package/dist/src/providers/openrouter.d.ts.map +1 -0
  55. package/dist/src/providers/openrouter.js +43 -0
  56. package/dist/src/providers/openrouter.js.map +1 -0
  57. package/dist/src/tools/registry.d.ts +5 -3
  58. package/dist/src/tools/registry.d.ts.map +1 -1
  59. package/dist/src/tools/registry.js +35 -12
  60. package/dist/src/tools/registry.js.map +1 -1
  61. package/package.json +1 -1
@@ -6,41 +6,69 @@
6
6
  * output, retries failed sub-tasks with failure context, and loops until all
7
7
  * criteria pass or max attempts are exhausted.
8
8
  *
9
- * Usage: phase2s goal <spec-file> [--max-attempts <n>] [--resume]
9
+ * Usage: phase2s goal <spec-file> [--max-attempts <n>] [--resume] [--review-before-run]
10
10
  *
11
11
  * With --resume: reads existing state from .phase2s/state/<hash>.json
12
12
  * (relative to the spec file directory), skips completed sub-tasks, and
13
13
  * injects saved failure context for failed ones. Starts fresh if no state
14
14
  * exists.
15
+ *
16
+ * With --review-before-run: runs the spec through adversarial review (fresh
17
+ * Agent instance, adversarial SKILL.md template) before execution begins.
18
+ * Halts and returns challenged: true if verdict is CHALLENGED or
19
+ * NEEDS_CLARIFICATION.
15
20
  */
16
21
  import { execFile } from "child_process";
17
22
  import { readFileSync } from "fs";
18
23
  import { resolve, dirname, basename } from "path";
24
+ import chalk from "chalk";
19
25
  import { Agent } from "../core/agent.js";
20
26
  import { loadConfig } from "../core/config.js";
21
27
  import { loadLearnings, formatLearningsForPrompt } from "../core/memory.js";
22
28
  import { parseSpec } from "../core/spec-parser.js";
23
29
  import { computeSpecHash, readState, writeState, clearState } from "../core/state.js";
30
+ import { RunLogger } from "../core/run-logger.js";
31
+ import { sendNotification, buildNotifyPayload } from "../core/notify.js";
24
32
  import { loadAllSkills } from "../skills/index.js";
25
33
  import { substituteInputs, stripAskTokens } from "../skills/template.js";
26
34
  /** Cap on bytes stored for failureContext per sub-task. */
27
35
  const FAILURE_CONTEXT_MAX_BYTES = 4096;
28
36
  export async function runGoal(specFile, options = {}) {
29
37
  const specPath = resolve(process.cwd(), specFile);
30
- // State is stored relative to the spec file directory, not invocation cwd.
38
+ // State and run logs are stored relative to the spec file directory, not
39
+ // invocation cwd. This keeps logs next to the spec regardless of where
40
+ // `phase2s goal` is invoked from.
31
41
  const specDir = dirname(specPath);
32
42
  let markdown;
33
43
  try {
34
44
  markdown = readFileSync(specPath, "utf8");
35
45
  }
36
46
  catch {
37
- console.error(`Error: Cannot read spec file: ${specPath}`);
38
- process.exit(1);
47
+ throw new Error(`Cannot read spec file: ${specPath}`);
39
48
  }
40
49
  const specHash = computeSpecHash(markdown);
41
50
  const spec = parseSpec(markdown);
42
51
  const maxAttempts = Math.max(1, parseInt(options.maxAttempts ?? "3", 10) || 3);
43
52
  const resume = !!options.resume;
53
+ const startMs = Date.now();
54
+ // Dry-run: print the decomposition tree and exit immediately — zero LLM calls,
55
+ // zero file handles opened. Must be before RunLogger construction.
56
+ if (options.dryRun) {
57
+ printDryRunTree(spec);
58
+ return {
59
+ success: true,
60
+ attempts: 0,
61
+ criteriaResults: {},
62
+ runLogPath: "",
63
+ summary: "Dry run — no LLM calls made.",
64
+ durationMs: Date.now() - startMs,
65
+ dryRun: true,
66
+ };
67
+ }
68
+ // Initialise RunLogger now so we can capture the path even if we halt early.
69
+ const logger = new RunLogger(specDir, specHash);
70
+ // Load config early so it's available for all return paths (including early exits).
71
+ const config = await loadConfig();
44
72
  // -------------------------------------------------------------------------
45
73
  // State: load existing state when resuming, otherwise start fresh.
46
74
  // -------------------------------------------------------------------------
@@ -57,6 +85,14 @@ export async function runGoal(specFile, options = {}) {
57
85
  subTaskResults: {},
58
86
  };
59
87
  }
88
+ logger.log({
89
+ event: "goal_started",
90
+ specFile: basename(specPath),
91
+ specHash,
92
+ subTaskCount: spec.decomposition.length,
93
+ maxAttempts,
94
+ resuming: resume,
95
+ });
60
96
  console.log(`\nGoal executor: ${spec.title}`);
61
97
  console.log(`Eval command: ${spec.evalCommand}`);
62
98
  console.log(`Sub-tasks: ${spec.decomposition.length}`);
@@ -68,7 +104,17 @@ export async function runGoal(specFile, options = {}) {
68
104
  }
69
105
  if (spec.decomposition.length === 0 && spec.acceptanceCriteria.length === 0) {
70
106
  console.log("\nSpec has no sub-tasks and no acceptance criteria. Nothing to execute.");
71
- return { success: true, attempts: 0, criteriaResults: {} };
107
+ logger.log({ event: "goal_completed", success: true, attempts: 0 });
108
+ const result = {
109
+ success: true,
110
+ attempts: 0,
111
+ criteriaResults: {},
112
+ runLogPath: logger.close(),
113
+ summary: "Spec has no sub-tasks and no acceptance criteria.",
114
+ durationMs: Date.now() - startMs,
115
+ };
116
+ await maybeNotify(options, config, result, basename(specPath));
117
+ return result;
72
118
  }
73
119
  // Warn on large specs
74
120
  if (spec.decomposition.length * maxAttempts > 15) {
@@ -76,19 +122,57 @@ export async function runGoal(specFile, options = {}) {
76
122
  "This may take a while and consume significant ChatGPT usage.");
77
123
  }
78
124
  // Set up agent
79
- const config = await loadConfig();
80
125
  const learningsList = await loadLearnings(process.cwd());
81
126
  const learningsStr = formatLearningsForPrompt(learningsList);
82
- const agent = new Agent({ config, learnings: learningsStr });
83
- // Load skills to get satori template + settings
127
+ // Load skills to get satori + adversarial templates and settings
84
128
  const skills = await loadAllSkills();
85
129
  const satoriSkill = skills.find((s) => s.name === "satori");
130
+ const adversarialSkill = skills.find((s) => s.name === "adversarial");
86
131
  const satoriRetries = satoriSkill?.retries ?? 3;
87
132
  const satoriModel = satoriSkill?.model;
133
+ const adversarialModel = adversarialSkill?.model;
88
134
  // Build the satori base prompt from its template (same as what the REPL does)
89
135
  const satoriTemplate = satoriSkill
90
136
  ? stripAskTokens(substituteInputs(satoriSkill.promptTemplate, {}, satoriSkill.inputs)).result
91
137
  : "";
138
+ // -------------------------------------------------------------------------
139
+ // Pre-execution adversarial review (optional, uses fresh Agent to avoid
140
+ // contaminating the implementation agent's conversation history).
141
+ // -------------------------------------------------------------------------
142
+ if (options.reviewBeforeRun) {
143
+ logger.log({ event: "plan_review_started" });
144
+ const adversarialTemplate = adversarialSkill?.promptTemplate ?? "";
145
+ const reviewPrompt = buildAdversarialPrompt(spec, adversarialTemplate);
146
+ const reviewAgent = new Agent({ config, learnings: learningsStr });
147
+ const response = await reviewAgent.run(reviewPrompt, { modelOverride: adversarialModel });
148
+ const verdict = response.includes("VERDICT: CHALLENGED")
149
+ ? "CHALLENGED"
150
+ : response.includes("NEEDS_CLARIFICATION")
151
+ ? "NEEDS_CLARIFICATION"
152
+ : "APPROVED";
153
+ logger.log({ event: "plan_review_completed", verdict, response });
154
+ if (verdict !== "APPROVED") {
155
+ console.log(`\nSpec ${verdict} before execution. Adversarial review response:\n`);
156
+ console.log(response);
157
+ const result = {
158
+ success: false,
159
+ attempts: 0,
160
+ criteriaResults: {},
161
+ runLogPath: logger.close(),
162
+ summary: `Spec ${verdict} before execution.`,
163
+ durationMs: Date.now() - startMs,
164
+ challenged: true,
165
+ challengeResponse: response,
166
+ };
167
+ await maybeNotify(options, config, result, basename(specPath));
168
+ return result;
169
+ }
170
+ console.log("\nAdversarial review: APPROVED. Proceeding with execution.");
171
+ }
172
+ // -------------------------------------------------------------------------
173
+ // Main execution loop
174
+ // -------------------------------------------------------------------------
175
+ const agent = new Agent({ config, learnings: learningsStr });
92
176
  let attempt = state.attempt;
93
177
  let subtasksToRun = spec.decomposition;
94
178
  let previousFailureContext;
@@ -96,6 +180,7 @@ export async function runGoal(specFile, options = {}) {
96
180
  while (attempt < maxAttempts) {
97
181
  attempt++;
98
182
  state.attempt = attempt;
183
+ logger.log({ event: "attempt_started", attempt });
99
184
  console.log(`\n${"=".repeat(50)}`);
100
185
  console.log(`Attempt ${attempt}/${maxAttempts}`);
101
186
  console.log("=".repeat(50));
@@ -108,14 +193,22 @@ export async function runGoal(specFile, options = {}) {
108
193
  const priorResult = state.subTaskResults[indexKey];
109
194
  // Skip sub-tasks already marked passed on a prior run.
110
195
  if (priorResult?.status === "passed") {
111
- console.log(`\nSkipping sub-task (already passed): ${subtask.name}`);
196
+ console.log(chalk.dim(`\n[skip] ${subtask.name} (passed in a prior attempt)`));
112
197
  continue;
113
198
  }
114
199
  // Inject prior failure context if this sub-task failed before.
115
200
  const priorFailureContext = priorResult?.status === "failed"
116
201
  ? priorResult.failureContext
117
202
  : previousFailureContext;
118
- console.log(`\nRunning sub-task: ${subtask.name}`);
203
+ const numericIndex = globalIndex >= 0 ? globalIndex : i;
204
+ logger.log({ event: "subtask_started", attempt, index: numericIndex, name: subtask.name });
205
+ // isRetry: on attempt 2+, subtasksToRun is already filtered to only failed tasks
206
+ const isRetry = attempt > 1;
207
+ const subtaskLabel = isRetry
208
+ ? chalk.yellow(`[${i + 1}/${subtasksToRun.length}] Retrying:`)
209
+ : chalk.cyan(`[${i + 1}/${subtasksToRun.length}] Running:`);
210
+ console.log(`\n${subtaskLabel} ${subtask.name}`);
211
+ const subtaskStartMs = Date.now();
119
212
  const taskContext = buildSatoriContext(subtask, spec.constraints, priorFailureContext);
120
213
  // Combine satori system instructions + task-specific context
121
214
  const effectivePrompt = satoriTemplate
@@ -139,6 +232,8 @@ export async function runGoal(specFile, options = {}) {
139
232
  satoriError = err;
140
233
  }
141
234
  process.stdout.write("\n");
235
+ const elapsedSec = ((Date.now() - subtaskStartMs) / 1000).toFixed(1);
236
+ console.log(chalk.dim(` Done in ${elapsedSec}s`));
142
237
  const outputStr = outputChunks.join("");
143
238
  const truncated = outputStr.slice(-FAILURE_CONTEXT_MAX_BYTES);
144
239
  if (satoriError) {
@@ -150,6 +245,7 @@ export async function runGoal(specFile, options = {}) {
150
245
  };
151
246
  state.lastUpdatedAt = new Date().toISOString();
152
247
  writeState(specDir, specHash, state);
248
+ logger.log({ event: "subtask_completed", attempt, index: numericIndex, status: "failed", failureContext: truncated });
153
249
  console.error(`\nSub-task failed: ${subtask.name}`);
154
250
  }
155
251
  else {
@@ -160,26 +256,51 @@ export async function runGoal(specFile, options = {}) {
160
256
  };
161
257
  state.lastUpdatedAt = new Date().toISOString();
162
258
  writeState(specDir, specHash, state);
259
+ logger.log({ event: "subtask_completed", attempt, index: numericIndex, status: "passed" });
163
260
  }
164
261
  }
165
262
  // Run evaluation
166
263
  console.log(`\nRunning evaluation: ${spec.evalCommand}`);
264
+ logger.log({ event: "eval_started", command: spec.evalCommand });
167
265
  const evalOutput = await runCommand(spec.evalCommand);
168
266
  console.log(evalOutput.slice(0, 1000) + (evalOutput.length > 1000 ? "\n[...truncated...]" : ""));
267
+ // Store first 2000 chars in log (enough for diagnostics, not overwhelming)
268
+ logger.log({ event: "eval_completed", output: evalOutput.slice(0, 2000) });
169
269
  // If no acceptance criteria, report raw output and exit
170
270
  if (spec.acceptanceCriteria.length === 0) {
171
271
  console.log("\nNo acceptance criteria defined. Eval output shown above.");
172
- return { success: true, attempts: attempt, criteriaResults: {} };
272
+ logger.log({ event: "goal_completed", success: true, attempts: attempt });
273
+ const result = {
274
+ success: true,
275
+ attempts: attempt,
276
+ criteriaResults: {},
277
+ runLogPath: logger.close(),
278
+ summary: `Goal completed successfully after ${attempt} attempt(s).`,
279
+ durationMs: Date.now() - startMs,
280
+ };
281
+ await maybeNotify(options, config, result, basename(specPath));
282
+ return result;
173
283
  }
174
284
  // Check acceptance criteria
175
285
  criteriaResults = await checkCriteria(spec.acceptanceCriteria, evalOutput, agent);
176
286
  printCriteriaTable(criteriaResults);
177
287
  const failing = Object.entries(criteriaResults).filter(([, pass]) => !pass).map(([c]) => c);
288
+ logger.log({ event: "criteria_checked", results: criteriaResults, failing });
178
289
  if (failing.length === 0) {
179
290
  console.log(`\n✓ All acceptance criteria met after ${attempt} attempt(s).`);
180
291
  // Clean completion: remove state so stale state doesn't block future runs.
181
292
  clearState(specDir, specHash);
182
- return { success: true, attempts: attempt, criteriaResults };
293
+ logger.log({ event: "goal_completed", success: true, attempts: attempt });
294
+ const result = {
295
+ success: true,
296
+ attempts: attempt,
297
+ criteriaResults,
298
+ runLogPath: logger.close(),
299
+ summary: `All criteria passed after ${attempt} attempt(s).`,
300
+ durationMs: Date.now() - startMs,
301
+ };
302
+ await maybeNotify(options, config, result, basename(specPath));
303
+ return result;
183
304
  }
184
305
  if (attempt < maxAttempts) {
185
306
  previousFailureContext = await analyzeFailures(failing, evalOutput, spec, agent);
@@ -191,11 +312,80 @@ export async function runGoal(specFile, options = {}) {
191
312
  }
192
313
  console.log(`\n✗ Goal not achieved after ${maxAttempts} attempts.`);
193
314
  console.log("Failing criteria:");
194
- for (const [criterion, pass] of Object.entries(criteriaResults)) {
195
- if (!pass)
196
- console.log(` ✗ ${criterion}`);
315
+ const failingFinal = Object.entries(criteriaResults).filter(([, pass]) => !pass).map(([c]) => c);
316
+ for (const criterion of failingFinal) {
317
+ console.log(` ✗ ${criterion}`);
197
318
  }
198
- return { success: false, attempts: maxAttempts, criteriaResults };
319
+ logger.log({ event: "goal_completed", success: false, attempts: maxAttempts });
320
+ const failResult = {
321
+ success: false,
322
+ attempts: maxAttempts,
323
+ criteriaResults,
324
+ runLogPath: logger.close(),
325
+ summary: `Goal failed after ${maxAttempts} attempts. ${failingFinal.length} criteria not met.`,
326
+ durationMs: Date.now() - startMs,
327
+ };
328
+ await maybeNotify(options, config, failResult, basename(specPath));
329
+ return failResult;
330
+ }
331
+ // ---------------------------------------------------------------------------
332
+ // Notification helper
333
+ // ---------------------------------------------------------------------------
334
+ /**
335
+ * Send a post-run notification if the caller requested one.
336
+ * Errors are swallowed — notification failures never surface to the user.
337
+ */
338
+ async function maybeNotify(options, config, result, specFile) {
339
+ if (!options.notify)
340
+ return;
341
+ const notifyOptions = typeof options.notify === "object"
342
+ ? options.notify
343
+ : {
344
+ mac: config.notify?.mac,
345
+ slack: config.notify?.slack,
346
+ discord: config.notify?.discord,
347
+ teams: config.notify?.teams,
348
+ };
349
+ const payload = buildNotifyPayload(specFile, result.success, result.attempts, result.challenged ?? false, result.durationMs);
350
+ try {
351
+ await sendNotification(payload, notifyOptions);
352
+ }
353
+ catch (err) {
354
+ console.error(`[phase2s notify] Notification failed: ${String(err)}`);
355
+ }
356
+ }
357
+ // ---------------------------------------------------------------------------
358
+ // buildAdversarialPrompt
359
+ // ---------------------------------------------------------------------------
360
+ /**
361
+ * Build a pre-execution adversarial review prompt.
362
+ *
363
+ * Injects the spec's decomposition and acceptance criteria as the "plan" to
364
+ * challenge, then appends the adversarial SKILL.md template which instructs
365
+ * the model to review what came before it and emit a structured verdict.
366
+ */
367
+ export function buildAdversarialPrompt(spec, adversarialTemplate) {
368
+ const decompositionLines = spec.decomposition
369
+ .map((t, i) => `${i + 1}. **${t.name}**: ${t.successCriteria}`)
370
+ .join("\n");
371
+ const criteriaLines = spec.acceptanceCriteria
372
+ .map((c, i) => `${i + 1}. ${c}`)
373
+ .join("\n");
374
+ const plan = [
375
+ `## Spec: ${spec.title}`,
376
+ "",
377
+ "### Problem",
378
+ spec.problemStatement,
379
+ "",
380
+ "### Sub-task decomposition",
381
+ decompositionLines || "(none)",
382
+ "",
383
+ "### Acceptance criteria",
384
+ criteriaLines || "(none)",
385
+ ].join("\n");
386
+ return adversarialTemplate
387
+ ? `${plan}\n\n${adversarialTemplate}`
388
+ : plan;
199
389
  }
200
390
  // ---------------------------------------------------------------------------
201
391
  // Helpers
@@ -336,6 +526,43 @@ export async function runCommand(cmd, timeoutMs = 120_000) {
336
526
  });
337
527
  });
338
528
  }
529
+ function printDryRunTree(spec) {
530
+ console.log(chalk.bold(`\nSpec: ${spec.title}`));
531
+ console.log(chalk.dim(`Eval: ${spec.evalCommand}`));
532
+ console.log("");
533
+ console.log(chalk.bold(`Sub-tasks (${spec.decomposition.length}):`));
534
+ for (let i = 0; i < spec.decomposition.length; i++) {
535
+ const st = spec.decomposition[i];
536
+ console.log(` ${chalk.cyan(`${i + 1}.`)} ${st.name}`);
537
+ if (st.input)
538
+ console.log(chalk.dim(` Input: ${st.input}`));
539
+ if (st.output)
540
+ console.log(chalk.dim(` Output: ${st.output}`));
541
+ if (st.successCriteria)
542
+ console.log(chalk.dim(` When: ${st.successCriteria}`));
543
+ }
544
+ if (spec.acceptanceCriteria.length > 0) {
545
+ console.log("");
546
+ console.log(chalk.bold(`Acceptance Criteria (${spec.acceptanceCriteria.length}):`));
547
+ for (const c of spec.acceptanceCriteria) {
548
+ console.log(` · ${c}`);
549
+ }
550
+ }
551
+ if (spec.constraints) {
552
+ const { mustDo, cannotDo, shouldPrefer } = spec.constraints;
553
+ if (mustDo.length > 0 || cannotDo.length > 0 || shouldPrefer.length > 0) {
554
+ console.log("");
555
+ console.log(chalk.bold("Constraints:"));
556
+ if (mustDo.length > 0)
557
+ console.log(chalk.dim(` Must Do: ${mustDo.join("; ")}`));
558
+ if (cannotDo.length > 0)
559
+ console.log(chalk.dim(` Cannot Do: ${cannotDo.join("; ")}`));
560
+ if (shouldPrefer.length > 0)
561
+ console.log(chalk.dim(` Prefer: ${shouldPrefer.join("; ")}`));
562
+ }
563
+ }
564
+ console.log("");
565
+ }
339
566
  function printCriteriaTable(criteriaResults) {
340
567
  console.log("\nAcceptance criteria:");
341
568
  for (const [criterion, pass] of Object.entries(criteriaResults)) {
@@ -1 +1 @@
1
- {"version":3,"file":"goal.js","sourceRoot":"","sources":["../../../src/cli/goal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"goal.js","sourceRoot":"","sources":["../../../src/cli/goal.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAiEA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0IvE;AAkfD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,oBAAoB,EAAE,KAAK,EAAE,GAC3C;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA6BjI"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAiEA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8PvE;AAwfD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,oBAAoB,EAAE,KAAK,EAAE,GAC3C;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA6BjI"}
@@ -124,11 +124,16 @@ export async function main(argv = process.argv) {
124
124
  });
125
125
  // List available skills
126
126
  program
127
- .command("skills")
128
- .description("List available skills")
127
+ .command("skills [query]")
128
+ .description("List available skills, or filter with an optional search query")
129
129
  .option("--json", "Output as JSON")
130
- .action(async (cmdOpts) => {
131
- const skills = await loadAllSkills();
130
+ .action(async (query, cmdOpts) => {
131
+ let skills = await loadAllSkills();
132
+ if (query) {
133
+ const q = query.toLowerCase();
134
+ skills = skills.filter((s) => s.name.toLowerCase().includes(q) ||
135
+ (s.description?.toLowerCase().includes(q) ?? false));
136
+ }
132
137
  if (cmdOpts.json) {
133
138
  const output = skills.map((s) => ({
134
139
  name: s.name,
@@ -145,10 +150,18 @@ export async function main(argv = process.argv) {
145
150
  return;
146
151
  }
147
152
  if (skills.length === 0) {
148
- log.info("No skills found. Add skills to .phase2s/skills/ or ~/.phase2s/skills/");
153
+ if (query) {
154
+ console.log(chalk.yellow(`\n No skills match "${query}". Try a broader term or run phase2s skills to list all.\n`));
155
+ }
156
+ else {
157
+ log.info("No skills found. Add skills to .phase2s/skills/ or ~/.phase2s/skills/");
158
+ }
149
159
  return;
150
160
  }
151
- console.log(chalk.bold("\nAvailable skills:\n"));
161
+ const header = query
162
+ ? chalk.bold(`\nSkills matching "${query}":\n`)
163
+ : chalk.bold("\nAvailable skills:\n");
164
+ console.log(header);
152
165
  for (const skill of skills) {
153
166
  const tierBadge = skill.model === "fast"
154
167
  ? chalk.blue(" [fast]")
@@ -165,10 +178,99 @@ export async function main(argv = process.argv) {
165
178
  .description("Execute a spec file end-to-end: run sub-tasks, evaluate, retry until done")
166
179
  .option("--max-attempts <n>", "Maximum retry loops (default: 3)", "3")
167
180
  .option("--resume", "Resume from the last completed sub-task (reads state from .phase2s/state/)")
181
+ .option("--review-before-run", "Run adversarial review on spec before executing")
182
+ .option("--notify", "Send a notification when the run completes (macOS + optional Slack webhook)")
183
+ .option("--dry-run", "Parse and display the spec decomposition tree without running anything")
168
184
  .action(async (specFile, cmdOpts) => {
169
185
  const { runGoal } = await import("./goal.js");
170
- const result = await runGoal(specFile, { maxAttempts: cmdOpts.maxAttempts, resume: cmdOpts.resume });
171
- process.exit(result.success ? 0 : 1);
186
+ try {
187
+ const result = await runGoal(specFile, {
188
+ maxAttempts: cmdOpts.maxAttempts,
189
+ resume: cmdOpts.resume,
190
+ reviewBeforeRun: cmdOpts.reviewBeforeRun,
191
+ notify: cmdOpts.notify,
192
+ dryRun: cmdOpts.dryRun,
193
+ });
194
+ if (!result.dryRun && result.runLogPath)
195
+ console.log(`Run log: ${result.runLogPath}`);
196
+ process.exit(result.success ? 0 : 1);
197
+ }
198
+ catch (err) {
199
+ console.error(err instanceof Error ? err.message : String(err));
200
+ process.exit(1);
201
+ }
202
+ });
203
+ // Run log report viewer
204
+ program
205
+ .command("report <logfile>")
206
+ .description("Display a human-readable summary of a dark factory run log (.jsonl)")
207
+ .action(async (logfile) => {
208
+ const { parseRunLog, buildRunReport, formatRunReport } = await import("./report.js");
209
+ try {
210
+ const events = parseRunLog(logfile);
211
+ const report = buildRunReport(events);
212
+ console.log(formatRunReport(report));
213
+ }
214
+ catch (err) {
215
+ console.error(`Error reading run log: ${err instanceof Error ? err.message : String(err)}`);
216
+ process.exit(1);
217
+ }
218
+ });
219
+ // Interactive setup wizard
220
+ program
221
+ .command("init")
222
+ .description("Interactive setup wizard — configure .phase2s.yaml for your provider")
223
+ .option("--non-interactive", "Skip prompts and use flag values (for CI)")
224
+ .option("--provider <provider>", "Provider: codex-cli, openai-api, anthropic, ollama, openrouter, gemini")
225
+ .option("--api-key <key>", "API key for openai-api or anthropic provider")
226
+ .option("--openrouter-api-key <key>", "API key for openrouter provider")
227
+ .option("--gemini-api-key <key>", "API key for gemini provider (starts with AIza)")
228
+ .option("--fast-model <model>", "Fast tier model name")
229
+ .option("--smart-model <model>", "Smart tier model name")
230
+ .option("--slack-webhook <url>", "Slack webhook URL for notifications")
231
+ .option("--discord-webhook <url>", "Discord webhook URL for notifications")
232
+ .option("--teams-webhook <url>", "Microsoft Teams webhook URL for notifications")
233
+ .action(async (cmdOpts) => {
234
+ const { runInit } = await import("./init.js");
235
+ await runInit({
236
+ nonInteractive: cmdOpts.nonInteractive,
237
+ provider: cmdOpts.provider,
238
+ apiKey: cmdOpts.apiKey,
239
+ openrouterApiKey: cmdOpts.openrouterApiKey,
240
+ geminiApiKey: cmdOpts.geminiApiKey,
241
+ fastModel: cmdOpts.fastModel,
242
+ smartModel: cmdOpts.smartModel,
243
+ slackWebhook: cmdOpts.slackWebhook,
244
+ discordWebhook: cmdOpts.discordWebhook,
245
+ teamsWebhook: cmdOpts.teamsWebhook,
246
+ });
247
+ });
248
+ // Self-update command
249
+ program
250
+ .command("upgrade")
251
+ .description("Check for a newer version and offer to install it")
252
+ .option("--check", "Report whether an update is available without prompting")
253
+ .action(async (cmdOpts) => {
254
+ const { runUpgrade } = await import("./upgrade.js");
255
+ await runUpgrade(VERSION, { check: cmdOpts.check });
256
+ });
257
+ // Spec linting
258
+ program
259
+ .command("lint <spec-file>")
260
+ .description("Validate a 5-pillar spec file before running it — catches structural errors before the dark factory run begins")
261
+ .action(async (specFile) => {
262
+ const { runLint } = await import("./lint.js");
263
+ const ok = await runLint(specFile);
264
+ if (!ok)
265
+ process.exit(1);
266
+ });
267
+ // Installation health check
268
+ program
269
+ .command("doctor")
270
+ .description("Check Phase2S installation health — Node version, auth, config, working dir")
271
+ .action(async () => {
272
+ const { runDoctor } = await import("./doctor.js");
273
+ await runDoctor();
172
274
  });
173
275
  // Shell completion script generator
174
276
  program
@@ -203,7 +305,7 @@ _phase2s_complete() {
203
305
 
204
306
  # Complete subcommands at position 1
205
307
  if [[ \${COMP_CWORD} -eq 1 ]]; then
206
- COMPREPLY=($(compgen -W "chat run skills mcp completion" -- "\$cur"))
308
+ COMPREPLY=($(compgen -W "chat run skills mcp goal report init upgrade lint doctor completion" -- "\$cur"))
207
309
  return
208
310
  fi
209
311
 
@@ -239,6 +341,12 @@ _phase2s() {
239
341
  'run:Run a single prompt and exit'
240
342
  'skills:List available skills'
241
343
  'mcp:Start as an MCP server for Claude Code'
344
+ 'goal:Run a spec file autonomously (dark factory)'
345
+ 'report:Display a human-readable summary of a run log'
346
+ 'init:Interactive setup wizard — configure .phase2s.yaml'
347
+ 'upgrade:Check for a newer version and offer to install it'
348
+ 'lint:Validate a 5-pillar spec file before running it'
349
+ 'doctor:Check Phase2S installation health'
242
350
  'completion:Output shell completion script'
243
351
  )
244
352