@iloom/cli 0.8.3 → 0.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 (160) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +50 -4
  3. package/dist/{BranchNamingService-AO7BPIUJ.js → BranchNamingService-K6XNWQ6C.js} +2 -2
  4. package/dist/ClaudeContextManager-X2Y72GRL.js +14 -0
  5. package/dist/ClaudeService-7P32TTES.js +13 -0
  6. package/dist/{LoomLauncher-NHZMEVTQ.js → LoomLauncher-3I47SUPV.js} +6 -6
  7. package/dist/{ProjectCapabilityDetector-IA56AUE6.js → ProjectCapabilityDetector-N5L7T4IY.js} +3 -3
  8. package/dist/PromptTemplateManager-36YLQRHP.js +11 -0
  9. package/dist/README.md +50 -4
  10. package/dist/{SettingsManager-VCVLL32H.js → SettingsManager-QR7V2IW2.js} +2 -2
  11. package/dist/agents/iloom-artifact-reviewer.md +280 -0
  12. package/dist/agents/iloom-code-reviewer.md +9 -7
  13. package/dist/agents/iloom-issue-analyze-and-plan.md +21 -6
  14. package/dist/agents/iloom-issue-analyzer.md +21 -6
  15. package/dist/agents/iloom-issue-complexity-evaluator.md +21 -6
  16. package/dist/agents/iloom-issue-enhancer.md +21 -6
  17. package/dist/agents/iloom-issue-implementer.md +21 -6
  18. package/dist/agents/iloom-issue-planner.md +21 -6
  19. package/dist/{build-Z3WCIKPD.js → build-IC4CJRMP.js} +8 -8
  20. package/dist/{chunk-TVH67KEO.js → chunk-2HZX6AMR.js} +2 -2
  21. package/dist/{chunk-VZYSM7N7.js → chunk-2JPXGGP4.js} +20 -15
  22. package/dist/chunk-2JPXGGP4.js.map +1 -0
  23. package/dist/{chunk-HSGZW3ID.js → chunk-4GAJJUYS.js} +3 -3
  24. package/dist/chunk-4GAJJUYS.js.map +1 -0
  25. package/dist/{chunk-RD7I2Q2F.js → chunk-4LKGCFGG.js} +2 -2
  26. package/dist/{chunk-SSASIBDJ.js → chunk-5LVVQGB3.js} +5 -5
  27. package/dist/{chunk-GWONJE3X.js → chunk-6Y3FTRJL.js} +189 -48
  28. package/dist/chunk-6Y3FTRJL.js.map +1 -0
  29. package/dist/{chunk-4BSXZ5YZ.js → chunk-B7U6OKUR.js} +5 -24
  30. package/dist/chunk-B7U6OKUR.js.map +1 -0
  31. package/dist/{chunk-IGKPPACU.js → chunk-FO5GGFOV.js} +17 -8
  32. package/dist/chunk-FO5GGFOV.js.map +1 -0
  33. package/dist/{chunk-GDS2HXSW.js → chunk-H6ST2TGP.js} +20 -3
  34. package/dist/chunk-H6ST2TGP.js.map +1 -0
  35. package/dist/{chunk-A7XHHUEV.js → chunk-HZXBHMVM.js} +47 -22
  36. package/dist/chunk-HZXBHMVM.js.map +1 -0
  37. package/dist/{chunk-44Y5IF7P.js → chunk-I23OQB4Y.js} +5 -5
  38. package/dist/chunk-JT5LZRMI.js +302 -0
  39. package/dist/chunk-JT5LZRMI.js.map +1 -0
  40. package/dist/{chunk-Q457PKGH.js → chunk-KAYXR544.js} +2 -2
  41. package/dist/{chunk-XU5A6BWA.js → chunk-MZPRBNYC.js} +4 -4
  42. package/dist/{chunk-XHNACIHO.js → chunk-NTTSUAVM.js} +2 -2
  43. package/dist/{chunk-PLI3JQWT.js → chunk-OAVJR4PM.js} +2 -2
  44. package/dist/{chunk-4KGRPHM6.js → chunk-PL2FDYEK.js} +2 -2
  45. package/dist/chunk-QN47QVBX.js +131 -0
  46. package/dist/chunk-QN47QVBX.js.map +1 -0
  47. package/dist/{chunk-3FC3VNEX.js → chunk-RD7OPXZK.js} +34 -8
  48. package/dist/chunk-RD7OPXZK.js.map +1 -0
  49. package/dist/{chunk-O6LECMT6.js → chunk-TGRK3CHF.js} +8 -8
  50. package/dist/{chunk-7GLZVDPQ.js → chunk-TL72BGP6.js} +2 -2
  51. package/dist/{chunk-52MVUK5V.js → chunk-USSL2X4A.js} +2 -2
  52. package/dist/chunk-USSL2X4A.js.map +1 -0
  53. package/dist/{chunk-XPKN3QWY.js → chunk-VOGGLPG5.js} +1 -2
  54. package/dist/{chunk-IWIIOFEB.js → chunk-XFEK2X2D.js} +16 -6
  55. package/dist/chunk-XFEK2X2D.js.map +1 -0
  56. package/dist/{chunk-PBSHQVCT.js → chunk-Z6F5CUS6.js} +4 -4
  57. package/dist/{claude-V4HRPR4Z.js → claude-TP2QO3BU.js} +2 -2
  58. package/dist/{cleanup-NWNKWPUY.js → cleanup-M6N7KV7E.js} +20 -15
  59. package/dist/{cleanup-NWNKWPUY.js.map → cleanup-M6N7KV7E.js.map} +1 -1
  60. package/dist/cli.js +118 -84
  61. package/dist/cli.js.map +1 -1
  62. package/dist/{commit-534QIRHY.js → commit-ORHR53KW.js} +10 -10
  63. package/dist/{compile-UANHMNTS.js → compile-EOWJORKO.js} +8 -8
  64. package/dist/{contribute-7USRBWRM.js → contribute-4KCEOHSH.js} +3 -3
  65. package/dist/{dev-server-TO7RLYJI.js → dev-server-Q6M62ATG.js} +13 -13
  66. package/dist/{feedback-7ZZI6RC5.js → feedback-XRI7SGYX.js} +11 -11
  67. package/dist/{git-GUNOPP4Q.js → git-W3XUIFTR.js} +5 -3
  68. package/dist/hooks/iloom-hook.js +5 -3
  69. package/dist/{ignite-JBX3BUDE.js → ignite-3FHQY23X.js} +90 -47
  70. package/dist/ignite-3FHQY23X.js.map +1 -0
  71. package/dist/index.d.ts +37 -2
  72. package/dist/index.js +49 -13
  73. package/dist/index.js.map +1 -1
  74. package/dist/{chunk-FPNSFP6K.js → init-ALYWKNWG.js} +42 -329
  75. package/dist/init-ALYWKNWG.js.map +1 -0
  76. package/dist/{lint-XPODLDVA.js → lint-IHUH45OC.js} +8 -8
  77. package/dist/{open-M2SUR74Y.js → open-KWOV2OFO.js} +15 -15
  78. package/dist/{plan-FB4AOJ2Q.js → plan-P6MXL7AU.js} +54 -22
  79. package/dist/plan-P6MXL7AU.js.map +1 -0
  80. package/dist/{projects-325GEEGJ.js → projects-LH362JZQ.js} +3 -3
  81. package/dist/prompts/init-prompt.txt +9 -1
  82. package/dist/prompts/issue-prompt.txt +310 -0
  83. package/dist/prompts/plan-prompt.txt +4 -6
  84. package/dist/prompts/pr-prompt.txt +79 -0
  85. package/dist/prompts/regular-prompt.txt +205 -0
  86. package/dist/{rebase-4FNRBW3H.js → rebase-AJOJOZUG.js} +9 -9
  87. package/dist/{recap-GSXFEOD6.js → recap-GKJXMDXW.js} +5 -5
  88. package/dist/{run-GZNHRJB2.js → run-QEUVZF7J.js} +15 -15
  89. package/dist/schema/settings.schema.json +9 -1
  90. package/dist/{shell-2SPM3Z5O.js → shell-DAAVG4YN.js} +5 -5
  91. package/dist/{summary-Z4F7YFXE.js → summary-WNEYCO4S.js} +11 -11
  92. package/dist/{test-LBSPYIJW.js → test-5GPWWO3P.js} +8 -8
  93. package/dist/{test-git-ZPSPA2TP.js → test-git-EJUKDB7F.js} +3 -3
  94. package/dist/{test-prefix-6DLB2BHE.js → test-prefix-23TOBUXY.js} +3 -3
  95. package/dist/{test-webserver-XLJ2TZFP.js → test-webserver-CKROHFBQ.js} +5 -5
  96. package/dist/{vscode-LH3VSQ2W.js → vscode-6TOLFCI2.js} +5 -5
  97. package/package.json +2 -2
  98. package/dist/ClaudeContextManager-RDP6CLK6.js +0 -14
  99. package/dist/ClaudeService-FKPOQRA4.js +0 -13
  100. package/dist/PRManager-A63LT3NF.js +0 -16
  101. package/dist/PromptTemplateManager-OUYDHOPI.js +0 -9
  102. package/dist/chunk-3FC3VNEX.js.map +0 -1
  103. package/dist/chunk-4BSXZ5YZ.js.map +0 -1
  104. package/dist/chunk-52MVUK5V.js.map +0 -1
  105. package/dist/chunk-66QOCD5N.js +0 -79
  106. package/dist/chunk-66QOCD5N.js.map +0 -1
  107. package/dist/chunk-A7XHHUEV.js.map +0 -1
  108. package/dist/chunk-FPNSFP6K.js.map +0 -1
  109. package/dist/chunk-GDS2HXSW.js.map +0 -1
  110. package/dist/chunk-GWONJE3X.js.map +0 -1
  111. package/dist/chunk-HSGZW3ID.js.map +0 -1
  112. package/dist/chunk-IGKPPACU.js.map +0 -1
  113. package/dist/chunk-IWIIOFEB.js.map +0 -1
  114. package/dist/chunk-VZYSM7N7.js.map +0 -1
  115. package/dist/git-GUNOPP4Q.js.map +0 -1
  116. package/dist/ignite-JBX3BUDE.js.map +0 -1
  117. package/dist/init-XXDIB2UJ.js +0 -21
  118. package/dist/init-XXDIB2UJ.js.map +0 -1
  119. package/dist/plan-FB4AOJ2Q.js.map +0 -1
  120. /package/dist/{BranchNamingService-AO7BPIUJ.js.map → BranchNamingService-K6XNWQ6C.js.map} +0 -0
  121. /package/dist/{ClaudeContextManager-RDP6CLK6.js.map → ClaudeContextManager-X2Y72GRL.js.map} +0 -0
  122. /package/dist/{ClaudeService-FKPOQRA4.js.map → ClaudeService-7P32TTES.js.map} +0 -0
  123. /package/dist/{LoomLauncher-NHZMEVTQ.js.map → LoomLauncher-3I47SUPV.js.map} +0 -0
  124. /package/dist/{PRManager-A63LT3NF.js.map → ProjectCapabilityDetector-N5L7T4IY.js.map} +0 -0
  125. /package/dist/{ProjectCapabilityDetector-IA56AUE6.js.map → PromptTemplateManager-36YLQRHP.js.map} +0 -0
  126. /package/dist/{PromptTemplateManager-OUYDHOPI.js.map → SettingsManager-QR7V2IW2.js.map} +0 -0
  127. /package/dist/{build-Z3WCIKPD.js.map → build-IC4CJRMP.js.map} +0 -0
  128. /package/dist/{chunk-TVH67KEO.js.map → chunk-2HZX6AMR.js.map} +0 -0
  129. /package/dist/{chunk-RD7I2Q2F.js.map → chunk-4LKGCFGG.js.map} +0 -0
  130. /package/dist/{chunk-SSASIBDJ.js.map → chunk-5LVVQGB3.js.map} +0 -0
  131. /package/dist/{chunk-44Y5IF7P.js.map → chunk-I23OQB4Y.js.map} +0 -0
  132. /package/dist/{chunk-Q457PKGH.js.map → chunk-KAYXR544.js.map} +0 -0
  133. /package/dist/{chunk-XU5A6BWA.js.map → chunk-MZPRBNYC.js.map} +0 -0
  134. /package/dist/{chunk-XHNACIHO.js.map → chunk-NTTSUAVM.js.map} +0 -0
  135. /package/dist/{chunk-PLI3JQWT.js.map → chunk-OAVJR4PM.js.map} +0 -0
  136. /package/dist/{chunk-4KGRPHM6.js.map → chunk-PL2FDYEK.js.map} +0 -0
  137. /package/dist/{chunk-O6LECMT6.js.map → chunk-TGRK3CHF.js.map} +0 -0
  138. /package/dist/{chunk-7GLZVDPQ.js.map → chunk-TL72BGP6.js.map} +0 -0
  139. /package/dist/{chunk-XPKN3QWY.js.map → chunk-VOGGLPG5.js.map} +0 -0
  140. /package/dist/{chunk-PBSHQVCT.js.map → chunk-Z6F5CUS6.js.map} +0 -0
  141. /package/dist/{SettingsManager-VCVLL32H.js.map → claude-TP2QO3BU.js.map} +0 -0
  142. /package/dist/{commit-534QIRHY.js.map → commit-ORHR53KW.js.map} +0 -0
  143. /package/dist/{compile-UANHMNTS.js.map → compile-EOWJORKO.js.map} +0 -0
  144. /package/dist/{contribute-7USRBWRM.js.map → contribute-4KCEOHSH.js.map} +0 -0
  145. /package/dist/{dev-server-TO7RLYJI.js.map → dev-server-Q6M62ATG.js.map} +0 -0
  146. /package/dist/{feedback-7ZZI6RC5.js.map → feedback-XRI7SGYX.js.map} +0 -0
  147. /package/dist/{claude-V4HRPR4Z.js.map → git-W3XUIFTR.js.map} +0 -0
  148. /package/dist/{lint-XPODLDVA.js.map → lint-IHUH45OC.js.map} +0 -0
  149. /package/dist/{open-M2SUR74Y.js.map → open-KWOV2OFO.js.map} +0 -0
  150. /package/dist/{projects-325GEEGJ.js.map → projects-LH362JZQ.js.map} +0 -0
  151. /package/dist/{rebase-4FNRBW3H.js.map → rebase-AJOJOZUG.js.map} +0 -0
  152. /package/dist/{recap-GSXFEOD6.js.map → recap-GKJXMDXW.js.map} +0 -0
  153. /package/dist/{run-GZNHRJB2.js.map → run-QEUVZF7J.js.map} +0 -0
  154. /package/dist/{shell-2SPM3Z5O.js.map → shell-DAAVG4YN.js.map} +0 -0
  155. /package/dist/{summary-Z4F7YFXE.js.map → summary-WNEYCO4S.js.map} +0 -0
  156. /package/dist/{test-LBSPYIJW.js.map → test-5GPWWO3P.js.map} +0 -0
  157. /package/dist/{test-git-ZPSPA2TP.js.map → test-git-EJUKDB7F.js.map} +0 -0
  158. /package/dist/{test-prefix-6DLB2BHE.js.map → test-prefix-23TOBUXY.js.map} +0 -0
  159. /package/dist/{test-webserver-XLJ2TZFP.js.map → test-webserver-CKROHFBQ.js.map} +0 -0
  160. /package/dist/{vscode-LH3VSQ2W.js.map → vscode-6TOLFCI2.js.map} +0 -0
