@iloom/cli 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BranchNamingService-TOM2KAUT.js → BranchNamingService-GCCWB3LK.js} +2 -2
- package/dist/{ClaudeContextManager-VEGJTS5E.js → ClaudeContextManager-DK77227F.js} +6 -6
- package/dist/{ClaudeService-ICSHJMQ5.js → ClaudeService-W3SA7HVG.js} +5 -5
- package/dist/{LoomLauncher-SJBZFZXE.js → LoomLauncher-S3YGJRJQ.js} +24 -11
- package/dist/LoomLauncher-S3YGJRJQ.js.map +1 -0
- package/dist/{chunk-TR5MC2U6.js → chunk-2W2FBL5G.js} +2 -2
- package/dist/{chunk-HVGQP44L.js → chunk-55TB3FSG.js} +2 -2
- package/dist/{chunk-LTNDJMTH.js → chunk-BIIQHEXJ.js} +4 -4
- package/dist/{chunk-KM3W7YQX.js → chunk-G6CIIJLT.js} +4 -4
- package/dist/{chunk-NFVFVYAP.js → chunk-IARWMDAX.js} +19 -12
- package/dist/chunk-IARWMDAX.js.map +1 -0
- package/dist/{chunk-MLS5FAV7.js → chunk-IJ7IGJT3.js} +4 -1
- package/dist/chunk-IJ7IGJT3.js.map +1 -0
- package/dist/{chunk-M5XUCTTJ.js → chunk-JC5HXN75.js} +2 -2
- package/dist/{chunk-ADDNFQJ4.js → chunk-POI7KLBH.js} +2 -2
- package/dist/{chunk-P2WZIDF3.js → chunk-QIUJPPJQ.js} +2 -2
- package/dist/{chunk-75B2HZZ5.js → chunk-RUC7OULH.js} +2 -2
- package/dist/{chunk-HHDSIE72.js → chunk-TMZAVPGF.js} +3 -3
- package/dist/{chunk-F4J6KEL6.js → chunk-UPUAQYAW.js} +2 -2
- package/dist/{chunk-JJUPY5MM.js → chunk-VAYGNQTE.js} +2 -2
- package/dist/{chunk-S44CHE3G.js → chunk-VTXCGKV5.js} +2 -2
- package/dist/{chunk-3NFBZRPR.js → chunk-Z5NXYJIG.js} +19 -1
- package/dist/chunk-Z5NXYJIG.js.map +1 -0
- package/dist/{claude-X7EBJRB2.js → claude-ACVXNB6N.js} +4 -4
- package/dist/{cleanup-7QVPYBJJ.js → cleanup-KDLVTT7M.js} +12 -12
- package/dist/cli.js +95 -48
- package/dist/cli.js.map +1 -1
- package/dist/{contribute-RZYCYUDX.js → contribute-HY372S6F.js} +3 -3
- package/dist/{dev-server-LOY7YWCP.js → dev-server-JCJGQ3PV.js} +9 -9
- package/dist/{feedback-562KPG5U.js → feedback-7PVBQNLJ.js} +5 -5
- package/dist/{git-OXJACVAU.js → git-4BVOOOOV.js} +3 -3
- package/dist/{ignite-VSIPGKKG.js → ignite-3B264M7K.js} +7 -7
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/{init-SCR2LQ4A.js → init-LBA6NUK2.js} +8 -8
- package/dist/{open-CX7HUE26.js → open-OGCV32Z4.js} +9 -9
- package/dist/{projects-6DTNDVLH.js → projects-P55273AB.js} +2 -2
- package/dist/{rebase-55URTXZC.js → rebase-4T5FQHNH.js} +8 -8
- package/dist/{run-DP2U2CA2.js → run-HNOP6WE2.js} +9 -9
- package/dist/shell-DE3HKJSM.js +240 -0
- package/dist/shell-DE3HKJSM.js.map +1 -0
- package/dist/{summary-J3CJSM7L.js → summary-GDT7DTRI.js} +8 -8
- package/dist/{test-git-QLAIBJLX.js → test-git-YMAE57UP.js} +3 -3
- package/dist/{test-prefix-6YM2ZOON.js → test-prefix-YCKL6CMT.js} +3 -3
- package/dist/{test-tabs-JGO3VOXJ.js → test-tabs-3SCJWRKT.js} +3 -3
- package/package.json +1 -1
- package/dist/LoomLauncher-SJBZFZXE.js.map +0 -1
- package/dist/chunk-3NFBZRPR.js.map +0 -1
- package/dist/chunk-MLS5FAV7.js.map +0 -1
- package/dist/chunk-NFVFVYAP.js.map +0 -1
- /package/dist/{BranchNamingService-TOM2KAUT.js.map → BranchNamingService-GCCWB3LK.js.map} +0 -0
- /package/dist/{ClaudeContextManager-VEGJTS5E.js.map → ClaudeContextManager-DK77227F.js.map} +0 -0
- /package/dist/{ClaudeService-ICSHJMQ5.js.map → ClaudeService-W3SA7HVG.js.map} +0 -0
- /package/dist/{chunk-TR5MC2U6.js.map → chunk-2W2FBL5G.js.map} +0 -0
- /package/dist/{chunk-HVGQP44L.js.map → chunk-55TB3FSG.js.map} +0 -0
- /package/dist/{chunk-LTNDJMTH.js.map → chunk-BIIQHEXJ.js.map} +0 -0
- /package/dist/{chunk-KM3W7YQX.js.map → chunk-G6CIIJLT.js.map} +0 -0
- /package/dist/{chunk-M5XUCTTJ.js.map → chunk-JC5HXN75.js.map} +0 -0
- /package/dist/{chunk-ADDNFQJ4.js.map → chunk-POI7KLBH.js.map} +0 -0
- /package/dist/{chunk-P2WZIDF3.js.map → chunk-QIUJPPJQ.js.map} +0 -0
- /package/dist/{chunk-75B2HZZ5.js.map → chunk-RUC7OULH.js.map} +0 -0
- /package/dist/{chunk-HHDSIE72.js.map → chunk-TMZAVPGF.js.map} +0 -0
- /package/dist/{chunk-F4J6KEL6.js.map → chunk-UPUAQYAW.js.map} +0 -0
- /package/dist/{chunk-JJUPY5MM.js.map → chunk-VAYGNQTE.js.map} +0 -0
- /package/dist/{chunk-S44CHE3G.js.map → chunk-VTXCGKV5.js.map} +0 -0
- /package/dist/{claude-X7EBJRB2.js.map → claude-ACVXNB6N.js.map} +0 -0
- /package/dist/{cleanup-7QVPYBJJ.js.map → cleanup-KDLVTT7M.js.map} +0 -0
- /package/dist/{contribute-RZYCYUDX.js.map → contribute-HY372S6F.js.map} +0 -0
- /package/dist/{dev-server-LOY7YWCP.js.map → dev-server-JCJGQ3PV.js.map} +0 -0
- /package/dist/{feedback-562KPG5U.js.map → feedback-7PVBQNLJ.js.map} +0 -0
- /package/dist/{git-OXJACVAU.js.map → git-4BVOOOOV.js.map} +0 -0
- /package/dist/{ignite-VSIPGKKG.js.map → ignite-3B264M7K.js.map} +0 -0
- /package/dist/{init-SCR2LQ4A.js.map → init-LBA6NUK2.js.map} +0 -0
- /package/dist/{open-CX7HUE26.js.map → open-OGCV32Z4.js.map} +0 -0
- /package/dist/{projects-6DTNDVLH.js.map → projects-P55273AB.js.map} +0 -0
- /package/dist/{rebase-55URTXZC.js.map → rebase-4T5FQHNH.js.map} +0 -0
- /package/dist/{run-DP2U2CA2.js.map → run-HNOP6WE2.js.map} +0 -0
- /package/dist/{summary-J3CJSM7L.js.map → summary-GDT7DTRI.js.map} +0 -0
- /package/dist/{test-git-QLAIBJLX.js.map → test-git-YMAE57UP.js.map} +0 -0
- /package/dist/{test-prefix-6YM2ZOON.js.map → test-prefix-YCKL6CMT.js.map} +0 -0
- /package/dist/{test-tabs-JGO3VOXJ.js.map → test-tabs-3SCJWRKT.js.map} +0 -0
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
ClaudeBranchNameStrategy,
|
|
4
4
|
DefaultBranchNamingService,
|
|
5
5
|
SimpleBranchNameStrategy
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QIUJPPJQ.js";
|
|
7
7
|
import "./chunk-6UIGZD2N.js";
|
|
8
8
|
import "./chunk-UYVWLISQ.js";
|
|
9
9
|
export {
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
DefaultBranchNamingService,
|
|
12
12
|
SimpleBranchNameStrategy
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=BranchNamingService-
|
|
14
|
+
//# sourceMappingURL=BranchNamingService-GCCWB3LK.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ClaudeContextManager
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-UPUAQYAW.js";
|
|
5
|
+
import "./chunk-POI7KLBH.js";
|
|
6
6
|
import "./chunk-VWNS6DH5.js";
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-RUC7OULH.js";
|
|
8
|
+
import "./chunk-VAYGNQTE.js";
|
|
9
|
+
import "./chunk-Z5NXYJIG.js";
|
|
10
10
|
import "./chunk-6UIGZD2N.js";
|
|
11
11
|
import "./chunk-74VMN2KC.js";
|
|
12
12
|
import "./chunk-UYVWLISQ.js";
|
|
13
13
|
export {
|
|
14
14
|
ClaudeContextManager
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=ClaudeContextManager-
|
|
16
|
+
//# sourceMappingURL=ClaudeContextManager-DK77227F.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ClaudeService
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-POI7KLBH.js";
|
|
5
5
|
import "./chunk-VWNS6DH5.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-RUC7OULH.js";
|
|
7
|
+
import "./chunk-VAYGNQTE.js";
|
|
8
|
+
import "./chunk-Z5NXYJIG.js";
|
|
9
9
|
import "./chunk-6UIGZD2N.js";
|
|
10
10
|
import "./chunk-74VMN2KC.js";
|
|
11
11
|
import "./chunk-UYVWLISQ.js";
|
|
12
12
|
export {
|
|
13
13
|
ClaudeService
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=ClaudeService-
|
|
15
|
+
//# sourceMappingURL=ClaudeService-W3SA7HVG.js.map
|
|
@@ -5,21 +5,24 @@ import {
|
|
|
5
5
|
import "./chunk-VBFDVGAE.js";
|
|
6
6
|
import {
|
|
7
7
|
ClaudeContextManager
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-UPUAQYAW.js";
|
|
9
|
+
import "./chunk-POI7KLBH.js";
|
|
10
|
+
import {
|
|
11
|
+
getExecutablePath
|
|
12
|
+
} from "./chunk-GYCR2LOU.js";
|
|
10
13
|
import "./chunk-VWNS6DH5.js";
|
|
11
14
|
import {
|
|
12
15
|
generateColorFromBranchName,
|
|
13
16
|
hexToRgb
|
|
14
17
|
} from "./chunk-WUQQNE63.js";
|
|
15
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-RUC7OULH.js";
|
|
16
19
|
import {
|
|
17
20
|
openMultipleTerminalWindows,
|
|
18
21
|
openTerminalWindow
|
|
19
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-VAYGNQTE.js";
|
|
20
23
|
import {
|
|
21
24
|
getDotenvFlowFiles
|
|
22
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-Z5NXYJIG.js";
|
|
23
26
|
import {
|
|
24
27
|
getLogger
|
|
25
28
|
} from "./chunk-6UIGZD2N.js";
|
|
@@ -198,14 +201,19 @@ var LoomLauncher = class {
|
|
|
198
201
|
getLogger().info("Dev server terminal opened");
|
|
199
202
|
}
|
|
200
203
|
/**
|
|
201
|
-
* Launch standalone terminal
|
|
204
|
+
* Launch standalone terminal running `il shell <identifier>`
|
|
202
205
|
*/
|
|
203
206
|
async launchStandaloneTerminal(options) {
|
|
207
|
+
const executable = options.executablePath ?? getExecutablePath();
|
|
208
|
+
const shellIdentifier = String(options.identifier);
|
|
209
|
+
const shellCommand = `${executable} shell ${shellIdentifier}`;
|
|
204
210
|
const backgroundColor = options.colorTerminal ?? true ? options.colorHex ? hexToRgb(options.colorHex) : generateColorFromBranchName(options.branchName).rgb : void 0;
|
|
205
211
|
await openTerminalWindow({
|
|
206
212
|
workspacePath: options.worktreePath,
|
|
213
|
+
command: shellCommand,
|
|
207
214
|
...backgroundColor && { backgroundColor },
|
|
208
|
-
|
|
215
|
+
// il shell handles env loading internally, so we don't need includeEnvSetup
|
|
216
|
+
includeEnvSetup: false,
|
|
209
217
|
includePortExport: options.capabilities.includes("web"),
|
|
210
218
|
...options.port !== void 0 && { port: options.port }
|
|
211
219
|
});
|
|
@@ -260,17 +268,22 @@ var LoomLauncher = class {
|
|
|
260
268
|
};
|
|
261
269
|
}
|
|
262
270
|
/**
|
|
263
|
-
* Build terminal options for standalone terminal
|
|
271
|
+
* Build terminal options for standalone terminal
|
|
272
|
+
* Runs `il shell <identifier>` which handles env loading internally
|
|
264
273
|
*/
|
|
265
274
|
buildStandaloneTerminalOptions(options) {
|
|
266
|
-
const hasEnvFile = this.hasAnyEnvFiles(options.worktreePath);
|
|
267
275
|
const terminalTitle = `Terminal - ${this.formatIdentifier(options.workflowType, options.identifier)}`;
|
|
276
|
+
const executable = options.executablePath ?? getExecutablePath();
|
|
277
|
+
const shellIdentifier = String(options.identifier);
|
|
278
|
+
const shellCommand = `${executable} shell ${shellIdentifier}`;
|
|
268
279
|
const backgroundColor = options.colorTerminal ?? true ? options.colorHex ? hexToRgb(options.colorHex) : generateColorFromBranchName(options.branchName).rgb : void 0;
|
|
269
280
|
return {
|
|
270
281
|
workspacePath: options.worktreePath,
|
|
282
|
+
command: shellCommand,
|
|
271
283
|
...backgroundColor && { backgroundColor },
|
|
272
284
|
title: terminalTitle,
|
|
273
|
-
|
|
285
|
+
// il shell handles env loading internally, so we don't need includeEnvSetup
|
|
286
|
+
includeEnvSetup: false,
|
|
274
287
|
includePortExport: options.capabilities.includes("web"),
|
|
275
288
|
...options.port !== void 0 && { port: options.port }
|
|
276
289
|
};
|
|
@@ -308,4 +321,4 @@ var LoomLauncher = class {
|
|
|
308
321
|
export {
|
|
309
322
|
LoomLauncher
|
|
310
323
|
};
|
|
311
|
-
//# sourceMappingURL=LoomLauncher-
|
|
324
|
+
//# sourceMappingURL=LoomLauncher-S3YGJRJQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/LoomLauncher.ts","../src/utils/ide.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { openTerminalWindow, openMultipleTerminalWindows } from '../utils/terminal.js'\nimport type { TerminalWindowOptions } from '../utils/terminal.js'\nimport { openIdeWindow } from '../utils/ide.js'\nimport { getDevServerLaunchCommand } from '../utils/dev-server.js'\nimport { generateColorFromBranchName, hexToRgb } from '../utils/color.js'\nimport { getLogger } from '../utils/logger-context.js'\nimport { ClaudeContextManager } from './ClaudeContextManager.js'\nimport type { SettingsManager } from './SettingsManager.js'\nimport type { Capability } from '../types/loom.js'\nimport { getDotenvFlowFiles } from '../utils/env.js'\nimport { getExecutablePath } from '../utils/cli-overrides.js'\n\nexport interface LaunchLoomOptions {\n\tenableClaude: boolean\n\tenableCode: boolean\n\tenableDevServer: boolean\n\tenableTerminal: boolean\n\tworktreePath: string\n\tbranchName: string\n\tport?: number\n\tcapabilities: Capability[]\n\tworkflowType: 'issue' | 'pr' | 'regular'\n\tidentifier: string | number\n\ttitle?: string\n\toneShot?: import('../types/index.js').OneShotMode\n\tsetArguments?: string[] // Raw --set arguments to forward\n\texecutablePath?: string // Executable path to use for spin command\n\tsourceEnvOnStart?: boolean // defaults to false if undefined\n\tcolorTerminal?: boolean // defaults to true if undefined\n\tcolorHex?: string // Pre-calculated hex color from metadata, avoids recalculation\n}\n\n/**\n * LoomLauncher orchestrates opening loom components\n */\nexport class LoomLauncher {\n\tprivate claudeContext: ClaudeContextManager\n\tprivate settings?: SettingsManager\n\n\tconstructor(claudeContext?: ClaudeContextManager, settings?: SettingsManager) {\n\t\tthis.claudeContext = claudeContext ?? new ClaudeContextManager()\n\t\tif (settings !== undefined) {\n\t\t\tthis.settings = settings\n\t\t}\n\t}\n\n\t/**\n\t * Launch loom components based on individual flags\n\t */\n\tasync launchLoom(options: LaunchLoomOptions): Promise<void> {\n\t\tconst { enableClaude, enableCode, enableDevServer, enableTerminal } = options\n\n\t\tgetLogger().debug(`Launching loom components: Claude=${enableClaude}, Code=${enableCode}, DevServer=${enableDevServer}, Terminal=${enableTerminal}`)\n\n\t\tconst launchPromises: Promise<void>[] = []\n\n\t\t// Launch VSCode if enabled\n\t\tif (enableCode) {\n\t\t\tgetLogger().debug('Launching VSCode')\n\t\t\tlaunchPromises.push(this.launchVSCode(options))\n\t\t}\n\n\t\t// Build array of terminals to launch\n\t\tconst terminalsToLaunch: Array<{\n\t\t\ttype: 'claude' | 'devServer' | 'terminal'\n\t\t\toptions: TerminalWindowOptions\n\t\t}> = []\n\n\t\tif (enableDevServer) {\n\t\t\tterminalsToLaunch.push({\n\t\t\t\ttype: 'devServer',\n\t\t\t\toptions: await this.buildDevServerTerminalOptions(options),\n\t\t\t})\n\t\t}\n\n\t\tif (enableTerminal) {\n\t\t\tterminalsToLaunch.push({\n\t\t\t\ttype: 'terminal',\n\t\t\t\toptions: this.buildStandaloneTerminalOptions(options),\n\t\t\t})\n\t\t}\n\n\t\tif (enableClaude) {\n\t\t\tterminalsToLaunch.push({\n\t\t\t\ttype: 'claude',\n\t\t\t\toptions: await this.buildClaudeTerminalOptions(options),\n\t\t\t})\n\t\t}\n\n\t\t// Launch terminals based on count\n\t\tif (terminalsToLaunch.length > 1) {\n\t\t\t// Multiple terminals - launch as tabs in single window\n\t\t\tgetLogger().debug(`Launching ${terminalsToLaunch.length} terminals in single window`)\n\t\t\tlaunchPromises.push(this.launchMultipleTerminals(terminalsToLaunch, options))\n\t\t} else if (terminalsToLaunch.length === 1) {\n\t\t\t// Single terminal - launch standalone\n\t\t\tconst terminal = terminalsToLaunch[0]\n\t\t\tif (!terminal) {\n\t\t\t\tthrow new Error('Terminal configuration is undefined')\n\t\t\t}\n\t\t\tconst terminalType = terminal.type\n\t\t\tgetLogger().debug(`Launching single ${terminalType} terminal`)\n\n\t\t\tif (terminalType === 'claude') {\n\t\t\t\tlaunchPromises.push(this.launchClaudeTerminal(options))\n\t\t\t} else if (terminalType === 'devServer') {\n\t\t\t\tlaunchPromises.push(this.launchDevServerTerminal(options))\n\t\t\t} else {\n\t\t\t\tlaunchPromises.push(this.launchStandaloneTerminal(options))\n\t\t\t}\n\t\t}\n\n\t\t// Wait for all components to launch\n\t\tawait Promise.all(launchPromises)\n\n\t\tgetLogger().success('loom launched successfully')\n\t}\n\n\t/**\n\t * Launch IDE (VSCode or configured alternative)\n\t */\n\tprivate async launchVSCode(options: LaunchLoomOptions): Promise<void> {\n\t\tconst ideConfig = await this.settings?.loadSettings().then((s) => s.ide)\n\t\tawait openIdeWindow(options.worktreePath, ideConfig)\n\t\tgetLogger().info('IDE opened')\n\t}\n\n\t/**\n\t * Launch Claude terminal\n\t */\n\tprivate async launchClaudeTerminal(options: LaunchLoomOptions): Promise<void> {\n\t\tawait this.claudeContext.launchWithContext({\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\ttype: options.workflowType,\n\t\t\tidentifier: options.identifier,\n\t\t\tbranchName: options.branchName,\n\t\t\t...(options.title && { title: options.title }),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t\toneShot: options.oneShot ?? 'default',\n\t\t\t...(options.setArguments && { setArguments: options.setArguments }),\n\t\t\t...(options.executablePath && { executablePath: options.executablePath }),\n\t\t})\n\t\tgetLogger().info('Claude terminal opened')\n\t}\n\n\t/**\n\t * Launch dev server terminal\n\t */\n\tprivate async launchDevServerTerminal(options: LaunchLoomOptions): Promise<void> {\n\t\tconst devServerCommand = await getDevServerLaunchCommand(\n\t\t\toptions.worktreePath,\n\t\t\toptions.port,\n\t\t\toptions.capabilities\n\t\t)\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\tawait openTerminalWindow({\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: devServerCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\tincludeEnvSetup: (options.sourceEnvOnStart ?? false) && this.hasAnyEnvFiles(options.worktreePath),\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t})\n\t\tgetLogger().info('Dev server terminal opened')\n\t}\n\n\t/**\n\t * Launch standalone terminal running `il shell <identifier>`\n\t */\n\tprivate async launchStandaloneTerminal(options: LaunchLoomOptions): Promise<void> {\n\t\t// Build shell command with identifier\n\t\tconst executable = options.executablePath ?? getExecutablePath()\n\t\tconst shellIdentifier = String(options.identifier)\n\t\tconst shellCommand = `${executable} shell ${shellIdentifier}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\tawait openTerminalWindow({\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: shellCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\t// il shell handles env loading internally, so we don't need includeEnvSetup\n\t\t\tincludeEnvSetup: false,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t})\n\t\tgetLogger().info('Standalone terminal opened')\n\t}\n\n\t/**\n\t * Build terminal options for Claude\n\t */\n\tprivate async buildClaudeTerminalOptions(\n\t\toptions: LaunchLoomOptions\n\t): Promise<TerminalWindowOptions> {\n\t\tconst hasEnvFile = this.hasAnyEnvFiles(options.worktreePath)\n\t\tconst claudeTitle = `Claude - ${this.formatIdentifier(options.workflowType, options.identifier)}`\n\n\t\tconst executable = options.executablePath ?? 'iloom'\n\t\tlet claudeCommand = `${executable} spin`\n\t\tif (options.oneShot !== undefined && options.oneShot !== 'default') {\n\t\t\tclaudeCommand += ` --one-shot=${options.oneShot}`\n\t\t}\n\t\tif (options.setArguments && options.setArguments.length > 0) {\n\t\t\tfor (const setArg of options.setArguments) {\n\t\t\t\tclaudeCommand += ` --set ${setArg}`\n\t\t\t}\n\t\t}\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\treturn {\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: claudeCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\ttitle: claudeTitle,\n\t\t\tincludeEnvSetup: (options.sourceEnvOnStart ?? false) && hasEnvFile,\n\t\t\t...(options.port !== undefined && { port: options.port, includePortExport: true }),\n\t\t}\n\t}\n\n\t/**\n\t * Build terminal options for dev server\n\t */\n\tprivate async buildDevServerTerminalOptions(\n\t\toptions: LaunchLoomOptions\n\t): Promise<TerminalWindowOptions> {\n\t\tconst devServerCommand = await getDevServerLaunchCommand(\n\t\t\toptions.worktreePath,\n\t\t\toptions.port,\n\t\t\toptions.capabilities\n\t\t)\n\t\tconst hasEnvFile = this.hasAnyEnvFiles(options.worktreePath)\n\t\tconst devServerTitle = `Dev Server - ${this.formatIdentifier(options.workflowType, options.identifier)}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\treturn {\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: devServerCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\ttitle: devServerTitle,\n\t\t\tincludeEnvSetup: (options.sourceEnvOnStart ?? false) && hasEnvFile,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t}\n\t}\n\n\t/**\n\t * Build terminal options for standalone terminal\n\t * Runs `il shell <identifier>` which handles env loading internally\n\t */\n\tprivate buildStandaloneTerminalOptions(\n\t\toptions: LaunchLoomOptions\n\t): TerminalWindowOptions {\n\t\tconst terminalTitle = `Terminal - ${this.formatIdentifier(options.workflowType, options.identifier)}`\n\n\t\t// Build shell command with identifier\n\t\t// Use the same executable path pattern as buildClaudeTerminalOptions\n\t\tconst executable = options.executablePath ?? getExecutablePath()\n\t\tconst shellIdentifier = String(options.identifier)\n\t\tconst shellCommand = `${executable} shell ${shellIdentifier}`\n\n\t\t// Only generate color if terminal coloring is enabled (default: true)\n\t\tconst backgroundColor = (options.colorTerminal ?? true)\n\t\t\t? options.colorHex\n\t\t\t\t? hexToRgb(options.colorHex)\n\t\t\t\t: generateColorFromBranchName(options.branchName).rgb\n\t\t\t: undefined\n\n\t\treturn {\n\t\t\tworkspacePath: options.worktreePath,\n\t\t\tcommand: shellCommand,\n\t\t\t...(backgroundColor && { backgroundColor }),\n\t\t\ttitle: terminalTitle,\n\t\t\t// il shell handles env loading internally, so we don't need includeEnvSetup\n\t\t\tincludeEnvSetup: false,\n\t\t\tincludePortExport: options.capabilities.includes('web'),\n\t\t\t...(options.port !== undefined && { port: options.port }),\n\t\t}\n\t}\n\n\t/**\n\t * Launch multiple terminals (2+) as tabs in single window\n\t */\n\tprivate async launchMultipleTerminals(\n\t\tterminals: Array<{ type: string; options: TerminalWindowOptions }>,\n\t\t_options: LaunchLoomOptions\n\t): Promise<void> {\n\t\tconst terminalOptions = terminals.map((t) => t.options)\n\n\t\tawait openMultipleTerminalWindows(terminalOptions)\n\n\t\tconst terminalTypes = terminals.map((t) => t.type).join(' + ')\n\t\tgetLogger().info(`Multiple terminals opened: ${terminalTypes}`)\n\t}\n\n\t/**\n\t * Check if any dotenv-flow files exist in the workspace\n\t * Checks all files: .env, .env.local, .env.{NODE_ENV}, .env.{NODE_ENV}.local\n\t */\n\tprivate hasAnyEnvFiles(workspacePath: string): boolean {\n\t\tconst envFiles = getDotenvFlowFiles()\n\t\treturn envFiles.some(file => existsSync(join(workspacePath, file)))\n\t}\n\n\t/**\n\t * Format identifier for terminal tab titles\n\t */\n\tprivate formatIdentifier(workflowType: 'issue' | 'pr' | 'regular', identifier: string | number): string {\n\t\tif (workflowType === 'issue') {\n\t\t\treturn `Issue #${identifier}`\n\t\t} else if (workflowType === 'pr') {\n\t\t\treturn `PR #${identifier}`\n\t\t} else {\n\t\t\treturn `Branch: ${identifier}`\n\t\t}\n\t}\n}\n","import { execa } from 'execa'\nimport { logger } from './logger.js'\nimport type { IdeSettings } from '../lib/SettingsManager.js'\n\n// IDE preset configuration\nconst IDE_PRESETS = {\n\tvscode: { command: 'code', name: 'Visual Studio Code', args: [] },\n\tcursor: { command: 'cursor', name: 'Cursor', args: [] },\n\twebstorm: { command: 'webstorm', name: 'WebStorm', args: ['--nosplash'] },\n\tsublime: { command: 'subl', name: 'Sublime Text', args: [] },\n\tintellij: { command: 'idea', name: 'IntelliJ IDEA', args: ['--nosplash'] },\n\twindsurf: { command: 'surf', name: 'Windsurf', args: [] },\n\tantigravity: { command: 'agy', name: 'Antigravity', args: [] },\n} as const\n\ntype IdePreset = keyof typeof IDE_PRESETS\n\n// Resolve IDE configuration to command and args\nexport function getIdeConfig(ideSettings?: IdeSettings): {\n\tcommand: string\n\targs: string[]\n\tname: string\n} {\n\t// Default to vscode if not configured\n\tconst type = ideSettings?.type ?? 'vscode'\n\n\tconst preset = IDE_PRESETS[type as IdePreset]\n\treturn {\n\t\tcommand: preset.command,\n\t\targs: [...preset.args],\n\t\tname: preset.name,\n\t}\n}\n\n// Check if IDE is available\nexport async function isIdeAvailable(command: string): Promise<boolean> {\n\ttry {\n\t\tawait execa('command', ['-v', command], { shell: true, timeout: 5000 })\n\t\treturn true\n\t} catch {\n\t\treturn false\n\t}\n}\n\n// Get installation hint for IDE\nfunction getInstallHint(type: string): string {\n\tconst hints: Record<string, string> = {\n\t\tvscode:\n\t\t\t'Install command-line tools: Open VSCode > Command Palette > \"Shell Command: Install \\'code\\' command in PATH\"',\n\t\tcursor:\n\t\t\t'Install command-line tools: Open Cursor > Command Palette > \"Install \\'cursor\\' command in PATH\"',\n\t\twebstorm: 'Install via JetBrains Toolbox > Settings > Shell Scripts > Enable',\n\t\tsublime:\n\t\t\t'Create symlink: ln -s \"/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl\" /usr/local/bin/subl',\n\t\tintellij: 'Install via JetBrains Toolbox > Settings > Shell Scripts > Enable',\n\t\twindsurf:\n\t\t\t'Install command-line tools during Windsurf installation or create symlink manually',\n\t\tantigravity:\n\t\t\t'Install command-line tools during Antigravity installation or create symlink manually',\n\t}\n\treturn hints[type] ?? `Ensure the IDE command is available in your PATH`\n}\n\n// Open IDE window for workspace\nexport async function openIdeWindow(\n\tworkspacePath: string,\n\tideSettings?: IdeSettings\n): Promise<void> {\n\tconst config = getIdeConfig(ideSettings)\n\tconst available = await isIdeAvailable(config.command)\n\n\tif (!available) {\n\t\tconst type = ideSettings?.type ?? 'vscode'\n\t\tthrow new Error(\n\t\t\t`${config.name} is not available. The \"${config.command}\" command was not found in PATH.\\n` +\n\t\t\t\tgetInstallHint(type)\n\t\t)\n\t}\n\n\ttry {\n\t\tawait execa(config.command, [...config.args, workspacePath])\n\t\tlogger.debug(`Opened ${config.name} for workspace: ${workspacePath}`)\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Failed to open ${config.name}: ${error instanceof Error ? error.message : 'Unknown error'}`\n\t\t)\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
MetadataManager
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-IJ7IGJT3.js";
|
|
5
5
|
import {
|
|
6
6
|
SettingsManager
|
|
7
7
|
} from "./chunk-VWNS6DH5.js";
|
|
@@ -644,4 +644,4 @@ export {
|
|
|
644
644
|
checkRemoteBranchStatus,
|
|
645
645
|
getMergeTargetBranch
|
|
646
646
|
};
|
|
647
|
-
//# sourceMappingURL=chunk-
|
|
647
|
+
//# sourceMappingURL=chunk-2W2FBL5G.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
extractIssueNumber,
|
|
4
4
|
extractPRNumber
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2W2FBL5G.js";
|
|
6
6
|
|
|
7
7
|
// src/utils/IdentifierParser.ts
|
|
8
8
|
var IdentifierParser = class {
|
|
@@ -85,4 +85,4 @@ var IdentifierParser = class {
|
|
|
85
85
|
export {
|
|
86
86
|
IdentifierParser
|
|
87
87
|
};
|
|
88
|
-
//# sourceMappingURL=chunk-
|
|
88
|
+
//# sourceMappingURL=chunk-55TB3FSG.js.map
|
|
@@ -4,17 +4,17 @@ import {
|
|
|
4
4
|
findMainWorktreePathWithSettings,
|
|
5
5
|
findWorktreeForBranch,
|
|
6
6
|
getMergeTargetBranch
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-2W2FBL5G.js";
|
|
8
8
|
import {
|
|
9
9
|
MetadataManager
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-IJ7IGJT3.js";
|
|
11
11
|
import {
|
|
12
12
|
SettingsManager
|
|
13
13
|
} from "./chunk-VWNS6DH5.js";
|
|
14
14
|
import {
|
|
15
15
|
detectClaudeCli,
|
|
16
16
|
launchClaude
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-RUC7OULH.js";
|
|
18
18
|
import {
|
|
19
19
|
getLogger
|
|
20
20
|
} from "./chunk-6UIGZD2N.js";
|
|
@@ -365,4 +365,4 @@ To recover:
|
|
|
365
365
|
export {
|
|
366
366
|
MergeManager
|
|
367
367
|
};
|
|
368
|
-
//# sourceMappingURL=chunk-
|
|
368
|
+
//# sourceMappingURL=chunk-BIIQHEXJ.js.map
|
|
@@ -4,17 +4,17 @@ import {
|
|
|
4
4
|
} from "./chunk-UYWAESOT.js";
|
|
5
5
|
import {
|
|
6
6
|
GitWorktreeManager
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JC5HXN75.js";
|
|
8
8
|
import {
|
|
9
9
|
parseGitRemotes
|
|
10
10
|
} from "./chunk-PSFVTBM7.js";
|
|
11
11
|
import {
|
|
12
12
|
isFileGitignored
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-2W2FBL5G.js";
|
|
14
14
|
import {
|
|
15
15
|
detectClaudeCli,
|
|
16
16
|
launchClaude
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-RUC7OULH.js";
|
|
18
18
|
import {
|
|
19
19
|
PromptTemplateManager
|
|
20
20
|
} from "./chunk-74VMN2KC.js";
|
|
@@ -700,4 +700,4 @@ export {
|
|
|
700
700
|
ShellCompletion,
|
|
701
701
|
InitCommand
|
|
702
702
|
};
|
|
703
|
-
//# sourceMappingURL=chunk-
|
|
703
|
+
//# sourceMappingURL=chunk-G6CIIJLT.js.map
|
|
@@ -23,10 +23,10 @@ import {
|
|
|
23
23
|
hasUncommittedChanges,
|
|
24
24
|
isBranchMergedIntoMain,
|
|
25
25
|
isFileTrackedByGit
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-2W2FBL5G.js";
|
|
27
27
|
import {
|
|
28
28
|
MetadataManager
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-IJ7IGJT3.js";
|
|
30
30
|
import {
|
|
31
31
|
SettingsManager
|
|
32
32
|
} from "./chunk-VWNS6DH5.js";
|
|
@@ -40,15 +40,16 @@ import {
|
|
|
40
40
|
} from "./chunk-WUQQNE63.js";
|
|
41
41
|
import {
|
|
42
42
|
generateDeterministicSessionId
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-RUC7OULH.js";
|
|
44
44
|
import {
|
|
45
45
|
findEnvFileForDatabaseUrl,
|
|
46
46
|
formatEnvLine,
|
|
47
47
|
hasVariableInAnyEnvFile,
|
|
48
|
+
isNoEnvFilesFoundError,
|
|
48
49
|
loadEnvIntoProcess,
|
|
49
50
|
parseEnvFile,
|
|
50
51
|
validateEnvVariable
|
|
51
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-Z5NXYJIG.js";
|
|
52
53
|
import {
|
|
53
54
|
getLogger
|
|
54
55
|
} from "./chunk-6UIGZD2N.js";
|
|
@@ -300,7 +301,7 @@ var LoomManager = class {
|
|
|
300
301
|
}
|
|
301
302
|
}
|
|
302
303
|
let cliSymlinks = void 0;
|
|
303
|
-
if (capabilities.includes("cli")) {
|
|
304
|
+
if (capabilities.includes("cli") && input.type !== "branch") {
|
|
304
305
|
try {
|
|
305
306
|
cliSymlinks = await this.cliIsolation.setupCLIIsolation(
|
|
306
307
|
worktreePath,
|
|
@@ -347,8 +348,8 @@ var LoomManager = class {
|
|
|
347
348
|
const setArguments = (_j = input.options) == null ? void 0 : _j.setArguments;
|
|
348
349
|
const executablePath = (_k = input.options) == null ? void 0 : _k.executablePath;
|
|
349
350
|
if (enableClaude || enableCode || enableDevServer || enableTerminal) {
|
|
350
|
-
const { LoomLauncher } = await import("./LoomLauncher-
|
|
351
|
-
const { ClaudeContextManager } = await import("./ClaudeContextManager-
|
|
351
|
+
const { LoomLauncher } = await import("./LoomLauncher-S3YGJRJQ.js");
|
|
352
|
+
const { ClaudeContextManager } = await import("./ClaudeContextManager-DK77227F.js");
|
|
352
353
|
const claudeContext = new ClaudeContextManager(void 0, void 0, this.settings);
|
|
353
354
|
const launcher = new LoomLauncher(claudeContext, this.settings);
|
|
354
355
|
await launcher.launchLoom({
|
|
@@ -385,6 +386,7 @@ var LoomManager = class {
|
|
|
385
386
|
issueTracker: this.issueTracker.providerName,
|
|
386
387
|
colorHex: colorData.hex,
|
|
387
388
|
sessionId,
|
|
389
|
+
projectPath: this.gitWorktree.workingDirectory,
|
|
388
390
|
...input.parentLoom && { parentLoom: input.parentLoom }
|
|
389
391
|
};
|
|
390
392
|
await this.metadataManager.writeMetadata(worktreePath, metadataInput);
|
|
@@ -473,7 +475,7 @@ var LoomManager = class {
|
|
|
473
475
|
async checkAndWarnChildLooms(branchName) {
|
|
474
476
|
let targetBranch = branchName;
|
|
475
477
|
if (!targetBranch) {
|
|
476
|
-
const { getCurrentBranch } = await import("./git-
|
|
478
|
+
const { getCurrentBranch } = await import("./git-4BVOOOOV.js");
|
|
477
479
|
targetBranch = await getCurrentBranch();
|
|
478
480
|
}
|
|
479
481
|
if (!targetBranch) {
|
|
@@ -697,7 +699,11 @@ var LoomManager = class {
|
|
|
697
699
|
loadMainEnvFile() {
|
|
698
700
|
const result = loadEnvIntoProcess({ path: process.cwd() });
|
|
699
701
|
if (result.error) {
|
|
700
|
-
|
|
702
|
+
if (isNoEnvFilesFoundError(result.error)) {
|
|
703
|
+
getLogger().debug("No .env files found (this is normal for projects without environment files)");
|
|
704
|
+
} else {
|
|
705
|
+
getLogger().warn(`Warning: Could not load .env files: ${result.error.message}`);
|
|
706
|
+
}
|
|
701
707
|
} else {
|
|
702
708
|
getLogger().info("Loaded environment variables using dotenv-flow");
|
|
703
709
|
if (result.parsed && Object.keys(result.parsed).length > 0) {
|
|
@@ -894,8 +900,8 @@ var LoomManager = class {
|
|
|
894
900
|
const executablePath = (_i = input.options) == null ? void 0 : _i.executablePath;
|
|
895
901
|
if (enableClaude || enableCode || enableDevServer || enableTerminal) {
|
|
896
902
|
getLogger().info("Launching workspace components...");
|
|
897
|
-
const { LoomLauncher } = await import("./LoomLauncher-
|
|
898
|
-
const { ClaudeContextManager } = await import("./ClaudeContextManager-
|
|
903
|
+
const { LoomLauncher } = await import("./LoomLauncher-S3YGJRJQ.js");
|
|
904
|
+
const { ClaudeContextManager } = await import("./ClaudeContextManager-DK77227F.js");
|
|
899
905
|
const claudeContext = new ClaudeContextManager(void 0, void 0, this.settings);
|
|
900
906
|
const launcher = new LoomLauncher(claudeContext, this.settings);
|
|
901
907
|
await launcher.launchLoom({
|
|
@@ -933,6 +939,7 @@ var LoomManager = class {
|
|
|
933
939
|
issueTracker: this.issueTracker.providerName,
|
|
934
940
|
colorHex,
|
|
935
941
|
sessionId,
|
|
942
|
+
projectPath: this.gitWorktree.workingDirectory,
|
|
936
943
|
...input.parentLoom && { parentLoom: input.parentLoom }
|
|
937
944
|
};
|
|
938
945
|
await this.metadataManager.writeMetadata(worktreePath, metadataInput);
|
|
@@ -2281,4 +2288,4 @@ export {
|
|
|
2281
2288
|
DatabaseManager,
|
|
2282
2289
|
ResourceCleanup
|
|
2283
2290
|
};
|
|
2284
|
-
//# sourceMappingURL=chunk-
|
|
2291
|
+
//# sourceMappingURL=chunk-IARWMDAX.js.map
|