@iloom/cli 0.8.0 → 0.8.1

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 (39) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/dist/{PRManager-XLTVG6YG.js → PRManager-H4TUZTZL.js} +4 -4
  4. package/dist/README.md +1 -1
  5. package/dist/agents/iloom-code-reviewer.md +16 -1
  6. package/dist/agents/iloom-framework-detector.md +1 -1
  7. package/dist/agents/iloom-issue-analyze-and-plan.md +1 -1
  8. package/dist/agents/iloom-issue-analyzer.md +1 -1
  9. package/dist/agents/iloom-issue-enhancer.md +1 -1
  10. package/dist/agents/iloom-issue-implementer.md +2 -2
  11. package/dist/agents/iloom-issue-planner.md +1 -1
  12. package/dist/{chunk-YAVVDZVF.js → chunk-EQOFNPEY.js} +2 -2
  13. package/dist/{chunk-WNXYC7J4.js → chunk-NR64HNF7.js} +2 -2
  14. package/dist/{chunk-AZH27CPV.js → chunk-PBSHQVCT.js} +2 -2
  15. package/dist/{chunk-LFVRG6UU.js → chunk-RNBIISBZ.js} +4 -2
  16. package/dist/chunk-RNBIISBZ.js.map +1 -0
  17. package/dist/{chunk-QJX6ICWY.js → chunk-SC6X5EBG.js} +2 -2
  18. package/dist/{chunk-L4CN7YQT.js → chunk-UDZCTLD6.js} +2 -2
  19. package/dist/{cleanup-25PCP2EM.js → cleanup-OGE7V7AD.js} +2 -2
  20. package/dist/cli.js +222 -19
  21. package/dist/cli.js.map +1 -1
  22. package/dist/{commit-SS77KUNX.js → commit-534QIRHY.js} +3 -3
  23. package/dist/{ignite-CPXPZ4ZD.js → ignite-ZO7SGUKP.js} +3 -3
  24. package/dist/{plan-N3YDCOIV.js → plan-PIME6UNY.js} +4 -4
  25. package/dist/prompts/init-prompt.txt +26 -2
  26. package/dist/{summary-5UWNLAI5.js → summary-C5VVSJAJ.js} +5 -5
  27. package/package.json +1 -1
  28. package/dist/chunk-LFVRG6UU.js.map +0 -1
  29. /package/dist/{PRManager-XLTVG6YG.js.map → PRManager-H4TUZTZL.js.map} +0 -0
  30. /package/dist/{chunk-YAVVDZVF.js.map → chunk-EQOFNPEY.js.map} +0 -0
  31. /package/dist/{chunk-WNXYC7J4.js.map → chunk-NR64HNF7.js.map} +0 -0
  32. /package/dist/{chunk-AZH27CPV.js.map → chunk-PBSHQVCT.js.map} +0 -0
  33. /package/dist/{chunk-QJX6ICWY.js.map → chunk-SC6X5EBG.js.map} +0 -0
  34. /package/dist/{chunk-L4CN7YQT.js.map → chunk-UDZCTLD6.js.map} +0 -0
  35. /package/dist/{cleanup-25PCP2EM.js.map → cleanup-OGE7V7AD.js.map} +0 -0
  36. /package/dist/{commit-SS77KUNX.js.map → commit-534QIRHY.js.map} +0 -0
  37. /package/dist/{ignite-CPXPZ4ZD.js.map → ignite-ZO7SGUKP.js.map} +0 -0
  38. /package/dist/{plan-N3YDCOIV.js.map → plan-PIME6UNY.js.map} +0 -0
  39. /package/dist/{summary-5UWNLAI5.js.map → summary-C5VVSJAJ.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SessionSummaryService
4
- } from "./chunk-AZH27CPV.js";
4
+ } from "./chunk-PBSHQVCT.js";
5
5
  import "./chunk-NXMDEL3F.js";
6
6
  import {
7
7
  CLIIsolationManager,
@@ -9,7 +9,7 @@ import {
9
9
  EnvironmentManager,
10
10
  LoomManager,
11
11
  ResourceCleanup
12
- } from "./chunk-WNXYC7J4.js";
12
+ } from "./chunk-NR64HNF7.js";
13
13
  import {
14
14
  launchFirstRunSetup,
15
15
  needsFirstRunSetup
@@ -20,7 +20,7 @@ import {
20
20
  } from "./chunk-ECP77QGE.js";
21
21
  import {
22
22
  IssueTrackerFactory
23
- } from "./chunk-QJX6ICWY.js";
23
+ } from "./chunk-SC6X5EBG.js";
24
24
  import {
25
25
  ProcessManager
26
26
  } from "./chunk-XHNACIHO.js";
