loadout-ai 0.9.3 → 0.9.4
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 +13 -0
- package/README.md +27 -25
- package/dist/src/core/coordination/lock.js +25 -3
- package/dist/src/core/reporting/cli-guide.js +4 -2
- package/docs/REFERENCE.md +6 -2
- package/docs/USER_TEST_GUIDE.md +4 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.9.4 - 2026-09-07
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Updated the Stable first-run flow to show detailed safety findings before
|
|
10
|
+
applying and require explicit acknowledgement of the currently reported
|
|
11
|
+
instruction-like files.
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- Serialized coordination lock recovery within a process so competing
|
|
16
|
+
recoverers cannot enter the same critical section simultaneously.
|
|
17
|
+
|
|
5
18
|
## 0.9.3 - 2026-09-07
|
|
6
19
|
|
|
7
20
|
### Changed
|
package/README.md
CHANGED
|
@@ -29,21 +29,23 @@ You need Node.js 20 or newer and Git.
|
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
31
|
npm install --global loadout-ai
|
|
32
|
-
loadout setup --mode stable
|
|
32
|
+
loadout setup --mode stable --details
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
The second command detects your coding agents and previews the 30-skill Stable
|
|
36
36
|
loadout. It does not change agent files. Review the plan, then apply it:
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
loadout setup --mode stable --yes
|
|
39
|
+
loadout setup --mode stable --yes --approve-risk
|
|
40
40
|
loadout status
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
Loadout saves a rollback snapshot before applying changes. Run
|
|
44
44
|
`loadout rollback` to restore the previous managed state.
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
`--approve-risk` acknowledges the instruction-like files reported by the current
|
|
47
|
+
Stable preview. Use it only after reading those findings; it does not replace the
|
|
48
|
+
preview or the pinned-source checks.
|
|
47
49
|
|
|
48
50
|
A later `--yes` invocation recomputes the plan from pinned sources and current agent and filesystem state; it does not persist or prove identity with the earlier preview.
|
|
49
51
|
|
|
@@ -123,9 +125,9 @@ and coordination without making you relay every command.
|
|
|
123
125
|
For a reproducible install, pin the current release:
|
|
124
126
|
|
|
125
127
|
```bash
|
|
126
|
-
npm install --global loadout-ai@0.9.
|
|
127
|
-
loadout setup --mode stable
|
|
128
|
-
loadout setup --mode stable --yes
|
|
128
|
+
npm install --global loadout-ai@0.9.4
|
|
129
|
+
loadout setup --mode stable --details
|
|
130
|
+
loadout setup --mode stable --yes --approve-risk
|
|
129
131
|
loadout status
|
|
130
132
|
```
|
|
131
133
|
|
|
@@ -269,25 +271,25 @@ Configured CI platforms describe a manually triggered workflow, not evidence tha
|
|
|
269
271
|
|
|
270
272
|
## Command reference
|
|
271
273
|
|
|
272
|
-
| Goal | Command
|
|
273
|
-
| ---------------------------------- |
|
|
274
|
-
| Guided first run | `loadout guide`
|
|
275
|
-
| Preview or apply Stable | `loadout setup --mode stable` ·
|
|
276
|
-
| Inspect managed skills | `loadout status` · `loadout library`
|
|
277
|
-
| Recommend for this repository | `loadout recommend --project .`
|
|
278
|
-
| Activate a project-specific set | `loadout optimize --project . --limit 30`
|
|
279
|
-
| Scan or update | `loadout scan` · `loadout update`
|
|
280
|
-
| Send a task | `loadout handoff codex "write tests"`
|
|
281
|
-
| Use a handoff template | `loadout handoff codex src/auth.ts --template write-tests`
|
|
282
|
-
| Preview two-agent ownership | `loadout coord start --agents claude-code,codex`
|
|
283
|
-
| Inspect coordination state | `loadout coord snapshot codex`
|
|
284
|
-
| Detect shared contract candidates | `loadout coord detect`
|
|
285
|
-
| Turn a decision into tasks | `loadout coord discuss implement <thread-id>`
|
|
286
|
-
| Start the coordination MCP server | `loadout serve`
|
|
287
|
-
| Health check | `loadout doctor`
|
|
288
|
-
| Restore the previous managed state | `loadout rollback`
|
|
289
|
-
| Preview complete removal | `loadout uninstall`
|
|
290
|
-
| Full CLI reference | `loadout --help` · `loadout advanced`
|
|
274
|
+
| Goal | Command |
|
|
275
|
+
| ---------------------------------- | ---------------------------------------------------------------------------------- |
|
|
276
|
+
| Guided first run | `loadout guide` |
|
|
277
|
+
| Preview or apply Stable | `loadout setup --mode stable --details` · then `--yes --approve-risk` after review |
|
|
278
|
+
| Inspect managed skills | `loadout status` · `loadout library` |
|
|
279
|
+
| Recommend for this repository | `loadout recommend --project .` |
|
|
280
|
+
| Activate a project-specific set | `loadout optimize --project . --limit 30` |
|
|
281
|
+
| Scan or update | `loadout scan` · `loadout update` |
|
|
282
|
+
| Send a task | `loadout handoff codex "write tests"` |
|
|
283
|
+
| Use a handoff template | `loadout handoff codex src/auth.ts --template write-tests` |
|
|
284
|
+
| Preview two-agent ownership | `loadout coord start --agents claude-code,codex` |
|
|
285
|
+
| Inspect coordination state | `loadout coord snapshot codex` |
|
|
286
|
+
| Detect shared contract candidates | `loadout coord detect` |
|
|
287
|
+
| Turn a decision into tasks | `loadout coord discuss implement <thread-id>` |
|
|
288
|
+
| Start the coordination MCP server | `loadout serve` |
|
|
289
|
+
| Health check | `loadout doctor` |
|
|
290
|
+
| Restore the previous managed state | `loadout rollback` |
|
|
291
|
+
| Preview complete removal | `loadout uninstall` |
|
|
292
|
+
| Full CLI reference | `loadout --help` · `loadout advanced` |
|
|
291
293
|
|
|
292
294
|
Most mutating commands are previews first. Add `--yes` only after reviewing the plan.
|
|
293
295
|
|
|
@@ -4,6 +4,7 @@ import { join } from "node:path";
|
|
|
4
4
|
const LOCK_FILE = "coordination.lock";
|
|
5
5
|
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
6
6
|
const MALFORMED_LOCK_STALE_MS = 30_000;
|
|
7
|
+
const localLockTails = new Map();
|
|
7
8
|
export class CoordinationLockTimeoutError extends Error {
|
|
8
9
|
constructor(timeoutMs) {
|
|
9
10
|
super(`Timed out waiting ${timeoutMs}ms for the coordination lock`);
|
|
@@ -64,9 +65,25 @@ async function releaseOwnedLock(path, token) {
|
|
|
64
65
|
function wait(delayMs) {
|
|
65
66
|
return new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
66
67
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
async function withLocalLock(path, operation) {
|
|
69
|
+
const previous = localLockTails.get(path) ?? Promise.resolve();
|
|
70
|
+
let release = () => undefined;
|
|
71
|
+
const current = new Promise((resolve) => {
|
|
72
|
+
release = resolve;
|
|
73
|
+
});
|
|
74
|
+
const tail = previous.then(() => current);
|
|
75
|
+
localLockTails.set(path, tail);
|
|
76
|
+
await previous;
|
|
77
|
+
try {
|
|
78
|
+
return await operation();
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
release();
|
|
82
|
+
if (localLockTails.get(path) === tail)
|
|
83
|
+
localLockTails.delete(path);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async function withFileLock(path, operation, timeoutMs) {
|
|
70
87
|
const deadline = Date.now() + timeoutMs;
|
|
71
88
|
const token = randomUUID();
|
|
72
89
|
const owner = {
|
|
@@ -138,3 +155,8 @@ export async function withCoordinationLock(coordinationDir, operation, timeoutMs
|
|
|
138
155
|
await releaseOwnedLock(path, token);
|
|
139
156
|
}
|
|
140
157
|
}
|
|
158
|
+
/** Serialize coordination mutations within this process and across processes. */
|
|
159
|
+
export async function withCoordinationLock(coordinationDir, operation, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
160
|
+
const path = join(coordinationDir, LOCK_FILE);
|
|
161
|
+
return withLocalLock(path, () => withFileLock(path, operation, timeoutMs));
|
|
162
|
+
}
|
|
@@ -5,8 +5,10 @@ Loadout — manage the skills, tools, and MCP servers your AI agents use.
|
|
|
5
5
|
FIRST TIME
|
|
6
6
|
|
|
7
7
|
loadout doctor which agents you have, and whether they are healthy
|
|
8
|
-
loadout setup --mode stable
|
|
9
|
-
|
|
8
|
+
loadout setup --mode stable --details
|
|
9
|
+
preview 30 reviewed skills and findings
|
|
10
|
+
loadout setup --mode stable --yes --approve-risk
|
|
11
|
+
install only after reviewing those findings
|
|
10
12
|
|
|
11
13
|
IN A PROJECT
|
|
12
14
|
|
package/docs/REFERENCE.md
CHANGED
|
@@ -42,10 +42,14 @@ pinned public sources**, installed into each agent you choose.
|
|
|
42
42
|
| [Agent Skills Marketplace](https://github.com/wshobson/agents) | Architecture, review, error handling, JavaScript, Python | [](https://github.com/wshobson/agents) |
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
loadout setup --mode stable
|
|
46
|
-
loadout setup --mode stable --yes
|
|
45
|
+
loadout setup --mode stable --details
|
|
46
|
+
loadout setup --mode stable --yes --approve-risk
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
The current Stable selection reports instruction-like files in reviewed skill
|
|
50
|
+
sources. Read the detailed preview before acknowledging those findings with
|
|
51
|
+
`--approve-risk`.
|
|
52
|
+
|
|
49
53
|
### Power: a larger cross-project toolkit
|
|
50
54
|
|
|
51
55
|
Power draws a skill-level allowlist from eight major collections.
|
package/docs/USER_TEST_GUIDE.md
CHANGED
|
@@ -107,11 +107,12 @@ explicit.
|
|
|
107
107
|
For unattended use only after reviewing a preview, the equivalent is:
|
|
108
108
|
|
|
109
109
|
```bash
|
|
110
|
-
loadout setup --mode stable --agents codex,claude-code --yes
|
|
110
|
+
loadout setup --mode stable --agents codex,claude-code --yes --approve-risk
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
The current Stable preview identifies instruction-like files in reviewed skill
|
|
114
|
+
sources, so unattended apply requires `--approve-risk`. Add it only after reading
|
|
115
|
+
and accepting the displayed findings.
|
|
115
116
|
|
|
116
117
|
## 5. Test a change and recover
|
|
117
118
|
|