@@ -1,330 +1,45 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- GitWorktreeManager
4
- } from "./chunk-HSGZW3ID.js";
5
2
  import {
6
3
  SettingsMigrationManager
7
4
  } from "./chunk-BYUMEDDD.js";
5
+ import {
6
+ ShellCompletion
7
+ } from "./chunk-JT5LZRMI.js";
8
8
  import {
9
9
  FirstRunManager
10
10
  } from "./chunk-Q7POFB5Q.js";
11
11
  import {
12
12
  AgentManager
13
- } from "./chunk-4BSXZ5YZ.js";
13
+ } from "./chunk-B7U6OKUR.js";
14
+ import "./chunk-4GAJJUYS.js";
14
15
  import {
15
16
  parseGitRemotes
16
17
  } from "./chunk-FXDYIV3K.js";
17
18
  import {
18
19
  PromptTemplateManager
19
- } from "./chunk-66QOCD5N.js";
20
+ } from "./chunk-QN47QVBX.js";
20
21
  import {
21
22
  getRepoRoot,
22
23
  isFileGitignored
23
- } from "./chunk-GDS2HXSW.js";
24
+ } from "./chunk-H6ST2TGP.js";
25
+ import "./chunk-XFEK2X2D.js";
26
+ import "./chunk-KBEIQP4G.js";
27
+ import "./chunk-7JDMYTFZ.js";
24
28
  import {
25
29
  detectClaudeCli,
26
30
  launchClaude
27
- } from "./chunk-IGKPPACU.js";
31
+ } from "./chunk-FO5GGFOV.js";
32
+ import "./chunk-6MLEBAYZ.js";
28
33
  import {
29
34
  logger
30
35
  } from "./chunk-VT4PDUYT.js";
