@iloom/cli 0.5.5 → 0.6.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.
Files changed (97) hide show
  1. package/README.md +100 -4
  2. package/dist/{ClaudeContextManager-7WX7DUNI.js → ClaudeContextManager-6J2EB4QU.js} +4 -4
  3. package/dist/{ClaudeService-LQLN2GP4.js → ClaudeService-O2PB22GX.js} +3 -3
  4. package/dist/{LoomLauncher-5QU42LOM.js → LoomLauncher-5LFM4LXB.js} +4 -4
  5. package/dist/{PRManager-OCSB2HPT.js → PRManager-GB3FOJ2W.js} +2 -2
  6. package/dist/ProjectCapabilityDetector-S5FLNCFI.js +11 -0
  7. package/dist/{PromptTemplateManager-5GNF7FCP.js → PromptTemplateManager-C3DK6XZL.js} +2 -2
  8. package/dist/README.md +100 -4
  9. package/dist/agents/iloom-framework-detector.md +366 -0
  10. package/dist/agents/iloom-issue-analyze-and-plan.md +0 -10
  11. package/dist/agents/iloom-issue-implementer.md +1 -1
  12. package/dist/agents/iloom-issue-planner.md +0 -10
  13. package/dist/build-FJVYP7EV.js +27 -0
  14. package/dist/build-FJVYP7EV.js.map +1 -0
  15. package/dist/{chunk-WIJWIKAN.js → chunk-2A7WQKBE.js} +10 -2
  16. package/dist/{chunk-WIJWIKAN.js.map → chunk-2A7WQKBE.js.map} +1 -1
  17. package/dist/{chunk-SHVB3EFE.js → chunk-64O2UIWO.js} +44 -19
  18. package/dist/chunk-64O2UIWO.js.map +1 -0
  19. package/dist/{chunk-FO2H3YXI.js → chunk-6U6VI4SZ.js} +2 -2
  20. package/dist/{chunk-VXMY22TP.js → chunk-7WANFUIK.js} +2 -2
  21. package/dist/{chunk-LVLRMP7V.js → chunk-AXX3QIKK.js} +58 -14
  22. package/dist/chunk-AXX3QIKK.js.map +1 -0
  23. package/dist/chunk-BXCPJJYM.js +133 -0
  24. package/dist/chunk-BXCPJJYM.js.map +1 -0
  25. package/dist/{chunk-46JVEGUW.js → chunk-I75JMBNB.js} +14 -16
  26. package/dist/chunk-I75JMBNB.js.map +1 -0
  27. package/dist/{chunk-SJIMVKK7.js → chunk-K7SEEHKO.js} +2 -2
  28. package/dist/{chunk-WZHBRKLN.js → chunk-LVBRMTE6.js} +39 -56
  29. package/dist/chunk-LVBRMTE6.js.map +1 -0
  30. package/dist/{chunk-NKRQNER7.js → chunk-Q7POFB5Q.js} +1 -55
  31. package/dist/chunk-Q7POFB5Q.js.map +1 -0
  32. package/dist/{chunk-N4ZJVATC.js → chunk-SN3Z6EZO.js} +11 -7
  33. package/dist/chunk-SN3Z6EZO.js.map +1 -0
  34. package/dist/chunk-TRQ76ISK.js +159 -0
  35. package/dist/chunk-TRQ76ISK.js.map +1 -0
  36. package/dist/{chunk-5IWU3HXE.js → chunk-VDA5JMB4.js} +3 -4
  37. package/dist/{chunk-5IWU3HXE.js.map → chunk-VDA5JMB4.js.map} +1 -1
  38. package/dist/{chunk-K5G5SFWY.js → chunk-W6WVRHJ6.js} +13 -1
  39. package/dist/chunk-W6WVRHJ6.js.map +1 -0
  40. package/dist/{chunk-EBISESAP.js → chunk-ZPSTA5PR.js} +16 -6
  41. package/dist/chunk-ZPSTA5PR.js.map +1 -0
  42. package/dist/{cleanup-WTZZ74VS.js → cleanup-BRUAINKE.js} +6 -6
  43. package/dist/cli.js +268 -65
  44. package/dist/cli.js.map +1 -1
  45. package/dist/compile-ULNO5F7Q.js +57 -0
  46. package/dist/compile-ULNO5F7Q.js.map +1 -0
  47. package/dist/{contribute-T7ENST5N.js → contribute-Q6GX6AXK.js} +95 -27
  48. package/dist/contribute-Q6GX6AXK.js.map +1 -0
  49. package/dist/{dev-server-S5QG5SBZ.js → dev-server-4RCDJ5MU.js} +5 -5
  50. package/dist/{feedback-PDMCKYOT.js → feedback-O4Q55SVS.js} +7 -7
  51. package/dist/{ignite-YF4Q5RA7.js → ignite-VHV65WEZ.js} +9 -5
  52. package/dist/ignite-VHV65WEZ.js.map +1 -0
  53. package/dist/index.d.ts +2 -0
  54. package/dist/index.js +12 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/{init-XQQGC6DN.js → init-UTYRHNJJ.js} +5 -4
  57. package/dist/lint-5JMCWE4Y.js +27 -0
  58. package/dist/lint-5JMCWE4Y.js.map +1 -0
  59. package/dist/{open-AIZG5756.js → open-WHVUYGPY.js} +5 -5
  60. package/dist/prompts/init-prompt.txt +101 -8
  61. package/dist/prompts/issue-prompt.txt +12 -12
  62. package/dist/{rebase-5EY3Q6XP.js → rebase-Y4AS6LQW.js} +2 -2
  63. package/dist/{run-CMZUYZVG.js → run-NCRK5NPR.js} +5 -5
  64. package/dist/{summary-5YXUGPRN.js → summary-CVFAMDOJ.js} +3 -3
  65. package/dist/test-3KIVXI6J.js +27 -0
  66. package/dist/test-3KIVXI6J.js.map +1 -0
  67. package/package.json +1 -1
  68. package/dist/ProjectCapabilityDetector-34LU7JJ4.js +0 -9
  69. package/dist/chunk-2ZPFJQ3B.js +0 -63
  70. package/dist/chunk-2ZPFJQ3B.js.map +0 -1
  71. package/dist/chunk-46JVEGUW.js.map +0 -1
  72. package/dist/chunk-EBISESAP.js.map +0 -1
  73. package/dist/chunk-K5G5SFWY.js.map +0 -1
  74. package/dist/chunk-LVLRMP7V.js.map +0 -1
  75. package/dist/chunk-N4ZJVATC.js.map +0 -1
  76. package/dist/chunk-NKRQNER7.js.map +0 -1
  77. package/dist/chunk-SHVB3EFE.js.map +0 -1
  78. package/dist/chunk-WZHBRKLN.js.map +0 -1
  79. package/dist/contribute-T7ENST5N.js.map +0 -1
  80. package/dist/ignite-YF4Q5RA7.js.map +0 -1
  81. /package/dist/{ClaudeContextManager-7WX7DUNI.js.map → ClaudeContextManager-6J2EB4QU.js.map} +0 -0
  82. /package/dist/{ClaudeService-LQLN2GP4.js.map → ClaudeService-O2PB22GX.js.map} +0 -0
  83. /package/dist/{LoomLauncher-5QU42LOM.js.map → LoomLauncher-5LFM4LXB.js.map} +0 -0
  84. /package/dist/{PRManager-OCSB2HPT.js.map → PRManager-GB3FOJ2W.js.map} +0 -0
  85. /package/dist/{ProjectCapabilityDetector-34LU7JJ4.js.map → ProjectCapabilityDetector-S5FLNCFI.js.map} +0 -0
  86. /package/dist/{PromptTemplateManager-5GNF7FCP.js.map → PromptTemplateManager-C3DK6XZL.js.map} +0 -0
  87. /package/dist/{chunk-FO2H3YXI.js.map → chunk-6U6VI4SZ.js.map} +0 -0
  88. /package/dist/{chunk-VXMY22TP.js.map → chunk-7WANFUIK.js.map} +0 -0
  89. /package/dist/{chunk-SJIMVKK7.js.map → chunk-K7SEEHKO.js.map} +0 -0
  90. /package/dist/{cleanup-WTZZ74VS.js.map → cleanup-BRUAINKE.js.map} +0 -0
  91. /package/dist/{dev-server-S5QG5SBZ.js.map → dev-server-4RCDJ5MU.js.map} +0 -0
  92. /package/dist/{feedback-PDMCKYOT.js.map → feedback-O4Q55SVS.js.map} +0 -0
  93. /package/dist/{init-XQQGC6DN.js.map → init-UTYRHNJJ.js.map} +0 -0
  94. /package/dist/{open-AIZG5756.js.map → open-WHVUYGPY.js.map} +0 -0
  95. /package/dist/{rebase-5EY3Q6XP.js.map → rebase-Y4AS6LQW.js.map} +0 -0
  96. /package/dist/{run-CMZUYZVG.js.map → run-NCRK5NPR.js.map} +0 -0
  97. /package/dist/{summary-5YXUGPRN.js.map → summary-CVFAMDOJ.js.map} +0 -0
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  InitCommand
4
- } from "./chunk-WZHBRKLN.js";
5
- import "./chunk-NKRQNER7.js";
4
+ } from "./chunk-LVBRMTE6.js";
5
+ import "./chunk-Q7POFB5Q.js";
6
6
  import "./chunk-F2PWIRV4.js";
