@iloom/cli 0.5.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +116 -4
  2. package/dist/{ClaudeContextManager-PQ46VILL.js → ClaudeContextManager-6J2EB4QU.js} +5 -5
  3. package/dist/{ClaudeService-6OMO552H.js → ClaudeService-O2PB22GX.js} +4 -4
  4. package/dist/{LoomLauncher-ZHDTPKED.js → LoomLauncher-5LFM4LXB.js} +5 -5
  5. package/dist/ProjectCapabilityDetector-S5FLNCFI.js +11 -0
  6. package/dist/{PromptTemplateManager-5GNF7FCP.js → PromptTemplateManager-C3DK6XZL.js} +2 -2
  7. package/dist/README.md +116 -4
  8. package/dist/{SettingsManager-CNYBGXDT.js → SettingsManager-35F5RUJH.js} +2 -2
  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-SHVB3EFE.js → chunk-64O2UIWO.js} +44 -19
  16. package/dist/chunk-64O2UIWO.js.map +1 -0
  17. package/dist/{chunk-FXJKNVZW.js → chunk-6U6VI4SZ.js} +3 -3
  18. package/dist/{chunk-QPS6TZUW.js → chunk-7WANFUIK.js} +2 -2
  19. package/dist/{chunk-LVLRMP7V.js → chunk-AXX3QIKK.js} +58 -14
  20. package/dist/chunk-AXX3QIKK.js.map +1 -0
  21. package/dist/chunk-BXCPJJYM.js +133 -0
  22. package/dist/chunk-BXCPJJYM.js.map +1 -0
  23. package/dist/{chunk-ESP2FF52.js → chunk-EK3XCAAS.js} +2 -2
  24. package/dist/{chunk-IDUICCZY.js → chunk-F6WVM437.js} +3 -1
  25. package/dist/chunk-F6WVM437.js.map +1 -0
  26. package/dist/{chunk-TKL7RBEF.js → chunk-GEXP5IOF.js} +3 -3
  27. package/dist/{chunk-J7GHNTYK.js → chunk-K7SEEHKO.js} +3 -3
  28. package/dist/{chunk-NRDY6XO3.js → chunk-PMVWQBWS.js} +73 -17
  29. package/dist/chunk-PMVWQBWS.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-ZXWTOJXA.js → chunk-UB4TFAXJ.js} +38 -9
  37. package/dist/chunk-UB4TFAXJ.js.map +1 -0
  38. package/dist/{chunk-YPOG7WY4.js → chunk-UQIXZ3BA.js} +2 -2
  39. package/dist/{chunk-K5G5SFWY.js → chunk-W6WVRHJ6.js} +13 -1
  40. package/dist/chunk-W6WVRHJ6.js.map +1 -0
  41. package/dist/{chunk-E4F7KASE.js → chunk-WIJWIKAN.js} +3 -3
  42. package/dist/{chunk-EBISESAP.js → chunk-ZPSTA5PR.js} +16 -6
  43. package/dist/chunk-ZPSTA5PR.js.map +1 -0
  44. package/dist/{cleanup-H5QUWBWE.js → cleanup-OU2HFOOG.js} +11 -11
  45. package/dist/cli.js +107 -69
  46. package/dist/cli.js.map +1 -1
  47. package/dist/compile-ULNO5F7Q.js +57 -0
  48. package/dist/compile-ULNO5F7Q.js.map +1 -0
  49. package/dist/{contribute-VP73TPAL.js → contribute-T7ENST5N.js} +3 -3
  50. package/dist/{dev-server-H5FFXIVX.js → dev-server-4RCDJ5MU.js} +9 -9
  51. package/dist/{feedback-567ZH2O7.js → feedback-O4Q55SVS.js} +8 -8
  52. package/dist/{git-UHUNQZBA.js → git-FVMGBHC2.js} +3 -3
  53. package/dist/{ignite-VPP4PMF4.js → ignite-VHV65WEZ.js} +12 -8
  54. package/dist/ignite-VHV65WEZ.js.map +1 -0
  55. package/dist/index.d.ts +5 -0
  56. package/dist/index.js +14 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/{init-4ZR2XXZA.js → init-HB34Q5FH.js} +8 -7
  59. package/dist/lint-5JMCWE4Y.js +27 -0
  60. package/dist/lint-5JMCWE4Y.js.map +1 -0
  61. package/dist/{open-6HBQHPUL.js → open-WHVUYGPY.js} +9 -9
  62. package/dist/prompts/init-prompt.txt +108 -0
  63. package/dist/prompts/issue-prompt.txt +12 -12
  64. package/dist/{rebase-SRBOVC4M.js → rebase-5EY3Q6XP.js} +5 -5
  65. package/dist/{recap-X7FTTKPP.js → recap-VOOUXOGP.js} +5 -5
  66. package/dist/{run-5FU76FFE.js → run-NCRK5NPR.js} +9 -9
  67. package/dist/schema/settings.schema.json +8 -0
  68. package/dist/{shell-UQJDI36V.js → shell-SBLXVOVJ.js} +5 -5
  69. package/dist/{summary-MOKN7RM2.js → summary-CVFAMDOJ.js} +6 -6
  70. package/dist/test-3KIVXI6J.js +27 -0
  71. package/dist/test-3KIVXI6J.js.map +1 -0
  72. package/dist/{test-git-GB3B6QNT.js → test-git-ZB6AGGRW.js} +3 -3
  73. package/dist/{test-prefix-YQNNTCY3.js → test-prefix-FBGXKMPA.js} +3 -3
  74. package/package.json +2 -1
  75. package/dist/ProjectCapabilityDetector-34LU7JJ4.js +0 -9
  76. package/dist/chunk-2ZPFJQ3B.js +0 -63
  77. package/dist/chunk-2ZPFJQ3B.js.map +0 -1
  78. package/dist/chunk-EBISESAP.js.map +0 -1
  79. package/dist/chunk-IDUICCZY.js.map +0 -1
  80. package/dist/chunk-K5G5SFWY.js.map +0 -1
  81. package/dist/chunk-LVLRMP7V.js.map +0 -1
  82. package/dist/chunk-N4ZJVATC.js.map +0 -1
  83. package/dist/chunk-NKRQNER7.js.map +0 -1
  84. package/dist/chunk-NRDY6XO3.js.map +0 -1
  85. package/dist/chunk-SHVB3EFE.js.map +0 -1
  86. package/dist/chunk-ZXWTOJXA.js.map +0 -1
  87. package/dist/ignite-VPP4PMF4.js.map +0 -1
  88. /package/dist/{ClaudeContextManager-PQ46VILL.js.map → ClaudeContextManager-6J2EB4QU.js.map} +0 -0
  89. /package/dist/{ClaudeService-6OMO552H.js.map → ClaudeService-O2PB22GX.js.map} +0 -0
  90. /package/dist/{LoomLauncher-ZHDTPKED.js.map → LoomLauncher-5LFM4LXB.js.map} +0 -0
  91. /package/dist/{ProjectCapabilityDetector-34LU7JJ4.js.map → ProjectCapabilityDetector-S5FLNCFI.js.map} +0 -0
  92. /package/dist/{PromptTemplateManager-5GNF7FCP.js.map → PromptTemplateManager-C3DK6XZL.js.map} +0 -0
  93. /package/dist/{SettingsManager-CNYBGXDT.js.map → SettingsManager-35F5RUJH.js.map} +0 -0
  94. /package/dist/{chunk-FXJKNVZW.js.map → chunk-6U6VI4SZ.js.map} +0 -0
  95. /package/dist/{chunk-QPS6TZUW.js.map → chunk-7WANFUIK.js.map} +0 -0
  96. /package/dist/{chunk-ESP2FF52.js.map → chunk-EK3XCAAS.js.map} +0 -0
  97. /package/dist/{chunk-TKL7RBEF.js.map → chunk-GEXP5IOF.js.map} +0 -0
  98. /package/dist/{chunk-J7GHNTYK.js.map → chunk-K7SEEHKO.js.map} +0 -0
  99. /package/dist/{chunk-YPOG7WY4.js.map → chunk-UQIXZ3BA.js.map} +0 -0
  100. /package/dist/{chunk-E4F7KASE.js.map → chunk-WIJWIKAN.js.map} +0 -0
  101. /package/dist/{cleanup-H5QUWBWE.js.map → cleanup-OU2HFOOG.js.map} +0 -0
  102. /package/dist/{contribute-VP73TPAL.js.map → contribute-T7ENST5N.js.map} +0 -0
  103. /package/dist/{dev-server-H5FFXIVX.js.map → dev-server-4RCDJ5MU.js.map} +0 -0
  104. /package/dist/{feedback-567ZH2O7.js.map → feedback-O4Q55SVS.js.map} +0 -0
  105. /package/dist/{git-UHUNQZBA.js.map → git-FVMGBHC2.js.map} +0 -0
  106. /package/dist/{init-4ZR2XXZA.js.map → init-HB34Q5FH.js.map} +0 -0
  107. /package/dist/{open-6HBQHPUL.js.map → open-WHVUYGPY.js.map} +0 -0
  108. /package/dist/{rebase-SRBOVC4M.js.map → rebase-5EY3Q6XP.js.map} +0 -0
  109. /package/dist/{recap-X7FTTKPP.js.map → recap-VOOUXOGP.js.map} +0 -0
  110. /package/dist/{run-5FU76FFE.js.map → run-NCRK5NPR.js.map} +0 -0
  111. /package/dist/{shell-UQJDI36V.js.map → shell-SBLXVOVJ.js.map} +0 -0
  112. /package/dist/{summary-MOKN7RM2.js.map → summary-CVFAMDOJ.js.map} +0 -0
  113. /package/dist/{test-git-GB3B6QNT.js.map → test-git-ZB6AGGRW.js.map} +0 -0
  114. /package/dist/{test-prefix-YQNNTCY3.js.map → test-prefix-FBGXKMPA.js.map} +0 -0
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  InitCommand
4
- } from "./chunk-ZXWTOJXA.js";
5
- import "./chunk-NKRQNER7.js";
4
+ } from "./chunk-UB4TFAXJ.js";
5
+ import "./chunk-Q7POFB5Q.js";
6
6
  import "./chunk-F2PWIRV4.js";
