@iloom/cli 0.8.1 → 0.8.2
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/README.md +3 -0
- package/dist/{PRManager-H4TUZTZL.js → PRManager-A63LT3NF.js} +3 -3
- package/dist/README.md +3 -0
- package/dist/{build-H4DK3DMQ.js → build-Z3WCIKPD.js} +3 -3
- package/dist/{chunk-A4UQY3M2.js → chunk-3FC3VNEX.js} +2 -2
- package/dist/{chunk-EQOFNPEY.js → chunk-44Y5IF7P.js} +4 -4
- package/dist/{chunk-ECP77QGE.js → chunk-A7XHHUEV.js} +4 -4
- package/dist/{chunk-RODL2HVY.js → chunk-FPNSFP6K.js} +6 -6
- package/dist/{chunk-NR64HNF7.js → chunk-GWONJE3X.js} +6 -6
- package/dist/{chunk-BCQDYAOJ.js → chunk-O6LECMT6.js} +4 -4
- package/dist/{cleanup-OGE7V7AD.js → cleanup-NWNKWPUY.js} +3 -3
- package/dist/cli.js +55 -37
- package/dist/cli.js.map +1 -1
- package/dist/{compile-ZOAODFN2.js → compile-UANHMNTS.js} +3 -3
- package/dist/{dev-server-TYYJM3XA.js → dev-server-TO7RLYJI.js} +5 -5
- package/dist/{feedback-HZVLOTQJ.js → feedback-7ZZI6RC5.js} +2 -2
- package/dist/{ignite-ZO7SGUKP.js → ignite-5SIGOW5V.js} +4 -4
- package/dist/{init-MZBIXQ7V.js → init-XXDIB2UJ.js} +4 -4
- package/dist/{lint-MDVUV3W2.js → lint-XPODLDVA.js} +3 -3
- package/dist/{open-2LPZ7XXW.js → open-M2SUR74Y.js} +5 -5
- package/dist/{plan-PIME6UNY.js → plan-FB4AOJ2Q.js} +6 -6
- package/dist/{rebase-7YS3N274.js → rebase-4FNRBW3H.js} +3 -3
- package/dist/{run-XPGCMFFO.js → run-GZNHRJB2.js} +5 -5
- package/dist/{summary-C5VVSJAJ.js → summary-Z4F7YFXE.js} +3 -3
- package/dist/{test-N2725YRI.js → test-LBSPYIJW.js} +3 -3
- package/dist/vscode-LH3VSQ2W.js +164 -0
- package/dist/vscode-LH3VSQ2W.js.map +1 -0
- package/dist/vscode-announcement-EQ2SKK3T.js +46 -0
- package/dist/vscode-announcement-EQ2SKK3T.js.map +1 -0
- package/package.json +2 -1
- /package/dist/{PRManager-H4TUZTZL.js.map → PRManager-A63LT3NF.js.map} +0 -0
- /package/dist/{build-H4DK3DMQ.js.map → build-Z3WCIKPD.js.map} +0 -0
- /package/dist/{chunk-A4UQY3M2.js.map → chunk-3FC3VNEX.js.map} +0 -0
- /package/dist/{chunk-EQOFNPEY.js.map → chunk-44Y5IF7P.js.map} +0 -0
- /package/dist/{chunk-ECP77QGE.js.map → chunk-A7XHHUEV.js.map} +0 -0
- /package/dist/{chunk-RODL2HVY.js.map → chunk-FPNSFP6K.js.map} +0 -0
- /package/dist/{chunk-NR64HNF7.js.map → chunk-GWONJE3X.js.map} +0 -0
- /package/dist/{chunk-BCQDYAOJ.js.map → chunk-O6LECMT6.js.map} +0 -0
- /package/dist/{cleanup-OGE7V7AD.js.map → cleanup-NWNKWPUY.js.map} +0 -0
- /package/dist/{compile-ZOAODFN2.js.map → compile-UANHMNTS.js.map} +0 -0
- /package/dist/{dev-server-TYYJM3XA.js.map → dev-server-TO7RLYJI.js.map} +0 -0
- /package/dist/{feedback-HZVLOTQJ.js.map → feedback-7ZZI6RC5.js.map} +0 -0
- /package/dist/{ignite-ZO7SGUKP.js.map → ignite-5SIGOW5V.js.map} +0 -0
- /package/dist/{init-MZBIXQ7V.js.map → init-XXDIB2UJ.js.map} +0 -0
- /package/dist/{lint-MDVUV3W2.js.map → lint-XPODLDVA.js.map} +0 -0
- /package/dist/{open-2LPZ7XXW.js.map → open-M2SUR74Y.js.map} +0 -0
- /package/dist/{plan-PIME6UNY.js.map → plan-FB4AOJ2Q.js.map} +0 -0
- /package/dist/{rebase-7YS3N274.js.map → rebase-4FNRBW3H.js.map} +0 -0
- /package/dist/{run-XPGCMFFO.js.map → run-GZNHRJB2.js.map} +0 -0
- /package/dist/{summary-C5VVSJAJ.js.map → summary-Z4F7YFXE.js.map} +0 -0
- /package/dist/{test-N2725YRI.js.map → test-LBSPYIJW.js.map} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ScriptCommandBase
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-TVH67KEO.js";
|
|
4
|
+
} from "./chunk-O6LECMT6.js";
|
|
6
5
|
import {
|
|
7
6
|
runScript
|
|
8
7
|
} from "./chunk-RD7I2Q2F.js";
|
|
8
|
+
import "./chunk-TVH67KEO.js";
|
|
9
9
|
import "./chunk-HSGZW3ID.js";
|
|
10
10
|
import {
|
|
11
11
|
getPackageScripts
|
|
@@ -54,4 +54,4 @@ var CompileCommand = class extends ScriptCommandBase {
|
|
|
54
54
|
export {
|
|
55
55
|
CompileCommand
|
|
56
56
|
};
|
|
57
|
-
//# sourceMappingURL=compile-
|
|
57
|
+
//# sourceMappingURL=compile-UANHMNTS.js.map
|
|
@@ -3,19 +3,19 @@ import {
|
|
|
3
3
|
DevServerManager
|
|
4
4
|
} from "./chunk-VZYSM7N7.js";
|
|
5
5
|
import "./chunk-XHNACIHO.js";
|
|
6
|
+
import "./chunk-RD7I2Q2F.js";
|
|
6
7
|
import {
|
|
7
8
|
getWorkspacePort
|
|
8
9
|
} from "./chunk-52MVUK5V.js";
|
|
9
10
|
import {
|
|
10
11
|
IdentifierParser
|
|
11
12
|
} from "./chunk-TVH67KEO.js";
|
|
12
|
-
import {
|
|
13
|
-
ProjectCapabilityDetector
|
|
14
|
-
} from "./chunk-7GLZVDPQ.js";
|
|
15
|
-
import "./chunk-RD7I2Q2F.js";
|
|
16
13
|
import {
|
|
17
14
|
GitWorktreeManager
|
|
18
15
|
} from "./chunk-HSGZW3ID.js";
|
|
16
|
+
import {
|
|
17
|
+
ProjectCapabilityDetector
|
|
18
|
+
} from "./chunk-7GLZVDPQ.js";
|
|
19
19
|
import "./chunk-XPKN3QWY.js";
|
|
20
20
|
import {
|
|
21
21
|
extractSettingsOverrides
|
|
@@ -256,4 +256,4 @@ var DevServerCommand = class {
|
|
|
256
256
|
export {
|
|
257
257
|
DevServerCommand
|
|
258
258
|
};
|
|
259
|
-
//# sourceMappingURL=dev-server-
|
|
259
|
+
//# sourceMappingURL=dev-server-TO7RLYJI.js.map
|
|
@@ -7,10 +7,10 @@ import "./chunk-XJHQVOT6.js";
|
|
|
7
7
|
import {
|
|
8
8
|
ProjectCapabilityDetector
|
|
9
9
|
} from "./chunk-7GLZVDPQ.js";
|
|
10
|
+
import "./chunk-XPKN3QWY.js";
|
|
10
11
|
import {
|
|
11
12
|
AgentManager
|
|
12
13
|
} from "./chunk-4BSXZ5YZ.js";
|
|
13
|
-
import "./chunk-XPKN3QWY.js";
|
|
14
14
|
import "./chunk-YETJNRQM.js";
|
|
15
15
|
import "./chunk-66QOCD5N.js";
|
|
16
16
|
import {
|
|
@@ -165,4 +165,4 @@ ${userBody}`;
|
|
|
165
165
|
export {
|
|
166
166
|
FeedbackCommand
|
|
167
167
|
};
|
|
168
|
-
//# sourceMappingURL=feedback-
|
|
168
|
+
//# sourceMappingURL=feedback-7ZZI6RC5.js.map
|
|
@@ -5,6 +5,9 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
getWorkspacePort
|
|
7
7
|
} from "./chunk-52MVUK5V.js";
|
|
8
|
+
import {
|
|
9
|
+
GitWorktreeManager
|
|
10
|
+
} from "./chunk-HSGZW3ID.js";
|
|
8
11
|
import {
|
|
9
12
|
FirstRunManager
|
|
10
13
|
} from "./chunk-Q7POFB5Q.js";
|
|
@@ -15,9 +18,6 @@ import {
|
|
|
15
18
|
import {
|
|
16
19
|
AgentManager
|
|
17
20
|
} from "./chunk-4BSXZ5YZ.js";
|
|
18
|
-
import {
|
|
19
|
-
GitWorktreeManager
|
|
20
|
-
} from "./chunk-HSGZW3ID.js";
|
|
21
21
|
import "./chunk-RNBIISBZ.js";
|
|
22
22
|
import {
|
|
23
23
|
PromptTemplateManager
|
|
@@ -717,4 +717,4 @@ export {
|
|
|
717
717
|
IgniteCommand,
|
|
718
718
|
WorktreeValidationError
|
|
719
719
|
};
|
|
720
|
-
//# sourceMappingURL=ignite-
|
|
720
|
+
//# sourceMappingURL=ignite-5SIGOW5V.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
InitCommand
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-FPNSFP6K.js";
|
|
5
|
+
import "./chunk-HSGZW3ID.js";
|
|
6
6
|
import "./chunk-BYUMEDDD.js";
|
|
7
|
+
import "./chunk-Q7POFB5Q.js";
|
|
7
8
|
import "./chunk-4BSXZ5YZ.js";
|
|
8
|
-
import "./chunk-HSGZW3ID.js";
|
|
9
9
|
import "./chunk-FXDYIV3K.js";
|
|
10
10
|
import "./chunk-66QOCD5N.js";
|
|
11
11
|
import "./chunk-GDS2HXSW.js";
|
|
@@ -18,4 +18,4 @@ import "./chunk-VT4PDUYT.js";
|
|
|
18
18
|
export {
|
|
19
19
|
InitCommand
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=init-
|
|
21
|
+
//# sourceMappingURL=init-XXDIB2UJ.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ScriptCommandBase
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-TVH67KEO.js";
|
|
4
|
+
} from "./chunk-O6LECMT6.js";
|
|
6
5
|
import "./chunk-RD7I2Q2F.js";
|
|
6
|
+
import "./chunk-TVH67KEO.js";
|
|
7
7
|
import "./chunk-HSGZW3ID.js";
|
|
8
8
|
import "./chunk-XPKN3QWY.js";
|
|
9
9
|
import "./chunk-GDS2HXSW.js";
|
|
@@ -24,4 +24,4 @@ var LintCommand = class extends ScriptCommandBase {
|
|
|
24
24
|
export {
|
|
25
25
|
LintCommand
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=lint-
|
|
27
|
+
//# sourceMappingURL=lint-XPODLDVA.js.map
|
|
@@ -3,19 +3,19 @@ import {
|
|
|
3
3
|
DevServerManager
|
|
4
4
|
} from "./chunk-VZYSM7N7.js";
|
|
5
5
|
import "./chunk-XHNACIHO.js";
|
|
6
|
+
import "./chunk-RD7I2Q2F.js";
|
|
6
7
|
import {
|
|
7
8
|
getWorkspacePort
|
|
8
9
|
} from "./chunk-52MVUK5V.js";
|
|
9
10
|
import {
|
|
10
11
|
IdentifierParser
|
|
11
12
|
} from "./chunk-TVH67KEO.js";
|
|
12
|
-
import {
|
|
13
|
-
ProjectCapabilityDetector
|
|
14
|
-
} from "./chunk-7GLZVDPQ.js";
|
|
15
|
-
import "./chunk-RD7I2Q2F.js";
|
|
16
13
|
import {
|
|
17
14
|
GitWorktreeManager
|
|
18
15
|
} from "./chunk-HSGZW3ID.js";
|
|
16
|
+
import {
|
|
17
|
+
ProjectCapabilityDetector
|
|
18
|
+
} from "./chunk-7GLZVDPQ.js";
|
|
19
19
|
import "./chunk-XPKN3QWY.js";
|
|
20
20
|
import {
|
|
21
21
|
openBrowser
|
|
@@ -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-M2SUR74Y.js.map
|
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
import {
|
|
3
3
|
launchFirstRunSetup,
|
|
4
4
|
needsFirstRunSetup
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-3FC3VNEX.js";
|
|
6
6
|
import {
|
|
7
7
|
IssueTrackerFactory
|
|
8
8
|
} from "./chunk-SC6X5EBG.js";
|
|
9
9
|
import {
|
|
10
10
|
matchIssueIdentifier
|
|
11
11
|
} from "./chunk-TVH67KEO.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-FPNSFP6K.js";
|
|
13
|
+
import "./chunk-HSGZW3ID.js";
|
|
14
14
|
import "./chunk-BYUMEDDD.js";
|
|
15
|
+
import "./chunk-Q7POFB5Q.js";
|
|
15
16
|
import {
|
|
16
17
|
generateIssueManagementMcpConfig
|
|
17
18
|
} from "./chunk-XJHQVOT6.js";
|
|
18
19
|
import "./chunk-4BSXZ5YZ.js";
|
|
19
|
-
import "./chunk-HSGZW3ID.js";
|
|
20
20
|
import {
|
|
21
21
|
IssueManagementProviderFactory
|
|
22
22
|
} from "./chunk-UDZCTLD6.js";
|
|
@@ -195,7 +195,7 @@ var PlanCommand = class {
|
|
|
195
195
|
);
|
|
196
196
|
if (shouldRunInit) {
|
|
197
197
|
logger.info(chalk.bold("Launching iloom init..."));
|
|
198
|
-
const { InitCommand } = await import("./init-
|
|
198
|
+
const { InitCommand } = await import("./init-XXDIB2UJ.js");
|
|
199
199
|
const initCommand = new InitCommand();
|
|
200
200
|
await initCommand.execute(
|
|
201
201
|
"Help the user set up a GitHub repository or Linear project for this project so they can use issue management features. When complete tell the user they can exit to continue the planning session."
|
|
@@ -368,4 +368,4 @@ ${initialMessage}`;
|
|
|
368
368
|
export {
|
|
369
369
|
PlanCommand
|
|
370
370
|
};
|
|
371
|
-
//# sourceMappingURL=plan-
|
|
371
|
+
//# sourceMappingURL=plan-FB4AOJ2Q.js.map
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BuildRunner,
|
|
4
4
|
MergeManager
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-7GLZVDPQ.js";
|
|
5
|
+
} from "./chunk-A7XHHUEV.js";
|
|
7
6
|
import {
|
|
8
7
|
installDependencies
|
|
9
8
|
} from "./chunk-RD7I2Q2F.js";
|
|
10
9
|
import {
|
|
11
10
|
GitWorktreeManager
|
|
12
11
|
} from "./chunk-HSGZW3ID.js";
|
|
12
|
+
import "./chunk-7GLZVDPQ.js";
|
|
13
13
|
import "./chunk-XPKN3QWY.js";
|
|
14
14
|
import {
|
|
15
15
|
getWorktreeRoot,
|
|
@@ -139,4 +139,4 @@ export {
|
|
|
139
139
|
RebaseCommand,
|
|
140
140
|
WorktreeValidationError
|
|
141
141
|
};
|
|
142
|
-
//# sourceMappingURL=rebase-
|
|
142
|
+
//# sourceMappingURL=rebase-4FNRBW3H.js.map
|
|
@@ -3,19 +3,19 @@ import {
|
|
|
3
3
|
DevServerManager
|
|
4
4
|
} from "./chunk-VZYSM7N7.js";
|
|
5
5
|
import "./chunk-XHNACIHO.js";
|
|
6
|
+
import "./chunk-RD7I2Q2F.js";
|
|
6
7
|
import {
|
|
7
8
|
getWorkspacePort
|
|
8
9
|
} from "./chunk-52MVUK5V.js";
|
|
9
10
|
import {
|
|
10
11
|
IdentifierParser
|
|
11
12
|
} from "./chunk-TVH67KEO.js";
|
|
12
|
-
import {
|
|
13
|
-
ProjectCapabilityDetector
|
|
14
|
-
} from "./chunk-7GLZVDPQ.js";
|
|
15
|
-
import "./chunk-RD7I2Q2F.js";
|
|
16
13
|
import {
|
|
17
14
|
GitWorktreeManager
|
|
18
15
|
} from "./chunk-HSGZW3ID.js";
|
|
16
|
+
import {
|
|
17
|
+
ProjectCapabilityDetector
|
|
18
|
+
} from "./chunk-7GLZVDPQ.js";
|
|
19
19
|
import "./chunk-XPKN3QWY.js";
|
|
20
20
|
import {
|
|
21
21
|
openBrowser
|
|
@@ -238,4 +238,4 @@ Make sure the project is built (run 'il start' first)`
|
|
|
238
238
|
export {
|
|
239
239
|
RunCommand
|
|
240
240
|
};
|
|
241
|
-
//# sourceMappingURL=run-
|
|
241
|
+
//# sourceMappingURL=run-GZNHRJB2.js.map
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
} from "./chunk-HSGZW3ID.js";
|
|
9
9
|
import {
|
|
10
10
|
PRManager
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-YETJNRQM.js";
|
|
11
|
+
} from "./chunk-44Y5IF7P.js";
|
|
13
12
|
import "./chunk-UDZCTLD6.js";
|
|
14
13
|
import "./chunk-RNBIISBZ.js";
|
|
14
|
+
import "./chunk-YETJNRQM.js";
|
|
15
15
|
import "./chunk-FXDYIV3K.js";
|
|
16
16
|
import "./chunk-66QOCD5N.js";
|
|
17
17
|
import {
|
|
@@ -280,4 +280,4 @@ Please provide an issue number, PR number, or branch name.`
|
|
|
280
280
|
export {
|
|
281
281
|
SummaryCommand
|
|
282
282
|
};
|
|
283
|
-
//# sourceMappingURL=summary-
|
|
283
|
+
//# sourceMappingURL=summary-Z4F7YFXE.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ScriptCommandBase
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-TVH67KEO.js";
|
|
4
|
+
} from "./chunk-O6LECMT6.js";
|
|
6
5
|
import "./chunk-RD7I2Q2F.js";
|
|
6
|
+
import "./chunk-TVH67KEO.js";
|
|
7
7
|
import "./chunk-HSGZW3ID.js";
|
|
8
8
|
import "./chunk-XPKN3QWY.js";
|
|
9
9
|
import "./chunk-GDS2HXSW.js";
|
|
@@ -24,4 +24,4 @@ var TestCommand = class extends ScriptCommandBase {
|
|
|
24
24
|
export {
|
|
25
25
|
TestCommand
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=test-
|
|
27
|
+
//# sourceMappingURL=test-LBSPYIJW.js.map
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
IdentifierParser
|
|
4
|
+
} from "./chunk-TVH67KEO.js";
|
|
5
|
+
import {
|
|
6
|
+
GitWorktreeManager
|
|
7
|
+
} from "./chunk-HSGZW3ID.js";
|
|
8
|
+
import {
|
|
9
|
+
getInstallHint,
|
|
10
|
+
isIdeAvailable
|
|
11
|
+
} from "./chunk-O7VL5N6S.js";
|
|
12
|
+
import {
|
|
13
|
+
extractIssueNumber
|
|
14
|
+
} from "./chunk-GDS2HXSW.js";
|
|
15
|
+
import "./chunk-IWIIOFEB.js";
|
|
16
|
+
import "./chunk-KBEIQP4G.js";
|
|
17
|
+
import {
|
|
18
|
+
waitForKeypress
|
|
19
|
+
} from "./chunk-7JDMYTFZ.js";
|
|
20
|
+
import "./chunk-6MLEBAYZ.js";
|
|
21
|
+
import {
|
|
22
|
+
logger
|
|
23
|
+
} from "./chunk-VT4PDUYT.js";
|
|
24
|
+
|
|
25
|
+
// src/commands/vscode.ts
|
|
26
|
+
import path from "path";
|
|
27
|
+
import { execa } from "execa";
|
|
28
|
+
var EXTENSION_ID = "iloom-ai.iloom-vscode";
|
|
29
|
+
var VSCODE_COMMAND = "code";
|
|
30
|
+
var VSCodeCommand = class {
|
|
31
|
+
constructor(gitWorktreeManager, identifierParser) {
|
|
32
|
+
this.gitWorktreeManager = gitWorktreeManager ?? new GitWorktreeManager();
|
|
33
|
+
this.identifierParser = identifierParser ?? new IdentifierParser(this.gitWorktreeManager);
|
|
34
|
+
}
|
|
35
|
+
async execute(input) {
|
|
36
|
+
const available = await isIdeAvailable(VSCODE_COMMAND);
|
|
37
|
+
if (!available) {
|
|
38
|
+
throw new Error(
|
|
39
|
+
`VS Code CLI is not available. The "${VSCODE_COMMAND}" command was not found in PATH.
|
|
40
|
+
` + getInstallHint("vscode")
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
const parsed = input.identifier ? await this.parseExplicitInput(input.identifier) : await this.autoDetectFromCurrentDirectory();
|
|
44
|
+
logger.debug(`Parsed input: ${JSON.stringify(parsed)}`);
|
|
45
|
+
const worktree = await this.findWorktreeForIdentifier(parsed);
|
|
46
|
+
logger.info(`Found worktree at: ${worktree.path}`);
|
|
47
|
+
const installedExtensions = await execa(VSCODE_COMMAND, ["--list-extensions"]);
|
|
48
|
+
const extensionList = installedExtensions.stdout.split("\n").map((ext) => ext.trim().toLowerCase());
|
|
49
|
+
const isExtensionInstalled = extensionList.includes(EXTENSION_ID.toLowerCase());
|
|
50
|
+
const lightbulb = "\u{1F4A1}";
|
|
51
|
+
if (isExtensionInstalled) {
|
|
52
|
+
logger.info("iloom VS Code extension is already installed");
|
|
53
|
+
} else {
|
|
54
|
+
logger.info("Installing iloom VS Code extension...");
|
|
55
|
+
await execa(VSCODE_COMMAND, ["--install-extension", EXTENSION_ID]);
|
|
56
|
+
logger.success("Extension installed!");
|
|
57
|
+
}
|
|
58
|
+
if (input.wait !== false) {
|
|
59
|
+
await waitForKeypress(`Press any key to open VS Code (look for the ${lightbulb} icon in the activity bar)...`);
|
|
60
|
+
}
|
|
61
|
+
await execa(VSCODE_COMMAND, [worktree.path]);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Parse explicit identifier input
|
|
65
|
+
*/
|
|
66
|
+
async parseExplicitInput(identifier) {
|
|
67
|
+
const parsed = await this.identifierParser.parseForPatternDetection(identifier);
|
|
68
|
+
if (parsed.type === "description") {
|
|
69
|
+
throw new Error("Description input type is not supported in vscode command");
|
|
70
|
+
}
|
|
71
|
+
return { ...parsed, autoDetected: false };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Auto-detect identifier from current directory
|
|
75
|
+
*/
|
|
76
|
+
async autoDetectFromCurrentDirectory() {
|
|
77
|
+
const currentDir = path.basename(process.cwd());
|
|
78
|
+
const prPattern = /_pr_(\d+)$/;
|
|
79
|
+
const prMatch = currentDir.match(prPattern);
|
|
80
|
+
if (prMatch == null ? void 0 : prMatch[1]) {
|
|
81
|
+
const prNumber = parseInt(prMatch[1], 10);
|
|
82
|
+
logger.debug(`Auto-detected PR #${prNumber} from directory: ${currentDir}`);
|
|
83
|
+
return {
|
|
84
|
+
type: "pr",
|
|
85
|
+
number: prNumber,
|
|
86
|
+
originalInput: currentDir,
|
|
87
|
+
autoDetected: true
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const issueNumber = extractIssueNumber(currentDir);
|
|
91
|
+
if (issueNumber !== null) {
|
|
92
|
+
logger.debug(`Auto-detected issue #${issueNumber} from directory: ${currentDir}`);
|
|
93
|
+
return {
|
|
94
|
+
type: "issue",
|
|
95
|
+
number: issueNumber,
|
|
96
|
+
originalInput: currentDir,
|
|
97
|
+
autoDetected: true
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const repoInfo = await this.gitWorktreeManager.getRepoInfo();
|
|
101
|
+
const currentBranch = repoInfo.currentBranch;
|
|
102
|
+
if (!currentBranch) {
|
|
103
|
+
throw new Error(
|
|
104
|
+
"Could not auto-detect identifier. Please provide an issue number, PR number, or branch name.\nExpected directory pattern: feat/issue-XX-description OR worktree with _pr_N suffix"
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
const branchIssueNumber = extractIssueNumber(currentBranch);
|
|
108
|
+
if (branchIssueNumber !== null) {
|
|
109
|
+
logger.debug(`Auto-detected issue #${branchIssueNumber} from branch: ${currentBranch}`);
|
|
110
|
+
return {
|
|
111
|
+
type: "issue",
|
|
112
|
+
number: branchIssueNumber,
|
|
113
|
+
originalInput: currentBranch,
|
|
114
|
+
autoDetected: true
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
type: "branch",
|
|
119
|
+
branchName: currentBranch,
|
|
120
|
+
originalInput: currentBranch,
|
|
121
|
+
autoDetected: true
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Find worktree for the given identifier
|
|
126
|
+
*/
|
|
127
|
+
async findWorktreeForIdentifier(parsed) {
|
|
128
|
+
let worktree = null;
|
|
129
|
+
if (parsed.type === "issue" && parsed.number !== void 0) {
|
|
130
|
+
worktree = await this.gitWorktreeManager.findWorktreeForIssue(parsed.number);
|
|
131
|
+
} else if (parsed.type === "pr" && parsed.number !== void 0) {
|
|
132
|
+
const prNumber = typeof parsed.number === "number" ? parsed.number : Number(parsed.number);
|
|
133
|
+
if (isNaN(prNumber) || !isFinite(prNumber)) {
|
|
134
|
+
throw new Error(`Invalid PR number: ${parsed.number}. PR numbers must be numeric.`);
|
|
135
|
+
}
|
|
136
|
+
worktree = await this.gitWorktreeManager.findWorktreeForPR(prNumber, "");
|
|
137
|
+
} else if (parsed.type === "branch" && parsed.branchName) {
|
|
138
|
+
worktree = await this.gitWorktreeManager.findWorktreeForBranch(parsed.branchName);
|
|
139
|
+
}
|
|
140
|
+
if (!worktree) {
|
|
141
|
+
throw new Error(
|
|
142
|
+
`No worktree found for ${this.formatParsedInput(parsed)}. Run 'il start ${parsed.originalInput}' to create one.`
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
return worktree;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Format parsed input for display
|
|
149
|
+
*/
|
|
150
|
+
formatParsedInput(parsed) {
|
|
151
|
+
const autoLabel = parsed.autoDetected ? " (auto-detected)" : "";
|
|
152
|
+
if (parsed.type === "issue") {
|
|
153
|
+
return `issue #${parsed.number}${autoLabel}`;
|
|
154
|
+
}
|
|
155
|
+
if (parsed.type === "pr") {
|
|
156
|
+
return `PR #${parsed.number}${autoLabel}`;
|
|
157
|
+
}
|
|
158
|
+
return `branch "${parsed.branchName}"${autoLabel}`;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
export {
|
|
162
|
+
VSCodeCommand
|
|
163
|
+
};
|
|
164
|
+
//# sourceMappingURL=vscode-LH3VSQ2W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/vscode.ts"],"sourcesContent":["import path from 'path'\nimport { execa } from 'execa'\nimport { GitWorktreeManager } from '../lib/GitWorktreeManager.js'\nimport { IdentifierParser } from '../utils/IdentifierParser.js'\nimport { isIdeAvailable, getInstallHint } from '../utils/ide.js'\nimport { extractIssueNumber } from '../utils/git.js'\nimport { logger } from '../utils/logger.js'\nimport { waitForKeypress } from '../utils/prompt.js'\nimport type { GitWorktree } from '../types/worktree.js'\nimport type { ParsedInput } from './start.js'\n\nexport interface VSCodeCommandInput {\n\tidentifier?: string | undefined\n\twait?: boolean | undefined\n}\n\ninterface ParsedVSCodeInput extends ParsedInput {\n\tautoDetected: boolean\n}\n\nconst EXTENSION_ID = 'iloom-ai.iloom-vscode'\nconst VSCODE_COMMAND = 'code'\n\nexport class VSCodeCommand {\n\tprivate gitWorktreeManager: GitWorktreeManager\n\tprivate identifierParser: IdentifierParser\n\n\tconstructor(gitWorktreeManager?: GitWorktreeManager, identifierParser?: IdentifierParser) {\n\t\tthis.gitWorktreeManager = gitWorktreeManager ?? new GitWorktreeManager()\n\t\tthis.identifierParser = identifierParser ?? new IdentifierParser(this.gitWorktreeManager)\n\t}\n\n\tasync execute(input: VSCodeCommandInput): Promise<void> {\n\t\t// 1. Check VS Code CLI available\n\t\tconst available = await isIdeAvailable(VSCODE_COMMAND)\n\t\tif (!available) {\n\t\t\tthrow new Error(\n\t\t\t\t`VS Code CLI is not available. The \"${VSCODE_COMMAND}\" command was not found in PATH.\\n` +\n\t\t\t\t\tgetInstallHint('vscode')\n\t\t\t)\n\t\t}\n\n\t\t// 2. Parse or auto-detect identifier\n\t\tconst parsed = input.identifier\n\t\t\t? await this.parseExplicitInput(input.identifier)\n\t\t\t: await this.autoDetectFromCurrentDirectory()\n\n\t\tlogger.debug(`Parsed input: ${JSON.stringify(parsed)}`)\n\n\t\t// 3. Find worktree path based on identifier\n\t\tconst worktree = await this.findWorktreeForIdentifier(parsed)\n\n\t\tlogger.info(`Found worktree at: ${worktree.path}`)\n\n\t\t// 4. Check if extension is already installed\n\t\tconst installedExtensions = await execa(VSCODE_COMMAND, ['--list-extensions'])\n\t\tconst extensionList = installedExtensions.stdout.split('\\n').map(ext => ext.trim().toLowerCase())\n\t\tconst isExtensionInstalled = extensionList.includes(EXTENSION_ID.toLowerCase())\n\n\t\t// 5. Install extension if not already installed\n\t\tconst lightbulb = '\\u{1F4A1}'\n\t\tif (isExtensionInstalled) {\n\t\t\tlogger.info('iloom VS Code extension is already installed')\n\t\t} else {\n\t\t\tlogger.info('Installing iloom VS Code extension...')\n\t\t\tawait execa(VSCODE_COMMAND, ['--install-extension', EXTENSION_ID])\n\t\t\tlogger.success('Extension installed!')\n\t\t}\n\n\t\t// 6. Wait for keypress then open VS Code (skip if wait is false)\n\t\tif (input.wait !== false) {\n\t\t\tawait waitForKeypress(`Press any key to open VS Code (look for the ${lightbulb} icon in the activity bar)...`)\n\t\t}\n\t\tawait execa(VSCODE_COMMAND, [worktree.path])\n\t}\n\n\t/**\n\t * Parse explicit identifier input\n\t */\n\tprivate async parseExplicitInput(identifier: string): Promise<ParsedVSCodeInput> {\n\t\tconst parsed = await this.identifierParser.parseForPatternDetection(identifier)\n\n\t\t// Description type should never reach vscode command\n\t\tif (parsed.type === 'description') {\n\t\t\tthrow new Error('Description input type is not supported in vscode command')\n\t\t}\n\n\t\treturn { ...parsed, autoDetected: false }\n\t}\n\n\t/**\n\t * Auto-detect identifier from current directory\n\t */\n\tprivate async autoDetectFromCurrentDirectory(): Promise<ParsedVSCodeInput> {\n\t\tconst currentDir = path.basename(process.cwd())\n\n\t\t// Check for PR worktree pattern: _pr_N suffix\n\t\tconst prPattern = /_pr_(\\d+)$/\n\t\tconst prMatch = currentDir.match(prPattern)\n\n\t\tif (prMatch?.[1]) {\n\t\t\tconst prNumber = parseInt(prMatch[1], 10)\n\t\t\tlogger.debug(`Auto-detected PR #${prNumber} from directory: ${currentDir}`)\n\t\t\treturn {\n\t\t\t\ttype: 'pr',\n\t\t\t\tnumber: prNumber,\n\t\t\t\toriginalInput: currentDir,\n\t\t\t\tautoDetected: true,\n\t\t\t}\n\t\t}\n\n\t\t// Check for issue pattern in directory\n\t\tconst issueNumber = extractIssueNumber(currentDir)\n\n\t\tif (issueNumber !== null) {\n\t\t\tlogger.debug(`Auto-detected issue #${issueNumber} from directory: ${currentDir}`)\n\t\t\treturn {\n\t\t\t\ttype: 'issue',\n\t\t\t\tnumber: issueNumber,\n\t\t\t\toriginalInput: currentDir,\n\t\t\t\tautoDetected: true,\n\t\t\t}\n\t\t}\n\n\t\t// Fallback: get current branch name\n\t\tconst repoInfo = await this.gitWorktreeManager.getRepoInfo()\n\t\tconst currentBranch = repoInfo.currentBranch\n\n\t\tif (!currentBranch) {\n\t\t\tthrow new Error(\n\t\t\t\t'Could not auto-detect identifier. Please provide an issue number, PR number, or branch name.\\n' +\n\t\t\t\t\t'Expected directory pattern: feat/issue-XX-description OR worktree with _pr_N suffix'\n\t\t\t)\n\t\t}\n\n\t\t// Try to extract issue from branch name\n\t\tconst branchIssueNumber = extractIssueNumber(currentBranch)\n\t\tif (branchIssueNumber !== null) {\n\t\t\tlogger.debug(`Auto-detected issue #${branchIssueNumber} from branch: ${currentBranch}`)\n\t\t\treturn {\n\t\t\t\ttype: 'issue',\n\t\t\t\tnumber: branchIssueNumber,\n\t\t\t\toriginalInput: currentBranch,\n\t\t\t\tautoDetected: true,\n\t\t\t}\n\t\t}\n\n\t\t// Last resort: use branch name\n\t\treturn {\n\t\t\ttype: 'branch',\n\t\t\tbranchName: currentBranch,\n\t\t\toriginalInput: currentBranch,\n\t\t\tautoDetected: true,\n\t\t}\n\t}\n\n\t/**\n\t * Find worktree for the given identifier\n\t */\n\tprivate async findWorktreeForIdentifier(parsed: ParsedVSCodeInput): Promise<GitWorktree> {\n\t\tlet worktree: GitWorktree | null = null\n\n\t\tif (parsed.type === 'issue' && parsed.number !== undefined) {\n\t\t\tworktree = await this.gitWorktreeManager.findWorktreeForIssue(parsed.number)\n\t\t} else if (parsed.type === 'pr' && parsed.number !== undefined) {\n\t\t\tconst prNumber = typeof parsed.number === 'number' ? parsed.number : Number(parsed.number)\n\t\t\tif (isNaN(prNumber) || !isFinite(prNumber)) {\n\t\t\t\tthrow new Error(`Invalid PR number: ${parsed.number}. PR numbers must be numeric.`)\n\t\t\t}\n\t\t\tworktree = await this.gitWorktreeManager.findWorktreeForPR(prNumber, '')\n\t\t} else if (parsed.type === 'branch' && parsed.branchName) {\n\t\t\tworktree = await this.gitWorktreeManager.findWorktreeForBranch(parsed.branchName)\n\t\t}\n\n\t\tif (!worktree) {\n\t\t\tthrow new Error(\n\t\t\t\t`No worktree found for ${this.formatParsedInput(parsed)}. ` +\n\t\t\t\t\t`Run 'il start ${parsed.originalInput}' to create one.`\n\t\t\t)\n\t\t}\n\n\t\treturn worktree\n\t}\n\n\t/**\n\t * Format parsed input for display\n\t */\n\tprivate formatParsedInput(parsed: ParsedVSCodeInput): string {\n\t\tconst autoLabel = parsed.autoDetected ? ' (auto-detected)' : ''\n\n\t\tif (parsed.type === 'issue') {\n\t\t\treturn `issue #${parsed.number}${autoLabel}`\n\t\t}\n\t\tif (parsed.type === 'pr') {\n\t\t\treturn `PR #${parsed.number}${autoLabel}`\n\t\t}\n\t\treturn `branch \"${parsed.branchName}\"${autoLabel}`\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,UAAU;AACjB,SAAS,aAAa;AAmBtB,IAAM,eAAe;AACrB,IAAM,iBAAiB;AAEhB,IAAM,gBAAN,MAAoB;AAAA,EAI1B,YAAY,oBAAyC,kBAAqC;AACzF,SAAK,qBAAqB,sBAAsB,IAAI,mBAAmB;AACvE,SAAK,mBAAmB,oBAAoB,IAAI,iBAAiB,KAAK,kBAAkB;AAAA,EACzF;AAAA,EAEA,MAAM,QAAQ,OAA0C;AAEvD,UAAM,YAAY,MAAM,eAAe,cAAc;AACrD,QAAI,CAAC,WAAW;AACf,YAAM,IAAI;AAAA,QACT,sCAAsC,cAAc;AAAA,IACnD,eAAe,QAAQ;AAAA,MACzB;AAAA,IACD;AAGA,UAAM,SAAS,MAAM,aAClB,MAAM,KAAK,mBAAmB,MAAM,UAAU,IAC9C,MAAM,KAAK,+BAA+B;AAE7C,WAAO,MAAM,iBAAiB,KAAK,UAAU,MAAM,CAAC,EAAE;AAGtD,UAAM,WAAW,MAAM,KAAK,0BAA0B,MAAM;AAE5D,WAAO,KAAK,sBAAsB,SAAS,IAAI,EAAE;AAGjD,UAAM,sBAAsB,MAAM,MAAM,gBAAgB,CAAC,mBAAmB,CAAC;AAC7E,UAAM,gBAAgB,oBAAoB,OAAO,MAAM,IAAI,EAAE,IAAI,SAAO,IAAI,KAAK,EAAE,YAAY,CAAC;AAChG,UAAM,uBAAuB,cAAc,SAAS,aAAa,YAAY,CAAC;AAG9E,UAAM,YAAY;AAClB,QAAI,sBAAsB;AACzB,aAAO,KAAK,8CAA8C;AAAA,IAC3D,OAAO;AACN,aAAO,KAAK,uCAAuC;AACnD,YAAM,MAAM,gBAAgB,CAAC,uBAAuB,YAAY,CAAC;AACjE,aAAO,QAAQ,sBAAsB;AAAA,IACtC;AAGA,QAAI,MAAM,SAAS,OAAO;AACzB,YAAM,gBAAgB,+CAA+C,SAAS,+BAA+B;AAAA,IAC9G;AACA,UAAM,MAAM,gBAAgB,CAAC,SAAS,IAAI,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAmB,YAAgD;AAChF,UAAM,SAAS,MAAM,KAAK,iBAAiB,yBAAyB,UAAU;AAG9E,QAAI,OAAO,SAAS,eAAe;AAClC,YAAM,IAAI,MAAM,2DAA2D;AAAA,IAC5E;AAEA,WAAO,EAAE,GAAG,QAAQ,cAAc,MAAM;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iCAA6D;AAC1E,UAAM,aAAa,KAAK,SAAS,QAAQ,IAAI,CAAC;AAG9C,UAAM,YAAY;AAClB,UAAM,UAAU,WAAW,MAAM,SAAS;AAE1C,QAAI,mCAAU,IAAI;AACjB,YAAM,WAAW,SAAS,QAAQ,CAAC,GAAG,EAAE;AACxC,aAAO,MAAM,qBAAqB,QAAQ,oBAAoB,UAAU,EAAE;AAC1E,aAAO;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,cAAc;AAAA,MACf;AAAA,IACD;AAGA,UAAM,cAAc,mBAAmB,UAAU;AAEjD,QAAI,gBAAgB,MAAM;AACzB,aAAO,MAAM,wBAAwB,WAAW,oBAAoB,UAAU,EAAE;AAChF,aAAO;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,cAAc;AAAA,MACf;AAAA,IACD;AAGA,UAAM,WAAW,MAAM,KAAK,mBAAmB,YAAY;AAC3D,UAAM,gBAAgB,SAAS;AAE/B,QAAI,CAAC,eAAe;AACnB,YAAM,IAAI;AAAA,QACT;AAAA,MAED;AAAA,IACD;AAGA,UAAM,oBAAoB,mBAAmB,aAAa;AAC1D,QAAI,sBAAsB,MAAM;AAC/B,aAAO,MAAM,wBAAwB,iBAAiB,iBAAiB,aAAa,EAAE;AACtF,aAAO;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,cAAc;AAAA,MACf;AAAA,IACD;AAGA,WAAO;AAAA,MACN,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,cAAc;AAAA,IACf;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,0BAA0B,QAAiD;AACxF,QAAI,WAA+B;AAEnC,QAAI,OAAO,SAAS,WAAW,OAAO,WAAW,QAAW;AAC3D,iBAAW,MAAM,KAAK,mBAAmB,qBAAqB,OAAO,MAAM;AAAA,IAC5E,WAAW,OAAO,SAAS,QAAQ,OAAO,WAAW,QAAW;AAC/D,YAAM,WAAW,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS,OAAO,OAAO,MAAM;AACzF,UAAI,MAAM,QAAQ,KAAK,CAAC,SAAS,QAAQ,GAAG;AAC3C,cAAM,IAAI,MAAM,sBAAsB,OAAO,MAAM,+BAA+B;AAAA,MACnF;AACA,iBAAW,MAAM,KAAK,mBAAmB,kBAAkB,UAAU,EAAE;AAAA,IACxE,WAAW,OAAO,SAAS,YAAY,OAAO,YAAY;AACzD,iBAAW,MAAM,KAAK,mBAAmB,sBAAsB,OAAO,UAAU;AAAA,IACjF;AAEA,QAAI,CAAC,UAAU;AACd,YAAM,IAAI;AAAA,QACT,yBAAyB,KAAK,kBAAkB,MAAM,CAAC,mBACrC,OAAO,aAAa;AAAA,MACvC;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,QAAmC;AAC5D,UAAM,YAAY,OAAO,eAAe,qBAAqB;AAE7D,QAAI,OAAO,SAAS,SAAS;AAC5B,aAAO,UAAU,OAAO,MAAM,GAAG,SAAS;AAAA,IAC3C;AACA,QAAI,OAAO,SAAS,MAAM;AACzB,aAAO,OAAO,OAAO,MAAM,GAAG,SAAS;AAAA,IACxC;AACA,WAAO,WAAW,OAAO,UAAU,IAAI,SAAS;AAAA,EACjD;AACD;","names":[]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
FirstRunManager
|
|
4
|
+
} from "./chunk-Q7POFB5Q.js";
|
|
5
|
+
import "./chunk-VT4PDUYT.js";
|
|
6
|
+
|
|
7
|
+
// src/utils/vscode-announcement.ts
|
|
8
|
+
import chalk from "chalk";
|
|
9
|
+
import stringWidth from "string-width";
|
|
10
|
+
var FEATURE_NAME = "vscode-announcement";
|
|
11
|
+
async function showVSCodeAnnouncementIfNeeded(commandName) {
|
|
12
|
+
if (commandName === "vscode") return;
|
|
13
|
+
if (!process.stdout.isTTY) return;
|
|
14
|
+
const manager = new FirstRunManager(FEATURE_NAME);
|
|
15
|
+
const isFirstTime = await manager.isFirstRun();
|
|
16
|
+
if (!isFirstTime) return;
|
|
17
|
+
displayAnnouncementBox();
|
|
18
|
+
await manager.markAsRun();
|
|
19
|
+
}
|
|
20
|
+
function displayAnnouncementBox() {
|
|
21
|
+
const rocket = "\u{1F680}";
|
|
22
|
+
const pointRight = "\u{1F449}";
|
|
23
|
+
const lines = [
|
|
24
|
+
` ${rocket} New: iloom for VS Code is here!`,
|
|
25
|
+
"",
|
|
26
|
+
" \u2022 Real-time Recap Panel: See AI decisions, insights, assumptions, and risks as they happen",
|
|
27
|
+
" \u2022 Loom Explorer: Manage projects/tasks visually",
|
|
28
|
+
"",
|
|
29
|
+
` ${pointRight} Run 'il vscode' to install`
|
|
30
|
+
];
|
|
31
|
+
const maxWidth = Math.max(...lines.map((l) => stringWidth(l)));
|
|
32
|
+
const boxWidth = maxWidth + 6;
|
|
33
|
+
console.log("");
|
|
34
|
+
console.log(chalk.cyan("\u256D" + "\u2500".repeat(boxWidth - 2) + "\u256E"));
|
|
35
|
+
for (const line of lines) {
|
|
36
|
+
const displayWidth = stringWidth(line);
|
|
37
|
+
const padding = " ".repeat(maxWidth - displayWidth);
|
|
38
|
+
console.log(chalk.cyan("\u2502") + " " + line + padding + " " + chalk.cyan("\u2502"));
|
|
39
|
+
}
|
|
40
|
+
console.log(chalk.cyan("\u2570" + "\u2500".repeat(boxWidth - 2) + "\u256F"));
|
|
41
|
+
console.log("");
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
showVSCodeAnnouncementIfNeeded
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=vscode-announcement-EQ2SKK3T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/vscode-announcement.ts"],"sourcesContent":["import chalk from 'chalk'\nimport stringWidth from 'string-width'\nimport { FirstRunManager } from './FirstRunManager.js'\n\nconst FEATURE_NAME = 'vscode-announcement'\n\n/**\n * Check if announcement should be shown and display if so\n * @param commandName - The name of the command that just completed\n */\nexport async function showVSCodeAnnouncementIfNeeded(commandName: string): Promise<void> {\n // Skip if command is 'vscode'\n if (commandName === 'vscode') return\n\n // Skip if not TTY\n if (!process.stdout.isTTY) return\n\n // Check if already shown\n const manager = new FirstRunManager(FEATURE_NAME)\n const isFirstTime = await manager.isFirstRun()\n if (!isFirstTime) return\n\n // Display announcement\n displayAnnouncementBox()\n\n // Mark as shown\n await manager.markAsRun()\n}\n\nfunction displayAnnouncementBox(): void {\n const rocket = '\\u{1F680}'\n const pointRight = '\\u{1F449}'\n\n const lines = [\n ` ${rocket} New: iloom for VS Code is here!`,\n '',\n ' \\u2022 Real-time Recap Panel: See AI decisions, insights, assumptions, and risks as they happen',\n ' \\u2022 Loom Explorer: Manage projects/tasks visually',\n '',\n ` ${pointRight} Run 'il vscode' to install`,\n ]\n\n const maxWidth = Math.max(...lines.map(l => stringWidth(l)))\n const boxWidth = maxWidth + 6 // 2 spaces padding on each side + 2 border chars\n\n // eslint-disable-next-line no-console\n console.log('')\n // eslint-disable-next-line no-console\n console.log(chalk.cyan('\\u256D' + '\\u2500'.repeat(boxWidth - 2) + '\\u256E'))\n for (const line of lines) {\n // Pad based on display width, not string length\n const displayWidth = stringWidth(line)\n const padding = ' '.repeat(maxWidth - displayWidth)\n // eslint-disable-next-line no-console\n console.log(chalk.cyan('\\u2502') + ' ' + line + padding + ' ' + chalk.cyan('\\u2502'))\n }\n // eslint-disable-next-line no-console\n console.log(chalk.cyan('\\u2570' + '\\u2500'.repeat(boxWidth - 2) + '\\u256F'))\n // eslint-disable-next-line no-console\n console.log('')\n}\n"],"mappings":";;;;;;;AAAA,OAAO,WAAW;AAClB,OAAO,iBAAiB;AAGxB,IAAM,eAAe;AAMrB,eAAsB,+BAA+B,aAAoC;AAEvF,MAAI,gBAAgB,SAAU;AAG9B,MAAI,CAAC,QAAQ,OAAO,MAAO;AAG3B,QAAM,UAAU,IAAI,gBAAgB,YAAY;AAChD,QAAM,cAAc,MAAM,QAAQ,WAAW;AAC7C,MAAI,CAAC,YAAa;AAGlB,yBAAuB;AAGvB,QAAM,QAAQ,UAAU;AAC1B;AAEA,SAAS,yBAA+B;AACtC,QAAM,SAAS;AACf,QAAM,aAAa;AAEnB,QAAM,QAAQ;AAAA,IACZ,KAAK,MAAM;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK,UAAU;AAAA,EACjB;AAEA,QAAM,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,OAAK,YAAY,CAAC,CAAC,CAAC;AAC3D,QAAM,WAAW,WAAW;AAG5B,UAAQ,IAAI,EAAE;AAEd,UAAQ,IAAI,MAAM,KAAK,WAAW,SAAS,OAAO,WAAW,CAAC,IAAI,QAAQ,CAAC;AAC3E,aAAW,QAAQ,OAAO;AAExB,UAAM,eAAe,YAAY,IAAI;AACrC,UAAM,UAAU,IAAI,OAAO,WAAW,YAAY;AAElD,YAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,OAAO,OAAO,UAAU,OAAO,MAAM,KAAK,QAAQ,CAAC;AAAA,EACxF;AAED,UAAQ,IAAI,MAAM,KAAK,WAAW,SAAS,OAAO,WAAW,CAAC,IAAI,QAAQ,CAAC;AAE1E,UAAQ,IAAI,EAAE;AAChB;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iloom/cli",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.2",
|
|
4
4
|
"description": "Control plane for maintaining alignment between you and Claude Code as you work across multiple issues using isolated environments, visible context, and multi-agent workflows to scale understanding, not just output",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -80,6 +80,7 @@
|
|
|
80
80
|
"jsonc-parser": "^3.3.1",
|
|
81
81
|
"omelette": "^0.4.17",
|
|
82
82
|
"ora": "^7.0.1",
|
|
83
|
+
"string-width": "^8.1.1",
|
|
83
84
|
"zod": "^3.23.8"
|
|
84
85
|
},
|
|
85
86
|
"devDependencies": {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|