@iloom/cli 0.7.3 → 0.7.4

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 (66) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -1
  3. package/dist/{BranchNamingService-FLPUUFOB.js → BranchNamingService-UB2EJGFQ.js} +2 -2
  4. package/dist/{ClaudeContextManager-KE5TBZVZ.js → ClaudeContextManager-M57BQUMY.js} +4 -4
  5. package/dist/{ClaudeService-CRSETT3A.js → ClaudeService-FLZ2IXAO.js} +3 -3
  6. package/dist/{LoomLauncher-NL65LSKP.js → LoomLauncher-5PPVFTFN.js} +4 -4
  7. package/dist/{PRManager-2ABCWXHW.js → PRManager-YTG6XPMG.js} +3 -3
  8. package/dist/README.md +5 -1
  9. package/dist/{chunk-FEAJR6PN.js → chunk-33P5VSKS.js} +2 -2
  10. package/dist/{chunk-DAOS6EC3.js → chunk-37V2NBYR.js} +5 -3
  11. package/dist/{chunk-DAOS6EC3.js.map → chunk-37V2NBYR.js.map} +1 -1
  12. package/dist/{chunk-FM4KBPVA.js → chunk-3K3WY3BN.js} +2 -118
  13. package/dist/chunk-3K3WY3BN.js.map +1 -0
  14. package/dist/{chunk-C3AKFAIR.js → chunk-6VQNF44G.js} +2 -2
  15. package/dist/{chunk-HVQNVRAF.js → chunk-7FM7AL7S.js} +96 -3
  16. package/dist/chunk-7FM7AL7S.js.map +1 -0
  17. package/dist/{chunk-6TL3BYH6.js → chunk-7GKMQJGQ.js} +2 -2
  18. package/dist/{chunk-CNSTXBJ3.js → chunk-EDDIAWVM.js} +8 -4
  19. package/dist/chunk-EDDIAWVM.js.map +1 -0
  20. package/dist/{chunk-YQNSZKKT.js → chunk-GH4FLYV5.js} +8 -4
  21. package/dist/chunk-GH4FLYV5.js.map +1 -0
  22. package/dist/{chunk-FP7G7DG3.js → chunk-ITIXKM24.js} +8 -3
  23. package/dist/chunk-ITIXKM24.js.map +1 -0
  24. package/dist/{chunk-EPPPDVHD.js → chunk-JWUYPJ7K.js} +5 -3
  25. package/dist/chunk-JWUYPJ7K.js.map +1 -0
  26. package/dist/{chunk-QQFBMCAH.js → chunk-RVLRPQU4.js} +7 -7
  27. package/dist/{chunk-KVS4XGBQ.js → chunk-XAHE76RL.js} +2 -2
  28. package/dist/chunk-XAMBIVXE.js +121 -0
  29. package/dist/chunk-XAMBIVXE.js.map +1 -0
  30. package/dist/{claude-6H36IBHO.js → claude-SNWHWWWM.js} +2 -2
  31. package/dist/{cleanup-77U5ATYI.js → cleanup-PLMS2KWF.js} +5 -5
  32. package/dist/cli.js +44 -117
  33. package/dist/cli.js.map +1 -1
  34. package/dist/{commit-ONRXU67O.js → commit-NAGJH4J4.js} +3 -3
  35. package/dist/{feedback-K3A4QUSG.js → feedback-ICJ44XGB.js} +4 -3
  36. package/dist/{feedback-K3A4QUSG.js.map → feedback-ICJ44XGB.js.map} +1 -1
  37. package/dist/{ignite-YUAOJ5PP.js → ignite-U2JSVOEZ.js} +8 -6
  38. package/dist/{ignite-YUAOJ5PP.js.map → ignite-U2JSVOEZ.js.map} +1 -1
  39. package/dist/index.js +4 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/{init-XQQMFDM6.js → init-YDKOPB54.js} +3 -3
  42. package/dist/{rebase-QYCRF7JG.js → rebase-AONLKM2V.js} +3 -3
  43. package/dist/{summary-G6L3VAKK.js → summary-7KYFRAIM.js} +3 -3
  44. package/package.json +1 -1
  45. package/dist/chunk-CNSTXBJ3.js.map +0 -1
  46. package/dist/chunk-EPPPDVHD.js.map +0 -1
  47. package/dist/chunk-FM4KBPVA.js.map +0 -1
  48. package/dist/chunk-FP7G7DG3.js.map +0 -1
  49. package/dist/chunk-HVQNVRAF.js.map +0 -1
  50. package/dist/chunk-YQNSZKKT.js.map +0 -1
  51. /package/dist/{BranchNamingService-FLPUUFOB.js.map → BranchNamingService-UB2EJGFQ.js.map} +0 -0
  52. /package/dist/{ClaudeContextManager-KE5TBZVZ.js.map → ClaudeContextManager-M57BQUMY.js.map} +0 -0
  53. /package/dist/{ClaudeService-CRSETT3A.js.map → ClaudeService-FLZ2IXAO.js.map} +0 -0
  54. /package/dist/{LoomLauncher-NL65LSKP.js.map → LoomLauncher-5PPVFTFN.js.map} +0 -0
  55. /package/dist/{PRManager-2ABCWXHW.js.map → PRManager-YTG6XPMG.js.map} +0 -0
  56. /package/dist/{chunk-FEAJR6PN.js.map → chunk-33P5VSKS.js.map} +0 -0
  57. /package/dist/{chunk-C3AKFAIR.js.map → chunk-6VQNF44G.js.map} +0 -0
  58. /package/dist/{chunk-6TL3BYH6.js.map → chunk-7GKMQJGQ.js.map} +0 -0
  59. /package/dist/{chunk-QQFBMCAH.js.map → chunk-RVLRPQU4.js.map} +0 -0
  60. /package/dist/{chunk-KVS4XGBQ.js.map → chunk-XAHE76RL.js.map} +0 -0
  61. /package/dist/{claude-6H36IBHO.js.map → claude-SNWHWWWM.js.map} +0 -0
  62. /package/dist/{cleanup-77U5ATYI.js.map → cleanup-PLMS2KWF.js.map} +0 -0
  63. /package/dist/{commit-ONRXU67O.js.map → commit-NAGJH4J4.js.map} +0 -0
  64. /package/dist/{init-XQQMFDM6.js.map → init-YDKOPB54.js.map} +0 -0
  65. /package/dist/{rebase-QYCRF7JG.js.map → rebase-AONLKM2V.js.map} +0 -0
  66. /package/dist/{summary-G6L3VAKK.js.map → summary-7KYFRAIM.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-CNSTXBJ3.js";
4
+ } from "./chunk-EDDIAWVM.js";
5
5
  import "./chunk-NXMDEL3F.js";
