@gh-symphony/cli 0.2.5 → 0.4.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.
@@ -5,14 +5,14 @@ import {
5
5
  parseIssueReference,
6
6
  readGitHubProjectBinding,
7
7
  renderIssueWorkflowPreview
8
- } from "./chunk-5U36B7FC.js";
9
- import "./chunk-DTPIJO6S.js";
8
+ } from "./chunk-TTVGBHZI.js";
9
+ import "./chunk-ZPS4CQZJ.js";
10
10
  import {
11
11
  fetchGithubProjectIssueByRepositoryAndNumber,
12
12
  fetchGithubProjectIssues,
13
13
  inspectManagedProjectSelection
14
- } from "./chunk-NRABQNAX.js";
15
- import "./chunk-FAU72YC2.js";
14
+ } from "./chunk-B6G3KGBB.js";
15
+ import "./chunk-Z7CDL3T2.js";
16
16
  import {
17
17
  resolveRuntimeRoot
18
18
  } from "./chunk-RZ3WO7OV.js";
@@ -40,7 +40,7 @@ import {
40
40
  resolveClaudeCommandBinary,
41
41
  resolveRuntimeCommandBinary,
42
42
  runClaudePreflight
43
- } from "./chunk-3SKN5L3I.js";
43
+ } from "./chunk-6OPRRC2J.js";
44
44
  import {
45
45
  configFilePath,
46
46
  orchestratorLogPath,
package/dist/index.js CHANGED
@@ -417,13 +417,13 @@ function createRemovedCommandHandler(message) {
417
417
 
418
418
  // src/index.ts
419
419
  var COMMANDS = {
420
- workflow: () => import("./workflow-AV676KAP.js"),
421
- setup: () => import("./setup-T2QENR26.js"),
422
- doctor: () => import("./doctor-TQR54KNZ.js"),
423
- upgrade: () => import("./upgrade-7452LZXX.js"),
424
- repo: () => import("./repo-Y6EF2DZP.js"),
420
+ workflow: () => import("./workflow-BOZ25AJ2.js"),
421
+ setup: () => import("./setup-JINI7HBM.js"),
422
+ doctor: () => import("./doctor-CCUTNEYN.js"),
423
+ upgrade: () => import("./upgrade-EBD4LX5W.js"),
424
+ repo: () => import("./repo-C2APQR2P.js"),
425
425
  config: () => import("./config-cmd-AOZVS6GU.js"),
426
- version: () => import("./version-D3FB3PXO.js")
426
+ version: () => import("./version-6Z354HHH.js")
427
427
  };
428
428
  function addGlobalOptions(command) {
429
429
  return command.option("--config <dir>", "Config directory").addOption(new Option("--config-dir <dir>").hideHelp()).option("-v, --verbose", "Enable verbose output").option("--json", "Output in JSON format").option("--no-color", "Disable color output");
@@ -17,7 +17,7 @@ import {
17
17
  import {
18
18
  initRepoRuntime,
19
19
  parseRepoRuntimeFlags
20
- } from "./chunk-DLZ2XHWY.js";
20
+ } from "./chunk-QOX5UGUE.js";
21
21
  import {
22
22
  OrchestratorService,
23
23
  acquireProjectLock,
@@ -33,8 +33,8 @@ import {
33
33
  resolveOrchestratorLogLevel,
34
34
  resolveTrackerAdapter,
35
35
  runCli
36
- } from "./chunk-NRABQNAX.js";
37
- import "./chunk-FAU72YC2.js";
36
+ } from "./chunk-B6G3KGBB.js";
37
+ import "./chunk-Z7CDL3T2.js";
38
38
  import {
39
39
  resolveRepoRuntimeRoot,
40
40
  resolveRuntimeRoot
@@ -58,7 +58,7 @@ import {
58
58
  parseRecentEvents,
59
59
  readJsonFile,
60
60
  safeReadDir
61
- } from "./chunk-3SKN5L3I.js";
61
+ } from "./chunk-6OPRRC2J.js";
62
62
  import {
63
63
  daemonPidPath,
64
64
  httpStatusPath,
@@ -990,6 +990,7 @@ async function statusForIssue(reader, issueIdentifier) {
990
990
  kind: resolvedRun?.retryKind ?? null,
991
991
  error: resolvedRun?.lastError ?? issueRecord.retryEntry?.error ?? null
992
992
  } : null,
993
+ recovery: resolvedRun?.recovery ?? null,
993
994
  logs: {
994
995
  codex_session_logs: resolvedRun === null ? [] : [
995
996
  {
@@ -2568,6 +2569,22 @@ function renderLegacyStatus(snapshot, noColor) {
2568
2569
  }
2569
2570
  lines.push("");
2570
2571
  }
2572
+ if (snapshot.recovery) {
2573
+ const recovery = snapshot.recovery;
2574
+ lines.push(apply(yellow(" Recoverable incomplete turn:")));
2575
+ lines.push(` Run ${recovery.runId}`);
2576
+ lines.push(` Issue ${recovery.issueId}`);
2577
+ lines.push(` Workspace ${recovery.workspacePath}`);
2578
+ lines.push(
2579
+ ` Dirty ${recovery.dirtyFiles.length > 0 ? recovery.dirtyFiles.join(", ") : "none"}`
2580
+ );
2581
+ lines.push(` Last ${recovery.lastEvent ?? "unknown"}`);
2582
+ lines.push(` At ${recovery.lastEventAt ?? "unknown"}`);
2583
+ lines.push(` Session ${recovery.sessionId ?? "unknown"}`);
2584
+ lines.push(` Thread ${recovery.threadId ?? "unknown"}`);
2585
+ lines.push(` Command ${recovery.suggestedCommand}`);
2586
+ lines.push("");
2587
+ }
2571
2588
  if (snapshot.lastError) {
2572
2589
  lines.push(apply(red(` \u2717 ${snapshot.lastError}`)));
2573
2590
  lines.push("");
@@ -4,18 +4,20 @@ import {
4
4
  buildAutomaticStateMappings,
5
5
  collectPriorityLabelNames,
6
6
  planWorkflowArtifacts,
7
+ promptBlockerCheck,
7
8
  promptPriorityConfig,
8
9
  promptStateMappings,
9
10
  renderDryRunPreview,
10
11
  resolvePriorityField,
11
12
  resolveStatusField,
13
+ toWorkflowLifecycleConfig,
12
14
  validateStateMapping,
13
15
  writeEcosystem,
14
16
  writeWorkflowPlan
15
- } from "./chunk-DTPIJO6S.js";
17
+ } from "./chunk-ZPS4CQZJ.js";
16
18
  import {
17
19
  initRepoRuntime
18
- } from "./chunk-DLZ2XHWY.js";
20
+ } from "./chunk-QOX5UGUE.js";
19
21
  import "./chunk-RZ3WO7OV.js";
20
22
  import {
21
23
  GhAuthError,
@@ -29,7 +31,7 @@ import {
29
31
  listUserProjects,
30
32
  validateToken
31
33
  } from "./chunk-SMNIGNS3.js";
32
- import "./chunk-3SKN5L3I.js";
34
+ import "./chunk-6OPRRC2J.js";
33
35
  import "./chunk-4ICDSQCJ.js";
34
36
 
35
37
  // src/commands/setup.ts
@@ -106,7 +108,7 @@ async function selectProjectSummary(client) {
106
108
  }
107
109
  const selectedProjectId = await abortIfCancelled(
108
110
  p.select({
109
- message: "Step 1/3 \u2014 Select a GitHub Project board:",
111
+ message: "Step 1/4 \u2014 Select a GitHub Project board:",
110
112
  options: projects.map((project) => ({
111
113
  value: project.id,
112
114
  label: `${project.owner.login}/${project.title}`,
@@ -345,7 +347,7 @@ async function runInteractive(flags, _options) {
345
347
  projectDetail.linkedRepositories
346
348
  );
347
349
  const mappings = await promptStateMappings(statusField, {
348
- stepLabel: "Step 2/3"
350
+ stepLabel: "Step 2/4"
349
351
  });
350
352
  const workflowValidation = validateStateMapping(mappings);
351
353
  if (!workflowValidation.valid) {
@@ -359,10 +361,18 @@ async function runInteractive(flags, _options) {
359
361
  for (const warning of workflowValidation.warnings) {
360
362
  p.log.warn(` \u26A0 ${warning}`);
361
363
  }
364
+ const lifecycleBase = toWorkflowLifecycleConfig(statusField.name, mappings);
365
+ const blockerCheckStates = await promptBlockerCheck(lifecycleBase, {
366
+ stepLabel: "Step 3/4"
367
+ });
368
+ const lifecycle = toWorkflowLifecycleConfig(statusField.name, mappings, {
369
+ blockerCheckStates,
370
+ planningStates: blockerCheckStates
371
+ });
362
372
  const { priority, priorityField } = await promptPriorityConfig({
363
373
  priorityResolution,
364
374
  labelNames: priorityLabelNames,
365
- stepLabel: "Step 3/3"
375
+ stepLabel: "Step 4/4"
366
376
  });
367
377
  const workflowPath = resolve(flags.output ?? "WORKFLOW.md");
368
378
  const { workflowPlan, ecosystemPlan } = await planWorkflowArtifacts({
@@ -374,6 +384,7 @@ async function runInteractive(flags, _options) {
374
384
  priority,
375
385
  includePriorityTemplates: priority.source === "disabled",
376
386
  mappings,
387
+ lifecycle,
377
388
  runtime: "codex",
378
389
  skipSkills: flags.skipSkills,
379
390
  skipContext: flags.skipContext
@@ -406,6 +417,7 @@ async function runInteractive(flags, _options) {
406
417
  statusField,
407
418
  priorityField,
408
419
  priority,
420
+ lifecycle,
409
421
  includePriorityTemplates: priority.source === "disabled",
410
422
  runtime: "codex",
411
423
  skipSkills: flags.skipSkills,
@@ -16,8 +16,8 @@ function execFileAsync(file, args, execFileImpl = execFileCallback) {
16
16
  });
17
17
  }
18
18
  function resolveCurrentCliVersion() {
19
- if ("0.2.5".length > 0) {
20
- return "0.2.5";
19
+ if ("0.4.0".length > 0) {
20
+ return "0.4.0";
21
21
  }
22
22
  const pkg = JSON.parse(
23
23
  readFileSync(new URL("../../package.json", import.meta.url), "utf8")
@@ -2,7 +2,7 @@
2
2
 
3
3
  // src/commands/version.ts
4
4
  var handler = async (_args, options) => {
5
- const version = "0.2.5";
5
+ const version = "0.4.0";
6
6
  if (options.json) {
7
7
  process.stdout.write(JSON.stringify({ version }) + "\n");
8
8
  } else {
@@ -6,7 +6,7 @@ import {
6
6
  normalizeCodexRuntimeEvents,
7
7
  prepareCodexRuntimePlan,
8
8
  resolveLocalRuntimeLaunchConfig
9
- } from "./chunk-FAU72YC2.js";
9
+ } from "./chunk-Z7CDL3T2.js";
10
10
  import {
11
11
  DEFAULT_AGENT_INPUT_REQUIRED_REASON,
12
12
  classifySessionExit,
@@ -17,7 +17,7 @@ import {
17
17
  resolveClaudeCommandBinary,
18
18
  resolveWorkflowRuntimeCommand,
19
19
  runClaudePreflight
20
- } from "./chunk-3SKN5L3I.js";
20
+ } from "./chunk-6OPRRC2J.js";
21
21
 
22
22
  // ../worker/src/index.ts
23
23
  import { spawn as spawn2 } from "child_process";
@@ -26,11 +26,11 @@ import { join as join2 } from "path";
26
26
 
27
27
  // ../worker/src/execution-phase.ts
28
28
  function resolveInitialExecutionPhase(input) {
29
- const { issueState, blockerCheckStates, activeStates } = input;
29
+ const { issueState, planningStates, activeStates } = input;
30
30
  if (!issueState) {
31
31
  return null;
32
32
  }
33
- if (blockerCheckStates.includes(issueState)) {
33
+ if (planningStates.includes(issueState)) {
34
34
  return "planning";
35
35
  }
36
36
  if (activeStates.includes(issueState)) {
@@ -788,7 +788,7 @@ async function startAssignedRun() {
788
788
  }
789
789
  runtimeState.executionPhase = resolveInitialExecutionPhase({
790
790
  issueState: runtimeState.run?.state,
791
- blockerCheckStates: workflow.lifecycle.blockerCheckStates,
791
+ planningStates: workflow.lifecycle.planningStates,
792
792
  activeStates: workflow.lifecycle.activeStates
793
793
  });
794
794
  runtimeState.runPhase = "launching_agent";
@@ -6,12 +6,12 @@ import {
6
6
  resetWorkflowCommandDependenciesForTest,
7
7
  setWorkflowCommandDependenciesForTest,
8
8
  workflow_default
9
- } from "./chunk-5U36B7FC.js";
10
- import "./chunk-DTPIJO6S.js";
11
- import "./chunk-NRABQNAX.js";
12
- import "./chunk-FAU72YC2.js";
9
+ } from "./chunk-TTVGBHZI.js";
10
+ import "./chunk-ZPS4CQZJ.js";
11
+ import "./chunk-B6G3KGBB.js";
12
+ import "./chunk-Z7CDL3T2.js";
13
13
  import "./chunk-SMNIGNS3.js";
14
- import "./chunk-3SKN5L3I.js";
14
+ import "./chunk-6OPRRC2J.js";
15
15
  import "./chunk-4ICDSQCJ.js";
16
16
  export {
17
17
  workflow_default as default,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gh-symphony/cli",
3
- "version": "0.2.5",
3
+ "version": "0.4.0",
4
4
  "license": "MIT",
5
5
  "author": "hojinzs",
6
6
  "description": "Interactive CLI for GitHub Symphony orchestration",
@@ -42,11 +42,11 @@
42
42
  "devDependencies": {
43
43
  "tsup": "^8.5.1",
44
44
  "@gh-symphony/core": "0.0.14",
45
+ "@gh-symphony/orchestrator": "0.0.14",
45
46
  "@gh-symphony/dashboard": "0.0.14",
46
47
  "@gh-symphony/control-plane": "0.0.15",
47
- "@gh-symphony/orchestrator": "0.0.14",
48
- "@gh-symphony/runtime-claude": "0.0.14",
49
48
  "@gh-symphony/tracker-github": "0.0.14",
49
+ "@gh-symphony/runtime-claude": "0.0.14",
50
50
  "@gh-symphony/worker": "0.0.14"
51
51
  },
52
52
  "scripts": {