@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.
- package/LICENSE +1 -1
- package/README.md +50 -4
- package/dist/{BranchNamingService-AO7BPIUJ.js → BranchNamingService-K6XNWQ6C.js} +2 -2
- package/dist/ClaudeContextManager-X2Y72GRL.js +14 -0
- package/dist/ClaudeService-7P32TTES.js +13 -0
- package/dist/{LoomLauncher-NHZMEVTQ.js → LoomLauncher-3I47SUPV.js} +6 -6
- package/dist/{ProjectCapabilityDetector-IA56AUE6.js → ProjectCapabilityDetector-N5L7T4IY.js} +3 -3
- package/dist/PromptTemplateManager-36YLQRHP.js +11 -0
- package/dist/README.md +50 -4
- package/dist/{SettingsManager-VCVLL32H.js → SettingsManager-QR7V2IW2.js} +2 -2
- package/dist/agents/iloom-artifact-reviewer.md +280 -0
- package/dist/agents/iloom-code-reviewer.md +9 -7
- package/dist/agents/iloom-issue-analyze-and-plan.md +21 -6
- package/dist/agents/iloom-issue-analyzer.md +21 -6
- package/dist/agents/iloom-issue-complexity-evaluator.md +21 -6
- package/dist/agents/iloom-issue-enhancer.md +21 -6
- package/dist/agents/iloom-issue-implementer.md +21 -6
- package/dist/agents/iloom-issue-planner.md +21 -6
- package/dist/{build-Z3WCIKPD.js → build-IC4CJRMP.js} +8 -8
- package/dist/{chunk-TVH67KEO.js → chunk-2HZX6AMR.js} +2 -2
- package/dist/{chunk-VZYSM7N7.js → chunk-2JPXGGP4.js} +20 -15
- package/dist/chunk-2JPXGGP4.js.map +1 -0
- package/dist/{chunk-HSGZW3ID.js → chunk-4GAJJUYS.js} +3 -3
- package/dist/chunk-4GAJJUYS.js.map +1 -0
- package/dist/{chunk-RD7I2Q2F.js → chunk-4LKGCFGG.js} +2 -2
- package/dist/{chunk-SSASIBDJ.js → chunk-5LVVQGB3.js} +5 -5
- package/dist/{chunk-GWONJE3X.js → chunk-6Y3FTRJL.js} +189 -48
- package/dist/chunk-6Y3FTRJL.js.map +1 -0
- package/dist/{chunk-4BSXZ5YZ.js → chunk-B7U6OKUR.js} +5 -24
- package/dist/chunk-B7U6OKUR.js.map +1 -0
- package/dist/{chunk-IGKPPACU.js → chunk-FO5GGFOV.js} +17 -8
- package/dist/chunk-FO5GGFOV.js.map +1 -0
- package/dist/{chunk-GDS2HXSW.js → chunk-H6ST2TGP.js} +20 -3
- package/dist/chunk-H6ST2TGP.js.map +1 -0
- package/dist/{chunk-A7XHHUEV.js → chunk-HZXBHMVM.js} +47 -22
- package/dist/chunk-HZXBHMVM.js.map +1 -0
- package/dist/{chunk-44Y5IF7P.js → chunk-I23OQB4Y.js} +5 -5
- package/dist/chunk-JT5LZRMI.js +302 -0
- package/dist/chunk-JT5LZRMI.js.map +1 -0
- package/dist/{chunk-Q457PKGH.js → chunk-KAYXR544.js} +2 -2
- package/dist/{chunk-XU5A6BWA.js → chunk-MZPRBNYC.js} +4 -4
- package/dist/{chunk-XHNACIHO.js → chunk-NTTSUAVM.js} +2 -2
- package/dist/{chunk-PLI3JQWT.js → chunk-OAVJR4PM.js} +2 -2
- package/dist/{chunk-4KGRPHM6.js → chunk-PL2FDYEK.js} +2 -2
- package/dist/chunk-QN47QVBX.js +131 -0
- package/dist/chunk-QN47QVBX.js.map +1 -0
- package/dist/{chunk-3FC3VNEX.js → chunk-RD7OPXZK.js} +34 -8
- package/dist/chunk-RD7OPXZK.js.map +1 -0
- package/dist/{chunk-O6LECMT6.js → chunk-TGRK3CHF.js} +8 -8
- package/dist/{chunk-7GLZVDPQ.js → chunk-TL72BGP6.js} +2 -2
- package/dist/{chunk-52MVUK5V.js → chunk-USSL2X4A.js} +2 -2
- package/dist/chunk-USSL2X4A.js.map +1 -0
- package/dist/{chunk-XPKN3QWY.js → chunk-VOGGLPG5.js} +1 -2
- package/dist/{chunk-IWIIOFEB.js → chunk-XFEK2X2D.js} +16 -6
- package/dist/chunk-XFEK2X2D.js.map +1 -0
- package/dist/{chunk-PBSHQVCT.js → chunk-Z6F5CUS6.js} +4 -4
- package/dist/{claude-V4HRPR4Z.js → claude-TP2QO3BU.js} +2 -2
- package/dist/{cleanup-NWNKWPUY.js → cleanup-M6N7KV7E.js} +20 -15
- package/dist/{cleanup-NWNKWPUY.js.map → cleanup-M6N7KV7E.js.map} +1 -1
- package/dist/cli.js +118 -84
- package/dist/cli.js.map +1 -1
- package/dist/{commit-534QIRHY.js → commit-ORHR53KW.js} +10 -10
- package/dist/{compile-UANHMNTS.js → compile-EOWJORKO.js} +8 -8
- package/dist/{contribute-7USRBWRM.js → contribute-4KCEOHSH.js} +3 -3
- package/dist/{dev-server-TO7RLYJI.js → dev-server-Q6M62ATG.js} +13 -13
- package/dist/{feedback-7ZZI6RC5.js → feedback-XRI7SGYX.js} +11 -11
- package/dist/{git-GUNOPP4Q.js → git-W3XUIFTR.js} +5 -3
- package/dist/hooks/iloom-hook.js +5 -3
- package/dist/{ignite-JBX3BUDE.js → ignite-3FHQY23X.js} +90 -47
- package/dist/ignite-3FHQY23X.js.map +1 -0
- package/dist/index.d.ts +37 -2
- package/dist/index.js +49 -13
- package/dist/index.js.map +1 -1
- package/dist/{chunk-FPNSFP6K.js → init-ALYWKNWG.js} +42 -329
- package/dist/init-ALYWKNWG.js.map +1 -0
- package/dist/{lint-XPODLDVA.js → lint-IHUH45OC.js} +8 -8
- package/dist/{open-M2SUR74Y.js → open-KWOV2OFO.js} +15 -15
- package/dist/{plan-FB4AOJ2Q.js → plan-P6MXL7AU.js} +54 -22
- package/dist/plan-P6MXL7AU.js.map +1 -0
- package/dist/{projects-325GEEGJ.js → projects-LH362JZQ.js} +3 -3
- package/dist/prompts/init-prompt.txt +9 -1
- package/dist/prompts/issue-prompt.txt +310 -0
- package/dist/prompts/plan-prompt.txt +4 -6
- package/dist/prompts/pr-prompt.txt +79 -0
- package/dist/prompts/regular-prompt.txt +205 -0
- package/dist/{rebase-4FNRBW3H.js → rebase-AJOJOZUG.js} +9 -9
- package/dist/{recap-GSXFEOD6.js → recap-GKJXMDXW.js} +5 -5
- package/dist/{run-GZNHRJB2.js → run-QEUVZF7J.js} +15 -15
- package/dist/schema/settings.schema.json +9 -1
- package/dist/{shell-2SPM3Z5O.js → shell-DAAVG4YN.js} +5 -5
- package/dist/{summary-Z4F7YFXE.js → summary-WNEYCO4S.js} +11 -11
- package/dist/{test-LBSPYIJW.js → test-5GPWWO3P.js} +8 -8
- package/dist/{test-git-ZPSPA2TP.js → test-git-EJUKDB7F.js} +3 -3
- package/dist/{test-prefix-6DLB2BHE.js → test-prefix-23TOBUXY.js} +3 -3
- package/dist/{test-webserver-XLJ2TZFP.js → test-webserver-CKROHFBQ.js} +5 -5
- package/dist/{vscode-LH3VSQ2W.js → vscode-6TOLFCI2.js} +5 -5
- package/package.json +2 -2
- package/dist/ClaudeContextManager-RDP6CLK6.js +0 -14
- package/dist/ClaudeService-FKPOQRA4.js +0 -13
- package/dist/PRManager-A63LT3NF.js +0 -16
- package/dist/PromptTemplateManager-OUYDHOPI.js +0 -9
- package/dist/chunk-3FC3VNEX.js.map +0 -1
- package/dist/chunk-4BSXZ5YZ.js.map +0 -1
- package/dist/chunk-52MVUK5V.js.map +0 -1
- package/dist/chunk-66QOCD5N.js +0 -79
- package/dist/chunk-66QOCD5N.js.map +0 -1
- package/dist/chunk-A7XHHUEV.js.map +0 -1
- package/dist/chunk-FPNSFP6K.js.map +0 -1
- package/dist/chunk-GDS2HXSW.js.map +0 -1
- package/dist/chunk-GWONJE3X.js.map +0 -1
- package/dist/chunk-HSGZW3ID.js.map +0 -1
- package/dist/chunk-IGKPPACU.js.map +0 -1
- package/dist/chunk-IWIIOFEB.js.map +0 -1
- package/dist/chunk-VZYSM7N7.js.map +0 -1
- package/dist/git-GUNOPP4Q.js.map +0 -1
- package/dist/ignite-JBX3BUDE.js.map +0 -1
- package/dist/init-XXDIB2UJ.js +0 -21
- package/dist/init-XXDIB2UJ.js.map +0 -1
- package/dist/plan-FB4AOJ2Q.js.map +0 -1
- /package/dist/{BranchNamingService-AO7BPIUJ.js.map → BranchNamingService-K6XNWQ6C.js.map} +0 -0
- /package/dist/{ClaudeContextManager-RDP6CLK6.js.map → ClaudeContextManager-X2Y72GRL.js.map} +0 -0
- /package/dist/{ClaudeService-FKPOQRA4.js.map → ClaudeService-7P32TTES.js.map} +0 -0
- /package/dist/{LoomLauncher-NHZMEVTQ.js.map → LoomLauncher-3I47SUPV.js.map} +0 -0
- /package/dist/{PRManager-A63LT3NF.js.map → ProjectCapabilityDetector-N5L7T4IY.js.map} +0 -0
- /package/dist/{ProjectCapabilityDetector-IA56AUE6.js.map → PromptTemplateManager-36YLQRHP.js.map} +0 -0
- /package/dist/{PromptTemplateManager-OUYDHOPI.js.map → SettingsManager-QR7V2IW2.js.map} +0 -0
- /package/dist/{build-Z3WCIKPD.js.map → build-IC4CJRMP.js.map} +0 -0
- /package/dist/{chunk-TVH67KEO.js.map → chunk-2HZX6AMR.js.map} +0 -0
- /package/dist/{chunk-RD7I2Q2F.js.map → chunk-4LKGCFGG.js.map} +0 -0
- /package/dist/{chunk-SSASIBDJ.js.map → chunk-5LVVQGB3.js.map} +0 -0
- /package/dist/{chunk-44Y5IF7P.js.map → chunk-I23OQB4Y.js.map} +0 -0
- /package/dist/{chunk-Q457PKGH.js.map → chunk-KAYXR544.js.map} +0 -0
- /package/dist/{chunk-XU5A6BWA.js.map → chunk-MZPRBNYC.js.map} +0 -0
- /package/dist/{chunk-XHNACIHO.js.map → chunk-NTTSUAVM.js.map} +0 -0
- /package/dist/{chunk-PLI3JQWT.js.map → chunk-OAVJR4PM.js.map} +0 -0
- /package/dist/{chunk-4KGRPHM6.js.map → chunk-PL2FDYEK.js.map} +0 -0
- /package/dist/{chunk-O6LECMT6.js.map → chunk-TGRK3CHF.js.map} +0 -0
- /package/dist/{chunk-7GLZVDPQ.js.map → chunk-TL72BGP6.js.map} +0 -0
- /package/dist/{chunk-XPKN3QWY.js.map → chunk-VOGGLPG5.js.map} +0 -0
- /package/dist/{chunk-PBSHQVCT.js.map → chunk-Z6F5CUS6.js.map} +0 -0
- /package/dist/{SettingsManager-VCVLL32H.js.map → claude-TP2QO3BU.js.map} +0 -0
- /package/dist/{commit-534QIRHY.js.map → commit-ORHR53KW.js.map} +0 -0
- /package/dist/{compile-UANHMNTS.js.map → compile-EOWJORKO.js.map} +0 -0
- /package/dist/{contribute-7USRBWRM.js.map → contribute-4KCEOHSH.js.map} +0 -0
- /package/dist/{dev-server-TO7RLYJI.js.map → dev-server-Q6M62ATG.js.map} +0 -0
- /package/dist/{feedback-7ZZI6RC5.js.map → feedback-XRI7SGYX.js.map} +0 -0
- /package/dist/{claude-V4HRPR4Z.js.map → git-W3XUIFTR.js.map} +0 -0
- /package/dist/{lint-XPODLDVA.js.map → lint-IHUH45OC.js.map} +0 -0
- /package/dist/{open-M2SUR74Y.js.map → open-KWOV2OFO.js.map} +0 -0
- /package/dist/{projects-325GEEGJ.js.map → projects-LH362JZQ.js.map} +0 -0
- /package/dist/{rebase-4FNRBW3H.js.map → rebase-AJOJOZUG.js.map} +0 -0
- /package/dist/{recap-GSXFEOD6.js.map → recap-GKJXMDXW.js.map} +0 -0
- /package/dist/{run-GZNHRJB2.js.map → run-QEUVZF7J.js.map} +0 -0
- /package/dist/{shell-2SPM3Z5O.js.map → shell-DAAVG4YN.js.map} +0 -0
- /package/dist/{summary-Z4F7YFXE.js.map → summary-WNEYCO4S.js.map} +0 -0
- /package/dist/{test-LBSPYIJW.js.map → test-5GPWWO3P.js.map} +0 -0
- /package/dist/{test-git-ZPSPA2TP.js.map → test-git-EJUKDB7F.js.map} +0 -0
- /package/dist/{test-prefix-6DLB2BHE.js.map → test-prefix-23TOBUXY.js.map} +0 -0
- /package/dist/{test-webserver-XLJ2TZFP.js.map → test-webserver-CKROHFBQ.js.map} +0 -0
- /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-
|
|
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-
|
|
20
|
+
} from "./chunk-QN47QVBX.js";
|
|
20
21
|
import {
|
|
21
22
|
getRepoRoot,
|
|
22
23
|
isFileGitignored
|
|
23
|
-
} from "./chunk-
|
|
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-
|
|
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/
|
|
33
|
-
import
|
|
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 =
|
|
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 =
|
|
412
|
-
let schemaPath =
|
|
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:
|
|
132
|
+
schemaExists: existsSync(schemaPath)
|
|
418
133
|
});
|
|
419
134
|
let schemaContent = "";
|
|
420
|
-
if (
|
|
135
|
+
if (existsSync(schemaPath)) {
|
|
421
136
|
logger.debug("Reading schema file");
|
|
422
|
-
schemaContent = await
|
|
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 =
|
|
439
|
-
const settingsLocalPath =
|
|
440
|
-
const settingsCommittedPath =
|
|
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:
|
|
449
|
-
localExists:
|
|
450
|
-
committedExists:
|
|
163
|
+
globalExists: existsSync(settingsGlobalPath),
|
|
164
|
+
localExists: existsSync(settingsLocalPath),
|
|
165
|
+
committedExists: existsSync(settingsCommittedPath)
|
|
451
166
|
});
|
|
452
|
-
if (
|
|
167
|
+
if (existsSync(settingsGlobalPath)) {
|
|
453
168
|
logger.debug("Reading global settings.json");
|
|
454
|
-
const content = await
|
|
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 (
|
|
190
|
+
if (existsSync(settingsCommittedPath)) {
|
|
476
191
|
logger.debug("Reading settings.json");
|
|
477
|
-
const content = await
|
|
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 (
|
|
213
|
+
if (existsSync(settingsLocalPath)) {
|
|
499
214
|
logger.debug("Reading settings.local.json");
|
|
500
|
-
const content = await
|
|
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:
|
|
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 =
|
|
594
|
-
const hasPackageJson =
|
|
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 =
|
|
692
|
-
while (currentDir !==
|
|
693
|
-
const readmePath =
|
|
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
|
|
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 =
|
|
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=
|
|
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-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-RD7I2Q2F.js";
|
|
4
|
+
} from "./chunk-2JPXGGP4.js";
|
|
5
|
+
import "./chunk-NTTSUAVM.js";
|
|
7
6
|
import {
|
|
8
7
|
getWorkspacePort
|
|
9
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-USSL2X4A.js";
|
|
10
9
|
import {
|
|
11
10
|
IdentifierParser
|
|
12
|
-
} from "./chunk-
|
|
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-
|
|
28
|
+
} from "./chunk-H6ST2TGP.js";
|
|
29
29
|
import {
|
|
30
30
|
SettingsManager
|
|
31
|
-
} from "./chunk-
|
|
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-
|
|
241
|
+
//# sourceMappingURL=open-KWOV2OFO.js.map
|