6
6
  import {
7
7
  CLIIsolationManager,
@@ -9,15 +9,14 @@ import {
9
9
  EnvironmentManager,
10
10
  LoomManager,
11
11
  ResourceCleanup
12
- } from "./chunk-QQFBMCAH.js";
12
+ } from "./chunk-RVLRPQU4.js";
13
13
  import {
14
14
  BuildRunner,
15
15
  MergeManager
16
- } from "./chunk-DAOS6EC3.js";
16
+ } from "./chunk-37V2NBYR.js";
17
17
  import {
18
- IssueTrackerFactory,
19
- generateIssueManagementMcpConfig
20
- } from "./chunk-FM4KBPVA.js";
18
+ IssueTrackerFactory
19
+ } from "./chunk-3K3WY3BN.js";
21
20
  import {
22
21
  ProcessManager
23
22
  } from "./chunk-453NC377.js";
@@ -30,7 +29,7 @@ import {
30
29
  import {
31
30
  InitCommand,
32
31
  ShellCompletion
33
- } from "./chunk-FEAJR6PN.js";
32
+ } from "./chunk-33P5VSKS.js";
34
33
  import {
35
34
  FirstRunManager
36
35
  } from "./chunk-Q7POFB5Q.js";
@@ -38,7 +37,8 @@ import "./chunk-F2PWIRV4.js";
38
37
  import {
39
38
  IssueEnhancementService,
40
39
  capitalizeFirstLetter
41
- } from "./chunk-HVQNVRAF.js";
40
+ } from "./chunk-7FM7AL7S.js";
41
+ import "./chunk-XAMBIVXE.js";
42
42
  import {
43
43
  ProjectCapabilityDetector
44
44
  } from "./chunk-7GLZVDPQ.js";
