projectstore-claude 0.30.4 → 0.30.6
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/node_modules/projectstore/.claude-plugin/marketplace.json +2 -2
- package/node_modules/projectstore/.claude-plugin/plugin.json +6 -2
- package/node_modules/projectstore/.mcp.json +1 -2
- package/node_modules/projectstore/README.md +65 -16
- package/node_modules/projectstore/agents/archaeologist.md +1 -1
- package/node_modules/projectstore/agents/librarian.md +1 -1
- package/node_modules/projectstore/agents/planner.md +1 -1
- package/node_modules/projectstore/commands/doctor.md +14 -11
- package/node_modules/projectstore/commands/reconcile.md +1 -1
- package/node_modules/projectstore/commands/review.md +2 -2
- package/node_modules/projectstore/commands/story.md +1 -1
- package/node_modules/projectstore/docs/getting-started.md +3 -4
- package/node_modules/projectstore/docs/harnesses.md +1 -1
- package/node_modules/projectstore/docs/how-it-works.md +7 -0
- package/node_modules/projectstore/docs/images/icon.png +0 -0
- package/node_modules/projectstore/harnesses/claude-code.json +61 -11
- package/node_modules/projectstore/harnesses/codex.json +45 -15
- package/node_modules/projectstore/hooks/band.tsx +19 -8
- package/node_modules/projectstore/hooks/hooks.json +6 -6
- package/node_modules/projectstore/hooks/session-start.mjs +55 -24
- package/node_modules/projectstore/hooks/session-stop.mjs +43 -20
- package/node_modules/projectstore/package.json +11 -12
- package/node_modules/projectstore/scripts/band-shared.mjs +17 -2
- package/node_modules/projectstore/scripts/band.mjs +20 -2
- package/node_modules/projectstore/scripts/binding.mjs +1 -1
- package/node_modules/projectstore/scripts/build-adapters.mjs +45 -4
- package/node_modules/projectstore/scripts/cli.mjs +74 -1373
- package/node_modules/projectstore/scripts/convergence.mjs +59 -16
- package/node_modules/projectstore/scripts/doctor.mjs +199 -36
- package/node_modules/projectstore/scripts/harness.mjs +88 -6
- package/node_modules/projectstore/scripts/install-handlers.mjs +925 -0
- package/node_modules/projectstore/scripts/install-harness.mjs +129 -2081
- package/node_modules/projectstore/scripts/install-layout.mjs +453 -0
- package/node_modules/projectstore/scripts/install-preview.mjs +747 -0
- package/node_modules/projectstore/scripts/lib.mjs +387 -107
- package/node_modules/projectstore/scripts/mcp-server.mjs +33 -0
- package/node_modules/projectstore/scripts/mcp.mjs +60 -60
- package/node_modules/projectstore/scripts/model-spec.mjs +24 -0
- package/node_modules/projectstore/scripts/models.mjs +6 -10
- package/node_modules/projectstore/scripts/query.mjs +7 -6
- package/node_modules/projectstore/scripts/read-verbs.mjs +277 -0
- package/node_modules/projectstore/scripts/setup.mjs +62 -12
- package/node_modules/projectstore/scripts/statusline-launcher.mjs +36 -3
- package/node_modules/projectstore/scripts/surfaces.mjs +18 -5
- package/node_modules/projectstore/scripts/touch-session.mjs +30 -15
- package/node_modules/projectstore/scripts/verbs.mjs +1202 -0
- package/node_modules/projectstore/scripts/version-guard.mjs +57 -7
- package/package.json +3 -3
- package/node_modules/projectstore/docs/images/loop-light.svg +0 -94
- package/node_modules/projectstore/docs/images/team-light.svg +0 -79
|
@@ -251,7 +251,39 @@ function renderRole(file) {
|
|
|
251
251
|
const { data, body } = frontmatter(read(file), file);
|
|
252
252
|
const role = file.split("/").pop().replace(/\.md$/, "");
|
|
253
253
|
const name = renderedName("agents", role);
|
|
254
|
-
|
|
254
|
+
// The spawn sentences name the fields and the value, verbatim: "if the
|
|
255
|
+
// result names a model, pass that model" let a parent read "that model" as
|
|
256
|
+
// its own, and pass it in 2 of 3 runs (the story "Codex role skills pass the
|
|
257
|
+
// model the core names, verbatim", PS-HARNESS). No example slug: the failure
|
|
258
|
+
// is a substituted model name, and an example is one more name to copy.
|
|
259
|
+
const orchestration = `## Codex orchestration
|
|
260
|
+
|
|
261
|
+
This is a role-orchestration skill, not a native agent registration. Resolve the
|
|
262
|
+
role's model and effort by running:
|
|
263
|
+
|
|
264
|
+
\`\`\`bash
|
|
265
|
+
node "\${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" agents model ${role} --json --project "$PWD"
|
|
266
|
+
\`\`\`
|
|
267
|
+
|
|
268
|
+
Spawn a collaboration agent for the bounded task. Its model and effort are the
|
|
269
|
+
two fields that command printed, \`result.model\` and \`result.effort\`, passed
|
|
270
|
+
verbatim:
|
|
271
|
+
|
|
272
|
+
- If \`result.model\` is a string, pass \`result.model\` exactly as \`model\`: the
|
|
273
|
+
string the command printed, even when it names the model you are running
|
|
274
|
+
on. Never substitute your own model for it. Use an empty or bounded context
|
|
275
|
+
fork.
|
|
276
|
+
- If \`result.model\` is \`null\`, pass no model at all, not even your own; the
|
|
277
|
+
agent inherits the current model.
|
|
278
|
+
- If \`result.effort\` is a string, pass it as \`${effortParam()}\`, verbatim,
|
|
279
|
+
with or without a model. If \`result.effort\` is \`null\`, pass none.
|
|
280
|
+
|
|
281
|
+
Give the spawned agent the role contract below and the exact artifact/diff it
|
|
282
|
+
must inspect. Wait for its final result.
|
|
283
|
+
|
|
284
|
+
## Role contract
|
|
285
|
+
|
|
286
|
+
`;
|
|
255
287
|
const description = (data.description || `Run the ProjectStore ${role} role in a fresh collaboration agent.`).replace(
|
|
256
288
|
/^(?:Opus|Sonnet) \([a-z]+-effort\)\s+/,
|
|
257
289
|
"",
|
|
@@ -267,14 +299,23 @@ export function renderHooks(manifest, root = ROOT) {
|
|
|
267
299
|
if (!hasBand(manifest)) delete source.modules;
|
|
268
300
|
const post = source.hooks?.PostToolUse || [];
|
|
269
301
|
for (const group of post) if (group.matcher) group.matcher = (manifest.tools?.write_tools || []).join("|");
|
|
302
|
+
const sourceRoot = "${" + SOURCE.runtime.plugin_root_env + "}";
|
|
303
|
+
const targetRoot = "${" + manifest.runtime.plugin_root_env + "}";
|
|
304
|
+
// The source may write its root bare, quote the whole path ("${ROOT}/x") or
|
|
305
|
+
// quote the variable alone ("${ROOT}"/x): the host's two documentation pages
|
|
306
|
+
// show the last two. Codex keys hook trust to the rendered command text, so
|
|
307
|
+
// all three render the one command, and a re-quoted source cannot ask every
|
|
308
|
+
// Codex user to trust the hooks again (the story "Every hook command quotes
|
|
309
|
+
// its plugin root…", PS-DIRECTORY, decision 2).
|
|
310
|
+
const r = escapeRe(sourceRoot);
|
|
311
|
+
const sourceCommand = new RegExp(`^node (?:"${r}/([^"\\s]+)"|"${r}"/([^"\\s]+)|${r}/([^"\\s]+))$`);
|
|
270
312
|
const rewrite = (value) => {
|
|
271
313
|
if (Array.isArray(value)) return value.map(rewrite);
|
|
272
314
|
if (value && typeof value === "object")
|
|
273
315
|
return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, rewrite(v)]));
|
|
274
316
|
if (typeof value !== "string") return value;
|
|
275
|
-
const
|
|
276
|
-
const
|
|
277
|
-
const command = value.startsWith(`node ${sourceRoot}/`) ? value.slice(`node ${sourceRoot}/`.length) : null;
|
|
317
|
+
const m = sourceCommand.exec(value);
|
|
318
|
+
const command = m ? m[1] || m[2] || m[3] : null;
|
|
278
319
|
return command
|
|
279
320
|
? `node "${targetRoot}/node_modules/projectstore/${command}"`
|
|
280
321
|
: value.replaceAll(sourceRoot, `${targetRoot}/node_modules/projectstore`);
|