7
+ import "./chunk-SN3Z6EZO.js";
7
8
  import "./chunk-EK3XCAAS.js";
8
9
  import "./chunk-FXDYIV3K.js";
9
- import "./chunk-K5G5SFWY.js";
10
+ import "./chunk-W6WVRHJ6.js";
10
11
  import "./chunk-GEXP5IOF.js";
11
12
  import "./chunk-F6WVM437.js";
12
13
  import "./chunk-CFUWQHCJ.js";
@@ -17,4 +18,4 @@ import "./chunk-VT4PDUYT.js";
17
18
  export {
18
19
  InitCommand
19
20
  };
20
- //# sourceMappingURL=init-XQQGC6DN.js.map
21
+ //# sourceMappingURL=init-UTYRHNJJ.js.map
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ScriptCommandBase
4
+ } from "./chunk-TRQ76ISK.js";
5
+ import "./chunk-AXX3QIKK.js";
6
+ import "./chunk-UQIXZ3BA.js";
7
+ import "./chunk-BXCPJJYM.js";
8
+ import "./chunk-EK3XCAAS.js";
9
+ import "./chunk-GEXP5IOF.js";
10
+ import "./chunk-F6WVM437.js";
11
+ import "./chunk-CFUWQHCJ.js";
12
+ import "./chunk-6MLEBAYZ.js";
13
+ import "./chunk-VT4PDUYT.js";
14
+
15
+ // src/commands/lint.ts
16
+ var LintCommand = class extends ScriptCommandBase {
17
+ getScriptName() {
18
+ return "lint";
19
+ }
20
+ getScriptDisplayName() {
21
+ return "Lint";
22
+ }
23
+ };
24
+ export {
25
+ LintCommand
26
+ };
27
+ //# sourceMappingURL=lint-5JMCWE4Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/lint.ts"],"sourcesContent":["import { ScriptCommandBase, ScriptCommandInput } from './script-command-base.js'\n\nexport type { ScriptCommandInput as LintCommandInput }\n\n/**\n * LintCommand - Run the lint script for a workspace\n * Uses package.iloom.json if available, otherwise falls back to package.json\n */\nexport class LintCommand extends ScriptCommandBase {\n\tgetScriptName(): string {\n\t\treturn 'lint'\n\t}\n\n\tgetScriptDisplayName(): string {\n\t\treturn 'Lint'\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;AAQO,IAAM,cAAN,cAA0B,kBAAkB;AAAA,EAClD,gBAAwB;AACvB,WAAO;AAAA,EACR;AAAA,EAEA,uBAA+B;AAC9B,WAAO;AAAA,EACR;AACD;","names":[]}
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  DevServerManager
4
- } from "./chunk-SHVB3EFE.js";
5
- import "./chunk-LVLRMP7V.js";
4
+ } from "./chunk-64O2UIWO.js";
6
5
  import {
7
6
  calculatePortForBranch
8
7
  } from "./chunk-VU3QMIP2.js";
