loadout-ai 0.4.1 → 0.5.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 +55 -0
- package/MASTER_PLAN.md +113 -33
- package/README.md +57 -19
- package/catalog/discovered.json +8422 -6957
- package/catalog/packages.json +26 -0
- package/dist/src/cli.js +140 -68
- package/dist/src/core/active-policy.js +48 -8
- package/dist/src/core/active-set.js +1 -1
- package/dist/src/core/adopt.js +1 -1
- package/dist/src/core/catalog-coverage.js +2 -1
- package/dist/src/core/catalog-install.js +23 -8
- package/dist/src/core/cli-guide.js +5 -2
- package/dist/src/core/codex-mcp.js +49 -5
- package/dist/src/core/completion.js +0 -3
- package/dist/src/core/health.js +28 -12
- package/dist/src/core/install.js +3 -3
- package/dist/src/core/mcp-recipes.js +13 -4
- package/dist/src/core/mcp.js +6 -5
- package/dist/src/core/model-config.js +1 -1
- package/dist/src/core/portable.js +1 -1
- package/dist/src/core/recommend.js +34 -18
- package/dist/src/core/remove.js +33 -5
- package/dist/src/core/runtime-tool-recipe.js +2 -2
- package/dist/src/core/runtime-tools.js +15 -4
- package/dist/src/core/snapshot.js +20 -0
- package/dist/src/core/state.js +9 -0
- package/dist/src/core/sync.js +1 -1
- package/dist/src/core/transaction.js +2 -1
- package/dist/src/core/uninstall.js +11 -1
- package/dist/src/shared/schemas.js +1 -0
- package/docs/CATALOG.md +3 -2
- package/docs/DISCOVERED.md +253 -255
- package/docs/FEATURE_TEST_MATRIX.md +19 -32
- package/docs/GITHUB_AUTHORIZATION.md +2 -2
- package/docs/TESTING.md +3 -16
- package/docs/USER_TEST_GUIDE.md +23 -9
- package/docs/assets/loadout-workflow.png +0 -0
- package/docs/evidence/readme-claims.json +0 -8
- package/docs/superpowers/plans/2026-07-20-loadout-readme-explainer.md +116 -0
- package/docs/superpowers/specs/2026-07-20-loadout-readme-explainer-design.md +55 -0
- package/package.json +4 -6
- package/dashboard/app.js +0 -607
- package/dashboard/index.html +0 -249
- package/dashboard/styles.css +0 -384
- package/dist/src/core/demo.js +0 -136
- package/dist/src/dashboard.js +0 -421
package/dist/src/core/sync.js
CHANGED
|
@@ -343,6 +343,6 @@ export async function applySyncPlan(plan, lockPath = "loadout.lock", options = {
|
|
|
343
343
|
await writeMcpConfigPlan(entry.plan);
|
|
344
344
|
await recordInstallTransaction(freshPlan.packages, freshPlan.mcpPlans, snapshot.id);
|
|
345
345
|
await writeLockfile(freshPlan.resolvedManifest ?? (await readManifest(freshPlan.manifest)), lockPath);
|
|
346
|
-
});
|
|
346
|
+
}, { label: "synchronize loadout manifest" });
|
|
347
347
|
return { snapshotId: applied.snapshotId, lockfile: lockPath };
|
|
348
348
|
}
|
|
@@ -123,13 +123,14 @@ export async function withMutationLock(operation) {
|
|
|
123
123
|
* global lock. Network/source preparation should happen before this boundary;
|
|
124
124
|
* every state-dependent precondition belongs in `prepare`.
|
|
125
125
|
*/
|
|
126
|
-
export async function runMutationTransaction(prepare, mutate) {
|
|
126
|
+
export async function runMutationTransaction(prepare, mutate, options = {}) {
|
|
127
127
|
const mutationLock = await acquireMutationLock();
|
|
128
128
|
let transaction;
|
|
129
129
|
try {
|
|
130
130
|
const prepared = await prepare();
|
|
131
131
|
const snapshot = await createSnapshot(prepared.targets, {
|
|
132
132
|
persist: false,
|
|
133
|
+
label: options.label,
|
|
133
134
|
});
|
|
134
135
|
transaction = await beginTransaction(snapshot, prepared.targets, {
|
|
135
136
|
mutationLock,
|
|
@@ -113,6 +113,9 @@ export async function uninstallGlobalCli() {
|
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
115
|
export function formatUninstallPlan(plan) {
|
|
116
|
+
const modifiedPaths = plan.packages.flatMap((entry) => entry.files
|
|
117
|
+
.filter((file) => file.status === "modified")
|
|
118
|
+
.map((file) => file.path));
|
|
116
119
|
return [
|
|
117
120
|
"Complete Loadout uninstall preview",
|
|
118
121
|
"",
|
|
@@ -122,7 +125,14 @@ export function formatUninstallPlan(plan) {
|
|
|
122
125
|
`Daily jobs to remove: ${plan.schedulers.map((item) => item.job).join(", ") || "none"}`,
|
|
123
126
|
`State and cache: ${plan.stateHome}`,
|
|
124
127
|
...(plan.blocked
|
|
125
|
-
? [
|
|
128
|
+
? [
|
|
129
|
+
"",
|
|
130
|
+
"BLOCKED: managed files were changed outside Loadout.",
|
|
131
|
+
...modifiedPaths.slice(0, 10).map((path) => ` Modified: ${path}`),
|
|
132
|
+
...(modifiedPaths.length > 10
|
|
133
|
+
? [` …and ${modifiedPaths.length - 10} more`]
|
|
134
|
+
: []),
|
|
135
|
+
]
|
|
126
136
|
: []),
|
|
127
137
|
"",
|
|
128
138
|
...plan.warnings.map((warning) => `Warning: ${warning}`),
|
|
@@ -275,6 +275,7 @@ export const installRecordSchema = z
|
|
|
275
275
|
files: z.array(fileHashSchema),
|
|
276
276
|
snapshotId: text,
|
|
277
277
|
installedAt: text,
|
|
278
|
+
configFormat: z.enum(["json", "codex-toml"]).optional(),
|
|
278
279
|
staticAssessment: z
|
|
279
280
|
.object({
|
|
280
281
|
status: z.enum(["clear", "warning", "blocking"]),
|
package/docs/CATALOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Catalog and upstream credits
|
|
2
2
|
|
|
3
|
-
Loadout's bundled catalog indexes
|
|
3
|
+
Loadout's bundled catalog indexes 51 public upstream repositories. This page gives every project a direct source link and exposes the exact reviewed revision used by Loadout.
|
|
4
4
|
|
|
5
5
|
Thank you to every maintainer and contributor whose work appears here. Loadout does not own, endorse for its authors, or relicense these projects. Each project remains governed by its upstream license and current terms.
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ Thank you to every maintainer and contributor whose work appears here. Loadout d
|
|
|
14
14
|
|
|
15
15
|
The machine-readable catalog remains the source of truth. Run `loadout catalog --coverage --json` to inspect coverage and `loadout capabilities` to inspect what each local agent adapter can actually manage.
|
|
16
16
|
|
|
17
|
-
## All
|
|
17
|
+
## All 51 credited repositories
|
|
18
18
|
|
|
19
19
|
| Upstream source | Loadout ID | Category | Reviewed components | License status | Reviewed revision |
|
|
20
20
|
| --------------------------------------------------------------------------------- | -------------------------------- | ------------------------ | -------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -68,6 +68,7 @@ The machine-readable catalog remains the source of truth. Run `loadout catalog -
|
|
|
68
68
|
| [MCP Toolbox for Databases](https://github.com/googleapis/mcp-toolbox) | `mcp-toolbox-for-databases` | database | `mcp` | `Apache-2.0` | [`b574b071fc27`](https://github.com/googleapis/mcp-toolbox/tree/b574b071fc27f717e90b4362864b1086be0c8995) |
|
|
69
69
|
| [Browserbase MCP Server](https://github.com/browserbase/mcp-server-browserbase) | `browserbase-mcp-server` | browser-automation | `mcp` | `Apache-2.0` | [`1e196b3d3c4d`](https://github.com/browserbase/mcp-server-browserbase/tree/1e196b3d3c4dc70944e0d19038dd9eb3608b207a) |
|
|
70
70
|
| [Bright Data MCP](https://github.com/brightdata/brightdata-mcp) | `bright-data-mcp` | web-research | `mcp` | `MIT` | [`adbfdd49b880`](https://github.com/brightdata/brightdata-mcp/tree/adbfdd49b8805136662a264490118c2688da3e29) |
|
|
71
|
+
| [Obsidian Skills](https://github.com/kepano/obsidian-skills) | `obsidian-skills` | knowledge-management | `skill`, `plugin` | `MIT` | [`a1dc48e68138`](https://github.com/kepano/obsidian-skills/tree/a1dc48e68138490d522c04cbf5822214c6eb1202) |
|
|
71
72
|
|
|
72
73
|
## Catalog maintenance
|
|
73
74
|
|