projectstore-claude 0.30.5 → 0.30.7

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 (45) hide show
  1. package/node_modules/projectstore/.claude-plugin/marketplace.json +2 -2
  2. package/node_modules/projectstore/.claude-plugin/plugin.json +6 -2
  3. package/node_modules/projectstore/.mcp.json +1 -2
  4. package/node_modules/projectstore/README.md +65 -17
  5. package/node_modules/projectstore/agents/archaeologist.md +1 -1
  6. package/node_modules/projectstore/agents/librarian.md +1 -1
  7. package/node_modules/projectstore/agents/planner.md +1 -1
  8. package/node_modules/projectstore/commands/doctor.md +14 -11
  9. package/node_modules/projectstore/commands/reconcile.md +1 -1
  10. package/node_modules/projectstore/commands/review.md +2 -2
  11. package/node_modules/projectstore/commands/story.md +1 -1
  12. package/node_modules/projectstore/docs/getting-started.md +3 -4
  13. package/node_modules/projectstore/docs/harnesses.md +1 -1
  14. package/node_modules/projectstore/docs/images/icon.png +0 -0
  15. package/node_modules/projectstore/harnesses/claude-code.json +60 -33
  16. package/node_modules/projectstore/hooks/hooks.json +6 -6
  17. package/node_modules/projectstore/hooks/session-start.mjs +55 -24
  18. package/node_modules/projectstore/package.json +11 -12
  19. package/node_modules/projectstore/scripts/binding.mjs +1 -1
  20. package/node_modules/projectstore/scripts/build-adapters.mjs +45 -4
  21. package/node_modules/projectstore/scripts/cli.mjs +74 -1373
  22. package/node_modules/projectstore/scripts/configure-menu.mjs +9 -7
  23. package/node_modules/projectstore/scripts/configure.mjs +0 -1
  24. package/node_modules/projectstore/scripts/convergence.mjs +59 -16
  25. package/node_modules/projectstore/scripts/doctor.mjs +184 -32
  26. package/node_modules/projectstore/scripts/harness.mjs +34 -3
  27. package/node_modules/projectstore/scripts/install-handlers.mjs +925 -0
  28. package/node_modules/projectstore/scripts/install-harness.mjs +129 -2081
  29. package/node_modules/projectstore/scripts/install-layout.mjs +453 -0
  30. package/node_modules/projectstore/scripts/install-preview.mjs +747 -0
  31. package/node_modules/projectstore/scripts/lib.mjs +167 -68
  32. package/node_modules/projectstore/scripts/mcp-server.mjs +33 -0
  33. package/node_modules/projectstore/scripts/mcp.mjs +60 -60
  34. package/node_modules/projectstore/scripts/model-spec.mjs +25 -0
  35. package/node_modules/projectstore/scripts/models.mjs +26 -120
  36. package/node_modules/projectstore/scripts/query.mjs +7 -6
  37. package/node_modules/projectstore/scripts/read-verbs.mjs +277 -0
  38. package/node_modules/projectstore/scripts/setup.mjs +62 -12
  39. package/node_modules/projectstore/scripts/statusline-launcher.mjs +36 -3
  40. package/node_modules/projectstore/scripts/surfaces.mjs +18 -5
  41. package/node_modules/projectstore/scripts/verbs.mjs +1202 -0
  42. package/node_modules/projectstore/scripts/version-guard.mjs +18 -6
  43. package/package.json +3 -3
  44. package/node_modules/projectstore/docs/images/loop-light.svg +0 -94
  45. package/node_modules/projectstore/docs/images/team-light.svg +0 -79
@@ -321,6 +321,28 @@ export function harnessHome(manifest, { env = process.env, home = homedir() } =
321
321
  return fromEnv || (home && r.home_default ? join(home, r.home_default) : null);
322
322
  }
323
323
 