@@ -49,7 +49,7 @@ import {
49
49
  CommitManager,
50
50
  UserAbortedCommitError,
51
51
  ValidationRunner
52
- } from "./chunk-YQNSZKKT.js";
52
+ } from "./chunk-GH4FLYV5.js";
53
53
  import {
54
54
  installDependencies
55
55
  } from "./chunk-RD7I2Q2F.js";
@@ -59,7 +59,7 @@ import {
59
59
  import "./chunk-XPKN3QWY.js";
60
60
  import {
61
61
  PRManager
62
- } from "./chunk-EPPPDVHD.js";
62
+ } from "./chunk-JWUYPJ7K.js";
63
63
  import {
64
64
  openBrowser
65
65
  } from "./chunk-YETJNRQM.js";
@@ -78,15 +78,15 @@ import {
78
78
  } from "./chunk-O7VL5N6S.js";
79
79
  import {
80
80
  ClaudeContextManager
81
- } from "./chunk-6TL3BYH6.js";
82
- import "./chunk-KVS4XGBQ.js";
81
+ } from "./chunk-7GKMQJGQ.js";
82
+ import "./chunk-XAHE76RL.js";
83
83
  import "./chunk-TIYJEEVO.js";
84
84
  import {
85
85
  extractSettingsOverrides
86
86
  } from "./chunk-GYCR2LOU.js";