31
36
 
32
- // src/lib/ShellCompletion.ts
33
- import omelette from "omelette";
34
- import { readFile } from "fs/promises";
37
+ // src/commands/init.ts
38
+ import chalk from "chalk";
39
+ import { mkdir, readFile } from "fs/promises";
35
40
  import { existsSync } from "fs";
36
41
  import path from "path";
37
42
  import os from "os";
38
- var ShellCompletion = class {
39
- constructor(commandName) {
40
- // omelette instance - no types available
41
- this.COMPLETION_TIMEOUT = 1e3;
42
- this.commandName = commandName ?? this.detectCommandName();
43
- this.completion = omelette("iloom|il <command> <arg>");
44
- this.setupHandlers();
45
- }
46
- detectCommandName() {
47
- const scriptPath = process.argv[1] ?? "il";
48
- const baseName = scriptPath.split("/").pop() ?? "il";
49
- return baseName.replace(/\.js$/, "");
50
- }
51
- setupHandlers() {
52
- this.completion.on("command", ({ reply }) => {
53
- reply([
54
- "start",
55
- "finish",
56
- "spin",
57
- "ignite",
58
- "open",
59
- "run",
60
- "cleanup",
61
- "list",
62
- "init"
63
- // Intentionally exclude test-* commands from autocomplete
64
- ]);
65
- });
66
- this.completion.on("arg", async ({ line, reply }) => {
67
- if (line.includes("cleanup")) {
68
- const suggestions = await this.getBranchSuggestionsWithTimeout();
69
- reply(suggestions);
70
- } else {
71
- reply([]);
72
- }
73
- });
74
- }
75
- /**
76
- * Get branch suggestions with timeout to prevent blocking
77
- */
78
- async getBranchSuggestionsWithTimeout() {
79
- try {
80
- return await Promise.race([
81
- this.getBranchSuggestions(),
82
- this.timeout(this.COMPLETION_TIMEOUT, [])
83
- ]);
84
- } catch (error) {
85
- logger.debug(`Autocomplete branch suggestions failed: ${error}`);
86
- return [];
87
- }
88
- }
89
- async timeout(ms, defaultValue) {
90
- return new Promise((resolve) => {
91
- setTimeout(() => resolve(defaultValue), ms);
92
- });
93
- }
94
- async getBranchSuggestions() {
95
- try {
96
- const manager = new GitWorktreeManager();
97
- const worktrees = await manager.listWorktrees({ porcelain: true });
98
- const repoInfo = await manager.getRepoInfo();
99
- const repoRoot = repoInfo.root;
100
- const currentBranch = repoInfo.currentBranch;
101
- return worktrees.filter((wt) => wt.path !== repoRoot).filter((wt) => wt.branch !== currentBranch).map((wt) => wt.branch);
102
- } catch (error) {
103
- logger.debug(`Failed to get branch suggestions: ${error}`);
104
- return [];
105
- }
106
- }
107
- /**
108
- * Initialize completion - must be called before program.parseAsync()
109
- */
110
- init() {
111
- this.completion.init();
112
- }
113
- /**
114
- * Detect user's current shell
115
- */
116
- detectShell() {
117
- const shell = process.env.SHELL ?? "";
118
- if (shell.includes("bash")) return "bash";
119
- if (shell.includes("zsh")) return "zsh";
120
- if (shell.includes("fish")) return "fish";
121
- return "unknown";
122
- }
123
- /**
124
- * Get completion script for a specific shell
125
- */
126
- getCompletionScript(shell) {
127
- switch (shell) {
128
- case "bash":
129
- return this.completion.setupShellInitFile("bash");
130
- case "zsh":
131
- return this.completion.setupShellInitFile("zsh");
132
- case "fish":
133
- return this.completion.setupShellInitFile("fish");
134
- default:
135
- throw new Error(`Unsupported shell type: ${shell}`);
136
- }
137
- }
138
- /**
139
- * Get setup instructions for manual installation
140
- */
141
- getSetupInstructions(shell) {
142
- const binaryName = this.commandName;
143
- switch (shell) {
144
- case "bash":
145
- return `
146
- Add the following to your ~/.bashrc or ~/.bash_profile:
147
-
148
- eval "$(${binaryName} --completion)"
149
-
150
- Then reload your shell:
151
-
152
- source ~/.bashrc
153
- `;
154
- case "zsh":
155
- return `
156
- Add the following to your ~/.zshrc:
157
-
158
- eval "$(${binaryName} --completion)"
159
-
160
- Then reload your shell:
161
-
162
- source ~/.zshrc
163
- `;
164
- case "fish":
165
- return `
166
- Add the following to your ~/.config/fish/config.fish:
167
-
168
- ${binaryName} --completion | source
169
-
170
- Then reload your shell:
171
-
172
- source ~/.config/fish/config.fish
173
- `;
174
- default:
175
- return `
176
- Shell autocomplete is supported for bash, zsh, and fish.
177
- Your current shell (${shell}) may not be supported.
178
-
179
- Please consult your shell's documentation for setting up custom completions.
180
- `;
181
- }
182
- }
183
- /**
184
- * Generate completion script and print to stdout
185
- * Used by: il --completion
186
- */
187
- printCompletionScript(shell) {
188
- const detectedShell = shell ?? this.detectShell();
189
- if (detectedShell === "unknown") {
190
- logger.error("Could not detect shell type. Please specify --shell bash|zsh|fish");
191
- process.exit(1);
192
- }
193
- try {
194
- const script = this.getCompletionScript(detectedShell);
195
- console.log(script);
196
- } catch (error) {
197
- logger.error(`Failed to generate completion script: ${error}`);
198
- process.exit(1);
199
- }
200
- }
201
- /**
202
- * Get the shell configuration file path for the given shell type
203
- */
204
- getShellConfigPath(shell) {
205
- const homeDir = os.homedir();
206
- switch (shell) {
207
- case "bash": {
208
- const bashrcPath = path.join(homeDir, ".bashrc");
209
- const bashProfilePath = path.join(homeDir, ".bash_profile");
210
- if (existsSync(bashrcPath)) {
211
- return bashrcPath;
212
- } else if (existsSync(bashProfilePath)) {
213
- return bashProfilePath;
214
- }
215
- return bashrcPath;
216
- }
217
- case "zsh":
218
- return path.join(homeDir, ".zshrc");
219
- case "fish":
220
- return path.join(homeDir, ".config", "fish", "config.fish");
221
- default:
222
- return null;
223
- }
224
- }
225
- /**
226
- * Read the shell configuration file contents
227
- */
228
- async readShellConfig(shell) {
229
- const configPath = this.getShellConfigPath(shell);
230
- if (!configPath) {
231
- return null;
232
- }
233
- try {
234
- let content = "";
235
- if (existsSync(configPath)) {
236
- content = await readFile(configPath, "utf-8");
237
- }
238
- return {
239
- path: configPath,
240
- content
241
- };
242
- } catch (error) {
243
- logger.debug(`Failed to read shell config file ${configPath}: ${error}`);
244
- return {
245
- path: configPath,
246
- content: ""
247
- };
248
- }
249
- }
250
- /**
251
- * Grep for completion-related content in shell configuration file
252
- * Returns only lines containing '--completion' with 2 lines of context before and after
253
- * Properly handles overlapping matches
254
- */
255
- async grepCompletionConfig(shell) {
256
- const configPath = this.getShellConfigPath(shell);
257
- if (!configPath) {
258
- return null;
259
- }
260
- try {
261
- let content = "";
262
- if (existsSync(configPath)) {
263
- const fullContent = await readFile(configPath, "utf-8");
264
- const lines = fullContent.split(/\r?\n/);
265
- const matchingIndices = [];
266
- lines.forEach((line, index) => {
267
- if (line.includes("--completion")) {
268
- matchingIndices.push(index);
269
- }
270
- });
271
- if (matchingIndices.length === 0) {
272
- content = "";
273
- } else {
274
- const ranges = [];
275
- matchingIndices.forEach((matchIndex) => {
276
- const start = Math.max(0, matchIndex - 2);
277
- const end = Math.min(lines.length - 1, matchIndex + 2);
278
- ranges.push({ start, end });
279
- });
280
- const mergedRanges = this.mergeOverlappingRanges(ranges);
281
- const resultSections = mergedRanges.map(
282
- (range) => lines.slice(range.start, range.end + 1).join("\n")
283
- );
284
- content = resultSections.join("\n--\n");
285
- }
286
- }
287
- return {
288
- path: configPath,
289
- content
290
- };
291
- } catch (error) {
292
- logger.debug(`Failed to grep shell config file ${configPath}: ${error}`);
293
- return {
294
- path: configPath,
295
- content: ""
296
- };
297
- }
298
- }
299
- /**
300
- * Merge overlapping ranges to avoid duplicate lines
301
- */
302
- mergeOverlappingRanges(ranges) {
303
- if (ranges.length === 0) return [];
304
- const sorted = [...ranges].sort((a, b) => a.start - b.start);
305
- const firstRange = sorted[0];
306
- if (!firstRange) return [];
307
- const merged = [firstRange];
308
- for (let i = 1; i < sorted.length; i++) {
309
- const current = sorted[i];
310
- const last = merged[merged.length - 1];
311
- if (!current || !last) continue;
312
- if (current.start <= last.end + 1) {
313
- last.end = Math.max(last.end, current.end);
314
- } else {
315
- merged.push(current);
316
- }
317
- }
318
- return merged;
319
- }
320
- };
321
-
322
- // src/commands/init.ts
323
- import chalk from "chalk";
324
- import { mkdir, readFile as readFile2 } from "fs/promises";
325
- import { existsSync as existsSync2 } from "fs";
326
- import path2 from "path";
327
- import os2 from "os";
328
43
  import { fileURLToPath } from "url";
