@iloom/cli 0.5.5 → 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.
- package/README.md +75 -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/ProjectCapabilityDetector-S5FLNCFI.js +11 -0
- package/dist/{PromptTemplateManager-5GNF7FCP.js → PromptTemplateManager-C3DK6XZL.js} +2 -2
- package/dist/README.md +75 -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-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-SJIMVKK7.js → chunk-K7SEEHKO.js} +2 -2
- package/dist/{chunk-46JVEGUW.js → chunk-PMVWQBWS.js} +13 -13
- package/dist/chunk-PMVWQBWS.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-WZHBRKLN.js → chunk-UB4TFAXJ.js} +36 -7
- package/dist/chunk-UB4TFAXJ.js.map +1 -0
- 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-OU2HFOOG.js} +6 -6
- package/dist/cli.js +94 -56
- package/dist/cli.js.map +1 -1
- package/dist/compile-ULNO5F7Q.js +57 -0
- package/dist/compile-ULNO5F7Q.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-HB34Q5FH.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 +100 -0
- package/dist/prompts/issue-prompt.txt +12 -12
- 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/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/{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-OU2HFOOG.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-HB34Q5FH.js.map} +0 -0
- /package/dist/{open-AIZG5756.js.map → open-WHVUYGPY.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
package/README.md
CHANGED
|
@@ -120,7 +120,7 @@ Each loom is a fully isolated container for your work:
|
|
|
120
120
|
|
|
121
121
|
* **Database Branch:** (Neon support) Schema changes in this loom are isolated—they won't break your main environment or your other active looms.
|
|
122
122
|
|
|
123
|
-
* **Environment Variables:** Each loom has its own environment files (`.env`, `.env.local`, `.env.development`, `.env.development.local`). Uses `development` by default, override with `DOTENV_FLOW_NODE_ENV`.
|
|
123
|
+
* **Environment Variables:** Each loom has its own environment files (`.env`, `.env.local`, `.env.development`, `.env.development.local`). Uses `development` by default, override with `DOTENV_FLOW_NODE_ENV`. See [Secret Storage Limitations](#multi-language-project-support) for frameworks with encrypted credentials.
|
|
124
124
|
|
|
125
125
|
* **Unique Runtime:**
|
|
126
126
|
|
|
@@ -144,6 +144,10 @@ Command Reference
|
|
|
144
144
|
| `il spin` | | Launch Claude inside the current loom with context auto-detected. |
|
|
145
145
|
| `il open` | `run` | Open loom in browser (web) or run your CLI tool. |
|
|
146
146
|
| `il dev-server` | `dev` | Start dev server in foreground for a workspace. |
|
|
147
|
+
| `il build` | | Run the build script for a workspace. |
|
|
148
|
+
| `il lint` | | Run the lint script for a workspace. |
|
|
149
|
+
| `il test` | | Run the test script for a workspace. |
|
|
150
|
+
| `il compile` | `typecheck` | Run the compile or typecheck script for a workspace. |
|
|
147
151
|
| `il add-issue` | `a` | Create and AI-enhance a new issue without starting work yet. |
|
|
148
152
|
| `il init` | `config` | Interactive configuration wizard. |
|
|
149
153
|
| `il feedback` | `f` | Submit bug reports/feedback directly from the CLI. |
|
|
@@ -232,6 +236,73 @@ This example shows how to configure a project-wide default (e.g., GitHub remote)
|
|
|
232
236
|
}
|
|
233
237
|
```
|
|
234
238
|
|
|
239
|
+
### Multi-Language/Framework Project Support
|
|
240
|
+
|
|
241
|
+
iloom supports projects in any programming language through `.iloom/package.iloom.json`. This file defines scripts using raw shell commands instead of npm scripts.
|
|
242
|
+
|
|
243
|
+
**File Location:** `.iloom/package.iloom.json`
|
|
244
|
+
|
|
245
|
+
**Format:**
|
|
246
|
+
```json
|
|
247
|
+
{
|
|
248
|
+
"scripts": {
|
|
249
|
+
"install": "bundle install",
|
|
250
|
+
"build": "cargo build --release",
|
|
251
|
+
"test": "cargo test",
|
|
252
|
+
"dev": "cargo run",
|
|
253
|
+
"lint": "cargo clippy",
|
|
254
|
+
"typecheck": "cargo check"
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Supported Scripts:**
|
|
260
|
+
|
|
261
|
+
| Script | Purpose | When Used |
|
|
262
|
+
|--------|---------|-----------|
|
|
263
|
+
| `install` | Install dependencies | `il start` (loom creation), `il finish` (post-merge) |
|
|
264
|
+
| `build` | Compile/build project | `il build`, `il finish` (CLI projects, post-merge) |
|
|
265
|
+
| `test` | Run test suite | `il test`, `il finish` validation |
|
|
266
|
+
| `dev` | Start dev server | `il dev-server` |
|
|
267
|
+
| `lint` | Run linter | `il lint`, `il finish` validation |
|
|
268
|
+
| `typecheck` | Type checking | `il typecheck`, `il finish` validation |
|
|
269
|
+
| `compile` | Alternative to typecheck | `il compile`, `il finish` validation (preferred over typecheck if both exist) |
|
|
270
|
+
|
|
271
|
+
All scripts are optional. If not defined, that step is skipped.
|
|
272
|
+
|
|
273
|
+
**Language Examples:**
|
|
274
|
+
|
|
275
|
+
| Language | Install | Build | Test | Dev | Lint | Typecheck |
|
|
276
|
+
|----------|---------|-------|------|-----|------|-----------|
|
|
277
|
+
| Rust | `cargo fetch` | `cargo build` | `cargo test` | `cargo run` | `cargo clippy` | `cargo check` |
|
|
278
|
+
| Python (pip) | `pip install -e .` | - | `pytest` | `uvicorn app:app` | `ruff check .` | `mypy .` |
|
|
279
|
+
| Python (poetry) | `poetry install` | - | `pytest` | `uvicorn app:app` | `ruff check .` | `mypy .` |
|
|
280
|
+
| Ruby | `bundle install` | - | `bundle exec rspec` | `rails server` | `bundle exec rubocop` | - |
|
|
281
|
+
| Go | `go mod download` | `go build ./...` | `go test ./...` | `go run .` | `golangci-lint run` | `go vet ./...` |
|
|
282
|
+
|
|
283
|
+
**Precedence Rules:**
|
|
284
|
+
1. `.iloom/package.iloom.json` (if exists) - highest priority
|
|
285
|
+
2. `package.json` (if exists) - fallback for Node.js projects
|
|
286
|
+
|
|
287
|
+
**Key Differences from package.json:**
|
|
288
|
+
- Scripts are raw shell commands, executed directly (not via npm/pnpm)
|
|
289
|
+
- No package manager prefix is added to commands
|
|
290
|
+
- Works with any language's toolchain
|
|
291
|
+
|
|
292
|
+
**Automatic Detection:** When running `il init` on a non-Node.js project, iloom will offer to detect your project's language and generate an appropriate `package.iloom.json`.
|
|
293
|
+
|
|
294
|
+
**→ [Complete Multi-Language Project Guide](docs/multi-language-projects.md)** - Detailed setup instructions, more language examples, and troubleshooting.
|
|
295
|
+
|
|
296
|
+
**Secret Storage Limitations:** iloom manages environment variables through standard `.env` files (via dotenv-flow). The following encrypted/proprietary secret storage formats are **not supported**:
|
|
297
|
+
|
|
298
|
+
| Format | Why Unsupported |
|
|
299
|
+
|--------|-----------------|
|
|
300
|
+
| Rails encrypted credentials (`config/credentials.yml.enc`) | Requires Rails internals + master key |
|
|
301
|
+
| ASP.NET Core User Secrets | Stored outside project at `~/.microsoft/usersecrets/<guid>/` |
|
|
302
|
+
| SOPS/Sealed Secrets | Requires external decryption keys |
|
|
303
|
+
|
|
304
|
+
**Recommendation:** If you want to use database isolation features (or anything else that requires updating env variables), use standard `.env` files for iloom compatibility. For Rails, consider [dotenv-rails](https://github.com/bkeepers/dotenv). For ASP.NET, use a local `.env` file alongside User Secrets.
|
|
305
|
+
|
|
235
306
|
### Copying Gitignored Files to Looms
|
|
236
307
|
|
|
237
308
|
By default, looms only contain files tracked by Git. If you have local files that are gitignored (like SQLite databases, test data, or sensitive configuration), they won't be available in your looms.
|
|
@@ -380,10 +451,10 @@ This is an early-stage product.
|
|
|
380
451
|
**Project Support:**
|
|
381
452
|
|
|
382
453
|
* ✅ **Node.js Web Projects:** First-class support via package.json scripts (dev, test, build).
|
|
383
|
-
|
|
454
|
+
|
|
384
455
|
* ✅ **Node.js CLI Tools:** Full support with isolated binary generation.
|
|
385
|
-
|
|
386
|
-
*
|
|
456
|
+
|
|
457
|
+
* ✅ **Multi-Language Projects:** Python, Rust, Ruby, Go, and other languages via `.iloom/package.iloom.json`.
|
|
387
458
|
|
|
388
459
|
See all [known limitations](https://github.com/iloom-ai/iloom-cli/issues?q=is:issue+is:open+label:known-limitation) on GitHub. If you're feeling left out - you're absolutely right! The best way to complain about something is to fix it. So...
|
|
389
460
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ClaudeContextManager
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-7WANFUIK.js";
|
|
5
|
+
import "./chunk-6U6VI4SZ.js";
|
|
6
|
+
import "./chunk-W6WVRHJ6.js";
|
|
7
7
|
import "./chunk-F6WVM437.js";
|
|
8
8
|
import "./chunk-AEIMYF4P.js";
|
|
9
9
|
import "./chunk-6MLEBAYZ.js";
|
|
@@ -11,4 +11,4 @@ import "./chunk-VT4PDUYT.js";
|
|
|
11
11
|
export {
|
|
12
12
|
ClaudeContextManager
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=ClaudeContextManager-
|
|
14
|
+
//# sourceMappingURL=ClaudeContextManager-6J2EB4QU.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ClaudeService
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-6U6VI4SZ.js";
|
|
5
|
+
import "./chunk-W6WVRHJ6.js";
|
|
6
6
|
import "./chunk-F6WVM437.js";
|
|
7
7
|
import "./chunk-AEIMYF4P.js";
|
|
8
8
|
import "./chunk-6MLEBAYZ.js";
|
|
@@ -10,4 +10,4 @@ import "./chunk-VT4PDUYT.js";
|
|
|
10
10
|
export {
|
|
11
11
|
ClaudeService
|
|
12
12
|
};
|
|
13
|
-
//# sourceMappingURL=ClaudeService-
|
|
13
|
+
//# sourceMappingURL=ClaudeService-O2PB22GX.js.map
|
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
} from "./chunk-O7VL5N6S.js";
|
|
5
5
|
import {
|
|
6
6
|
ClaudeContextManager
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-7WANFUIK.js";
|
|
8
|
+
import "./chunk-6U6VI4SZ.js";
|
|
9
|
+
import "./chunk-W6WVRHJ6.js";
|
|
10
10
|
import {
|
|
11
11
|
getExecutablePath
|
|
12
12
|
} from "./chunk-GYCR2LOU.js";
|
|
@@ -252,4 +252,4 @@ var LoomLauncher = class {
|
|
|
252
252
|
export {
|
|
253
253
|
LoomLauncher
|
|
254
254
|
};
|
|
255
|
-
//# sourceMappingURL=LoomLauncher-
|
|
255
|
+
//# sourceMappingURL=LoomLauncher-5LFM4LXB.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
ProjectCapabilityDetector
|
|
4
|
+
} from "./chunk-ZPSTA5PR.js";
|
|
5
|
+
import "./chunk-BXCPJJYM.js";
|
|
6
|
+
import "./chunk-6MLEBAYZ.js";
|
|
7
|
+
import "./chunk-VT4PDUYT.js";
|
|
8
|
+
export {
|
|
9
|
+
ProjectCapabilityDetector
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=ProjectCapabilityDetector-S5FLNCFI.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
PromptTemplateManager
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-W6WVRHJ6.js";
|
|
5
5
|
import "./chunk-VT4PDUYT.js";
|
|
6
6
|
export {
|
|
7
7
|
PromptTemplateManager
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=PromptTemplateManager-
|
|
9
|
+
//# sourceMappingURL=PromptTemplateManager-C3DK6XZL.js.map
|
package/dist/README.md
CHANGED
|
@@ -120,7 +120,7 @@ Each loom is a fully isolated container for your work:
|
|
|
120
120
|
|
|
121
121
|
* **Database Branch:** (Neon support) Schema changes in this loom are isolated—they won't break your main environment or your other active looms.
|
|
122
122
|
|
|
123
|
-
* **Environment Variables:** Each loom has its own environment files (`.env`, `.env.local`, `.env.development`, `.env.development.local`). Uses `development` by default, override with `DOTENV_FLOW_NODE_ENV`.
|
|
123
|
+
* **Environment Variables:** Each loom has its own environment files (`.env`, `.env.local`, `.env.development`, `.env.development.local`). Uses `development` by default, override with `DOTENV_FLOW_NODE_ENV`. See [Secret Storage Limitations](#multi-language-project-support) for frameworks with encrypted credentials.
|
|
124
124
|
|
|
125
125
|
* **Unique Runtime:**
|
|
126
126
|
|
|
@@ -144,6 +144,10 @@ Command Reference
|
|
|
144
144
|
| `il spin` | | Launch Claude inside the current loom with context auto-detected. |
|
|
145
145
|
| `il open` | `run` | Open loom in browser (web) or run your CLI tool. |
|
|
146
146
|
| `il dev-server` | `dev` | Start dev server in foreground for a workspace. |
|
|
147
|
+
| `il build` | | Run the build script for a workspace. |
|
|
148
|
+
| `il lint` | | Run the lint script for a workspace. |
|
|
149
|
+
| `il test` | | Run the test script for a workspace. |
|
|
150
|
+
| `il compile` | `typecheck` | Run the compile or typecheck script for a workspace. |
|
|
147
151
|
| `il add-issue` | `a` | Create and AI-enhance a new issue without starting work yet. |
|
|
148
152
|
| `il init` | `config` | Interactive configuration wizard. |
|
|
149
153
|
| `il feedback` | `f` | Submit bug reports/feedback directly from the CLI. |
|
|
@@ -232,6 +236,73 @@ This example shows how to configure a project-wide default (e.g., GitHub remote)
|
|
|
232
236
|
}
|
|
233
237
|
```
|
|
234
238
|
|
|
239
|
+
### Multi-Language/Framework Project Support
|
|
240
|
+
|
|
241
|
+
iloom supports projects in any programming language through `.iloom/package.iloom.json`. This file defines scripts using raw shell commands instead of npm scripts.
|
|
242
|
+
|
|
243
|
+
**File Location:** `.iloom/package.iloom.json`
|
|
244
|
+
|
|
245
|
+
**Format:**
|
|
246
|
+
```json
|
|
247
|
+
{
|
|
248
|
+
"scripts": {
|
|
249
|
+
"install": "bundle install",
|
|
250
|
+
"build": "cargo build --release",
|
|
251
|
+
"test": "cargo test",
|
|
252
|
+
"dev": "cargo run",
|
|
253
|
+
"lint": "cargo clippy",
|
|
254
|
+
"typecheck": "cargo check"
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Supported Scripts:**
|
|
260
|
+
|
|
261
|
+
| Script | Purpose | When Used |
|
|
262
|
+
|--------|---------|-----------|
|
|
263
|
+
| `install` | Install dependencies | `il start` (loom creation), `il finish` (post-merge) |
|
|
264
|
+
| `build` | Compile/build project | `il build`, `il finish` (CLI projects, post-merge) |
|
|
265
|
+
| `test` | Run test suite | `il test`, `il finish` validation |
|
|
266
|
+
| `dev` | Start dev server | `il dev-server` |
|
|
267
|
+
| `lint` | Run linter | `il lint`, `il finish` validation |
|
|
268
|
+
| `typecheck` | Type checking | `il typecheck`, `il finish` validation |
|
|
269
|
+
| `compile` | Alternative to typecheck | `il compile`, `il finish` validation (preferred over typecheck if both exist) |
|
|
270
|
+
|
|
271
|
+
All scripts are optional. If not defined, that step is skipped.
|
|
272
|
+
|
|
273
|
+
**Language Examples:**
|
|
274
|
+
|
|
275
|
+
| Language | Install | Build | Test | Dev | Lint | Typecheck |
|
|
276
|
+
|----------|---------|-------|------|-----|------|-----------|
|
|
277
|
+
| Rust | `cargo fetch` | `cargo build` | `cargo test` | `cargo run` | `cargo clippy` | `cargo check` |
|
|
278
|
+
| Python (pip) | `pip install -e .` | - | `pytest` | `uvicorn app:app` | `ruff check .` | `mypy .` |
|
|
279
|
+
| Python (poetry) | `poetry install` | - | `pytest` | `uvicorn app:app` | `ruff check .` | `mypy .` |
|
|
280
|
+
| Ruby | `bundle install` | - | `bundle exec rspec` | `rails server` | `bundle exec rubocop` | - |
|
|
281
|
+
| Go | `go mod download` | `go build ./...` | `go test ./...` | `go run .` | `golangci-lint run` | `go vet ./...` |
|
|
282
|
+
|
|
283
|
+
**Precedence Rules:**
|
|
284
|
+
1. `.iloom/package.iloom.json` (if exists) - highest priority
|
|
285
|
+
2. `package.json` (if exists) - fallback for Node.js projects
|
|
286
|
+
|
|
287
|
+
**Key Differences from package.json:**
|
|
288
|
+
- Scripts are raw shell commands, executed directly (not via npm/pnpm)
|
|
289
|
+
- No package manager prefix is added to commands
|
|
290
|
+
- Works with any language's toolchain
|
|
291
|
+
|
|
292
|
+
**Automatic Detection:** When running `il init` on a non-Node.js project, iloom will offer to detect your project's language and generate an appropriate `package.iloom.json`.
|
|
293
|
+
|
|
294
|
+
**→ [Complete Multi-Language Project Guide](docs/multi-language-projects.md)** - Detailed setup instructions, more language examples, and troubleshooting.
|
|
295
|
+
|
|
296
|
+
**Secret Storage Limitations:** iloom manages environment variables through standard `.env` files (via dotenv-flow). The following encrypted/proprietary secret storage formats are **not supported**:
|
|
297
|
+
|
|
298
|
+
| Format | Why Unsupported |
|
|
299
|
+
|--------|-----------------|
|
|
300
|
+
| Rails encrypted credentials (`config/credentials.yml.enc`) | Requires Rails internals + master key |
|
|
301
|
+
| ASP.NET Core User Secrets | Stored outside project at `~/.microsoft/usersecrets/<guid>/` |
|
|
302
|
+
| SOPS/Sealed Secrets | Requires external decryption keys |
|
|
303
|
+
|
|
304
|
+
**Recommendation:** If you want to use database isolation features (or anything else that requires updating env variables), use standard `.env` files for iloom compatibility. For Rails, consider [dotenv-rails](https://github.com/bkeepers/dotenv). For ASP.NET, use a local `.env` file alongside User Secrets.
|
|
305
|
+
|
|
235
306
|
### Copying Gitignored Files to Looms
|
|
236
307
|
|
|
237
308
|
By default, looms only contain files tracked by Git. If you have local files that are gitignored (like SQLite databases, test data, or sensitive configuration), they won't be available in your looms.
|
|
@@ -380,10 +451,10 @@ This is an early-stage product.
|
|
|
380
451
|
**Project Support:**
|
|
381
452
|
|
|
382
453
|
* ✅ **Node.js Web Projects:** First-class support via package.json scripts (dev, test, build).
|
|
383
|
-
|
|
454
|
+
|
|
384
455
|
* ✅ **Node.js CLI Tools:** Full support with isolated binary generation.
|
|
385
|
-
|
|
386
|
-
*
|
|
456
|
+
|
|
457
|
+
* ✅ **Multi-Language Projects:** Python, Rust, Ruby, Go, and other languages via `.iloom/package.iloom.json`.
|
|
387
458
|
|
|
388
459
|
See all [known limitations](https://github.com/iloom-ai/iloom-cli/issues?q=is:issue+is:open+label:known-limitation) on GitHub. If you're feeling left out - you're absolutely right! The best way to complain about something is to fix it. So...
|
|
389
460
|
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: iloom-framework-detector
|
|
3
|
+
description: Use this agent to detect a project's language and framework, then generate appropriate build/test/dev scripts for non-Node.js projects. The agent creates `.iloom/package.iloom.json` with shell commands tailored to the detected stack. Use this for Python, Rust, Ruby, Go, and other non-Node.js projects that don't have a package.json.
|
|
4
|
+
tools: Bash, Glob, Grep, Read, Write
|
|
5
|
+
color: cyan
|
|
6
|
+
model: sonnet
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are Claude, a framework detection specialist. Your task is to analyze a project's structure and generate appropriate install/build/test/dev scripts for iloom.
|
|
10
|
+
|
|
11
|
+
**Your Core Mission**: Detect the project's programming language and framework, then create `.iloom/package.iloom.json` with appropriate shell commands for install, build, test, and development workflows.
|
|
12
|
+
|
|
13
|
+
**Key Distinction:**
|
|
14
|
+
- `install` - Installs dependencies (runs during loom creation and post-merge)
|
|
15
|
+
- `build` - Compiles/builds the project (for compiled languages or asset compilation)
|
|
16
|
+
|
|
17
|
+
## Core Workflow
|
|
18
|
+
|
|
19
|
+
### Step 1: Scan for Language Markers
|
|
20
|
+
|
|
21
|
+
Examine the project root for language-specific files:
|
|
22
|
+
|
|
23
|
+
| Marker File | Language | Package Manager |
|
|
24
|
+
|-------------|----------|-----------------|
|
|
25
|
+
| `Cargo.toml` | Rust | cargo |
|
|
26
|
+
| `requirements.txt`, `pyproject.toml`, `setup.py` | Python | pip/poetry |
|
|
27
|
+
| `Gemfile` | Ruby | bundler |
|
|
28
|
+
| `go.mod` | Go | go |
|
|
29
|
+
| `pom.xml`, `build.gradle`, `build.gradle.kts` | Java/Kotlin | maven/gradle |
|
|
30
|
+
| `Package.swift` | Swift | swift |
|
|
31
|
+
| `mix.exs` | Elixir | mix |
|
|
32
|
+
| `*.csproj`, `*.sln` | C#/.NET | dotnet |
|
|
33
|
+
| `Makefile` | C/C++/Generic | make |
|
|
34
|
+
| `CMakeLists.txt` | C/C++ | cmake |
|
|
35
|
+
|
|
36
|
+
Use the `Glob` tool to check for these files:
|
|
37
|
+
```
|
|
38
|
+
Glob pattern: "{Cargo.toml,requirements.txt,pyproject.toml,setup.py,Gemfile,go.mod,pom.xml,build.gradle*,Package.swift,mix.exs,*.csproj,*.sln,Makefile,CMakeLists.txt}"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Step 2: Detect Framework (if applicable)
|
|
42
|
+
|
|
43
|
+
For each detected language, look for framework-specific indicators:
|
|
44
|
+
|
|
45
|
+
**Python:**
|
|
46
|
+
- `manage.py` + `settings.py` = Django
|
|
47
|
+
- `app.py` + `flask` in requirements = Flask
|
|
48
|
+
- `main.py` + `fastapi` in requirements = FastAPI
|
|
49
|
+
- `pyproject.toml` with `[tool.poetry]` = Poetry project
|
|
50
|
+
|
|
51
|
+
**Ruby:**
|
|
52
|
+
- `config/application.rb` = Rails
|
|
53
|
+
- `sinatra` in Gemfile = Sinatra
|
|
54
|
+
- `spec/` directory = RSpec testing
|
|
55
|
+
|
|
56
|
+
**Rust:**
|
|
57
|
+
- `Rocket.toml` = Rocket web framework
|
|
58
|
+
- `actix-web` in Cargo.toml = Actix
|
|
59
|
+
- `warp` in Cargo.toml = Warp
|
|
60
|
+
|
|
61
|
+
**Go:**
|
|
62
|
+
- `gin-gonic/gin` in go.mod = Gin framework
|
|
63
|
+
- `gorilla/mux` in go.mod = Gorilla Mux
|
|
64
|
+
- `fiber` in go.mod = Fiber
|
|
65
|
+
|
|
66
|
+
### Step 3: Generate package.iloom.json
|
|
67
|
+
|
|
68
|
+
Create `.iloom/package.iloom.json` with appropriate scripts and capabilities based on detection:
|
|
69
|
+
|
|
70
|
+
**Capabilities Detection:**
|
|
71
|
+
- `"cli"` - Include if project has CLI components (e.g., `[[bin]]` in Cargo.toml, CLI frameworks like click/typer/clap)
|
|
72
|
+
- `"web"` - Include if project has web components (e.g., Flask/Django/FastAPI/Rails/Actix/Rocket)
|
|
73
|
+
|
|
74
|
+
**Common Patterns by Language:**
|
|
75
|
+
|
|
76
|
+
#### Rust CLI
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"capabilities": ["cli"],
|
|
80
|
+
"scripts": {
|
|
81
|
+
"install": "cargo fetch",
|
|
82
|
+
"build": "cargo build --release",
|
|
83
|
+
"test": "cargo test",
|
|
84
|
+
"dev": "cargo run"
|
|
85
|
+
},
|
|
86
|
+
"_metadata": {
|
|
87
|
+
"detectedLanguage": "rust",
|
|
88
|
+
"generatedBy": "iloom-framework-detector"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### Rust Web (Actix/Rocket/Axum)
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"capabilities": ["web"],
|
|
97
|
+
"scripts": {
|
|
98
|
+
"install": "cargo fetch",
|
|
99
|
+
"build": "cargo build --release",
|
|
100
|
+
"test": "cargo test",
|
|
101
|
+
"dev": "cargo run"
|
|
102
|
+
},
|
|
103
|
+
"_metadata": {
|
|
104
|
+
"detectedLanguage": "rust",
|
|
105
|
+
"detectedFramework": "actix-web",
|
|
106
|
+
"generatedBy": "iloom-framework-detector"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### Python CLI (with pip)
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"capabilities": ["cli"],
|
|
115
|
+
"scripts": {
|
|
116
|
+
"install": "python -m pip install -e .",
|
|
117
|
+
"test": "pytest",
|
|
118
|
+
"dev": "python -m <module_name>"
|
|
119
|
+
},
|
|
120
|
+
"_metadata": {
|
|
121
|
+
"detectedLanguage": "python",
|
|
122
|
+
"detectedPackageManager": "pip",
|
|
123
|
+
"generatedBy": "iloom-framework-detector"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### Python CLI (with poetry)
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"capabilities": ["cli"],
|
|
132
|
+
"scripts": {
|
|
133
|
+
"install": "poetry install",
|
|
134
|
+
"test": "poetry run pytest",
|
|
135
|
+
"dev": "poetry run python -m <module_name>"
|
|
136
|
+
},
|
|
137
|
+
"_metadata": {
|
|
138
|
+
"detectedLanguage": "python",
|
|
139
|
+
"detectedPackageManager": "poetry",
|
|
140
|
+
"generatedBy": "iloom-framework-detector"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### Python (Django)
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"capabilities": ["web"],
|
|
149
|
+
"scripts": {
|
|
150
|
+
"install": "python -m pip install -r requirements.txt",
|
|
151
|
+
"test": "python manage.py test",
|
|
152
|
+
"dev": "python manage.py runserver"
|
|
153
|
+
},
|
|
154
|
+
"_metadata": {
|
|
155
|
+
"detectedLanguage": "python",
|
|
156
|
+
"detectedFramework": "django",
|
|
157
|
+
"generatedBy": "iloom-framework-detector"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
#### Python (Flask/FastAPI)
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"capabilities": ["web"],
|
|
166
|
+
"scripts": {
|
|
167
|
+
"install": "python -m pip install -r requirements.txt",
|
|
168
|
+
"test": "pytest",
|
|
169
|
+
"dev": "flask run"
|
|
170
|
+
},
|
|
171
|
+
"_metadata": {
|
|
172
|
+
"detectedLanguage": "python",
|
|
173
|
+
"detectedFramework": "flask",
|
|
174
|
+
"generatedBy": "iloom-framework-detector"
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
#### Ruby (with Bundler)
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"capabilities": ["cli"],
|
|
183
|
+
"scripts": {
|
|
184
|
+
"install": "bundle install",
|
|
185
|
+
"test": "bundle exec rspec",
|
|
186
|
+
"dev": "bundle exec ruby app.rb"
|
|
187
|
+
},
|
|
188
|
+
"_metadata": {
|
|
189
|
+
"detectedLanguage": "ruby",
|
|
190
|
+
"generatedBy": "iloom-framework-detector"
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
#### Ruby (Rails)
|
|
196
|
+
```json
|
|
197
|
+
{
|
|
198
|
+
"capabilities": ["web"],
|
|
199
|
+
"scripts": {
|
|
200
|
+
"install": "bundle install",
|
|
201
|
+
"build": "bundle exec rails assets:precompile",
|
|
202
|
+
"test": "bundle exec rails test",
|
|
203
|
+
"dev": "bundle exec rails server"
|
|
204
|
+
},
|
|
205
|
+
"_metadata": {
|
|
206
|
+
"detectedLanguage": "ruby",
|
|
207
|
+
"detectedFramework": "rails",
|
|
208
|
+
"generatedBy": "iloom-framework-detector"
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
#### Go CLI
|
|
214
|
+
```json
|
|
215
|
+
{
|
|
216
|
+
"capabilities": ["cli"],
|
|
217
|
+
"scripts": {
|
|
218
|
+
"install": "go mod download",
|
|
219
|
+
"build": "go build ./...",
|
|
220
|
+
"test": "go test ./...",
|
|
221
|
+
"dev": "go run ."
|
|
222
|
+
},
|
|
223
|
+
"_metadata": {
|
|
224
|
+
"detectedLanguage": "go",
|
|
225
|
+
"generatedBy": "iloom-framework-detector"
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
#### Go Web (Gin/Echo/Fiber)
|
|
231
|
+
```json
|
|
232
|
+
{
|
|
233
|
+
"capabilities": ["web"],
|
|
234
|
+
"scripts": {
|
|
235
|
+
"install": "go mod download",
|
|
236
|
+
"build": "go build ./...",
|
|
237
|
+
"test": "go test ./...",
|
|
238
|
+
"dev": "go run ."
|
|
239
|
+
},
|
|
240
|
+
"_metadata": {
|
|
241
|
+
"detectedLanguage": "go",
|
|
242
|
+
"detectedFramework": "gin",
|
|
243
|
+
"generatedBy": "iloom-framework-detector"
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
#### Java (Maven)
|
|
249
|
+
```json
|
|
250
|
+
{
|
|
251
|
+
"capabilities": ["web"],
|
|
252
|
+
"scripts": {
|
|
253
|
+
"install": "mvn dependency:resolve",
|
|
254
|
+
"build": "mvn package",
|
|
255
|
+
"test": "mvn test",
|
|
256
|
+
"dev": "mvn spring-boot:run"
|
|
257
|
+
},
|
|
258
|
+
"_metadata": {
|
|
259
|
+
"detectedLanguage": "java",
|
|
260
|
+
"detectedBuildTool": "maven",
|
|
261
|
+
"generatedBy": "iloom-framework-detector"
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
#### Java (Gradle)
|
|
267
|
+
```json
|
|
268
|
+
{
|
|
269
|
+
"capabilities": ["web"],
|
|
270
|
+
"scripts": {
|
|
271
|
+
"install": "./gradlew dependencies",
|
|
272
|
+
"build": "./gradlew build",
|
|
273
|
+
"test": "./gradlew test",
|
|
274
|
+
"dev": "./gradlew bootRun"
|
|
275
|
+
},
|
|
276
|
+
"_metadata": {
|
|
277
|
+
"detectedLanguage": "java",
|
|
278
|
+
"detectedBuildTool": "gradle",
|
|
279
|
+
"generatedBy": "iloom-framework-detector"
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
#### Library (no CLI or web)
|
|
285
|
+
```json
|
|
286
|
+
{
|
|
287
|
+
"capabilities": [],
|
|
288
|
+
"scripts": {
|
|
289
|
+
"install": "cargo fetch",
|
|
290
|
+
"build": "cargo build",
|
|
291
|
+
"test": "cargo test"
|
|
292
|
+
},
|
|
293
|
+
"_metadata": {
|
|
294
|
+
"detectedLanguage": "rust",
|
|
295
|
+
"generatedBy": "iloom-framework-detector"
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Step 4: Write the File
|
|
301
|
+
|
|
302
|
+
1. Read `.iloom/package.iloom.json` first to check if it already exists
|
|
303
|
+
2. **If the file exists:**
|
|
304
|
+
- Compare existing configuration with detected configuration
|
|
305
|
+
- Preserve existing scripts (user may have customized them)
|
|
306
|
+
- Only add missing scripts that were detected
|
|
307
|
+
- Preserve existing capabilities, add any missing ones
|
|
308
|
+
- Preserve any other existing fields (like `_metadata`)
|
|
309
|
+
3. **If the file does not exist:**
|
|
310
|
+
- Create the full detected configuration
|
|
311
|
+
4. Ensure `.iloom/` directory exists
|
|
312
|
+
5. Write the merged/new JSON to `.iloom/package.iloom.json`
|
|
313
|
+
6. Report what was detected and what changes were made (if any)
|
|
314
|
+
|
|
315
|
+
## Output Format
|
|
316
|
+
|
|
317
|
+
After creating the file, provide a summary:
|
|
318
|
+
|
|
319
|
+
```
|
|
320
|
+
Framework Detection Complete
|
|
321
|
+
|
|
322
|
+
Detected:
|
|
323
|
+
- Language: [language]
|
|
324
|
+
- Framework: [framework or "None detected"]
|
|
325
|
+
- Package Manager: [package manager]
|
|
326
|
+
- Capabilities: [cli, web, or none]
|
|
327
|
+
|
|
328
|
+
Created: .iloom/package.iloom.json
|
|
329
|
+
|
|
330
|
+
Configuration:
|
|
331
|
+
- capabilities: [list of detected capabilities]
|
|
332
|
+
- install: [command]
|
|
333
|
+
- build: [command] (if applicable)
|
|
334
|
+
- test: [command]
|
|
335
|
+
- dev: [command]
|
|
336
|
+
|
|
337
|
+
You can customize these settings by editing .iloom/package.iloom.json.
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
## Error Handling
|
|
341
|
+
|
|
342
|
+
**If no language markers are found:**
|
|
343
|
+
- Ask the user what language/framework they're using
|
|
344
|
+
- Provide a template they can fill in manually
|
|
345
|
+
|
|
346
|
+
**If multiple languages are detected:**
|
|
347
|
+
- Report all detected languages
|
|
348
|
+
- Ask the user which is the primary language
|
|
349
|
+
- Generate scripts for the primary language
|
|
350
|
+
|
|
351
|
+
## Behavioral Constraints
|
|
352
|
+
|
|
353
|
+
1. **Only analyze project structure** - Don't read or execute code
|
|
354
|
+
2. **Keep scripts simple** - Use standard commands that work out of the box
|
|
355
|
+
3. **Don't assume** - If unsure, ask the user for clarification
|
|
356
|
+
4. **Be conservative** - Use widely-adopted conventions and tools
|
|
357
|
+
5. **Document choices** - Include _metadata so users know what was detected
|
|
358
|
+
|
|
359
|
+
## What to Avoid
|
|
360
|
+
|
|
361
|
+
DO NOT:
|
|
362
|
+
- Execute any build/test/dev commands
|
|
363
|
+
- Install dependencies
|
|
364
|
+
- Modify any files other than `.iloom/package.iloom.json`
|
|
365
|
+
- Make assumptions about project-specific configuration
|
|
366
|
+
- Add scripts that require additional setup not evident from the project
|
|
@@ -603,16 +603,6 @@ When planning frontend changes:
|
|
|
603
603
|
- Look for alternative existing classes first
|
|
604
604
|
- Create new classes or element-specific overrides when needed
|
|
605
605
|
|
|
606
|
-
### Payload 3.0 CMS Data Migrations
|
|
607
|
-
See context7 for more information. Key points:
|
|
608
|
-
* Custom migrations (data migrations): Create using `pnpm payload migrate:create --force-accept-warning`, then edit to implement up()/down()
|
|
609
|
-
* IMPORTANT: Cross-reference tables/columns with most recent *.json file in migrations folder (contains current schema)
|
|
610
|
-
* Schema migrations (adding/removing fields): Use `pnpm payload migrate:create --skip-empty`
|
|
611
|
-
* Multiple phases: Create separate migrations after each phase (e.g., add fields, then remove fields)
|
|
612
|
-
* Separate data migrations from schema migrations
|
|
613
|
-
* Provide slug string argument for descriptive filenames
|
|
614
|
-
* Do not plan to run migrations - deploy process handles this automatically
|
|
615
|
-
|
|
616
606
|
## Documentation Standards
|
|
617
607
|
|
|
618
608
|
**Code Output Formatting:**
|