8
+ import "./chunk-AXX3QIKK.js";
9
9
  import {
10
10
  IdentifierParser
11
11
  } from "./chunk-UQIXZ3BA.js";
12
12
  import {
13
13
  ProjectCapabilityDetector
14
- } from "./chunk-EBISESAP.js";
15
- import "./chunk-2ZPFJQ3B.js";
14
+ } from "./chunk-ZPSTA5PR.js";
15
+ import "./chunk-BXCPJJYM.js";
16
16
  import {
17
17
  GitWorktreeManager
18
18
  } from "./chunk-EK3XCAAS.js";
@@ -288,4 +288,4 @@ Make sure the project is built (run 'il start' first)`
288
288
  export {
289
289
  OpenCommand
290
290
  };
291
- //# sourceMappingURL=open-AIZG5756.js.map
291
+ //# sourceMappingURL=open-WHVUYGPY.js.map
@@ -692,6 +692,72 @@ Use AskUserQuestion to ask ALL local development settings questions **IN A SINGL
692
692
  - Users can select "Other" on any question to provide custom input
693
693
  - Process all answers at once when the user submits
694
694
 
695
+ {{#IF NO_PACKAGE_JSON}}
696
+ ### Phase 1.5: Framework Detection (Non-Node.js Project) - DO NOT SKIP
697
+
698
+ iloom needs to detect the project's language and framework to configure build/test/dev scripts.
699
+
700
+ **Invoke the framework detector agent** using the `iloom-framework-detector` agent:
701
+
702
+ The agent will:
703
+ 1. Scan for language markers (Cargo.toml, requirements.txt, Gemfile, go.mod, etc.)
704
+ 2. Detect common frameworks
705
+ 3. Generate appropriate scripts for build, test, and dev commands
706
+ 4. Create `.iloom/package.iloom.json` with the detected configuration
707
+ 5. Detect and set project capabilities (cli, web) based on the framework
708
+
709
+ **File Format:**
710
+ ```json
711
+ {
712
+ "capabilities": ["cli"],
713
+ "scripts": {
714
+ "install": "your-install-command",
715
+ "build": "your-build-command",
716
+ "test": "your-test-command",
717
+ "dev": "your-dev-command",
718
+ "lint": "your-lint-command",
719
+ "typecheck": "your-typecheck-command"
720
+ }
721
+ }
722
+ ```
723
+
724
+ **Supported Scripts:**
725
+ | Script | Purpose | When Used |
726
+ |--------|---------|-----------|
727
+ | `install` | Install dependencies | `il start` (loom creation), `il finish` (post-merge) |
728
+ | `build` | Compile/build project | `il build`, `il finish` (CLI projects, post-merge) |
729
+ | `test` | Run test suite | `il test`, `il finish` validation |
730
+ | `dev` | Start dev server | `il dev-server` |
731
+ | `lint` | Run linter | `il lint`, `il finish` validation |
732
+ | `typecheck` | Type checking | `il typecheck`, `il finish` validation |
733
+ | `compile` | Alternative to typecheck | `il compile`, `il finish` validation (preferred over typecheck if both exist) |
734
+
735
+ **Capabilities:**
736
+ - `"cli"` - Command-line interface/tool (enables CLI isolation features)
737
+ - `"web"` - Web application with dev server (enables port assignment)
738
+
739
+ **Note:** Scripts in `package.iloom.json` are raw shell commands, not npm script names. iloom will execute them directly.
740
+
741
+ **After framework detection, verify capabilities were set correctly:**
742
+
743
+ If the framework detector did not set capabilities, or if you need to ask the user:
744
+ - Question: "What type of project is this?"
745
+ - Options:
746
+ - "cli" - Command-line interface/tool
747
+ - "web" - Web application with dev server
748
+ - "both" - Both CLI and web capabilities
749
+ - "neither" - Library or other project type
750
+ - Update `.iloom/package.iloom.json` with the appropriate `capabilities` array.
751
+
752
+ **When to infer capabilities:**
753
+ - Flask/Django/FastAPI/Rails/Actix/Rocket detected -> include "web"
754
+ - CLI frameworks (click, fire, typer, clap) detected -> include "cli"
755
+ - `[[bin]]` in Cargo.toml -> include "cli"
756
+ - No clear indicators -> ask user explicitly
757
+
758
+ After the framework detector agent completes (and capabilities are set), proceed to Phase 2.
759
+ {{/IF NO_PACKAGE_JSON}}
760
+
695
761
  ### Phase 2: Tooling Configuration
696
762
 
697
763
  This phase configures external tooling integrations. Use AskUserQuestion to gather these settings.
@@ -1084,14 +1150,7 @@ Reason: mainBranch has same value in both files, so it's removed from local
1084
1150
  - `.iloom/settings.local.json` if user chose Local
1085
1151
  4. Use the Write tool to create/update the file
1086
1152
 
1087
- ### Phase 7: Update .gitignore
1088
-
1089
- If the user chose `.iloom/settings.local.json`, ensure `.gitignore` includes this entry:
1090
- - Read `.gitignore` if it exists
1091
- - Check if `.iloom/settings.local.json` is already listed
1092
- - If not, append it to the file
1093
-
1094
- ### Phase 7.5: Offer to Commit Changes
1153
+ ### Phase 7: Offer to Commit Changes
1095
1154
 
1096
1155
  After making configuration changes, offer to commit the iloom-related files:
1097
1156
 
@@ -1237,6 +1296,7 @@ Need more advanced configuration? I can help you set up:
1237
1296
  • Database Settings - Configure database branching for isolated development
1238
1297
  • Workflow Behavior - Control permissions, IDE launching, dev servers, and terminal behavior
1239
1298
  • Protected Branches - Prevent iloom from creating worktrees for certain branches
1299
+ • Custom Scripts - Override package.json scripts with custom commands
1240
1300
 
1241
1301
  You can ask me questions like:
1242
1302
  "Is it possible to have the analysis agent use a different model?"
@@ -1244,6 +1304,7 @@ You can ask me questions like:
1244
1304
  "Can I disable the IDE from launching automatically?"
1245
1305
  "How do I protect my main branch from worktree creation?"
1246
1306
  "What models are available for the different agents?"
1307
+ "How do I use custom build/test commands instead of package.json scripts?"
1247
1308
 
1248
1309
  Just ask any of these questions and I'll help you modify your settings.
1249
1310
 
@@ -1297,6 +1358,38 @@ If users ask about specific configurations, help them add these sections to thei
1297
1358
  }
1298
1359
  ```