7
- import "./chunk-ESP2FF52.js";
7
+ import "./chunk-SN3Z6EZO.js";
8
+ import "./chunk-EK3XCAAS.js";
8
9
  import "./chunk-FXDYIV3K.js";
9
- import "./chunk-K5G5SFWY.js";
10
- import "./chunk-TKL7RBEF.js";
11
- import "./chunk-IDUICCZY.js";
10
+ import "./chunk-W6WVRHJ6.js";
11
+ import "./chunk-GEXP5IOF.js";
12
+ import "./chunk-F6WVM437.js";
12
13
  import "./chunk-CFUWQHCJ.js";
13
14
  import "./chunk-ZX3GTM7O.js";
14
15
  import "./chunk-AEIMYF4P.js";
@@ -17,4 +18,4 @@ import "./chunk-VT4PDUYT.js";
17
18
  export {
18
19
  InitCommand
19
20
  };
20
- //# sourceMappingURL=init-4ZR2XXZA.js.map
21
+ //# sourceMappingURL=init-HB34Q5FH.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,21 +1,21 @@
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
- } from "./chunk-YPOG7WY4.js";
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
- } from "./chunk-ESP2FF52.js";
18
+ } from "./chunk-EK3XCAAS.js";
19
19
  import {
20
20
  openBrowser
21
21
  } from "./chunk-YETJNRQM.js";
