@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.
- package/README.md +100 -4
- package/dist/{ClaudeContextManager-7WX7DUNI.js → ClaudeContextManager-6J2EB4QU.js} +4 -4
- package/dist/{ClaudeService-LQLN2GP4.js → ClaudeService-O2PB22GX.js} +3 -3
- package/dist/{LoomLauncher-5QU42LOM.js → LoomLauncher-5LFM4LXB.js} +4 -4
- package/dist/{PRManager-OCSB2HPT.js → PRManager-GB3FOJ2W.js} +2 -2
- package/dist/ProjectCapabilityDetector-S5FLNCFI.js +11 -0
- package/dist/{PromptTemplateManager-5GNF7FCP.js → PromptTemplateManager-C3DK6XZL.js} +2 -2
- package/dist/README.md +100 -4
- package/dist/agents/iloom-framework-detector.md +366 -0
- package/dist/agents/iloom-issue-analyze-and-plan.md +0 -10
- package/dist/agents/iloom-issue-implementer.md +1 -1
- package/dist/agents/iloom-issue-planner.md +0 -10
- package/dist/build-FJVYP7EV.js +27 -0
- package/dist/build-FJVYP7EV.js.map +1 -0
- package/dist/{chunk-WIJWIKAN.js → chunk-2A7WQKBE.js} +10 -2
- package/dist/{chunk-WIJWIKAN.js.map → chunk-2A7WQKBE.js.map} +1 -1
- package/dist/{chunk-SHVB3EFE.js → chunk-64O2UIWO.js} +44 -19
- package/dist/chunk-64O2UIWO.js.map +1 -0
- package/dist/{chunk-FO2H3YXI.js → chunk-6U6VI4SZ.js} +2 -2
- package/dist/{chunk-VXMY22TP.js → chunk-7WANFUIK.js} +2 -2
- package/dist/{chunk-LVLRMP7V.js → chunk-AXX3QIKK.js} +58 -14
- package/dist/chunk-AXX3QIKK.js.map +1 -0
- package/dist/chunk-BXCPJJYM.js +133 -0
- package/dist/chunk-BXCPJJYM.js.map +1 -0
- package/dist/{chunk-46JVEGUW.js → chunk-I75JMBNB.js} +14 -16
- package/dist/chunk-I75JMBNB.js.map +1 -0
- package/dist/{chunk-SJIMVKK7.js → chunk-K7SEEHKO.js} +2 -2
- package/dist/{chunk-WZHBRKLN.js → chunk-LVBRMTE6.js} +39 -56
- package/dist/chunk-LVBRMTE6.js.map +1 -0
- package/dist/{chunk-NKRQNER7.js → chunk-Q7POFB5Q.js} +1 -55
- package/dist/chunk-Q7POFB5Q.js.map +1 -0
- package/dist/{chunk-N4ZJVATC.js → chunk-SN3Z6EZO.js} +11 -7
- package/dist/chunk-SN3Z6EZO.js.map +1 -0
- package/dist/chunk-TRQ76ISK.js +159 -0
- package/dist/chunk-TRQ76ISK.js.map +1 -0
- package/dist/{chunk-5IWU3HXE.js → chunk-VDA5JMB4.js} +3 -4
- package/dist/{chunk-5IWU3HXE.js.map → chunk-VDA5JMB4.js.map} +1 -1
- package/dist/{chunk-K5G5SFWY.js → chunk-W6WVRHJ6.js} +13 -1
- package/dist/chunk-W6WVRHJ6.js.map +1 -0
- package/dist/{chunk-EBISESAP.js → chunk-ZPSTA5PR.js} +16 -6
- package/dist/chunk-ZPSTA5PR.js.map +1 -0
- package/dist/{cleanup-WTZZ74VS.js → cleanup-BRUAINKE.js} +6 -6
- package/dist/cli.js +268 -65
- package/dist/cli.js.map +1 -1
- package/dist/compile-ULNO5F7Q.js +57 -0
- package/dist/compile-ULNO5F7Q.js.map +1 -0
- package/dist/{contribute-T7ENST5N.js → contribute-Q6GX6AXK.js} +95 -27
- package/dist/contribute-Q6GX6AXK.js.map +1 -0
- package/dist/{dev-server-S5QG5SBZ.js → dev-server-4RCDJ5MU.js} +5 -5
- package/dist/{feedback-PDMCKYOT.js → feedback-O4Q55SVS.js} +7 -7
- package/dist/{ignite-YF4Q5RA7.js → ignite-VHV65WEZ.js} +9 -5
- package/dist/ignite-VHV65WEZ.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/{init-XQQGC6DN.js → init-UTYRHNJJ.js} +5 -4
- package/dist/lint-5JMCWE4Y.js +27 -0
- package/dist/lint-5JMCWE4Y.js.map +1 -0
- package/dist/{open-AIZG5756.js → open-WHVUYGPY.js} +5 -5
- package/dist/prompts/init-prompt.txt +101 -8
- package/dist/prompts/issue-prompt.txt +12 -12
- package/dist/{rebase-5EY3Q6XP.js → rebase-Y4AS6LQW.js} +2 -2
- package/dist/{run-CMZUYZVG.js → run-NCRK5NPR.js} +5 -5
- package/dist/{summary-5YXUGPRN.js → summary-CVFAMDOJ.js} +3 -3
- package/dist/test-3KIVXI6J.js +27 -0
- package/dist/test-3KIVXI6J.js.map +1 -0
- package/package.json +1 -1
- package/dist/ProjectCapabilityDetector-34LU7JJ4.js +0 -9
- package/dist/chunk-2ZPFJQ3B.js +0 -63
- package/dist/chunk-2ZPFJQ3B.js.map +0 -1
- package/dist/chunk-46JVEGUW.js.map +0 -1
- package/dist/chunk-EBISESAP.js.map +0 -1
- package/dist/chunk-K5G5SFWY.js.map +0 -1
- package/dist/chunk-LVLRMP7V.js.map +0 -1
- package/dist/chunk-N4ZJVATC.js.map +0 -1
- package/dist/chunk-NKRQNER7.js.map +0 -1
- package/dist/chunk-SHVB3EFE.js.map +0 -1
- package/dist/chunk-WZHBRKLN.js.map +0 -1
- package/dist/contribute-T7ENST5N.js.map +0 -1
- package/dist/ignite-YF4Q5RA7.js.map +0 -1
- /package/dist/{ClaudeContextManager-7WX7DUNI.js.map → ClaudeContextManager-6J2EB4QU.js.map} +0 -0
- /package/dist/{ClaudeService-LQLN2GP4.js.map → ClaudeService-O2PB22GX.js.map} +0 -0
- /package/dist/{LoomLauncher-5QU42LOM.js.map → LoomLauncher-5LFM4LXB.js.map} +0 -0
- /package/dist/{PRManager-OCSB2HPT.js.map → PRManager-GB3FOJ2W.js.map} +0 -0
- /package/dist/{ProjectCapabilityDetector-34LU7JJ4.js.map → ProjectCapabilityDetector-S5FLNCFI.js.map} +0 -0
- /package/dist/{PromptTemplateManager-5GNF7FCP.js.map → PromptTemplateManager-C3DK6XZL.js.map} +0 -0
- /package/dist/{chunk-FO2H3YXI.js.map → chunk-6U6VI4SZ.js.map} +0 -0
- /package/dist/{chunk-VXMY22TP.js.map → chunk-7WANFUIK.js.map} +0 -0
- /package/dist/{chunk-SJIMVKK7.js.map → chunk-K7SEEHKO.js.map} +0 -0
- /package/dist/{cleanup-WTZZ74VS.js.map → cleanup-BRUAINKE.js.map} +0 -0
- /package/dist/{dev-server-S5QG5SBZ.js.map → dev-server-4RCDJ5MU.js.map} +0 -0
- /package/dist/{feedback-PDMCKYOT.js.map → feedback-O4Q55SVS.js.map} +0 -0
- /package/dist/{init-XQQGC6DN.js.map → init-UTYRHNJJ.js.map} +0 -0
- /package/dist/{open-AIZG5756.js.map → open-WHVUYGPY.js.map} +0 -0
- /package/dist/{rebase-5EY3Q6XP.js.map → rebase-Y4AS6LQW.js.map} +0 -0
- /package/dist/{run-CMZUYZVG.js.map → run-NCRK5NPR.js.map} +0 -0
- /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-
|
|
5
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
15
|
-
import "./chunk-
|
|
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-
|
|
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:
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
15
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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.
|
|
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",
|
package/dist/chunk-2ZPFJQ3B.js
DELETED
|
@@ -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":[]}
|