1299
1360
 
1361
+ 6. **Custom Script Configuration (package.iloom.json):**
1362
+
1363
+ If users want to override or supplement npm scripts with custom commands, help them create `.iloom/package.iloom.json`:
1364
+ ```json
1365
+ {
1366
+ "scripts": {
1367
+ "install": "your-custom-install-command",
1368
+ "build": "your-custom-build-command",
1369
+ "test": "your-custom-test-command",
1370
+ "dev": "your-custom-dev-command",
1371
+ "lint": "your-custom-lint-command",
1372
+ "typecheck": "your-custom-typecheck-command"
1373
+ }
1374
+ }
1375
+ ```
1376
+
1377
+ When `package.iloom.json` exists, iloom uses its scripts instead of `package.json`.
1378
+
1379
+ **Supported scripts:**
1380
+ - `install` - Run during loom creation and post-merge (e.g., `bundle install`, `poetry install`)
1381
+ - `build` - Compile/build the project
1382
+ - `test` - Run the test suite
1383
+ - `dev` - Start the development server
1384
+ - `lint` - Run the linter
1385
+ - `typecheck` or `compile` - Type checking (compile takes precedence if both exist)
1386
+
1387
+ **Common use cases:**
1388
+ - Non-Node.js projects (Ruby, Python, Rust, Go, etc.)
1389
+ - Using a different test runner than what's in package.json
1390
+ - Running additional commands before/after the standard npm scripts
1391
+ - Wrapping commands with environment variables or tools
1392
+
1300
1393
  ## Important Notes