@@ -24,10 +24,10 @@ import {
24
24
  } from "./chunk-GYCR2LOU.js";
25
25
  import {
26
26
  extractIssueNumber
27
- } from "./chunk-TKL7RBEF.js";
27
+ } from "./chunk-GEXP5IOF.js";
28
28
  import {
29
29
  SettingsManager
30
- } from "./chunk-IDUICCZY.js";
30
+ } from "./chunk-F6WVM437.js";
31
31
  import "./chunk-CFUWQHCJ.js";
32
32
  import "./chunk-6MLEBAYZ.js";
33
33
  import {
@@ -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-6HBQHPUL.js.map
291
+ //# sourceMappingURL=open-WHVUYGPY.js.map
@@ -104,6 +104,14 @@ The following JSON Schema defines valid iloom settings:
104
104
  },
105
105
  "description": "List of branches that cannot be deleted (defaults to [mainBranch, \"main\", \"master\", \"develop\"])"
106
106
  },
107
+ "copyGitIgnoredPatterns": {
108
+ "type": "array",
109
+ "items": {
110
+ "type": "string",
111
+ "minLength": 1
112
+ },
113
+ "description": "Glob patterns for gitignored files to copy to looms (e.g., [\"*.db\", \"data/*.sqlite\"]). Great for local dbs and large test data files that are too big to commit to git. Note: .env (dotenv-flow) files, iloom's and claude's local settings are automatically copied and do not need to be specified here."
114
+ },
107
115
  "workflows": {
108
116
  "type": "object",
109
117
  "properties": {
@@ -684,6 +692,72 @@ Use AskUserQuestion to ask ALL local development settings questions **IN A SINGL
684
692
  - Users can select "Other" on any question to provide custom input
685
693
  - Process all answers at once when the user submits
686
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
+
687
761
  ### Phase 2: Tooling Configuration
688
762
 
689
763
  This phase configures external tooling integrations. Use AskUserQuestion to gather these settings.
@@ -1229,6 +1303,7 @@ Need more advanced configuration? I can help you set up:
1229
1303
  • Database Settings - Configure database branching for isolated development
1230
1304
  • Workflow Behavior - Control permissions, IDE launching, dev servers, and terminal behavior
1231
1305
  • Protected Branches - Prevent iloom from creating worktrees for certain branches
1306
+ • Custom Scripts - Override package.json scripts with custom commands
1232
1307
 
1233
1308
  You can ask me questions like:
1234
1309
  "Is it possible to have the analysis agent use a different model?"
@@ -1236,6 +1311,7 @@ You can ask me questions like:
1236
1311
  "Can I disable the IDE from launching automatically?"
1237
1312
  "How do I protect my main branch from worktree creation?"
1238
1313
  "What models are available for the different agents?"
1314
+ "How do I use custom build/test commands instead of package.json scripts?"
1239
1315
 
1240
1316
  Just ask any of these questions and I'll help you modify your settings.
1241
1317
 
@@ -1289,6 +1365,38 @@ If users ask about specific configurations, help them add these sections to thei
1289
1365
  }
1290
1366
  ```
1291
1367
 
1368
+ 6. **Custom Script Configuration (package.iloom.json):**
1369
+
1370
+ If users want to override or supplement npm scripts with custom commands, help them create `.iloom/package.iloom.json`:
1371
+ ```json
1372
+ {
1373
+ "scripts": {
1374
+ "install": "your-custom-install-command",
1375
+ "build": "your-custom-build-command",
1376
+ "test": "your-custom-test-command",
1377
+ "dev": "your-custom-dev-command",
1378
+ "lint": "your-custom-lint-command",
1379
+ "typecheck": "your-custom-typecheck-command"
1380
+ }
1381
+ }
1382
+ ```
1383
+
1384
+ When `package.iloom.json` exists, iloom uses its scripts instead of `package.json`.
1385
+
1386
+ **Supported scripts:**
1387
+ - `install` - Run during loom creation and post-merge (e.g., `bundle install`, `poetry install`)
1388
+ - `build` - Compile/build the project
1389
+ - `test` - Run the test suite
1390
+ - `dev` - Start the development server
1391
+ - `lint` - Run the linter
1392
+ - `typecheck` or `compile` - Type checking (compile takes precedence if both exist)
1393
+
1394
+ **Common use cases:**
1395
+ - Non-Node.js projects (Ruby, Python, Rust, Go, etc.)
1396
+ - Using a different test runner than what's in package.json
1397
+ - Running additional commands before/after the standard npm scripts
1398
+ - Wrapping commands with environment variables or tools
1399
+
1292
1400
  ## Important Notes
1293
1401
 
1294
1402
  - **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,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  MergeManager
4
- } from "./chunk-E4F7KASE.js";
4
+ } from "./chunk-WIJWIKAN.js";
5
5
  import {
6
6
  GitWorktreeManager
7
- } from "./chunk-ESP2FF52.js";
7
+ } from "./chunk-EK3XCAAS.js";
8
8
  import {
9
9
  getWorktreeRoot,
10
10
  isValidGitRepo
11
- } from "./chunk-TKL7RBEF.js";
11
+ } from "./chunk-GEXP5IOF.js";
12
12
  import {
13
13
  SettingsManager
14
- } from "./chunk-IDUICCZY.js";
14
+ } from "./chunk-F6WVM437.js";
15
15
  import "./chunk-CFUWQHCJ.js";
16
16
  import "./chunk-AEIMYF4P.js";
17
17
  import "./chunk-6MLEBAYZ.js";
@@ -94,4 +94,4 @@ export {
94
94
  RebaseCommand,
95
95
  WorktreeValidationError
96
96
  };
97
- //# sourceMappingURL=rebase-SRBOVC4M.js.map
97
+ //# sourceMappingURL=rebase-5EY3Q6XP.js.map
@@ -4,12 +4,12 @@ import {
4
4
  } from "./chunk-NXMDEL3F.js";
5
5
  import {
6
6
  IdentifierParser
7
- } from "./chunk-YPOG7WY4.js";
7
+ } from "./chunk-UQIXZ3BA.js";
8
8
  import {
9
9
  GitWorktreeManager
10
- } from "./chunk-ESP2FF52.js";
11
- import "./chunk-TKL7RBEF.js";
12
- import "./chunk-IDUICCZY.js";
10
+ } from "./chunk-EK3XCAAS.js";
11
+ import "./chunk-GEXP5IOF.js";
12
+ import "./chunk-F6WVM437.js";
13
13
  import "./chunk-CFUWQHCJ.js";
14
14
  import "./chunk-6MLEBAYZ.js";
15
15
  import "./chunk-VT4PDUYT.js";
@@ -107,4 +107,4 @@ var RecapCommand = class {
107
107
  export {
108
108
  RecapCommand
109
109
  };
110
- //# sourceMappingURL=recap-X7FTTKPP.js.map
110
+ //# sourceMappingURL=recap-VOOUXOGP.js.map
@@ -1,21 +1,21 @@
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
- } from "./chunk-YPOG7WY4.js";
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
- } from "./chunk-ESP2FF52.js";
18
+ } from "./chunk-EK3XCAAS.js";
19
19
  import {
20
20
  openBrowser
21
21
  } from "./chunk-YETJNRQM.js";
@@ -24,10 +24,10 @@ import {
24
24
  } from "./chunk-GYCR2LOU.js";
25
25
  import {
26
26
  extractIssueNumber
27
- } from "./chunk-TKL7RBEF.js";
27
+ } from "./chunk-GEXP5IOF.js";
28
28
  import {
29
29
  SettingsManager
30
- } from "./chunk-IDUICCZY.js";
30
+ } from "./chunk-F6WVM437.js";
31
31
  import "./chunk-CFUWQHCJ.js";
32
32
  import "./chunk-6MLEBAYZ.js";
33
33
  import {
@@ -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-5FU76FFE.js.map
291
+ //# sourceMappingURL=run-NCRK5NPR.js.map
@@ -26,6 +26,14 @@
26
26
  },
27
27
  "description": "List of branches that cannot be deleted (defaults to [mainBranch, \"main\", \"master\", \"develop\"])"
28
28
  },
29
+ "copyGitIgnoredPatterns": {
30
+ "type": "array",
31
+ "items": {
32
+ "type": "string",
33
+ "minLength": 1
34
+ },
35
+ "description": "Glob patterns for gitignored files to copy to looms (e.g., [\"*.db\", \"data/*.sqlite\"]). Great for local dbs and large test data files that are too big to commit to git. Note: .env (dotenv-flow) files, iloom's and claude's local settings are automatically copied and do not need to be specified here."
36
+ },
29
37
  "workflows": {
30
38
  "type": "object",
31
39
  "properties": {
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  IdentifierParser
4
- } from "./chunk-YPOG7WY4.js";
4
+ } from "./chunk-UQIXZ3BA.js";
5
5
  import {
6
6
  GitWorktreeManager
7
- } from "./chunk-ESP2FF52.js";
7
+ } from "./chunk-EK3XCAAS.js";
8
8
  import {
9
9
  extractIssueNumber
10
- } from "./chunk-TKL7RBEF.js";
10
+ } from "./chunk-GEXP5IOF.js";
11
11
  import {
12
12
  SettingsManager
13
- } from "./chunk-IDUICCZY.js";
13
+ } from "./chunk-F6WVM437.js";
14
14
  import "./chunk-CFUWQHCJ.js";
15
15
  import "./chunk-6MLEBAYZ.js";
16
16
  import {
@@ -235,4 +235,4 @@ var ShellCommand = class {
235
235
  export {
236
236
  ShellCommand
237
237
  };
238
- //# sourceMappingURL=shell-UQJDI36V.js.map
238
+ //# sourceMappingURL=shell-SBLXVOVJ.js.map
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SessionSummaryService
4
- } from "./chunk-J7GHNTYK.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
- } from "./chunk-ESP2FF52.js";
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
- } from "./chunk-TKL7RBEF.js";
15
- import "./chunk-IDUICCZY.js";
14
+ } from "./chunk-GEXP5IOF.js";
15
+ import "./chunk-F6WVM437.js";
16
16
  import {
17
17
  MetadataManager
18
18
  } from "./chunk-CFUWQHCJ.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-MOKN7RM2.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":[]}
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  findMainWorktreePath
4
- } from "./chunk-TKL7RBEF.js";
4
+ } from "./chunk-GEXP5IOF.js";
5
5
  import {
6
6
  SettingsManager
7
- } from "./chunk-IDUICCZY.js";
7
+ } from "./chunk-F6WVM437.js";
8
8
  import "./chunk-CFUWQHCJ.js";
9
9
  import "./chunk-6MLEBAYZ.js";
10
10
  import {
@@ -51,4 +51,4 @@ var TestGitCommand = class {
51
51
  export {
52
52
  TestGitCommand
53
53
  };
54
- //# sourceMappingURL=test-git-GB3B6QNT.js.map
54
+ //# sourceMappingURL=test-git-ZB6AGGRW.js.map
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  generateWorktreePath
4
- } from "./chunk-TKL7RBEF.js";
4
+ } from "./chunk-GEXP5IOF.js";
5
5
  import {
6
6
  SettingsManager
7
- } from "./chunk-IDUICCZY.js";
7
+ } from "./chunk-F6WVM437.js";
8
8
  import "./chunk-CFUWQHCJ.js";
9
9
  import "./chunk-6MLEBAYZ.js";
10
10
  import {
@@ -67,4 +67,4 @@ var TestPrefixCommand = class {
67
67
  export {
68
68
  TestPrefixCommand
69
69
  };
70
- //# sourceMappingURL=test-prefix-YQNNTCY3.js.map
70
+ //# sourceMappingURL=test-prefix-FBGXKMPA.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iloom/cli",
3
- "version": "0.5.4",
3
+ "version": "0.6.0",
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",
@@ -73,6 +73,7 @@
73
73
  "deepmerge": "^4.3.1",
74
74
  "dotenv-flow": "^4.1.0",
75
75
  "execa": "^8.0.1",
76
+ "fast-glob": "^3.3.3",
76
77
  "fs-extra": "^11.1.1",
77
78
  "inquirer": "^9.2.12",
78
79
  "jsonc-parser": "^3.3.1",
@@ -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