@gh-symphony/cli 0.2.2 → 0.2.3

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.
@@ -6,7 +6,7 @@ import {
6
6
  fetchGithubProjectIssueByRepositoryAndNumber,
7
7
  inspectManagedProjectSelection,
8
8
  resolveTrackerAdapter
9
- } from "./chunk-X4QSP3AX.js";
9
+ } from "./chunk-ZGNAAHLD.js";
10
10
  import {
11
11
  GitHubApiError,
12
12
  createClient,
@@ -68,9 +68,6 @@ async function initRepoRuntime(flags) {
68
68
  ...trackerAdapter === "linear" ? { activeStates: workflow.tracker.activeStates.join("\n") } : {},
69
69
  repository: `${repository.owner}/${repository.name}`
70
70
  };
71
- if (flags.assignedOnly) {
72
- trackerSettings.assignedOnly = true;
73
- }
74
71
  if (workflow.tracker.priorityFieldName) {
75
72
  trackerSettings.priorityFieldName = workflow.tracker.priorityFieldName;
76
73
  }
@@ -1545,11 +1545,12 @@ function resolveGitHubTrackerConfig(project, dependencies = {}) {
1545
1545
  );
1546
1546
  }
1547
1547
  const githubProjectId = requireTrackerSetting(project.tracker, "projectId");
