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.
Files changed (46) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/MASTER_PLAN.md +113 -33
  3. package/README.md +57 -19
  4. package/catalog/discovered.json +8422 -6957
  5. package/catalog/packages.json +26 -0
  6. package/dist/src/cli.js +140 -68
  7. package/dist/src/core/active-policy.js +48 -8
  8. package/dist/src/core/active-set.js +1 -1
  9. package/dist/src/core/adopt.js +1 -1
  10. package/dist/src/core/catalog-coverage.js +2 -1
  11. package/dist/src/core/catalog-install.js +23 -8
  12. package/dist/src/core/cli-guide.js +5 -2
  13. package/dist/src/core/codex-mcp.js +49 -5
  14. package/dist/src/core/completion.js +0 -3
  15. package/dist/src/core/health.js +28 -12
  16. package/dist/src/core/install.js +3 -3
  17. package/dist/src/core/mcp-recipes.js +13 -4
  18. package/dist/src/core/mcp.js +6 -5
  19. package/dist/src/core/model-config.js +1 -1
  20. package/dist/src/core/portable.js +1 -1
  21. package/dist/src/core/recommend.js +34 -18
  22. package/dist/src/core/remove.js +33 -5
  23. package/dist/src/core/runtime-tool-recipe.js +2 -2
  24. package/dist/src/core/runtime-tools.js +15 -4
  25. package/dist/src/core/snapshot.js +20 -0
  26. package/dist/src/core/state.js +9 -0
  27. package/dist/src/core/sync.js +1 -1
  28. package/dist/src/core/transaction.js +2 -1
  29. package/dist/src/core/uninstall.js +11 -1
  30. package/dist/src/shared/schemas.js +1 -0
  31. package/docs/CATALOG.md +3 -2
  32. package/docs/DISCOVERED.md +253 -255
  33. package/docs/FEATURE_TEST_MATRIX.md +19 -32
  34. package/docs/GITHUB_AUTHORIZATION.md +2 -2
  35. package/docs/TESTING.md +3 -16
  36. package/docs/USER_TEST_GUIDE.md +23 -9
  37. package/docs/assets/loadout-workflow.png +0 -0
  38. package/docs/evidence/readme-claims.json +0 -8
  39. package/docs/superpowers/plans/2026-07-20-loadout-readme-explainer.md +116 -0
  40. package/docs/superpowers/specs/2026-07-20-loadout-readme-explainer-design.md +55 -0
  41. package/package.json +4 -6
  42. package/dashboard/app.js +0 -607
  43. package/dashboard/index.html +0 -249
  44. package/dashboard/styles.css +0 -384
  45. package/dist/src/core/demo.js +0 -136
  46. package/dist/src/dashboard.js +0 -421
@@ -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
- ? ["", "BLOCKED: managed files were changed outside Loadout."]
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 50 public upstream repositories. This page gives every project a direct source link and exposes the exact reviewed revision used by Loadout.
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 50 credited repositories
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