@loompad/cli 1.1.2 → 1.2.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/CHANGELOG.md +61 -0
- package/README.md +31 -10
- package/dist/adapters/antigravity-cli.d.ts +2 -0
- package/dist/adapters/antigravity-cli.js +27 -4
- package/dist/adapters/antigravity-cli.js.map +1 -1
- package/dist/adapters/model.js +1 -1
- package/dist/adapters/model.js.map +1 -1
- package/dist/adapters/opencode.d.ts +4 -0
- package/dist/adapters/opencode.js +18 -0
- package/dist/adapters/opencode.js.map +1 -1
- package/dist/cli/doctor.d.ts +38 -1
- package/dist/cli/doctor.js +157 -3
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.js +357 -20
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui.js +11 -7
- package/dist/cli/ui.js.map +1 -1
- package/dist/core/auto-policy.d.ts +46 -0
- package/dist/core/auto-policy.js +181 -0
- package/dist/core/auto-policy.js.map +1 -0
- package/dist/core/council.d.ts +55 -0
- package/dist/core/council.js +73 -0
- package/dist/core/council.js.map +1 -0
- package/dist/core/crew-protocol.js +4 -1
- package/dist/core/crew-protocol.js.map +1 -1
- package/dist/core/crew.d.ts +13 -1
- package/dist/core/crew.js +40 -6
- package/dist/core/crew.js.map +1 -1
- package/dist/core/digest.d.ts +2 -0
- package/dist/core/digest.js +9 -0
- package/dist/core/digest.js.map +1 -1
- package/dist/core/loops.js +22 -2
- package/dist/core/loops.js.map +1 -1
- package/dist/core/orchestra.d.ts +16 -0
- package/dist/core/orchestra.js +45 -2
- package/dist/core/orchestra.js.map +1 -1
- package/dist/core/permissions.js +2 -2
- package/dist/core/permissions.js.map +1 -1
- package/dist/core/prices.d.ts +66 -0
- package/dist/core/prices.js +109 -0
- package/dist/core/prices.js.map +1 -0
- package/dist/core/proof.d.ts +13 -1
- package/dist/core/proof.js +89 -17
- package/dist/core/proof.js.map +1 -1
- package/dist/core/providers.d.ts +13 -0
- package/dist/core/providers.js +17 -0
- package/dist/core/providers.js.map +1 -1
- package/dist/core/replay.js +14 -0
- package/dist/core/replay.js.map +1 -1
- package/dist/core/review.d.ts +60 -0
- package/dist/core/review.js +121 -0
- package/dist/core/review.js.map +1 -0
- package/dist/core/routes.js +14 -0
- package/dist/core/routes.js.map +1 -1
- package/dist/core/setup.d.ts +27 -0
- package/dist/core/setup.js +39 -7
- package/dist/core/setup.js.map +1 -1
- package/dist/core/shield.js +7 -3
- package/dist/core/shield.js.map +1 -1
- package/dist/core/shift.d.ts +2 -0
- package/dist/core/shift.js +14 -2
- package/dist/core/shift.js.map +1 -1
- package/dist/core/turn-wait.d.ts +20 -0
- package/dist/core/turn-wait.js +39 -0
- package/dist/core/turn-wait.js.map +1 -0
- package/dist/core/usage.d.ts +7 -1
- package/dist/core/usage.js +11 -3
- package/dist/core/usage.js.map +1 -1
- package/dist/daemon/client.d.ts +60 -1
- package/dist/daemon/client.js +40 -1
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/council.d.ts +98 -0
- package/dist/daemon/council.js +254 -0
- package/dist/daemon/council.js.map +1 -0
- package/dist/daemon/proof.d.ts +6 -0
- package/dist/daemon/proof.js +32 -9
- package/dist/daemon/proof.js.map +1 -1
- package/dist/daemon/push.js +7 -0
- package/dist/daemon/push.js.map +1 -1
- package/dist/daemon/review.d.ts +95 -0
- package/dist/daemon/review.js +154 -0
- package/dist/daemon/review.js.map +1 -0
- package/dist/daemon/routes/council.d.ts +4 -0
- package/dist/daemon/routes/council.js +29 -0
- package/dist/daemon/routes/council.js.map +1 -0
- package/dist/daemon/routes/crews.js +2 -0
- package/dist/daemon/routes/crews.js.map +1 -1
- package/dist/daemon/routes/messages.js +8 -2
- package/dist/daemon/routes/messages.js.map +1 -1
- package/dist/daemon/routes/review.d.ts +4 -0
- package/dist/daemon/routes/review.js +40 -0
- package/dist/daemon/routes/review.js.map +1 -0
- package/dist/daemon/routes/routing.js +2 -1
- package/dist/daemon/routes/routing.js.map +1 -1
- package/dist/daemon/routes/setup.d.ts +2 -1
- package/dist/daemon/routes/setup.js +22 -6
- package/dist/daemon/routes/setup.js.map +1 -1
- package/dist/daemon/runtime/accounting.d.ts +6 -0
- package/dist/daemon/runtime/accounting.js +37 -1
- package/dist/daemon/runtime/accounting.js.map +1 -1
- package/dist/daemon/runtime/briefings.d.ts +8 -3
- package/dist/daemon/runtime/briefings.js +26 -14
- package/dist/daemon/runtime/briefings.js.map +1 -1
- package/dist/daemon/runtime/queue.d.ts +7 -0
- package/dist/daemon/runtime/queue.js +13 -1
- package/dist/daemon/runtime/queue.js.map +1 -1
- package/dist/daemon/runtime/relay.d.ts +2 -0
- package/dist/daemon/runtime/relay.js +7 -0
- package/dist/daemon/runtime/relay.js.map +1 -1
- package/dist/daemon/runtime/turns.d.ts +2 -0
- package/dist/daemon/runtime/turns.js +1 -0
- package/dist/daemon/runtime/turns.js.map +1 -1
- package/dist/daemon/runtime-support.js +1 -1
- package/dist/daemon/runtime-support.js.map +1 -1
- package/dist/daemon/runtime.d.ts +65 -3
- package/dist/daemon/runtime.js +238 -5
- package/dist/daemon/runtime.js.map +1 -1
- package/dist/daemon/server.js +5 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/shift.js +1 -1
- package/dist/daemon/shift.js.map +1 -1
- package/dist/providers/agent.js +6 -0
- package/dist/providers/agent.js.map +1 -1
- package/dist/providers/claude/adapter.d.ts +3 -0
- package/dist/providers/claude/adapter.js +20 -1
- package/dist/providers/claude/adapter.js.map +1 -1
- package/dist/types.d.ts +31 -1
- package/dist/types.js.map +1 -1
- package/dist/web/app.css +51 -0
- package/dist/web/app.js +172 -18
- package/dist/web/app.js.map +3 -3
- package/docs/release-notes/v1.2.0.md +48 -0
- package/docs/release-notes/v1.2.1.md +40 -0
- package/package.json +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
## Loom 1.2.0: a council of agents, and fixes from a real field test
|
|
2
|
+
|
|
3
|
+
Someone took Loom 1.1 through a full plan → review → build → proof run on a real project, with Claude Code, Codex, Antigravity and an OpenRouter model. They filed eighteen issues. 1.2 fixes all of them and adds the workflow they asked for: several agents checking each other's work, with only one of them writing.
|
|
4
|
+
|
|
5
|
+
### Council: plan, backtest, build, prove, forward-test, fix
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
loom council "add rate limiting to the API" --planner claude-code --reviewers codex,antigravity
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
One planner, up to four reviewers, one goal, one chat:
|
|
12
|
+
1. **Plan.** The planner plans and changes nothing.
|
|
13
|
+
2. **Backtest.** The reviewers test the plan in parallel, read-only.
|
|
14
|
+
3. **Decide.** The planner accepts or rejects each finding, and each answer is recorded as a decision.
|
|
15
|
+
4. **Build.** Only the planner writes code.
|
|
16
|
+
5. **Prove.** Proof re-runs the tests in a clean checkout.
|
|
17
|
+
6. **Forward-test.** The reviewers read the diff.
|
|
18
|
+
7. **Fix.** The planner fixes what it agrees with, and Proof runs again.
|
|
19
|
+
|
|
20
|
+
In the app, one card fills in stage by stage, with a Stop button. Your phone hears when it ends.
|
|
21
|
+
|
|
22
|
+
### Review: several agents, read-only, nobody takes the baton
|
|
23
|
+
|
|
24
|
+
`loom review codex antigravity` (the uncommitted changes by default, or `--file`, or `--text`):
|
|
25
|
+
- Each reviewer reads in its own plan mode where it has one, and never takes the baton, so there's no "hand off to codex?" prompt for a read.
|
|
26
|
+
- Their findings land in one list, worst first. Two reviewers on the same line show as one finding they **agree** on.
|
|
27
|
+
- **Accept** a finding and it becomes a project decision every agent is briefed with. **Reject** it and it's marked.
|
|
28
|
+
- A reviewer that changes files anyway is flagged.
|
|
29
|
+
|
|
30
|
+
### Scripting
|
|
31
|
+
|
|
32
|
+
- `loom send --wait [--json]` blocks until the turn ends and prints the reply and cost. Exit codes: 0 done, 1 failed, 2 the agent asked a question, 124 timed out.
|
|
33
|
+
- `loom doctor` now compares what the **daemon** sees with your shell: an agent missing from its PATH (naming the folder), a sign-in, or a key exported only in a terminal. It also checks that each provider answers, and suggests `pool:free` when a pinned free model keeps getting 429/503.
|
|
34
|
+
- `loom costs` and the Usage view show **"~$x est."** for agents that report tokens but no price (Codex, Grok): their tokens at the model's API price. The estimate is never added to the real total or to a budget.
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- **Claude's Auto mode runs your project's commands.** It runs the test command, `cd <project> && …`, paths with spaces, and folders you list under `readPaths`. It refuses paths outside the project and commands that can't be undone, and every refusal says which rule fired and how to allow it. The permission badge says what each mode actually does.
|
|
39
|
+
- **A failed run is reported as failed.** An Antigravity turn that timed out or returned nothing was reported as success, and so was a failed subtask.
|
|
40
|
+
- **Proof leaves a plan alone.** It doesn't "check" a plan-only turn, and it doesn't count a command the agent was refused as one that ran.
|
|
41
|
+
- **Memory is credited only to a reply from a successful turn.**
|
|
42
|
+
- **Signed-out agents show as signed out** in `loom init`, the roster and Desktop, including agents learned from their "not logged in" errors.
|
|
43
|
+
- `loom status` says ◐ working. A model agent without write access shows as read-only.
|
|
44
|
+
- `loom providers` shows what the daemon sees. A key in your shell that the desktop app's daemon can't see is called out.
|
|
45
|
+
- `loom ask` checks provider keys before sending anything.
|
|
46
|
+
- `loom init` offers to add `.loom/` to `.gitignore`.
|
|
47
|
+
- The app is called **Loom Desktop** everywhere: Spotlight, the menu bar and the window.
|
|
48
|
+
- A spawned subtask's reply lands in the chat it was asked in.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
## Loom 1.2.1: what two real field tests found
|
|
2
|
+
|
|
3
|
+
Loom 1.2 was put through two tests. The first was a full `loom council` on a real project: 23 tests became 52, and only the planner touched a file. The second ran six projects at once (a council, an orchestra, a route, a night shift, a crew and reviews), and the daemon never fell over. Together they found 25 things to fix.
|
|
4
|
+
|
|
5
|
+
### Proof tells "couldn't run" from "failed"
|
|
6
|
+
- **Which command:** Proof now re-runs the test command the agent itself ran and passed. Before, it guessed `python -m pytest`, got *command not found*, and reported "the tests fail" for a change that passed 52/52.
|
|
7
|
+
- **Just the test part:** it keeps only the test step of that command. `pytest | tail -3` always reports tail's success, so re-running it whole would pass failing tests.
|
|
8
|
+
- **Python projects:** a guessed pytest command uses the project's `.venv`, or `python3`.
|
|
9
|
+
- **If it can't start:** a test command that can't run at all is **unverified**, and Proof says how to set `proof.testCommand`.
|
|
10
|
+
- **On the council card:** Prove shows ✓ only when the tests really passed, ✗ when they didn't, **?** when unverified.
|
|
11
|
+
|
|
12
|
+
### The council keeps its word
|
|
13
|
+
- The planner's decisions are stored exactly as written. Underscores were being stripped, so `tests/test_reach.py` reached project memory as "testreach.py".
|
|
14
|
+
- The fix round gets **every** finding, low ones too. One dropped "low" was a test the planner had promised to write.
|
|
15
|
+
- A reviewer that answers with nothing counts as failed, not done.
|
|
16
|
+
- A reviewer that takes longer than `review.timeoutMin` (15 minutes by default) is stopped and left out, so one slow free model doesn't hold everyone up.
|
|
17
|
+
- Plans go to `.loom/plans/`, not a new folder in your repo.
|
|
18
|
+
|
|
19
|
+
### Sign-ins and cost
|
|
20
|
+
- Grok shows as **signed out** when its session has expired. Before, a leftover token made it look ready. `loom doctor` also reports a sign-in failure a real turn hit, even after a restart.
|
|
21
|
+
- `loom send` warns before re-reading a large session whose cache has expired, with an estimated cost. A one-line question once cost $4.75 that way. `--fresh` starts that chat's session over.
|
|
22
|
+
|
|
23
|
+
### Six projects at once
|
|
24
|
+
- **A council that waits for its own answer.** If a reviewer ran out of quota, its review was handed to the planner as a turn of its own, and the council read that turn as the planner's fix reply. Now a council waits for the reply to its own prompt, and a reviewer out of quota is simply left out.
|
|
25
|
+
- **Crews read every way of saying "changes requested"**, so a card goes back to its builder instead of the goal failing. New crews seat your writers as builders and your reviewers as reviewers, and `--builders` / `--reviewer` let you choose. `loom crew budget` works before the first goal.
|
|
26
|
+
- **Night shifts stay in order.** A loop-watch nudge goes in before the next task starts, and the report says what really stopped a task: the shield, the loop watch, Stop or a quota.
|
|
27
|
+
- **Fewer false alarms.**
|
|
28
|
+
- Five different edits to one file aren't "going in circles".
|
|
29
|
+
- A `curl -o /dev/null` later on the line isn't a delete outside the project.
|
|
30
|
+
- A file Antigravity only mentions isn't an edit.
|
|
31
|
+
- **No silent hangs.** An OpenCode prompt that never starts fails after 3 minutes, not an hour, and `loom review --json` always prints JSON.
|
|
32
|
+
- **The baton comes home.** A route that ends on a reviewer hands the baton back to the agent that did the work.
|
|
33
|
+
- **You can see what's working.** `loom status` and the phone's project board count an orchestra, crew, council, shift or review as working.
|
|
34
|
+
- **The digest:**
|
|
35
|
+
- In the app, "While you were away" shows the open project's digest and closes on Escape.
|
|
36
|
+
- `loom digest` shows dates across midnight and collapses repeated lines.
|
|
37
|
+
- **Disk:**
|
|
38
|
+
- Orchestra worktrees for a project on an external drive now live on that drive.
|
|
39
|
+
- Finished runs' worktrees are removed after a week.
|
|
40
|
+
- `loom doctor` points out folders left by projects you've removed, and `loom orchestra:clean` removes them.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loompad/cli",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Loom — local-first control plane for coding agents: one CLI, shared memory, baton handoffs and routes across Claude Code, OpenCode, and friends.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|