329
44
  var InitCommand = class {
330
45
  constructor(shellCompletion, templateManager, agentManager) {
@@ -383,7 +98,7 @@ var InitCommand = class {
383
98
  logger.warn(`Settings migration failed: ${error instanceof Error ? error.message : "Unknown"}`);
384
99
  logger.debug("Settings migration error details", { error });
385
100
  }
386
- const iloomDir = path2.join(process.cwd(), ".iloom");
101
+ const iloomDir = path.join(process.cwd(), ".iloom");
387
102
  logger.debug("Creating .iloom directory", { iloomDir });
388
103
  await mkdir(iloomDir, { recursive: true });
389
104
  logger.debug(".iloom directory created/verified");
@@ -408,18 +123,18 @@ var InitCommand = class {
408
123
  }
409
124
  try {
410
125
  const __filename = fileURLToPath(import.meta.url);
411
- const __dirname = path2.dirname(__filename);
412
- let schemaPath = path2.join(__dirname, "schema", "settings.schema.json");
126
+ const __dirname = path.dirname(__filename);
127
+ let schemaPath = path.join(__dirname, "schema", "settings.schema.json");
413
128
  logger.debug("Loading settings schema", {
414
129
  __filename,
415
130
  __dirname,
416
131
  schemaPath,
417
- schemaExists: existsSync2(schemaPath)
132
+ schemaExists: existsSync(schemaPath)
418
133
  });
419
134
  let schemaContent = "";
420
- if (existsSync2(schemaPath)) {
135
+ if (existsSync(schemaPath)) {
421
136
  logger.debug("Reading schema file");
422
- schemaContent = await readFile2(schemaPath, "utf-8");
137
+ schemaContent = await readFile(schemaPath, "utf-8");
423
138
  logger.debug("Schema file loaded", {
424
139
  contentLength: schemaContent.length,
425
140
  isValidJson: (() => {
@@ -435,9 +150,9 @@ var InitCommand = class {
435
150
  logger.warn("Schema file not found - Claude will work without schema validation");
436
151
  logger.debug("Schema file not found at expected path", { schemaPath });
437
152
  }
438
- const settingsGlobalPath = path2.join(os2.homedir(), ".config", "iloom-ai", "settings.json");
439
- const settingsLocalPath = path2.join(process.cwd(), ".iloom", "settings.local.json");
440
- const settingsCommittedPath = path2.join(process.cwd(), ".iloom", "settings.json");
153
+ const settingsGlobalPath = path.join(os.homedir(), ".config", "iloom-ai", "settings.json");
154
+ const settingsLocalPath = path.join(process.cwd(), ".iloom", "settings.local.json");
155
+ const settingsCommittedPath = path.join(process.cwd(), ".iloom", "settings.json");
441
156
  let settingsGlobalJson = "";
442
157
  let settingsJson = "";
443
158
  let settingsLocalJson = "";
@@ -445,13 +160,13 @@ var InitCommand = class {
445
160
  settingsGlobalPath,
446
161
  settingsLocalPath,
447
162
  settingsCommittedPath,
448
- globalExists: existsSync2(settingsGlobalPath),
449
- localExists: existsSync2(settingsLocalPath),
450
- committedExists: existsSync2(settingsCommittedPath)
163
+ globalExists: existsSync(settingsGlobalPath),
164
+ localExists: existsSync(settingsLocalPath),
165
+ committedExists: existsSync(settingsCommittedPath)
451
166
  });
452
- if (existsSync2(settingsGlobalPath)) {
167
+ if (existsSync(settingsGlobalPath)) {
453
168
  logger.debug("Reading global settings.json");
454
- const content = await readFile2(settingsGlobalPath, "utf-8");
169
+ const content = await readFile(settingsGlobalPath, "utf-8");
455
170
  const trimmed = content.trim();
456
171
  if (trimmed !== "{}" && trimmed !== "") {
457
172
  settingsGlobalJson = content;
@@ -472,9 +187,9 @@ var InitCommand = class {
472
187
  } else {
473
188
  logger.debug("global settings.json does not exist");
474
189
  }
475
- if (existsSync2(settingsCommittedPath)) {
190
+ if (existsSync(settingsCommittedPath)) {
476
191
  logger.debug("Reading settings.json");
477
- const content = await readFile2(settingsCommittedPath, "utf-8");
192
+ const content = await readFile(settingsCommittedPath, "utf-8");
478
193
  const trimmed = content.trim();
479
194
  if (trimmed !== "{}" && trimmed !== "") {
480
195
  settingsJson = content;
@@ -495,9 +210,9 @@ var InitCommand = class {
495
210
  } else {
496
211
  logger.debug("settings.json does not exist");
497
212
  }
498
- if (existsSync2(settingsLocalPath)) {
213
+ if (existsSync(settingsLocalPath)) {
499
214
  logger.debug("Reading settings.local.json");
500
- const content = await readFile2(settingsLocalPath, "utf-8");
215
+ const content = await readFile(settingsLocalPath, "utf-8");
501
216
  const trimmed = content.trim();
502
217
  if (trimmed !== "{}" && trimmed !== "") {
503
218
  settingsLocalJson = content;
@@ -540,7 +255,7 @@ var InitCommand = class {
540
255
  logger.debug("Shell config completion grep completed", {
541
256
  path: shellConfigPath,
542
257
  contentLength: shellConfigContent.length,
543
- configExists: existsSync2(shellConfigPath),
258
+ configExists: existsSync(shellConfigPath),
544
259
  hasMatches: shellConfigContent.trim().length > 0
545
260
  });
546
261
  } else {
@@ -590,8 +305,8 @@ var InitCommand = class {
590
305
  logger.debug("README content loaded", {
591
306
  readmeContentLength: readmeContent.length
592
307
  });
593
- const packageJsonPath = path2.join(process.cwd(), "package.json");
594
- const hasPackageJson = existsSync2(packageJsonPath);
308
+ const packageJsonPath = path.join(process.cwd(), "package.json");
309
+ const hasPackageJson = existsSync(packageJsonPath);
595
310
  logger.debug("Package.json detection", { packageJsonPath, hasPackageJson });
596
311
  const variables = {
597
312
  SETTINGS_SCHEMA: schemaContent,
@@ -688,15 +403,15 @@ var InitCommand = class {
688
403
  */
689
404
  async loadReadmeContent() {
690
405
  try {
691
- let currentDir = path2.dirname(fileURLToPath(import.meta.url));
692
- while (currentDir !== path2.dirname(currentDir)) {
693
- const readmePath = path2.join(currentDir, "README.md");
406
+ let currentDir = path.dirname(fileURLToPath(import.meta.url));
407
+ while (currentDir !== path.dirname(currentDir)) {
408
+ const readmePath = path.join(currentDir, "README.md");
694
409
  try {
695
- const content = await readFile2(readmePath, "utf-8");
410
+ const content = await readFile(readmePath, "utf-8");
696
411
  logger.debug("Loaded README.md for init prompt", { readmePath });
697
412
  return content;
698
413
  } catch {
699
- currentDir = path2.dirname(currentDir);
414
+ currentDir = path.dirname(currentDir);
700
415
  }
701
416
  }
702
417
  logger.debug("README.md not found, returning empty string");
@@ -707,9 +422,7 @@ var InitCommand = class {
707
422
  }
708
423
  }
709
424
  };
710
-
711
425
  export {
712
- ShellCompletion,
713
426
  InitCommand
714
427
  };
715
- //# sourceMappingURL=chunk-FPNSFP6K.js.map
428
+ //# sourceMappingURL=init-ALYWKNWG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/init.ts"],"sourcesContent":["import { logger } from '../utils/logger.js'\nimport { ShellCompletion } from '../lib/ShellCompletion.js'\nimport chalk from 'chalk'\nimport { mkdir, readFile } from 'fs/promises'\nimport { existsSync } from 'fs'\nimport path from 'path'\nimport os from 'os'\nimport { detectClaudeCli, launchClaude } from '../utils/claude.js'\nimport { PromptTemplateManager } from '../lib/PromptTemplateManager.js'\nimport { AgentManager } from '../lib/AgentManager.js'\nimport { fileURLToPath } from 'url'\nimport { GitRemote, parseGitRemotes } from '../utils/remote.js'\nimport { SettingsMigrationManager } from '../lib/SettingsMigrationManager.js'\nimport { getRepoRoot, isFileGitignored } from '../utils/git.js'\nimport { FirstRunManager } from '../utils/FirstRunManager.js'\n\n/**\n * Initialize iloom configuration\n * Implements the `il init` command requested in issue #94\n */\nexport class InitCommand {\n private readonly shellCompletion: ShellCompletion\n private readonly templateManager: PromptTemplateManager\n private readonly agentManager: AgentManager\n\n constructor(\n shellCompletion?: ShellCompletion,\n templateManager?: PromptTemplateManager,\n agentManager?: AgentManager\n ) {\n this.shellCompletion = shellCompletion ?? new ShellCompletion()\n this.templateManager = templateManager ?? new PromptTemplateManager()\n this.agentManager = agentManager ?? new AgentManager()\n }\n\n /**\n * Main entry point for the init command\n * @param customInitialMessage Optional custom initial message to send to Claude (defaults to \"Help me configure iloom settings.\")\n */\n public async execute(customInitialMessage?: string): Promise<void> {\n try {\n logger.debug('InitCommand.execute() starting', {\n cwd: process.cwd(),\n nodeVersion: process.version,\n hasCustomInitialMessage: !!customInitialMessage\n })\n\n logger.info(chalk.bold('Welcome to iloom setup'))\n\n // Setup project configuration\n logger.info(chalk.bold('Verifying current setup...'))\n\n await this.setupProjectConfiguration()\n\n // Launch guided Claude configuration if available\n const guidedInitSucceeded = await this.launchGuidedInit(customInitialMessage)\n\n // Only mark project as configured if guided init succeeded and not already marked\n // This enables VSCode extension detection and ensures project appears in `il projects` list\n if (guidedInitSucceeded) {\n const projectRoot = await getRepoRoot() ?? process.cwd()\n const firstRunManager = new FirstRunManager()\n const alreadyConfigured = await firstRunManager.isProjectConfigured(projectRoot)\n if (!alreadyConfigured) {\n await firstRunManager.markProjectAsConfigured(projectRoot)\n logger.debug('Project marked as configured', { projectRoot })\n } else {\n logger.debug('Project already marked as configured, skipping', { projectRoot })\n }\n } else {\n logger.debug('Skipping project marker - guided init did not complete successfully')\n }\n\n logger.info(chalk.green('Setup complete! Enjoy using iloom CLI.'))\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n logger.error(`Initialization failed: ${message}`)\n throw error\n }\n }\n\n /**\n * Setup project configuration files\n * Ensures .iloom directory exists and runs legacy migrations\n */\n private async setupProjectConfiguration(): Promise<void> {\n logger.debug('setupProjectConfiguration() starting')\n\n // Migrate legacy .hatchbox settings to .iloom (BEFORE creating new files)\n try {\n logger.debug('Loading SettingsMigrationManager for legacy migration')\n const migrationManager = new SettingsMigrationManager()\n logger.debug('Running settings migration check')\n await migrationManager.migrateSettingsIfNeeded()\n logger.debug('Settings migration check completed')\n } catch (error) {\n // Log warning but don't fail\n logger.warn(`Settings migration failed: ${error instanceof Error ? error.message : 'Unknown'}`)\n logger.debug('Settings migration error details', { error })\n }\n\n // Ensure .iloom directory exists\n const iloomDir = path.join(process.cwd(), '.iloom')\n logger.debug('Creating .iloom directory', { iloomDir })\n await mkdir(iloomDir, { recursive: true })\n logger.debug('.iloom directory created/verified')\n logger.debug('setupProjectConfiguration() completed')\n }\n\n /**\n * Launch interactive Claude-guided configuration\n * @param customInitialMessage Optional custom initial message to send to Claude\n * @returns true if Claude session completed successfully, false otherwise\n */\n private async launchGuidedInit(customInitialMessage?: string): Promise<boolean> {\n logger.debug('launchGuidedInit() starting', { hasCustomInitialMessage: !!customInitialMessage })\n logger.info(chalk.bold('Starting interactive Claude-guided configuration...'))\n\n // Check if Claude CLI is available\n logger.debug('Checking Claude CLI availability')\n const claudeAvailable = await detectClaudeCli()\n logger.debug('Claude CLI availability check result', { claudeAvailable })\n\n if (!claudeAvailable) {\n logger.warn('Claude Code not detected. Skipping guided configuration.')\n logger.info('iloom won\\'t be able to help you much without Claude Code, so please install it: npm install -g @anthropic-ai/claude-code')\n logger.debug('Exiting launchGuidedInit() due to missing Claude CLI')\n return false\n }\n\n try {\n // Load schema from dist/schema/settings.schema.json\n // Use similar approach to PromptTemplateManager for path resolution\n const __filename = fileURLToPath(import.meta.url)\n const __dirname = path.dirname(__filename)\n\n // Walk up to find the schema directory (in case of chunked files)\n let schemaPath = path.join(__dirname, 'schema', 'settings.schema.json')\n\n logger.debug('Loading settings schema', {\n __filename,\n __dirname,\n schemaPath,\n schemaExists: existsSync(schemaPath)\n })\n\n let schemaContent = ''\n if (existsSync(schemaPath)) {\n logger.debug('Reading schema file')\n schemaContent = await readFile(schemaPath, 'utf-8')\n logger.debug('Schema file loaded', {\n contentLength: schemaContent.length,\n isValidJson: ((): boolean => {\n try {\n JSON.parse(schemaContent)\n return true\n } catch {\n return false\n }\n })()\n })\n } else {\n logger.warn('Schema file not found - Claude will work without schema validation')\n logger.debug('Schema file not found at expected path', { schemaPath })\n }\n\n // Check for existing settings - read ALL three files if they exist (global, project, local)\n const settingsGlobalPath = path.join(os.homedir(), '.config', 'iloom-ai', 'settings.json')\n const settingsLocalPath = path.join(process.cwd(), '.iloom', 'settings.local.json')\n const settingsCommittedPath = path.join(process.cwd(), '.iloom', 'settings.json')\n\n let settingsGlobalJson = ''\n let settingsJson = ''\n let settingsLocalJson = ''\n\n logger.debug('Checking for settings files', {\n settingsGlobalPath,\n settingsLocalPath,\n settingsCommittedPath,\n globalExists: existsSync(settingsGlobalPath),\n localExists: existsSync(settingsLocalPath),\n committedExists: existsSync(settingsCommittedPath)\n })\n\n // Read global settings.json if it exists\n if (existsSync(settingsGlobalPath)) {\n logger.debug('Reading global settings.json')\n const content = await readFile(settingsGlobalPath, 'utf-8')\n const trimmed = content.trim()\n if (trimmed !== '{}' && trimmed !== '') {\n settingsGlobalJson = content\n logger.debug('global settings.json loaded', {\n contentLength: content.length,\n isValidJson: ((): boolean => {\n try {\n JSON.parse(content)\n return true\n } catch {\n return false\n }\n })()\n })\n } else {\n logger.debug('global settings.json is empty, skipping')\n }\n } else {\n logger.debug('global settings.json does not exist')\n }\n\n // Read settings.json if it exists\n if (existsSync(settingsCommittedPath)) {\n logger.debug('Reading settings.json')\n const content = await readFile(settingsCommittedPath, 'utf-8')\n const trimmed = content.trim()\n if (trimmed !== '{}' && trimmed !== '') {\n settingsJson = content\n logger.debug('settings.json loaded', {\n contentLength: content.length,\n isValidJson: ((): boolean => {\n try {\n JSON.parse(content)\n return true\n } catch {\n return false\n }\n })()\n })\n } else {\n logger.debug('settings.json is empty, skipping')\n }\n } else {\n logger.debug('settings.json does not exist')\n }\n\n // Read settings.local.json if it exists\n if (existsSync(settingsLocalPath)) {\n logger.debug('Reading settings.local.json')\n const content = await readFile(settingsLocalPath, 'utf-8')\n const trimmed = content.trim()\n if (trimmed !== '{}' && trimmed !== '') {\n settingsLocalJson = content\n logger.debug('settings.local.json loaded', {\n contentLength: content.length,\n isValidJson: ((): boolean => {\n try {\n JSON.parse(content)\n return true\n } catch {\n return false\n }\n })()\n })\n } else {\n logger.debug('settings.local.json is empty, skipping')\n }\n } else {\n logger.debug('settings.local.json does not exist')\n }\n\n // Log summary\n logger.debug('Settings files summary', {\n hasSettingsGlobalJson: !!settingsGlobalJson,\n hasSettingsJson: !!settingsJson,\n hasSettingsLocalJson: !!settingsLocalJson,\n settingsGlobalJsonLength: settingsGlobalJson.length,\n settingsJsonLength: settingsJson.length,\n settingsLocalJsonLength: settingsLocalJson.length\n })\n\n // Detect shell and read config\n logger.debug('Detecting user shell')\n const shell = this.shellCompletion.detectShell()\n logger.debug('Shell detection result', { shell })\n\n let shellConfigPath = ''\n let shellConfigContent = ''\n\n if (shell !== 'unknown') {\n logger.debug('Grepping shell config for completion setup')\n const shellConfig = await this.shellCompletion.grepCompletionConfig(shell)\n if (shellConfig) {\n shellConfigPath = shellConfig.path\n shellConfigContent = shellConfig.content\n logger.debug('Shell config completion grep completed', {\n path: shellConfigPath,\n contentLength: shellConfigContent.length,\n configExists: existsSync(shellConfigPath),\n hasMatches: shellConfigContent.trim().length > 0\n })\n } else {\n logger.debug('Could not read shell config')\n }\n } else {\n logger.debug('Unknown shell detected, skipping config read')\n }\n\n let remotes: GitRemote[] = []\n try {\n // Detect git remotes for GitHub configuration\n logger.debug('Detecting git remotes for GitHub configuration')\n remotes = await parseGitRemotes()\n logger.debug('Git remotes detected', { count: remotes.length, remotes })\n } catch (error) {\n const message = error instanceof Error ? error.stack : 'Unknown error'\n logger.debug(\"Error occured while getting remote info: \", message)\n }\n\n // Detect if .vscode/settings.json is gitignored\n let vscodeSettingsGitignored = false\n try {\n vscodeSettingsGitignored = await isFileGitignored('.vscode/settings.json')\n logger.debug('VSCode settings gitignore status', { vscodeSettingsGitignored })\n } catch (error) {\n logger.debug('Could not detect gitignore status for .vscode/settings.json', { error })\n }\n\n let remotesInfo = ''\n let multipleRemotes = false\n let singleRemote = false\n let singleRemoteName = ''\n let singleRemoteUrl = ''\n let noRemotes = false\n\n if (remotes.length === 0) {\n noRemotes = true\n remotesInfo = 'No git remotes detected in this repository.'\n } else if (remotes.length === 1 && remotes[0]) {\n singleRemote = true\n singleRemoteName = remotes[0].name\n singleRemoteUrl = remotes[0].url\n remotesInfo = `Detected Remote:\\n- **${remotes[0].name}**: ${remotes[0].url} (${remotes[0].owner}/${remotes[0].repo})`\n } else {\n multipleRemotes = true\n remotesInfo = `Detected Remotes (${remotes.length}):\\n` +\n remotes.map(r => `- **${r.name}**: ${r.url} (${r.owner}/${r.repo})`).join('\\n')\n }\n\n // Load README content for comprehensive documentation\n logger.debug('README content loading...')\n const readmeContent = await this.loadReadmeContent()\n logger.debug('README content loaded', {\n readmeContentLength: readmeContent.length,\n })\n\n // Detect if project has package.json for multi-language support\n const packageJsonPath = path.join(process.cwd(), 'package.json')\n const hasPackageJson = existsSync(packageJsonPath)\n logger.debug('Package.json detection', { packageJsonPath, hasPackageJson })\n\n // Build template variables\n const variables = {\n SETTINGS_SCHEMA: schemaContent,\n SETTINGS_GLOBAL_JSON: settingsGlobalJson,\n SETTINGS_JSON: settingsJson,\n SETTINGS_LOCAL_JSON: settingsLocalJson,\n SHELL_TYPE: shell,\n SHELL_CONFIG_PATH: shellConfigPath,\n SHELL_CONFIG_CONTENT: shellConfigContent,\n REMOTES_INFO: remotesInfo,\n MULTIPLE_REMOTES: multipleRemotes.toString(),\n SINGLE_REMOTE: singleRemote.toString(),\n SINGLE_REMOTE_NAME: singleRemoteName,\n SINGLE_REMOTE_URL: singleRemoteUrl,\n NO_REMOTES: noRemotes.toString(),\n README_CONTENT: readmeContent,\n VSCODE_SETTINGS_GITIGNORED: vscodeSettingsGitignored.toString(),\n // Multi-language support - mutually exclusive booleans\n HAS_PACKAGE_JSON: hasPackageJson,\n NO_PACKAGE_JSON: !hasPackageJson,\n }\n\n logger.debug('Building template variables', {\n variableKeys: Object.keys(variables),\n schemaContentLength: schemaContent.length,\n settingsGlobalJsonLength: settingsGlobalJson.length,\n settingsJsonLength: settingsJson.length,\n settingsLocalJsonLength: settingsLocalJson.length\n })\n\n // Get init prompt\n logger.debug('Loading init prompt template')\n const prompt = await this.templateManager.getPrompt('init', variables)\n\n logger.debug('Init prompt loaded', {\n promptLength: prompt.length,\n containsSchema: prompt.includes('SETTINGS_SCHEMA'),\n containsExistingSettings: prompt.includes('EXISTING_SETTINGS')\n })\n\n // Load framework-detector agent for non-Node.js project setup\n let agents: Record<string, unknown> | undefined\n try {\n const loadedAgents = await this.agentManager.loadAgents(\n undefined, // No settings overrides for init\n variables,\n ['iloom-framework-detector.md']\n )\n agents = this.agentManager.formatForCli(loadedAgents)\n logger.debug('Loaded framework-detector agent for init', {\n agentCount: Object.keys(agents).length,\n agentNames: Object.keys(agents),\n })\n } catch (error) {\n // Log warning but continue without agents\n logger.warn(`Failed to load agents: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n\n // Pre-approved tools for init workflow to reduce permission prompts\n const initAllowedTools = [\n 'Bash(git rev-parse:*)',\n 'Bash(git init:*)',\n 'Bash(git status:*)',\n 'Bash(git add:*)',\n 'Bash(git commit:*)',\n 'Read',\n 'Write',\n 'Edit',\n ]\n\n const claudeOptions = {\n model: 'opus',\n headless: false,\n appendSystemPrompt: prompt,\n addDir: process.cwd(),\n allowedTools: initAllowedTools,\n ...(agents && { agents }),\n }\n\n logger.debug('Launching Claude with options', {\n optionKeys: Object.keys(claudeOptions),\n headless: claudeOptions.headless,\n hasSystemPrompt: !!claudeOptions.appendSystemPrompt,\n addDir: claudeOptions.addDir,\n promptLength: prompt.length,\n hasCustomInitialMessage: !!customInitialMessage,\n hasAgents: !!agents,\n })\n\n // Launch Claude in interactive mode with custom initial message if provided\n const initialMessage = customInitialMessage ?? 'Help me configure iloom settings.'\n await launchClaude(initialMessage, claudeOptions)\n logger.debug('Claude session completed successfully')\n return true\n\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n logger.warn(`Guided configuration failed: ${message}`)\n logger.debug('launchGuidedInit() error details', error instanceof Error ? error.stack : {error})\n logger.info('You can manually edit .iloom/settings.json to configure iloom.')\n return false\n }\n }\n\n /**\n * Load README.md content for init prompt\n * Walks up from dist directory to find README.md in project root\n */\n private async loadReadmeContent(): Promise<string> {\n try {\n // Walk up from current file location to find README.md\n // Use same pattern as PromptTemplateManager for finding files\n let currentDir = path.dirname(fileURLToPath(import.meta.url))\n\n // Walk up to find README.md\n while (currentDir !== path.dirname(currentDir)) {\n const readmePath = path.join(currentDir, 'README.md')\n try {\n const content = await readFile(readmePath, 'utf-8')\n logger.debug('Loaded README.md for init prompt', { readmePath })\n return content\n } catch {\n currentDir = path.dirname(currentDir)\n }\n }\n\n logger.debug('README.md not found, returning empty string')\n return ''\n } catch (error) {\n // Graceful degradation - return empty string on error\n logger.debug(`Failed to load README.md: ${error}`)\n return ''\n }\n }\n\n}\n"],"mappings":"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","names":[]}
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ScriptCommandBase
4
- } from "./chunk-O6LECMT6.js";
5
- import "./chunk-RD7I2Q2F.js";
6
- import "./chunk-TVH67KEO.js";
7
- import "./chunk-HSGZW3ID.js";
8
- import "./chunk-XPKN3QWY.js";
9
- import "./chunk-GDS2HXSW.js";
10
- import "./chunk-IWIIOFEB.js";
4
+ } from "./chunk-TGRK3CHF.js";
5
+ import "./chunk-2HZX6AMR.js";
6
+ import "./chunk-4LKGCFGG.js";
7
+ import "./chunk-4GAJJUYS.js";
8
+ import "./chunk-VOGGLPG5.js";
9
+ import "./chunk-H6ST2TGP.js";
10
+ import "./chunk-XFEK2X2D.js";
11
11
  import "./chunk-KBEIQP4G.js";
12
12
  import "./chunk-6MLEBAYZ.js";
13
13
  import "./chunk-VT4PDUYT.js";
@@ -24,4 +24,4 @@ var LintCommand = class extends ScriptCommandBase {
24
24
  export {
25
25
  LintCommand
26
26
  };
27
- //# sourceMappingURL=lint-XPODLDVA.js.map
27
+ //# sourceMappingURL=lint-IHUH45OC.js.map
@@ -1,34 +1,34 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  DevServerManager
4
- } from "./chunk-VZYSM7N7.js";
5
- import "./chunk-XHNACIHO.js";
6
- import "./chunk-RD7I2Q2F.js";
4
+ } from "./chunk-2JPXGGP4.js";
5
+ import "./chunk-NTTSUAVM.js";
7
6
  import {
8
7
  getWorkspacePort
9
- } from "./chunk-52MVUK5V.js";
8
+ } from "./chunk-USSL2X4A.js";
10
9
  import {
11
10
  IdentifierParser
12
- } from "./chunk-TVH67KEO.js";
13
- import {
14
- GitWorktreeManager
15
- } from "./chunk-HSGZW3ID.js";
16
- import {
17
- ProjectCapabilityDetector
18
- } from "./chunk-7GLZVDPQ.js";
19
- import "./chunk-XPKN3QWY.js";
11
+ } from "./chunk-2HZX6AMR.js";
20
12
  import {
21
13
  openBrowser
22
14
  } from "./chunk-YETJNRQM.js";
15
+ import "./chunk-4LKGCFGG.js";
16
+ import {
17
+ GitWorktreeManager
18
+ } from "./chunk-4GAJJUYS.js";
23
19
  import {
24
20
  extractSettingsOverrides
25
21
  } from "./chunk-GYCR2LOU.js";
22
+ import {
23
+ ProjectCapabilityDetector
24
+ } from "./chunk-TL72BGP6.js";
25
+ import "./chunk-VOGGLPG5.js";
26
26
  import {
27
27
  extractIssueNumber
28
- } from "./chunk-GDS2HXSW.js";
28
+ } from "./chunk-H6ST2TGP.js";
29
29
  import {
30
30
  SettingsManager
31
- } from "./chunk-IWIIOFEB.js";
31
+ } from "./chunk-XFEK2X2D.js";
32
32
  import "./chunk-KBEIQP4G.js";
33
33
  import "./chunk-6MLEBAYZ.js";
34
34
  import {
@@ -238,4 +238,4 @@ Make sure the project is built (run 'il start' first)`
238
238
  export {
239
239
  OpenCommand
240
240
  };
241
- //# sourceMappingURL=open-M2SUR74Y.js.map
241
+ //# sourceMappingURL=open-KWOV2OFO.js.map