87
87
  import {
88
88
  DefaultBranchNamingService
89
- } from "./chunk-C3AKFAIR.js";
89
+ } from "./chunk-6VQNF44G.js";
90
90
  import {
91
91
  GitCommandError,
92
92
  executeGitCommand,
@@ -116,9 +116,7 @@ import {
116
116
  waitForKeypress
117
117
  } from "./chunk-ZX3GTM7O.js";
118
118
  import "./chunk-433MOLAU.js";
119
- import {
120
- launchClaude
121
- } from "./chunk-FP7G7DG3.js";
119
+ import "./chunk-ITIXKM24.js";
122
120
  import {
123
121
  getLogger,
124
122
  withLogger
@@ -641,20 +639,18 @@ var AddIssueCommand = class {
641
639
 
642
640
  // src/commands/enhance.ts
643
641
  var EnhanceCommand = class {
644
- constructor(issueTracker, agentManager, settingsManager) {
642
+ constructor(issueTracker, enhancementService, settingsManager) {
645
643
  this.issueTracker = issueTracker;
646
- this.agentManager = agentManager ?? new AgentManager();
644
+ this.enhancementService = enhancementService;
647
645
  this.settingsManager = settingsManager ?? new SettingsManager();
648
646
  }
649
647
  /**
650
648
  * Execute the enhance command workflow:
651
649
  * 1. Validate issue number
652
650
  * 2. Fetch issue to verify it exists
653
- * 3. Load agent configurations
654
- * 4. Invoke Claude CLI with enhancer agent
655
- * 5. Parse response to determine outcome
656
- * 6. Handle browser interaction based on outcome (unless --json mode)
657
- * 7. Return result object when --json mode
651
+ * 3. Invoke enhancement service
652
+ * 4. Handle browser interaction based on outcome (unless --json mode)
653
+ * 5. Return result object when --json mode
658
654
  */
659
655
  async execute(input) {
660
656
  const { issueNumber, options } = input;
@@ -677,41 +673,13 @@ var EnhanceCommand = class {
677
673
  }
678
674
  const issue = await this.issueTracker.fetchIssue(issueNumber, repo);
679
675
  getLogger().debug("Issue fetched successfully", { number: issue.number, title: issue.title });
680
- getLogger().debug("Loading agent configurations...");
681
- const loadedAgents = await this.agentManager.loadAgents(settings);
682
- const agents = this.agentManager.formatForCli(loadedAgents);
683
- let mcpConfig;
684
- let allowedTools;
685
- let disallowedTools;
686
- try {
687
- const provider = this.issueTracker.providerName;
688
- mcpConfig = await generateIssueManagementMcpConfig("issue", repo, provider, settings);
689
- getLogger().debug("Generated MCP configuration for issue management:", { mcpConfig });
690
- allowedTools = [
691
- "mcp__issue_management__get_issue",
692
- "mcp__issue_management__get_comment",
693
- "mcp__issue_management__create_comment",
694
- "mcp__issue_management__update_comment",
695
- "mcp__issue_management__create_issue"
696
- ];
697
- disallowedTools = ["Bash(gh api:*)"];
698
- getLogger().debug("Configured tool filtering for issue workflow", { allowedTools, disallowedTools });
699
- } catch (error) {
700
- getLogger().warn(`Failed to generate MCP config: ${error instanceof Error ? error.message : "Unknown error"}`);
701
- }
702
676
  if (!isJsonMode) {
703
677
  getLogger().info("Invoking enhancer agent. This may take a moment...");
704
678
  }
705
- const prompt = this.constructPrompt(issueNumber, author);
706
- const response = await launchClaude(prompt, {
707
- headless: true,
708
- model: "sonnet",
709
- agents,
710
- ...mcpConfig && { mcpConfig },
711
- ...allowedTools && { allowedTools },
712
- ...disallowedTools && { disallowedTools }
713
- });
714
- const result = this.parseEnhancerResponse(response);
679
+ const enhanceOptions = {};
680
+ if (author !== void 0) enhanceOptions.author = author;
681
+ if (repo !== void 0) enhanceOptions.repo = repo;
682
+ const result = await this.enhancementService.enhanceExistingIssue(issueNumber, enhanceOptions);
715
683
  if (isJsonMode) {
716
684
  const commentId = result.url ? this.extractCommentId(result.url) : 0;
717
685
  const resultData = {
@@ -758,48 +726,6 @@ var EnhanceCommand = class {
758
726
  throw new Error("Issue identifier cannot be empty");
759
727
  }
760
728
  }
761
- /**
762
- * Construct the prompt for the orchestrating Claude instance.
763
- * This prompt is very clear about expected output format to ensure reliable parsing.
764
- */
765
- constructPrompt(issueNumber, author) {
766
- const authorInstruction = author ? `
767
- IMPORTANT: When you create your analysis comment, tag @${author} in the "Questions for Reporter" section if you have questions.
768
- ` : "";
769
- return `Execute @agent-iloom-issue-enhancer ${issueNumber}${authorInstruction}
770
-
771
- ## OUTPUT REQUIREMENTS
772
- * If the issue was not enhanced, return ONLY: "No enhancement needed"
773
- * If the issue WAS enhanced, return ONLY: <FULL URL OF THE COMMENT INCLUDING COMMENT ID>
774
- * If you encounter permission/authentication/access errors, return ONLY: "Permission denied: <specific error description>"
775
- * IMPORTANT: Return ONLY one of the above - DO NOT include commentary such as "I created a comment at <URL>" or "I examined the issue and found no enhancement was necessary"
776
- * CONTEXT: Your output is going to be parsed programmatically, so adherence to the output requirements is CRITICAL.`;
777
- }
778
- /**
779
- * Parse the response from the enhancer agent.
780
- * Returns either { enhanced: false } or { enhanced: true, url: "..." }
781
- * Throws specific errors for permission issues.
782
- */
783
- parseEnhancerResponse(response) {
784
- if (!response || typeof response !== "string") {
785
- throw new Error("No response from enhancer agent");
786
- }
787
- const trimmed = response.trim();
788
- getLogger().debug(`RESPONSE FROM ENHANCER AGENT: '${trimmed}'`);
789
- if (trimmed.toLowerCase().startsWith("permission denied:")) {
790
- const errorMessage = trimmed.substring("permission denied:".length).trim();
791
- throw new Error(`Permission denied: ${errorMessage}`);
792
- }
793
- if (trimmed.toLowerCase().includes("no enhancement needed")) {
794
- return { enhanced: false };
795
- }
796
- const urlPattern = /https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+#issuecomment-\d+/;
797
- const match = trimmed.match(urlPattern);
798
- if (match) {
799
- return { enhanced: true, url: match[0] };
800
- }
801
- throw new Error(`Unexpected response from enhancer agent: ${trimmed}`);
802
- }
803
729
  /**
804
730
  * Prompt user and open browser to view enhanced issue.
805
731
  * Matches the pattern from the issue specification.
@@ -860,7 +786,7 @@ var FinishCommand = class {
860
786
  const neonProvider = createNeonProviderFromSettings(settings);
861
787
  const databaseManager = new DatabaseManager(neonProvider, environmentManager, databaseUrlEnvVarName);
862
788
  const cliIsolationManager = new CLIIsolationManager();
863
- const { DefaultBranchNamingService: DefaultBranchNamingService2 } = await import("./BranchNamingService-FLPUUFOB.js");
789
+ const { DefaultBranchNamingService: DefaultBranchNamingService2 } = await import("./BranchNamingService-UB2EJGFQ.js");
864
790
  this.loomManager ??= new LoomManager(
865
791
  this.gitWorktreeManager,
866
792
  this.issueTracker,
@@ -2229,7 +2155,7 @@ function parseIssueIdentifier(value) {
2229
2155
  const parsed = parseInt(value, 10);
2230
2156
  return !isNaN(parsed) && String(parsed) === value ? parsed : value;
2231
2157
  }
2232
- program.name("iloom").description(packageJson.description).version(packageJson.version).option("--debug", "Enable debug output (default: based on ILOOM_DEBUG env var)").option("--completion", "Output shell completion script for current shell").option("--set <key=value>", "Override any setting using dot notation (repeatable, e.g., --set workflows.issue.startIde=false)").allowUnknownOption().hook("preAction", async (thisCommand, actionCommand) => {
2158
+ program.name("iloom").description(packageJson.description).version(packageJson.version).option("--debug", "Enable debug output (default: based on ILOOM_DEBUG env var)").option("--completion", "Output shell completion script for current shell").option("--set <key=value>", "Override any setting using dot notation (repeatable, e.g., --set workflows.issue.startIde=false)").allowUnknownOption().addHelpText("afterAll", "\nBy using iloom, you agree to our Terms of Service: https://iloom.ai/terms").hook("preAction", async (thisCommand, actionCommand) => {
2233
2159
  const options = thisCommand.opts();
2234
2160
  const envDebug = process.env.ILOOM_DEBUG === "true";
2235
2161
  const debugEnabled = options.debug !== void 0 ? options.debug : envDebug;
@@ -2262,7 +2188,7 @@ program.name("iloom").description(packageJson.description).version(packageJson.v
2262
2188
  }
2263
2189
  await validateSettingsForCommand(actionCommand);
2264
2190
  await validateGhCliForCommand(actionCommand);
2265
- await validateIdeForStartCommand(thisCommand);
2191
+ await validateIdeForStartCommand(actionCommand);
2266
2192
  });
2267
2193
  async function validateSettingsForCommand(command) {
2268
2194
  var _a, _b;
@@ -2345,7 +2271,7 @@ async function validateGhCliForCommand(command) {
2345
2271
  }
2346
2272
  async function validateIdeForStartCommand(command) {
2347
2273
  var _a, _b;
2348
- const commandName = command.args[0] ?? "";
2274
+ const commandName = command.name();
2349
2275
  if (commandName !== "start") {
2350
2276
  return;
2351
2277
  }
@@ -2389,7 +2315,7 @@ async function autoLaunchInitForMultipleRemotes() {
2389
2315
  await waitForKeypress2("Press any key to start configuration...");
2390
2316
  logger.info("");
2391
2317
  try {
2392
- const { InitCommand: InitCommand2 } = await import("./init-XQQMFDM6.js");
2318
+ const { InitCommand: InitCommand2 } = await import("./init-YDKOPB54.js");
2393
2319
  const initCommand = new InitCommand2();
2394
2320
  const customInitialMessage = "Help me configure which git remote iloom should use for GitHub operations. I have multiple remotes and need to select the correct one.";
2395
2321
  await initCommand.execute(customInitialMessage);
@@ -2490,7 +2416,7 @@ program.command("add-issue").alias("a").description("Create and enhance GitHub i
2490
2416
  });
2491
2417
  program.command("feedback").alias("f").description("Submit feedback/bug report to iloom-cli repository").argument("<description>", "Feedback title (>30 chars, >2 spaces; or any non-empty text when --body provided)").option("--body <text>", "Body text for feedback (added after diagnostics)").action(async (description, options) => {
2492
2418
  try {
2493
- const { FeedbackCommand } = await import("./feedback-K3A4QUSG.js");
2419
+ const { FeedbackCommand } = await import("./feedback-ICJ44XGB.js");
2494
2420
  const command = new FeedbackCommand();
2495
2421
  const feedbackOptions = {};
2496
2422
  if (options.body !== void 0) {
@@ -2513,7 +2439,8 @@ program.command("enhance").description("Apply enhancement agent to existing GitH
2513
2439
  const settingsManager = new SettingsManager();
2514
2440
  const settings = await settingsManager.loadSettings();
2515
2441
  const issueTracker = IssueTrackerFactory.create(settings);
2516
- const command = new EnhanceCommand(issueTracker);
2442
+ const enhancementService = new IssueEnhancementService(issueTracker, new AgentManager(), settingsManager);
2443
+ const command = new EnhanceCommand(issueTracker, enhancementService, settingsManager);
2517
2444
  const result = await command.execute({
2518
2445
  issueNumber,
2519
2446
  options: {
@@ -2574,7 +2501,7 @@ program.command("finish").alias("dn").description("Merge work and cleanup worksp
2574
2501
  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) => {
2575
2502
  const executeAction = async () => {
2576
2503
  try {
2577
- const { CommitCommand } = await import("./commit-ONRXU67O.js");
2504
+ const { CommitCommand } = await import("./commit-NAGJH4J4.js");
2578
2505
  const command = new CommitCommand();
2579
2506
  const noReview = options.review === false || options.json === true;
2580
2507
  const result = await command.execute({
@@ -2609,7 +2536,7 @@ program.command("commit").alias("c").description("Commit all uncommitted files w
2609
2536
  });
2610
2537
  program.command("rebase").description("Rebase current branch on main with Claude-assisted conflict resolution").option("-f, --force", "Skip confirmation prompts").option("-n, --dry-run", "Preview actions without executing").action(async (options) => {
2611
2538
  try {
2612
- const { RebaseCommand } = await import("./rebase-QYCRF7JG.js");
2539
+ const { RebaseCommand } = await import("./rebase-AONLKM2V.js");
2613
2540
  const command = new RebaseCommand();
2614
2541
  await command.execute(options);
2615
2542
  } catch (error) {
@@ -2621,7 +2548,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
2621
2548
  new Option("--one-shot <mode>", "One-shot automation mode").choices(["default", "noReview", "bypassPermissions"]).default("default")
2622
2549
  ).action(async (options) => {
2623
2550
  try {
2624
- const { IgniteCommand } = await import("./ignite-YUAOJ5PP.js");
2551
+ const { IgniteCommand } = await import("./ignite-U2JSVOEZ.js");
2625
2552
  const command = new IgniteCommand();
2626
2553
  await command.execute(options.oneShot ?? "default");
2627
2554
  } catch (error) {
@@ -2716,7 +2643,7 @@ program.command("compile").alias("typecheck").description("Run the compile or ty
2716
2643
  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) => {
2717
2644
  const executeAction = async () => {
2718
2645
  try {
2719
- const { CleanupCommand } = await import("./cleanup-77U5ATYI.js");
2646
+ const { CleanupCommand } = await import("./cleanup-PLMS2KWF.js");
2720
2647
  const command = new CleanupCommand();
2721
2648
  const input = {
2722
2649
  options: options ?? {}
@@ -2950,7 +2877,7 @@ program.command("projects").description("List configured iloom projects").option
2950
2877
  });
2951
2878
  program.command("init").alias("config").description("Initialize iloom configuration").argument("[prompt]", 'Custom initial message to send to Claude (defaults to "Help me configure iloom settings.")').action(async (prompt) => {
2952
2879
  try {
2953
- const { InitCommand: InitCommand2 } = await import("./init-XQQMFDM6.js");
2880
+ const { InitCommand: InitCommand2 } = await import("./init-YDKOPB54.js");
2954
2881
  const command = new InitCommand2();
2955
2882
  const trimmedPrompt = prompt == null ? void 0 : prompt.trim();
2956
2883
  const customPrompt = trimmedPrompt && trimmedPrompt.length > 0 ? trimmedPrompt : void 0;
@@ -2983,7 +2910,7 @@ program.command("update").description("Update iloom-cli to the latest version").
2983
2910
  program.command("test-github").description("Test GitHub integration (Issue #3)").argument("<identifier>", "Issue number or PR number").option("--no-claude", "Skip Claude for branch name generation").action(async (identifier, options) => {
2984
2911
  try {
2985
2912
  const { GitHubService: GitHubService2 } = await import("./GitHubService-O7U4UQ7N.js");
2986
- const { DefaultBranchNamingService: DefaultBranchNamingService2 } = await import("./BranchNamingService-FLPUUFOB.js");
2913
+ const { DefaultBranchNamingService: DefaultBranchNamingService2 } = await import("./BranchNamingService-UB2EJGFQ.js");
2987
2914
  logger.info("Testing GitHub Integration\n");
2988
2915
  const service = new GitHubService2();
2989
2916
  const branchNaming = new DefaultBranchNamingService2({ useClaude: options.claude !== false });
@@ -3041,10 +2968,10 @@ program.command("test-github").description("Test GitHub integration (Issue #3)")
3041
2968
  });
3042
2969
  program.command("test-claude").description("Test Claude integration (Issue #10)").option("--detect", "Test Claude CLI detection").option("--version", "Get Claude CLI version").option("--branch <title>", "Test branch name generation with given title").option("--issue <number>", "Issue number for branch generation", "123").option("--launch <prompt>", "Launch Claude with a prompt (headless)").option("--interactive", "Launch Claude interactively (requires --launch)").option("--template <name>", "Test template loading").action(async (options) => {
3043
2970
  try {
3044
- const { detectClaudeCli, getClaudeVersion, generateBranchName, launchClaude: launchClaude2 } = await import("./claude-6H36IBHO.js");
2971
+ const { detectClaudeCli, getClaudeVersion, generateBranchName, launchClaude } = await import("./claude-SNWHWWWM.js");
3045
2972
  const { PromptTemplateManager } = await import("./PromptTemplateManager-7L3HJQQU.js");
3046
- const { ClaudeService } = await import("./ClaudeService-CRSETT3A.js");
3047
- const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-KE5TBZVZ.js");
2973
+ const { ClaudeService } = await import("./ClaudeService-FLZ2IXAO.js");
2974
+ const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-M57BQUMY.js");
3048
2975
  logger.info("Testing Claude Integration\n");
3049
2976
  if (options.detect) {
3050
2977
  logger.info("Detecting Claude CLI...");
@@ -3077,11 +3004,11 @@ program.command("test-claude").description("Test Claude integration (Issue #10)"
3077
3004
  logger.info(` Mode: ${options.interactive ? "Interactive" : "Headless"}`);
3078
3005
  if (options.interactive) {
3079
3006
  logger.info(" Launching Claude in new terminal...");
3080
- await launchClaude2(options.launch, { headless: false });
3007
+ await launchClaude(options.launch, { headless: false });
3081
3008
  logger.info(" (Claude should open in a separate process)");
3082
3009
  } else {
3083
3010
  logger.info(" Waiting for response...");
3084
- const result = await launchClaude2(options.launch, { headless: true });
3011
+ const result = await launchClaude(options.launch, { headless: true });
3085
3012
  if (result) {
3086
3013
  logger.success(" Response:");
3087
3014
  logger.info(` ${result.split("\n").join("\n ")}`);
@@ -3155,7 +3082,7 @@ program.command("test-claude").description("Test Claude integration (Issue #10)"
3155
3082
  logger.info("\n7. Testing Claude launch (headless)...");
3156
3083
  logger.info(' Sending test prompt: "Say hello"');
3157
3084
  try {
3158
- const result = await launchClaude2("Say hello", { headless: true });
3085
+ const result = await launchClaude("Say hello", { headless: true });
3159
3086
  if (result) {
3160
3087
  logger.success(" Claude responded successfully");
3161
3088
  logger.info(` Response preview: ${result.substring(0, 100)}...`);
@@ -3232,7 +3159,7 @@ program.command("test-prefix").description("Test worktree prefix configuration -
3232
3159
  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) => {
3233
3160
  const executeAction = async () => {
3234
3161
  try {
3235
- const { SummaryCommand } = await import("./summary-G6L3VAKK.js");
3162
+ const { SummaryCommand } = await import("./summary-7KYFRAIM.js");
3236
3163
  const command = new SummaryCommand();
3237
3164
  const result = await command.execute({ identifier, options });
3238
3165
  if (options.json && result) {