324
+ // The registry block of a manifest's host plugin registration, where it names
325
+ // its host's own folders and files (cache_dir, synced_dir, the registry
326
+ // files), or null for a harness whose registration is not the host's plugin
327
+ // system.
328
+ export function hostRegistry(manifest) {
329
+ const [surface, s] =
330
+ Object.entries(manifest?.surfaces || {}).find(
331
+ ([k, x]) => !k.startsWith("_") && x?.format === "host-plugin-registration" && x.registry,
332
+ ) || [];
333
+ return s ? { ...s.registry, plugin_name: s.plugin_name, surface } : null;
334
+ }
335
+
336
+ // Whether the host auto-updates `marketplace` when no settings entry and no
337
+ // registry entry say (registry.auto_update: its names and name prefixes are on,
338
+ // every other marketplace off). null when the manifest states no default.
339
+ export function autoUpdateDefault(manifest, marketplace) {
340
+ const d = hostRegistry(manifest)?.auto_update;
341
+ if (!d) return null;
342
+ const name = String(marketplace || "");
343
+ return (d.on || []).includes(name) || (d.on_prefix || []).some((p) => name.startsWith(p));
344
+ }
345
+
324
346
  // The agents block of a RUN (the story "One run plans the agents block once,
325
347
  // and a bare uninstall selects every harness the project uses", rules 1–2):
326
348
  // the files every manifest of the run names for it, in the FIRST manifest's
@@ -603,7 +625,8 @@ export function projectRootDeclared(env = process.env) {
603
625
  // Where this projectstore's core lives on disk: its layouts, templates and
604
626
  // scripts. The bin runs ITS OWN copy of the core: a child gets that through childEnv's
605
627
  // pluginRoot, an in-process read (the query verbs' loadLayout, the headings
606
- // registry) through this pin. Set once by cli.mjs; nothing else may call it.
628
+ // registry) through this pin. Set by verbs.mjs's dispatch, on every run of
629
+ // the CLI and of the read runner; nothing else may call it.
607
630
  let _pinnedPluginRoot = null;
608
631
  export function pinPluginRoot(root) {
609
632
  _pinnedPluginRoot = root || null;
@@ -733,8 +756,10 @@ export function layoutPaths(projectDir, { harnessDir = null, dir = MANIFEST_DIR
733
756
  //
734
757
  // What is ours on the machine but belongs to no project and no harness home:
735
758
  // the shell fetch's scratch (<root>/fetch/<pid>-<ms>/, removed when its run
736
- // ends) and the registry answer the update notice caches for a day
737
- // (<root>/registry.json, named now and read by no one yet). The XDG Base
759
+ // ends), the registry answer the update notice caches for a day
760
+ // (<root>/registry.json, named now and read by no one yet), the model lists
761
+ // (<root>/models/<id>.json) and the welcome an unbound project has shown
762
+ // (<root>/welcomed/<id>). The XDG Base
738
763
  // Directory spec puts a cache at $XDG_CACHE_HOME when that is an absolute
739
764
  // path and ignores a relative one; an empty one is ignored too. Otherwise it
740
765
  // is <home>/.cache. With neither, `root` is null and the fetch refuses. This
@@ -755,6 +780,12 @@ export function cachePaths({ env = process.env, home = homedir() } = {}) {
755
780
  // A harness's model list, as its last live read answered (the ADR "Agent
756
781
  // model lists are read from each harness's own catalog…", decision 4).
757
782
  models: (id) => (root && id ? join(root, "models", `${id}.json`) : null),
783
+ // A harness's first-run welcome, seen on this machine: the SessionStart
784
+ // hook writes it in place of the project's marker when the project is not
785
+ // bound, so an unbound project gets no writes (layout spec contract 5, as
786
+ // amended by the story "Opening a project that is not bound writes nothing
787
+ // into it…"). A lost marker costs one more welcome.
788
+ welcomed: (id) => (root && id ? join(root, "welcomed", id) : null),
758
789
  from: fromEnv ? variable : "the home directory",
759
790
  variable,
760
791
  };