@@ -62,14 +62,16 @@ import {
62
62
  import "./chunk-XPKN3QWY.js";
63
63
  import {
64
64
  PRManager
65
- } from "./chunk-YAVVDZVF.js";
65
+ } from "./chunk-EQOFNPEY.js";
66
66
  import {
67
67
  openBrowser
68
68
  } from "./chunk-YETJNRQM.js";
69
69
  import {
70
70
  IssueManagementProviderFactory
71
- } from "./chunk-L4CN7YQT.js";
72
- import "./chunk-LFVRG6UU.js";
71
+ } from "./chunk-UDZCTLD6.js";
72
+ import {
73
+ getLinearChildIssues
74
+ } from "./chunk-RNBIISBZ.js";
73
75
  import {
74
76
  getConfiguredRepoFromSettings,
75
77
  hasMultipleRemotes
@@ -112,7 +114,9 @@ import {
112
114
  import {
113
115
  GitHubService
114
116
  } from "./chunk-PVW6JE7E.js";
115
- import "./chunk-THS5L54H.js";
117
+ import {
118
+ getSubIssues
119
+ } from "./chunk-THS5L54H.js";
116
120
  import {
117
121
  promptConfirmation,
118
122
  waitForKeypress
@@ -1896,7 +1900,9 @@ function formatLoomForJson(worktree, mainWorktreePath, metadata) {
1896
1900
  projectPath: (metadata == null ? void 0 : metadata.projectPath) ?? null,
1897
1901
  issueUrls: (metadata == null ? void 0 : metadata.issueUrls) ?? {},
1898
1902
  prUrls: (metadata == null ? void 0 : metadata.prUrls) ?? {},
1899
- capabilities: (metadata == null ? void 0 : metadata.capabilities) ?? []
1903
+ capabilities: (metadata == null ? void 0 : metadata.capabilities) ?? [],
1904
+ isChildLoom: (metadata == null ? void 0 : metadata.parentLoom) != null,
1905
+ parentLoom: (metadata == null ? void 0 : metadata.parentLoom) ?? null
1900
1906
  };
1901
1907
  }
1902
1908
  function formatLoomsForJson(worktrees, mainWorktreePath, metadata) {
@@ -1923,8 +1929,112 @@ function formatFinishedLoomForJson(metadata) {
1923
1929
  prUrls: metadata.prUrls ?? {},
1924
1930
  capabilities: metadata.capabilities ?? [],
1925
1931
  status: metadata.status ?? "finished",
1926
- finishedAt: metadata.finishedAt ?? null
1932
+ finishedAt: metadata.finishedAt ?? null,
1933
+ isChildLoom: metadata.parentLoom != null,
1934
+ parentLoom: metadata.parentLoom ?? null
1935
+ };
1936
+ }
1937
+
1938
+ // src/utils/list-children.ts
1939
+ async function fetchChildIssues(parentIssueNumber, settings, repo) {
1940
+ const providerName = IssueTrackerFactory.getProviderName(settings);
1941
+ logger.debug("Fetching child issues", { parentIssueNumber, provider: providerName, repo });
1942
+ const results = await Promise.allSettled([
1943
+ (async () => {
1944
+ if (providerName === "github") {
1945
+ const issueNum = parseInt(parentIssueNumber, 10);
1946
+ if (isNaN(issueNum)) {
1947
+ logger.warn(`Invalid GitHub issue number: ${parentIssueNumber}`);
1948
+ return [];
1949
+ }
1950
+ return getSubIssues(issueNum, repo);
1951
+ } else if (providerName === "linear") {
1952
+ return getLinearChildIssues(parentIssueNumber);
1953
+ } else {
1954
+ logger.warn(`Unsupported issue tracker provider: ${providerName}`);
1955
+ return [];
1956
+ }
1957
+ })()
1958
+ ]);
1959
+ const result = results[0];
1960
+ if (result.status === "fulfilled") {
1961
+ return result.value;
1962
+ } else {
1963
+ logger.warn(`Failed to fetch child issues for ${parentIssueNumber}`, { error: result.reason });
1964
+ return [];
1965
+ }
1966
+ }
1967
+ async function findChildLooms(parentBranchName, metadataManager) {
1968
+ logger.debug("Finding child looms", { parentBranchName });
1969
+ const allMetadata = await metadataManager.listAllMetadata();
1970
+ const childLooms = allMetadata.filter((metadata) => {
1971
+ if (!metadata.parentLoom) {
1972
+ return false;
1973
+ }
1974
+ return metadata.parentLoom.branchName === parentBranchName;
1975
+ });
1976
+ logger.debug(`Found ${childLooms.length} child looms for parent: ${parentBranchName}`);
1977
+ return childLooms;
1978
+ }
1979
+ function matchChildrenData(childIssues, childLooms) {
1980
+ const issueToLoomMap = /* @__PURE__ */ new Map();
1981
+ for (const loom of childLooms) {
1982
+ for (const issueNum of loom.issue_numbers) {
1983
+ issueToLoomMap.set(issueNum, loom);
1984
+ }
1985
+ }
1986
+ const childIssueIds = new Set(childIssues.map((issue) => issue.id));
1987
+ const matchedIssues = childIssues.map((issue) => {
1988
+ const matchingLoom = issueToLoomMap.get(issue.id);
1989
+ return {
1990
+ id: issue.id,
1991
+ title: issue.title,
1992
+ url: issue.url,
1993
+ state: issue.state,
1994
+ hasActiveLoom: matchingLoom != null,
1995
+ loomBranch: (matchingLoom == null ? void 0 : matchingLoom.branchName) ?? null
1996
+ };
1997
+ });
1998
+ const matchedLooms = childLooms.map((loom) => {
1999
+ const hasMatchingIssue = loom.issue_numbers.some((issueNum) => childIssueIds.has(issueNum));
2000
+ return {
2001
+ branch: loom.branchName ?? "",
2002
+ issueNumbers: loom.issue_numbers,
2003
+ hasMatchingIssue
2004
+ };
2005
+ });
2006
+ const summary = {
2007
+ totalIssues: matchedIssues.length,
2008
+ issuesWithLooms: matchedIssues.filter((issue) => issue.hasActiveLoom).length,
2009
+ totalLooms: matchedLooms.length,
2010
+ orphanLooms: matchedLooms.filter((loom) => !loom.hasMatchingIssue).length
1927
2011
  };
2012
+ return {
2013
+ issues: matchedIssues,
2014
+ looms: matchedLooms,
2015
+ summary
2016
+ };
2017
+ }
2018
+ async function assembleChildrenData(parentLoom, metadataManager, settings, repo) {
2019
+ if (!parentLoom.issue_numbers || parentLoom.issue_numbers.length === 0) {
2020
+ logger.debug("No issue_numbers on loom, skipping children fetch", {
2021
+ branch: parentLoom.branchName
2022
+ });
2023
+ return null;
2024
+ }
2025
+ if (!parentLoom.branchName) {
2026
+ logger.debug("No branchName on loom, skipping children fetch");
2027
+ return null;
2028
+ }
2029
+ const parentIssueNumber = parentLoom.issue_numbers[0];
2030
+ if (parentIssueNumber === void 0) {
2031
+ return null;
2032
+ }
2033
+ const [childIssues, childLooms] = await Promise.all([
2034
+ fetchChildIssues(parentIssueNumber, settings, repo),
2035
+ findChildLooms(parentLoom.branchName, metadataManager)
2036
+ ]);
2037
+ return matchChildrenData(childIssues, childLooms);
1928
2038
  }
1929
2039
 
1930
2040
  // src/cli.ts
@@ -2462,7 +2572,7 @@ program.command("finish").alias("dn").description("Merge work and cleanup worksp
2462
2572
  program.command("commit").alias("c").description("Commit all uncommitted files with issue reference").option("-m, --message <text>", "Custom commit message (skip Claude generation)").option("--fixes", 'Use "Fixes #N" trailer instead of "Refs #N" (closes issue)').option("--no-review", "Skip commit message review prompt").option("--json", "Output result as JSON (implies --no-review)").option("--wip-commit", "Quick WIP commit: skip validations and pre-commit hooks").action(async (options) => {
2463
2573
  const executeAction = async () => {
2464
2574
  try {
2465
- const { CommitCommand } = await import("./commit-SS77KUNX.js");
2575
+ const { CommitCommand } = await import("./commit-534QIRHY.js");
2466
2576
  const command = new CommitCommand();
2467
2577
  const noReview = options.review === false || options.json === true;
2468
2578
  const result = await command.execute({
@@ -2509,7 +2619,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
2509
2619
  new Option("--one-shot <mode>", "One-shot automation mode").choices(["default", "noReview", "bypassPermissions"])
2510
2620
  ).action(async (options) => {
2511
2621
  try {
2512
- const { IgniteCommand } = await import("./ignite-CPXPZ4ZD.js");
2622
+ const { IgniteCommand } = await import("./ignite-ZO7SGUKP.js");
2513
2623
  const command = new IgniteCommand();
2514
2624
  await command.execute(options.oneShot);
2515
2625
  } catch (error) {
@@ -2604,7 +2714,7 @@ program.command("compile").alias("typecheck").description("Run the compile or ty
2604
2714
  program.command("cleanup").alias("remove").alias("clean").description("Remove workspaces").argument("[identifier]", "Branch name or issue number to cleanup (auto-detected)").option("-l, --list", "List all worktrees").option("-a, --all", "Remove all worktrees (interactive confirmation)").option("-i, --issue <number>", "Cleanup by issue number", parseInt).option("-f, --force", "Skip confirmations and force removal").option("--dry-run", "Show what would be done without doing it").option("--json", "Output result as JSON").option("--defer <ms>", "Wait specified milliseconds before cleanup", parseInt).action(async (identifier, options) => {
2605
2715
  const executeAction = async () => {
2606
2716
  try {
2607
- const { CleanupCommand } = await import("./cleanup-25PCP2EM.js");
2717
+ const { CleanupCommand } = await import("./cleanup-OGE7V7AD.js");
2608
2718
  const command = new CleanupCommand();
2609
2719
  const input = {
2610
2720
  options: options ?? {}
@@ -2633,7 +2743,7 @@ program.command("cleanup").alias("remove").alias("clean").description("Remove wo
2633
2743
  await executeAction();
2634
2744
  }
2635
2745
  });
2636
- program.command("list").description("Show active workspaces").option("--json", "Output as JSON").option("--finished", "Show only finished looms (sorted by finish time, latest first)").option("--all", "Show both active and finished looms").option("--global", "Show looms from all projects (default: current project only)").action(async (options) => {
2746
+ program.command("list").description("Show active workspaces").option("--json", "Output as JSON").option("--finished", "Show only finished looms (sorted by finish time, latest first)").option("--all", "Show both active and finished looms").option("--global", "Show looms from all projects (default: current project only)").option("--children", "Fetch and display child issues and child looms for each parent loom").action(async (options) => {
2637
2747
  try {
2638
2748
  const manager = new GitWorktreeManager();
2639
2749
  const metadataManager = new MetadataManager();
@@ -2732,7 +2842,9 @@ program.command("list").description("Show active workspaces").option("--json", "
2732
2842
  issueUrls: loom.issueUrls ?? {},
2733
2843
  prUrls: loom.prUrls ?? {},
2734
2844
  status: "active",
2735
- finishedAt: null
2845
+ finishedAt: null,
2846
+ isChildLoom: loom.parentLoom != null,
2847
+ parentLoom: loom.parentLoom ?? null
2736
2848
  }));
2737
2849
  } else {
2738
2850
  activeJson = formatLoomsForJson(worktrees, mainWorktreePath, metadata).map((loom) => ({
@@ -2753,6 +2865,47 @@ program.command("list").description("Show active workspaces").option("--json", "
2753
2865
  (loom) => loom.projectPath == null || loom.projectPath === currentProjectPath
2754
2866
  );
2755
2867
  }
2868
+ if (options.children) {
2869
+ const settingsManager = new SettingsManager();
2870
+ const settings = await settingsManager.loadSettings();
2871
+ const activeChildrenResults = await Promise.allSettled(
2872
+ activeJson.map(async (loom) => {
2873
+ const index = activeJson.indexOf(loom);
2874
+ const loomMetadata = options.global ? globalActiveLooms.find((m) => m.branchName === loom.branch) : metadata.get(loom.worktreePath ?? "");
2875
+ if (!loomMetadata) {
2876
+ return { index, children: null };
2877
+ }
2878
+ const children = await assembleChildrenData(loomMetadata, metadataManager, settings);
2879
+ return { index, children };
2880
+ })
2881
+ );
2882
+ for (const result of activeChildrenResults) {
2883
+ if (result.status === "fulfilled" && result.value.children) {
2884
+ const loom = activeJson[result.value.index];
2885
+ if (loom) {
2886
+ loom.children = result.value.children;
2887
+ }
2888
+ }
2889
+ }
2890
+ const finishedChildrenResults = await Promise.allSettled(
2891
+ finishedJson.map(async (loom, index) => {
2892
+ const loomMetadata = finishedLooms.find((m) => m.branchName === loom.branch);
2893
+ if (!loomMetadata) {
2894
+ return { index, children: null };
2895
+ }
2896
+ const children = await assembleChildrenData(loomMetadata, metadataManager, settings);
2897
+ return { index, children };
2898
+ })
2899
+ );
2900
+ for (const result of finishedChildrenResults) {
2901
+ if (result.status === "fulfilled" && result.value.children) {
2902
+ const loom = finishedJson[result.value.index];
2903
+ if (loom) {
2904
+ loom.children = result.value.children;
2905
+ }
2906
+ }
2907
+ }
2908
+ }
2756
2909
  const allLooms = [...activeJson, ...finishedJson];
2757
2910
  console.log(JSON.stringify(allLooms, null, 2));
2758
2911
  return;
@@ -2769,11 +2922,20 @@ program.command("list").description("Show active workspaces").option("--json", "
2769
2922
  }
2770
2923
  return;
2771
2924
  }
2925
+ let textSettings = null;
2926
+ if (options.children) {
2927
+ const settingsManager = new SettingsManager();
2928
+ textSettings = await settingsManager.loadSettings();
2929
+ }
2772
2930
  if (showActive && hasActive) {
2773
2931
  logger.info("Active workspaces:");
2774
2932
  if (options.global) {
2775
2933
  for (const loom of filteredGlobalActiveLooms) {
2776
- logger.info(` ${loom.branchName ?? "unknown"}`);
2934
+ if (loom.parentLoom) {
2935
+ logger.info(` ${loom.branchName ?? "unknown"} (Child of: ${loom.parentLoom.branchName})`);
2936
+ } else {
2937
+ logger.info(` ${loom.branchName ?? "unknown"}`);
2938
+ }
2777
2939
  if (loom.description) {
2778
2940
  logger.info(` Description: ${loom.description}`);
2779
2941
  }
@@ -2783,17 +2945,43 @@ program.command("list").description("Show active workspaces").option("--json", "
2783
2945
  if (loom.projectPath) {
2784
2946
  logger.info(` Project: ${loom.projectPath}`);
2785
2947
  }
2948
+ if (options.children && textSettings) {
2949
+ const childrenData = await assembleChildrenData(loom, metadataManager, textSettings);
2950
+ if (childrenData && (childrenData.summary.totalIssues > 0 || childrenData.summary.totalLooms > 0)) {
2951
+ logger.info(` Child Issues: ${childrenData.summary.totalIssues} (${childrenData.summary.issuesWithLooms} with active looms)`);
2952
+ for (const issue of childrenData.issues) {
2953
+ if (!issue.hasActiveLoom) {
2954
+ logger.info(` [No loom] #${issue.id} - ${issue.title} (${issue.state})`);
2955
+ }
2956
+ }
2957
+ }
2958
+ }
2786
2959
  }
2787
2960
  } else {
2788
2961
  for (const worktree of filteredWorktrees) {
2789
2962
  const formatted = manager.formatWorktree(worktree);
2790
2963
  const loomMetadata = metadata.get(worktree.path);
2791
- logger.info(` ${formatted.title}`);
2964
+ if (loomMetadata == null ? void 0 : loomMetadata.parentLoom) {
2965
+ logger.info(` ${formatted.title} (Child of: ${loomMetadata.parentLoom.branchName})`);
2966
+ } else {
2967
+ logger.info(` ${formatted.title}`);
2968
+ }
2792
2969
  if (loomMetadata == null ? void 0 : loomMetadata.description) {
2793
2970
  logger.info(` Description: ${loomMetadata.description}`);
2794
2971
  }
2795
2972
  logger.info(` Path: ${formatted.path}`);
2796
2973
  logger.info(` Commit: ${formatted.commit}`);
2974
+ if (options.children && textSettings && loomMetadata) {
2975
+ const childrenData = await assembleChildrenData(loomMetadata, metadataManager, textSettings);
2976
+ if (childrenData && (childrenData.summary.totalIssues > 0 || childrenData.summary.totalLooms > 0)) {
2977
+ logger.info(` Child Issues: ${childrenData.summary.totalIssues} (${childrenData.summary.issuesWithLooms} with active looms)`);
2978
+ for (const issue of childrenData.issues) {
2979
+ if (!issue.hasActiveLoom) {
2980
+ logger.info(` [No loom] #${issue.id} - ${issue.title} (${issue.state})`);
2981
+ }
2982
+ }
2983
+ }
2984
+ }
2797
2985
  }
2798
2986
  }
2799
2987
  }
@@ -2803,13 +2991,28 @@ program.command("list").description("Show active workspaces").option("--json", "
2803
2991
  }
2804
2992
  logger.info("Finished looms:");
2805
2993
  for (const loom of filteredFinishedLooms) {
2806
- logger.info(` ${loom.branchName ?? "unknown"}`);
2994
+ if (loom.parentLoom) {
2995
+ logger.info(` ${loom.branchName ?? "unknown"} (Child of: ${loom.parentLoom.branchName})`);
2996
+ } else {
2997
+ logger.info(` ${loom.branchName ?? "unknown"}`);
2998
+ }
2807
2999
  if (loom.description) {
2808
3000
  logger.info(` Description: ${loom.description}`);
2809
3001
  }
2810
3002
  if (loom.finishedAt) {
2811
3003
  logger.info(` Finished: ${new Date(loom.finishedAt).toLocaleString()}`);
2812
3004
  }
3005
+ if (options.children && textSettings) {
3006
+ const childrenData = await assembleChildrenData(loom, metadataManager, textSettings);
3007
+ if (childrenData && (childrenData.summary.totalIssues > 0 || childrenData.summary.totalLooms > 0)) {
3008
+ logger.info(` Child Issues: ${childrenData.summary.totalIssues} (${childrenData.summary.issuesWithLooms} with active looms)`);
3009
+ for (const issue of childrenData.issues) {
3010
+ if (!issue.hasActiveLoom) {
3011
+ logger.info(` [No loom] #${issue.id} - ${issue.title} (${issue.state})`);
3012
+ }
3013
+ }
3014
+ }
3015
+ }
2813
3016
  }
2814
3017
  }
2815
3018
  } catch (error) {
@@ -2850,7 +3053,7 @@ program.command("init").alias("config").description("Initialize iloom configurat
2850
3053
  });
2851
3054
  program.command("plan").description("Launch interactive planning session with Architect persona").argument("[prompt]", "Initial planning prompt or topic").option("--model <model>", "Model to use (default: opus)").option("--yolo", "Enable autonomous mode - Claude proceeds without user interaction").option("--planner <provider>", "AI provider for planning: claude, gemini, codex (default: claude)").option("--reviewer <provider>", "AI provider for review: claude, gemini, codex, none (default: none)").action(async (prompt, options) => {
2852
3055
  try {
2853
- const { PlanCommand } = await import("./plan-N3YDCOIV.js");
3056
+ const { PlanCommand } = await import("./plan-PIME6UNY.js");
2854
3057
  const command = new PlanCommand();
2855
3058
  await command.execute(prompt, options == null ? void 0 : options.model, options == null ? void 0 : options.yolo, options == null ? void 0 : options.planner, options == null ? void 0 : options.reviewer);
2856
3059
  } catch (error) {
@@ -3130,7 +3333,7 @@ program.command("test-prefix").description("Test worktree prefix configuration -
3130
3333
  program.command("summary").description("Generate Claude session summary for a loom").argument("[identifier]", "Issue number, PR number (pr/123), or branch name (auto-detected if omitted)").option("--with-comment", "Post summary as a comment to the issue/PR").option("--json", "Output result as JSON").action(async (identifier, options) => {
3131
3334
  const executeAction = async () => {
3132
3335
  try {
3133
- const { SummaryCommand } = await import("./summary-5UWNLAI5.js");
3336
+ const { SummaryCommand } = await import("./summary-C5VVSJAJ.js");
3134
3337
  const command = new SummaryCommand();
3135
3338
  const result = await command.execute({ identifier, options });
3136
3339
  if (options.json && result) {