1548
+ const assignedOnly = resolveAssignedOnly(project.tracker, dependencies);
1548
1549
  return {
1549
1550
  projectId: githubProjectId,
1550
1551
  token,
1551
1552
  apiUrl: project.tracker.apiUrl,
1552
- assignedOnly: readBooleanTrackerSetting(project.tracker, "assignedOnly"),
1553
+ assignedOnly,
1553
1554
  priority: project.tracker.priority ?? null,
1554
1555
  priorityFieldName: readOptionalStringTrackerSetting(
1555
1556
  project.tracker,
@@ -1558,6 +1559,26 @@ function resolveGitHubTrackerConfig(project, dependencies = {}) {
1558
1559
  timeoutMs: readNumberTrackerSetting(project.tracker, "timeoutMs")
1559
1560
  };
1560
1561
  }
1562
+ var warnedLegacyAssignedOnlyProjectIds = /* @__PURE__ */ new Set();
1563
+ function resolveAssignedOnly(tracker, dependencies) {
1564
+ if (dependencies.assignedOnly !== void 0) {
1565
+ return dependencies.assignedOnly;
1566
+ }
1567
+ const legacyAssignedOnly = readBooleanTrackerSetting(
1568
+ tracker,
1569
+ "assignedOnly"
1570
+ );
1571
+ if (legacyAssignedOnly) {
1572
+ const warningKey = `${tracker.adapter}:${tracker.bindingId}`;
1573
+ if (!warnedLegacyAssignedOnlyProjectIds.has(warningKey)) {
1574
+ warnedLegacyAssignedOnlyProjectIds.add(warningKey);
1575
+ console.warn(
1576
+ "[gh-symphony] Deprecated tracker.settings.assignedOnly detected. Use 'gh-symphony repo start --assigned-only' instead; persisted assignedOnly support will be removed in the next major release."
1577
+ );
1578
+ }
1579
+ }
1580
+ return legacyAssignedOnly;
1581
+ }
1561
1582
  function buildProjectItemsCacheKey(config, _dependencies) {
1562
1583
  return JSON.stringify({
1563
1584
  adapter: "github-project",
@@ -4053,6 +4074,7 @@ var OrchestratorService = class {
4053
4074
  }
4054
4075
  createTrackerDependencies() {
4055
4076
  return {
4077
+ assignedOnly: this.dependencies.assignedOnly,
4056
4078
  fetchImpl: this.dependencies.fetchImpl,
4057
4079
  projectItemsCache: createProjectItemsCache()
4058
4080
  };
@@ -5,13 +5,13 @@ import {
5
5
  parseIssueReference,
6
6
  readGitHubProjectBinding,
7
7
  renderIssueWorkflowPreview
8
- } from "./chunk-27UZ6KX2.js";
8
+ } from "./chunk-AA3T5AAJ.js";
9
9
  import "./chunk-PLBG7TZA.js";
10
10
  import {
11
11
  fetchGithubProjectIssueByRepositoryAndNumber,
12
12
  fetchGithubProjectIssues,
13
13
  inspectManagedProjectSelection
14
- } from "./chunk-X4QSP3AX.js";
14
+ } from "./chunk-ZGNAAHLD.js";
15
15
  import "./chunk-FAU72YC2.js";
16
16
  import {
17
17
  resolveRuntimeRoot
package/dist/index.js CHANGED
@@ -60,7 +60,6 @@ var COMMAND_OPTIONS = {
60
60
  "workflow:preview": ["--file", "--sample", "--attempt", ...GLOBAL_OPTIONS],
61
61
  setup: [
62
62
  "--non-interactive",
63
- "--assigned-only",
64
63
  "--output",
65
64
  "--skip-skills",
66
65
  "--skip-context",
@@ -77,7 +76,7 @@ var COMMAND_OPTIONS = {
77
76
  upgrade: [...GLOBAL_OPTIONS],
78
77
  repo: ["init", "start", "status", "stop", "run", "recover", "logs", "explain"],
79
78
  "repo:init": ["--repo-dir", "--workflow-file", ...GLOBAL_OPTIONS],
80
- "repo:start": ["--daemon", "-d", "--once", "--http", "--web", "--log-level", ...GLOBAL_OPTIONS],
79
+ "repo:start": ["--daemon", "-d", "--once", "--assigned-only", "--http", "--web", "--log-level", ...GLOBAL_OPTIONS],
81
80
  "repo:status": ["--watch", "-w", ...GLOBAL_OPTIONS],
82
81
  "repo:stop": ["--force", ...GLOBAL_OPTIONS],
83
82
  "repo:run": ["--watch", ...GLOBAL_OPTIONS],
@@ -234,7 +233,7 @@ ${bashFunction}complete -F _gh_symphony_completion gh-symphony
234
233
  }
235
234
 
236
235
  // src/commands/help.ts
237
- var DESCRIPTION_COLUMN = 23;
236
+ var DESCRIPTION_COLUMN = 30;
238
237
  var COMMAND_COLUMN_WIDTH = DESCRIPTION_COLUMN - 2;
239
238
  var HELP_SECTIONS = [
240
239
  {
@@ -289,6 +288,10 @@ var HELP_SECTIONS = [
289
288
  name: "repo start --daemon",
290
289
  description: "Start the orchestrator in the background"
291
290
  },
291
+ {
292
+ name: "repo start --assigned-only",
293
+ description: "Process only issues assigned to the authenticated user"
294
+ },
292
295
  {
293
296
  name: "repo stop",
294
297
  description: "Stop the background orchestrator"
@@ -414,13 +417,13 @@ function createRemovedCommandHandler(message) {
414
417
 
415
418
  // src/index.ts
416
419
  var COMMANDS = {
417
- workflow: () => import("./workflow-2ERPNGRB.js"),
418
- setup: () => import("./setup-XNOSJ3RX.js"),
419
- doctor: () => import("./doctor-GDZSGJIT.js"),
420
- upgrade: () => import("./upgrade-ZWUAJLHK.js"),
421
- repo: () => import("./repo-SWEUWY4H.js"),
420
+ workflow: () => import("./workflow-ZPERNZJT.js"),
421
+ setup: () => import("./setup-KZ3U53PY.js"),
422
+ doctor: () => import("./doctor-GIJAH7MA.js"),
423
+ upgrade: () => import("./upgrade-K2PNQNWE.js"),
424
+ repo: () => import("./repo-LNO3Q3O7.js"),
422
425
  config: () => import("./config-cmd-AOZVS6GU.js"),
423
- version: () => import("./version-PLQK6X2P.js")
426
+ version: () => import("./version-E45DDQPQ.js")
424
427
  };
425
428
  function addGlobalOptions(command) {
426
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");
@@ -562,13 +565,12 @@ function createProgram() {
562
565
  await invokeHandler("workflow", args, values);
563
566
  });
564
567
  addGlobalOptions(
565
- program.command("setup").description("Run the one-command first-run setup flow").option("--non-interactive", "Run without prompts").option("--assigned-only", "Limit processing to assigned issues").option("--output <path>", "Write WORKFLOW.md to a custom path").option("--skip-skills", "Skip runtime skill generation").option("--skip-context", "Skip .gh-symphony/context.yaml generation").allowExcessArguments(false)
568
+ program.command("setup").description("Run the one-command first-run setup flow").option("--non-interactive", "Run without prompts").option("--output <path>", "Write WORKFLOW.md to a custom path").option("--skip-skills", "Skip runtime skill generation").option("--skip-context", "Skip .gh-symphony/context.yaml generation").allowExcessArguments(false)
566
569
  ).action(async function() {
567
570
  markInvoked();
568
571
  const values = this.optsWithGlobals();
569
572
  const args = [];
570
573
  pushOption(args, "--non-interactive", values.nonInteractive);
571
- pushOption(args, "--assigned-only", values.assignedOnly);
572
574
  pushOption(args, "--output", values.output);
573
575
  pushOption(args, "--skip-skills", values.skipSkills);
574
576
  pushOption(args, "--skip-context", values.skipContext);
@@ -700,7 +702,7 @@ function createProgram() {
700
702
  await invokeHandler("repo", args, values);
701
703
  });
702
704
  addGlobalOptions(
703
- repo.command("start").description("Start the orchestrator for the current repository").option("-d, --daemon", "Start in daemon mode").option("--once", "Run a single orchestration tick and exit").option(
705
+ repo.command("start").description("Start the orchestrator for the current repository").option("-d, --daemon", "Start in daemon mode").option("--once", "Run a single orchestration tick and exit").option("--assigned-only", "Limit this run to assigned issues").option(
704
706
  "--http [port]",
705
707
  "Expose dashboard and refresh endpoints over HTTP"
706
708
  ).option(
@@ -713,6 +715,7 @@ function createProgram() {
713
715
  const args = ["start", ...this.args];
714
716
  pushOption(args, "--daemon", values.daemon);
715
717
  pushOption(args, "--once", values.once);
718
+ pushOption(args, "--assigned-only", values.assignedOnly);
716
719
  pushOption(args, "--http", values.http);
717
720
  pushOption(args, "--web", values.web);
718
721
  pushOption(args, "--log-level", values.logLevel);
@@ -17,7 +17,7 @@ import {
17
17
  import {
18
18
  initRepoRuntime,
19
19
  parseRepoRuntimeFlags
20
- } from "./chunk-6PFFGP7S.js";
20
+ } from "./chunk-DLZ2XHWY.js";
21
21
  import {
22
22
  OrchestratorService,
23
23
  acquireProjectLock,
@@ -33,7 +33,7 @@ import {
33
33
  resolveOrchestratorLogLevel,
34
34
  resolveTrackerAdapter,
35
35
  runCli
36
- } from "./chunk-X4QSP3AX.js";
36
+ } from "./chunk-ZGNAAHLD.js";
37
37
  import "./chunk-FAU72YC2.js";
38
38
  import {
39
39
  resolveRepoRuntimeRoot,
@@ -1454,6 +1454,10 @@ function parseStartArgs(args) {
1454
1454
  parsed.once = true;
1455
1455
  continue;
1456
1456
  }
1457
+ if (arg === "--assigned-only") {
1458
+ parsed.assignedOnly = true;
1459
+ continue;
1460
+ }
1457
1461
  if (arg === "--http") {
1458
1462
  const value = args[i + 1];
1459
1463
  if (!value || value.startsWith("-")) {
@@ -1716,7 +1720,7 @@ var handler5 = async (args, options) => {
1716
1720
  process.stderr.write(`${parsed.error}
1717
1721
  `);
1718
1722
  process.stderr.write(
1719
- "Usage: gh-symphony repo start [--daemon] [--once] [--http [port]] [--web [port]]\n"
1723
+ "Usage: gh-symphony repo start [--daemon] [--once] [--assigned-only] [--http [port]] [--web [port]]\n"
1720
1724
  );
1721
1725
  process.exitCode = 2;
1722
1726
  return;
@@ -1764,7 +1768,8 @@ var handler5 = async (args, options) => {
1764
1768
  projectId,
1765
1769
  parsed.logLevel,
1766
1770
  parsed.httpPort,
1767
- parsed.webPort
1771
+ parsed.webPort,
1772
+ parsed.assignedOnly === true
1768
1773
  );
1769
1774
  return;
1770
1775
  }
@@ -1786,6 +1791,7 @@ var handler5 = async (args, options) => {
1786
1791
  let isFirst = true;
1787
1792
  const service = new OrchestratorService(store, projectConfig, {
1788
1793
  logLevel,
1794
+ assignedOnly: parsed.assignedOnly,
1789
1795
  onTick: async (snapshot) => {
1790
1796
  try {
1791
1797
  logTickResult(snapshot, prevSnapshot, isFirst);
@@ -2018,7 +2024,7 @@ async function tailWorkerLog(runtimeRoot, projectId, runId, issueIdentifier) {
2018
2024
  }
2019
2025
  }
2020
2026
  var start_default = handler5;
2021
- async function startDaemon(options, projectId, logLevel, httpPort, webPort) {
2027
+ async function startDaemon(options, projectId, logLevel, httpPort, webPort, assignedOnly = false) {
2022
2028
  const logPath = orchestratorLogPath(options.configDir, projectId);
2023
2029
  await mkdir(dirname2(logPath), { recursive: true });
2024
2030
  const { openSync } = await import("fs");
@@ -2029,6 +2035,7 @@ async function startDaemon(options, projectId, logLevel, httpPort, webPort) {
2029
2035
  process.argv[1],
2030
2036
  "repo",
2031
2037
  "start",
2038
+ ...assignedOnly ? ["--assigned-only"] : [],
2032
2039
  ...httpPort !== void 0 ? ["--http", String(httpPort)] : [],
2033
2040
  ...webPort !== void 0 ? ["--web", String(webPort)] : [],
2034
2041
  ...logLevel ? ["--log-level", logLevel] : []
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-PLBG7TZA.js";
16
16
  import {
17
17
  initRepoRuntime
18
- } from "./chunk-6PFFGP7S.js";
18
+ } from "./chunk-DLZ2XHWY.js";
19
19
  import "./chunk-RZ3WO7OV.js";
20
20
  import {
21
21
  GhAuthError,
@@ -48,9 +48,6 @@ function parseSetupFlags(args) {
48
48
  case "--non-interactive":
49
49
  flags.nonInteractive = true;
50
50
  break;
51
- case "--assigned-only":
52
- flags.assignedOnly = true;
53
- break;
54
51
  case "--output":
55
52
  flags.output = next;
56
53
  i += 1;
@@ -64,7 +61,7 @@ function parseSetupFlags(args) {
64
61
  default:
65
62
  if (arg?.startsWith("-")) {
66
63
  throw new Error(
67
- `Unknown option '${arg}'. Removed project/workspace flags are no longer supported; run 'gh-symphony setup' from inside the target repository. Supported flags: --non-interactive, --assigned-only, --output, --skip-skills, --skip-context.`
64
+ `Unknown option '${arg}'. Removed project/workspace flags are no longer supported; run 'gh-symphony setup' from inside the target repository. Supported flags: --non-interactive, --output, --skip-skills, --skip-context.`
68
65
  );
69
66
  }
70
67
  }
@@ -249,8 +246,7 @@ Run setup without --non-interactive for manual mapping.
249
246
  });
250
247
  const runtime = await initRepoRuntime({
251
248
  repoDir: process.cwd(),
252
- workflowFile: workflowPath,
253
- assignedOnly: flags.assignedOnly
249
+ workflowFile: workflowPath
254
250
  });
255
251
  if (options.json) {
256
252
  process.stdout.write(
@@ -343,7 +339,7 @@ async function runInteractive(flags, _options) {
343
339
  projectDetail.linkedRepositories
344
340
  );
345
341
  const mappings = await promptStateMappings(statusField, {
346
- stepLabel: "Step 2/4"
342
+ stepLabel: "Step 2/3"
347
343
  });
348
344
  const workflowValidation = validateStateMapping(mappings);
349
345
  if (!workflowValidation.valid) {
@@ -360,15 +356,8 @@ async function runInteractive(flags, _options) {
360
356
  const { priority, priorityField } = await promptPriorityConfig({
361
357
  priorityResolution,
362
358
  labelNames: priorityLabelNames,
363
- stepLabel: "Step 3/4"
359
+ stepLabel: "Step 3/3"
364
360
  });
365
- const promptAssignedOnly = await abortIfCancelled(
366
- p.confirm({
367
- message: `${"Step 4/4"} \u2014 Only process issues assigned to the authenticated GitHub user?`,
368
- initialValue: flags.assignedOnly ?? false
369
- })
370
- );
371
- const assignedOnly = flags.assignedOnly || promptAssignedOnly;
372
361
  const workflowPath = resolve(flags.output ?? "WORKFLOW.md");
373
362
  const { workflowPlan, ecosystemPlan } = await planWorkflowArtifacts({
374
363
  cwd: process.cwd(),
@@ -388,7 +377,6 @@ async function runInteractive(flags, _options) {
388
377
  `GitHub Project: ${projectDetail.title}`,
389
378
  `Authenticated: ${login}`,
390
379
  `Repository: current working directory`,
391
- `Assigned: ${assignedOnly ? `Only issues assigned to ${login}` : "All project issues"}`,
392
380
  "",
393
381
  renderDryRunPreview(workflowPath, workflowPlan, ecosystemPlan).trimEnd()
394
382
  ].join("\n"),
@@ -419,8 +407,7 @@ async function runInteractive(flags, _options) {
419
407
  });
420
408
  const runtime = await initRepoRuntime({
421
409
  repoDir: process.cwd(),
422
- workflowFile: workflowPath,
423
- assignedOnly
410
+ workflowFile: workflowPath
424
411
  });
425
412
  writeSpinner.stop(`Setup saved for ${runtime.repository.owner}/${runtime.repository.name}.`);
426
413
  } catch (error) {
@@ -16,8 +16,8 @@ function execFileAsync(file, args, execFileImpl = execFileCallback) {
16
16
  });
17
17
  }
18
18
  function resolveCurrentCliVersion() {
19
- if ("0.2.2".length > 0) {
20
- return "0.2.2";
19
+ if ("0.2.3".length > 0) {
20
+ return "0.2.3";
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.2";
5
+ const version = "0.2.3";
6
6
  if (options.json) {
7
7
  process.stdout.write(JSON.stringify({ version }) + "\n");
8
8
  } else {
@@ -6,9 +6,9 @@ import {
6
6
  resetWorkflowCommandDependenciesForTest,
7
7
  setWorkflowCommandDependenciesForTest,
8
8
  workflow_default
9
- } from "./chunk-27UZ6KX2.js";
9
+ } from "./chunk-AA3T5AAJ.js";
10
10
  import "./chunk-PLBG7TZA.js";
11
- import "./chunk-X4QSP3AX.js";
11
+ import "./chunk-ZGNAAHLD.js";
12
12
  import "./chunk-FAU72YC2.js";
13
13
  import "./chunk-BOM2BYZQ.js";
14
14
  import "./chunk-3SKN5L3I.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gh-symphony/cli",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "license": "MIT",
5
5
  "author": "hojinzs",
6
6
  "description": "Interactive CLI for GitHub Symphony orchestration",
@@ -42,12 +42,12 @@
42
42
  "devDependencies": {
43
43
  "tsup": "^8.5.1",
44
44
  "@gh-symphony/core": "0.0.14",
45
+ "@gh-symphony/dashboard": "0.0.14",
45
46
  "@gh-symphony/orchestrator": "0.0.14",
46
- "@gh-symphony/control-plane": "0.0.15",
47
47
  "@gh-symphony/runtime-claude": "0.0.14",
48
+ "@gh-symphony/worker": "0.0.14",
48
49
  "@gh-symphony/tracker-github": "0.0.14",
49
- "@gh-symphony/dashboard": "0.0.14",
50
- "@gh-symphony/worker": "0.0.14"
50
+ "@gh-symphony/control-plane": "0.0.15"
51
51
  },
52
52
  "scripts": {
53
53
  "build": "tsup",