1301
1394
 
1302
1395
  - **Validate ALL inputs** against the schema before writing files
@@ -266,9 +266,9 @@ Perform ONE comprehensive scan to determine which agents need to run:
266
266
  **STEP 1 - Enhancement Phase:**
267
267
 
268
268
  Only execute if workflow plan determined NEEDS_ENHANCEMENT:
269
- 1. Execute: @agent-iloom-issue-enhancer ISSUE_NUMBER with the following instructions about assumptions:
269
+ 1. Execute: @agent-iloom-issue-enhancer ISSUE_NUMBER {{#IF ONE_SHOT_MODE}}with the following instructions about assumptions:
270
270
  - Before making assumptions, scan ALL issue comments for previously asked questions and their answers.
271
- - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during execution.
271
+ - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during autonomous execution.{{/IF ONE_SHOT_MODE}}
272
272
  2. Upon completion: Extract issue+comment link (including comment ID) from agent output and provide link to issue comment
273
273
  {{#IF INTERACTIVE_MODE}}
274
274
  2.5. Extract and validate assumptions (batched validation):
@@ -317,9 +317,9 @@ If workflow plan determined SKIP_ENHANCEMENT:
317
317
  **STEP 1.5 - Complexity Evaluation Phase:**
318
318
 
319
319
  Only execute if workflow plan determined NEEDS_COMPLEXITY_EVAL:
320
- 1. Execute: @agent-iloom-issue-complexity-evaluator ISSUE_NUMBER with the following instructions about assumptions:
320
+ 1. Execute: @agent-iloom-issue-complexity-evaluator ISSUE_NUMBER {{#IF ONE_SHOT_MODE}}with the following instructions about assumptions:
321
321
  - Before making assumptions, scan ALL issue comments for previously asked questions and their answers.
322
- - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during execution.
322
+ - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during autonomous execution.{{/IF ONE_SHOT_MODE}}
323
323
  2. Upon completion: Extract issue+comment link from agent output and provide link to issue comment (including comment ID)
324
324
  {{#IF INTERACTIVE_MODE}}
325
325
  2.5. Extract and validate assumptions (batched validation):
@@ -385,9 +385,9 @@ If workflow plan determined SKIP_COMPLEXITY_EVAL:
385
385
  **STEP 2 - Analysis Phase (COMPLEX workflow only):**
386
386
 
387
387
  Only execute if workflow plan determined NEEDS_ANALYSIS AND complexity is COMPLEX:
388
- 1. Execute: @agent-iloom-issue-analyzer ISSUE_NUMBER with the following instructions about assumptions:
388
+ 1. Execute: @agent-iloom-issue-analyzer ISSUE_NUMBER {{#IF ONE_SHOT_MODE}}with the following instructions about assumptions:
389
389
  - Before making assumptions, scan ALL issue comments for previously asked questions and their answers.
390
- - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during execution.
390
+ - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during autonomous execution.{{/IF ONE_SHOT_MODE}}
391
391
  2. Upon completion: Extract issue+comment link from agent output and provide link to issue comment (including comment ID)
392
392
  - Use `recap.add_entry` to log significant technical findings (type: "insight" for dependencies/constraints, type: "risk" for problems identified)
393
393
  {{#IF INTERACTIVE_MODE}}
@@ -464,9 +464,9 @@ After STEP 1.5 completes and complexity is confirmed, determine which workflow p
464
464
 
465
465
  Execute combined analyze-and-plan agent:
466
466
  1. Display: "Executing combined analyze-and-plan agent for SIMPLE task..."
467
- 2. Execute: @agent-iloom-issue-analyze-and-plan ISSUE_NUMBER with the following instructions about assumptions:
467
+ 2. Execute: @agent-iloom-issue-analyze-and-plan ISSUE_NUMBER {{#IF ONE_SHOT_MODE}}with the following instructions about assumptions:
468
468
  - Before making assumptions, scan ALL issue comments for previously asked questions and their answers.
469
- - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during execution.
469
+ - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during autonomous execution.{{/IF ONE_SHOT_MODE}}
470
470
  3. Upon completion: Extract issue+comment link from agent output and provide link to issue comment (including comment ID)
471
471
  - Use `recap.add_entry` to log key technical discoveries (type: "insight") and design decisions (type: "decision")
472
472
  {{#IF INTERACTIVE_MODE}}
@@ -505,9 +505,9 @@ Execute combined analyze-and-plan agent:
505
505
  **IMPORTANT: Only execute this step if COMPLEX workflow is being followed (not SIMPLE)**
506
506
 
507
507
  Only execute if workflow plan determined NEEDS_PLANNING AND complexity is COMPLEX:
508
- 1. Execute: @agent-iloom-issue-planner ISSUE_NUMBER with the following instructions about assumptions:
508
+ 1. Execute: @agent-iloom-issue-planner ISSUE_NUMBER {{#IF ONE_SHOT_MODE}}with the following instructions about assumptions:
509
509
  - Before making assumptions, scan ALL issue comments for previously asked questions and their answers.
510
- - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during execution.
510
+ - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during autonomous execution.{{/IF ONE_SHOT_MODE}}
511
511
  2. Upon completion: Extract issue+comment link from agent output and provide link to issue comment (including comment ID)
512
512
  - Use `recap.add_entry` to log key architectural decisions (e.g., type: "decision", content: "Chose approach A over B due to X constraint")
513
513
  {{#IF INTERACTIVE_MODE}}
@@ -552,9 +552,9 @@ Only execute if workflow plan determined NEEDS_IMPLEMENTATION:
552
552
  - Look back at the planning phase output (STEP 3 for COMPLEX or STEP 2-SIMPLE for SIMPLE workflows)
553
553
  - Extract the comment ID from the issue comment URL that was provided
554
554
  - The comment ID is the numeric value after "#issuecomment-" in the URL (e.g., https://github.com/org/repo/issues/123#issuecomment-456789 has comment ID 456789)
555
- 2. Execute: @agent-iloom-issue-implementer ISSUE_NUMBER with the following instructions about assumptions:
555
+ 2. Execute: @agent-iloom-issue-implementer ISSUE_NUMBER {{#IF ONE_SHOT_MODE}}with the following instructions about assumptions:
556
556
  - Before making assumptions, scan ALL issue comments for previously asked questions and their answers.
557
- - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during execution.
557
+ - When creating question tables in your issue comments, fill in your own assumed answers to each question. This documents assumptions made during autonomous execution.{{/IF ONE_SHOT_MODE}}
558
558
  Additional critical instructions:
559
559
  - **CRITICAL**: The implementation plan in the issue comments contains exact file paths and line numbers. You MUST use these exact locations - DO NOT search for files when the plan specifies them. Extract file locations from the plan in Step 1.5 before implementing.
560
560
  - The implementation plan is located in comment ID [COMMENT_ID] (if planning phase was executed). Read this comment first in Step 1.5 to extract file specifications.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  MergeManager
4
- } from "./chunk-WIJWIKAN.js";
4
+ } from "./chunk-2A7WQKBE.js";
5
5
  import {
6
6
  GitWorktreeManager
7
7
  } from "./chunk-EK3XCAAS.js";
@@ -94,4 +94,4 @@ export {
94
94
  RebaseCommand,
95
95
  WorktreeValidationError
96
96
  };
97
- //# sourceMappingURL=rebase-5EY3Q6XP.js.map
97
+ //# sourceMappingURL=rebase-Y4AS6LQW.js.map
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  DevServerManager
4
- } from "./chunk-SHVB3EFE.js";
5
- import "./chunk-LVLRMP7V.js";
4
+ } from "./chunk-64O2UIWO.js";
6
5
  import {
7
6
  calculatePortForBranch
8
7
  } from "./chunk-VU3QMIP2.js";
8
+ import "./chunk-AXX3QIKK.js";
9
9
  import {
10
10
  IdentifierParser
11
11
  } from "./chunk-UQIXZ3BA.js";
12
12
  import {
13
13
  ProjectCapabilityDetector
14
- } from "./chunk-EBISESAP.js";
15
- import "./chunk-2ZPFJQ3B.js";
14
+ } from "./chunk-ZPSTA5PR.js";
15
+ import "./chunk-BXCPJJYM.js";
16
16
  import {
17
17
  GitWorktreeManager
18
18
  } from "./chunk-EK3XCAAS.js";
@@ -288,4 +288,4 @@ Make sure the project is built (run 'il start' first)`
288
288
  export {
289
289
  RunCommand
290
290
  };
291
- //# sourceMappingURL=run-CMZUYZVG.js.map
291
+ //# sourceMappingURL=run-NCRK5NPR.js.map
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SessionSummaryService
4
- } from "./chunk-SJIMVKK7.js";
4
+ } from "./chunk-K7SEEHKO.js";
5
5
  import "./chunk-NXMDEL3F.js";
6
6
  import "./chunk-7Q66W4OH.js";
7
7
  import {
8
8
  GitWorktreeManager
9
9
  } from "./chunk-EK3XCAAS.js";
10
10
  import "./chunk-FXDYIV3K.js";
11
- import "./chunk-K5G5SFWY.js";
11
+ import "./chunk-W6WVRHJ6.js";
12
12
  import {
13
13
  extractIssueNumber
14
14
  } from "./chunk-GEXP5IOF.js";
@@ -248,4 +248,4 @@ Please provide an issue number, PR number, or branch name.`
248
248
  export {
249
249
  SummaryCommand
250
250
  };
251
- //# sourceMappingURL=summary-5YXUGPRN.js.map
251
+ //# sourceMappingURL=summary-CVFAMDOJ.js.map
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ScriptCommandBase
4
+ } from "./chunk-TRQ76ISK.js";
5
+ import "./chunk-AXX3QIKK.js";
6
+ import "./chunk-UQIXZ3BA.js";
7
+ import "./chunk-BXCPJJYM.js";
8
+ import "./chunk-EK3XCAAS.js";
9
+ import "./chunk-GEXP5IOF.js";
10
+ import "./chunk-F6WVM437.js";
11
+ import "./chunk-CFUWQHCJ.js";
12
+ import "./chunk-6MLEBAYZ.js";
13
+ import "./chunk-VT4PDUYT.js";
14
+
15
+ // src/commands/test.ts
16
+ var TestCommand = class extends ScriptCommandBase {
17
+ getScriptName() {
18
+ return "test";
19
+ }
20
+ getScriptDisplayName() {
21
+ return "Test";
22
+ }
23
+ };
24
+ export {
25
+ TestCommand
26
+ };
27
+ //# sourceMappingURL=test-3KIVXI6J.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/test.ts"],"sourcesContent":["import { ScriptCommandBase, ScriptCommandInput } from './script-command-base.js'\n\nexport type { ScriptCommandInput as TestCommandInput }\n\n/**\n * TestCommand - Run the test script for a workspace\n * Uses package.iloom.json if available, otherwise falls back to package.json\n */\nexport class TestCommand extends ScriptCommandBase {\n\tgetScriptName(): string {\n\t\treturn 'test'\n\t}\n\n\tgetScriptDisplayName(): string {\n\t\treturn 'Test'\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;AAQO,IAAM,cAAN,cAA0B,kBAAkB;AAAA,EAClD,gBAAwB;AACvB,WAAO;AAAA,EACR;AAAA,EAEA,uBAA+B;AAC9B,WAAO;AAAA,EACR;AACD;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iloom/cli",
3
- "version": "0.5.5",
3
+ "version": "0.6.1",
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",
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- ProjectCapabilityDetector
4
- } from "./chunk-EBISESAP.js";
5
- import "./chunk-2ZPFJQ3B.js";
6
- export {
7
- ProjectCapabilityDetector
8
- };
9
- //# sourceMappingURL=ProjectCapabilityDetector-34LU7JJ4.js.map
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // src/utils/package-json.ts
4
- import fs from "fs-extra";
5
- import path from "path";
6
- async function readPackageJson(dir) {
7
- const pkgPath = path.join(dir, "package.json");
8
- try {
9
- const pkgJson = await fs.readJson(pkgPath);
10
- return pkgJson;
11
- } catch (error) {
12
- if (error.code === "ENOENT") {
13
- throw new Error(`package.json not found in ${dir}`);
14
- }
15
- const message = error instanceof Error ? error.message : "Unknown error";
16
- throw new Error(`Invalid package.json in ${dir}: ${message}`);
17
- }
18
- }
19
- function parseBinField(bin, packageName) {
20
- if (!bin) {
21
- return {};
22
- }
23
- if (typeof bin === "string") {
24
- return { [packageName]: bin };
25
- }
26
- return bin;
27
- }
28
- function hasWebDependencies(pkgJson) {
29
- const webIndicators = [
30
- "next",
31
- "vite",
32
- "express",
33
- "react-scripts",
34
- "nuxt",
35
- "svelte-kit",
36
- "astro",
37
- "remix",
38
- "fastify",
39
- "koa",
40
- "hapi",
41
- "@angular/core",
42
- "gatsby",
43
- "@11ty/eleventy",
44
- "ember-cli"
45
- ];
46
- const allDeps = {
47
- ...pkgJson.dependencies,
48
- ...pkgJson.devDependencies
49
- };
50
- return webIndicators.some((indicator) => indicator in allDeps);
51
- }
52
- function hasScript(pkgJson, scriptName) {
53
- var _a;
54
- return !!((_a = pkgJson.scripts) == null ? void 0 : _a[scriptName]);
55
- }
56
-
57
- export {
58
- readPackageJson,
59
- parseBinField,
60
- hasWebDependencies,
61
- hasScript
62
- };
63
- //# sourceMappingURL=chunk-2ZPFJQ3B.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/package-json.ts"],"sourcesContent":["import fs from 'fs-extra'\nimport path from 'path'\n\nexport interface PackageJson {\n name: string\n version?: string\n bin?: string | Record<string, string>\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n scripts?: Record<string, string>\n [key: string]: unknown\n}\n\n/**\n * Read and parse package.json from a directory\n * @param dir Directory containing package.json\n * @returns Parsed package.json object\n * @throws Error if package.json doesn't exist or contains invalid JSON\n */\nexport async function readPackageJson(dir: string): Promise<PackageJson> {\n const pkgPath = path.join(dir, 'package.json')\n\n try {\n const pkgJson = await fs.readJson(pkgPath)\n return pkgJson as PackageJson\n } catch (error) {\n if ((error as { code?: string }).code === 'ENOENT') {\n throw new Error(`package.json not found in ${dir}`)\n }\n const message = error instanceof Error ? error.message : 'Unknown error'\n throw new Error(`Invalid package.json in ${dir}: ${message}`)\n }\n}\n\n/**\n * Parse bin field into normalized Record format\n * @param bin The bin field from package.json (string or object)\n * @param packageName Package name to use for string bin variant\n * @returns Normalized bin entries as Record<string, string>\n */\nexport function parseBinField(\n bin: string | Record<string, string> | undefined,\n packageName: string\n): Record<string, string> {\n if (!bin) {\n return {}\n }\n\n if (typeof bin === 'string') {\n return { [packageName]: bin }\n }\n\n return bin\n}\n\n/**\n * Check if package.json indicates a web application\n * @param pkgJson Parsed package.json object\n * @returns true if package has web framework dependencies\n */\nexport function hasWebDependencies(pkgJson: PackageJson): boolean {\n const webIndicators = [\n 'next',\n 'vite',\n 'express',\n 'react-scripts',\n 'nuxt',\n 'svelte-kit',\n 'astro',\n 'remix',\n 'fastify',\n 'koa',\n 'hapi',\n '@angular/core',\n 'gatsby',\n '@11ty/eleventy',\n 'ember-cli'\n ]\n\n const allDeps = {\n ...pkgJson.dependencies,\n ...pkgJson.devDependencies\n }\n\n return webIndicators.some(indicator => indicator in allDeps)\n}\n\n/**\n * Check if package.json has a specific script\n * @param pkgJson Parsed package.json object\n * @param scriptName Script name to check for\n * @returns true if script exists\n */\nexport function hasScript(pkgJson: PackageJson, scriptName: string): boolean {\n return !!pkgJson.scripts?.[scriptName]\n}\n"],"mappings":";;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAkBjB,eAAsB,gBAAgB,KAAmC;AACvE,QAAM,UAAU,KAAK,KAAK,KAAK,cAAc;AAE7C,MAAI;AACF,UAAM,UAAU,MAAM,GAAG,SAAS,OAAO;AACzC,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAK,MAA4B,SAAS,UAAU;AAClD,YAAM,IAAI,MAAM,6BAA6B,GAAG,EAAE;AAAA,IACpD;AACA,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,UAAM,IAAI,MAAM,2BAA2B,GAAG,KAAK,OAAO,EAAE;AAAA,EAC9D;AACF;AAQO,SAAS,cACd,KACA,aACwB;AACxB,MAAI,CAAC,KAAK;AACR,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,EAAE,CAAC,WAAW,GAAG,IAAI;AAAA,EAC9B;AAEA,SAAO;AACT;AAOO,SAAS,mBAAmB,SAA+B;AAChE,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,UAAU;AAAA,IACd,GAAG,QAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,EACb;AAEA,SAAO,cAAc,KAAK,eAAa,aAAa,OAAO;AAC7D;AAQO,SAAS,UAAU,SAAsB,YAA6B;AA7F7E;AA8FE,SAAO,CAAC,GAAC,aAAQ,YAAR,mBAAkB;AAC7B;","names":[]}