@productbrain/mcp 0.0.1-beta.8328 → 0.0.1-beta.8337

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.
@@ -3739,7 +3739,7 @@ var preflightLinks = z10.array(z10.object({ type: z10.string().max(200), entryId
3739
3739
  var entriesSchema = z10.object({
3740
3740
  links: preflightLinks.describe("For preflight: proposed context links; saves nothing."),
3741
3741
  action: z10.enum(ENTRIES_ACTIONS).describe(
3742
- "'preflight': inspect structural requirements before composing (requires collection). 'list': browse entries with filters. 'get': fetch one entry by ID. 'batch': fetch multiple entries. 'search': full-text search. 'update': change fields on an existing entry (draft by default). 'commit': accept a draft entry onto the Chain. 'history': audit trail for an entry. 'move': relocate an entry to a different collection (pass `canonicalKey` too for an atomic move+retype). 'verify': mark an entry as verified (lightweight \u2014 no codebase scan; see `quality action=verify-chain` for that). 'still-true': confirm accuracy (owner/Team Lead only) \u2014 distinct from 'verify'; no content, version, or updatedAt change."
3742
+ "'preflight': inspect structural requirements before composing (requires collection). 'list': browse entries with filters. 'get': fetch one entry by ID. 'batch': fetch multiple entries. 'search': full-text search. 'update': change fields on an existing entry (draft by default). 'commit': accept a draft entry onto the Chain. 'history': audit trail for an entry. 'move': relocate an entry to a different collection (pass `canonicalKey` too for an atomic move+retype). 'verify': mark an entry as verified (lightweight \u2014 no codebase scan; see `quality action=verify-chain` for that). 'still-true': confirm accuracy (the holder of the owning role, else the nearest seated Team Lead) \u2014 distinct from 'verify'; no content, version, or updatedAt change."
3743
3743
  ),
3744
3744
  entryId: z10.string().max(200).optional().describe(
3745
3745
  "Entry ID, e.g. '<PREFIX>-<n>'. Required for: get, update, commit, history, move, verify, still-true."
@@ -3846,7 +3846,7 @@ var ENTRIES_ACTION_SPECS = {
3846
3846
  history: { params: ["entryId"], description: "entryId is required." },
3847
3847
  move: { params: ["entryId", "toCollection", "canonicalKey"], description: "entryId and toCollection are required; canonicalKey is optional (atomic move+retype)." },
3848
3848
  verify: { params: ["entryId"], description: "entryId is required." },
3849
- "still-true": { params: ["entryId"], description: "entryId is required. Owner or Team Lead only." }
3849
+ "still-true": { params: ["entryId"], description: "entryId is required. Allowed for the holder of the owning role; if that role is empty, the nearest seated Team Lead up the team tree." }
3850
3850
  };
3851
3851
 
3852
3852
  // src/tools/entries.ts
@@ -4012,7 +4012,7 @@ function registerEntriesTools(server) {
4012
4012
  "entries",
4013
4013
  {
4014
4014
  title: "Entries",
4015
- description: 'Read and manage entries on the Chain. One tool for the entry lifecycle.\n\n- **preflight**: Inspect a type and selected context before composing. No writes, capacity reservation or authority grant.\n- **list**: Browse entries with optional filters (collection, status, tag, label). Use collections action=list first to discover slugs.\n- **get**: Fetch a single entry by ID \u2014 full record with data, labels, relations, history.\n- **batch**: Fetch multiple entries (max 20) in one call. Same shape as get per entry.\n- **search**: Full-text search across entries. Scope by collection or filter by status.\n- **update**: Change fields on an existing entry (publishes whenever the entry is not draft \u2014 includes archived, not just accepted/active; autoPublish is accepted but ignored).\n- **commit**: Accept a draft entry onto the Chain (SSOT). Runs the contradiction preflight first.\n- **history**: Audit trail for an entry.\n- **move**: Relocate an entry to a different collection; pass canonicalKey too for an atomic move+retype.\n- **verify**: Mark verified (lightweight, no scan \u2014 see `quality action=verify-chain`).\n- **still-true**: owner/Team Lead confirms accuracy; no content change.\n\nUse `entries action=get entryId="..."` to fetch one. Use `entries action=search query="..."` to discover.',
4015
+ description: 'Read and manage entries on the Chain. One tool for the entry lifecycle.\n\n- **preflight**: Inspect a type and selected context before composing. No writes, capacity reservation or authority grant.\n- **list**: Browse entries with optional filters (collection, status, tag, label). Use collections action=list first to discover slugs.\n- **get**: Fetch a single entry by ID \u2014 full record with data, labels, relations, history.\n- **batch**: Fetch multiple entries (max 20) in one call. Same shape as get per entry.\n- **search**: Full-text search across entries. Scope by collection or filter by status.\n- **update**: Change fields on an existing entry (publishes whenever the entry is not draft \u2014 includes archived, not just accepted/active; autoPublish is accepted but ignored).\n- **commit**: Accept a draft entry onto the Chain (SSOT). Runs the contradiction preflight first.\n- **history**: Audit trail for an entry.\n- **move**: Relocate an entry to a different collection; pass canonicalKey too for an atomic move+retype.\n- **verify**: Mark verified (lightweight, no scan \u2014 see `quality action=verify-chain`).\n- **still-true**: confirm accuracy (the holder of the owning role; if that role is empty, the nearest seated Team Lead up the team tree).\n\nUse `entries action=get entryId="..."` to fetch one. Use `entries action=search query="..."` to discover.',
4016
4016
  inputSchema: entriesSchema,
4017
4017
  // Mixed read/write noun (§3 R3): can't be marked read-only once update/commit/move
4018
4018
  // live here too — accepted for the 11-tool default (§9 R3).
@@ -11809,6 +11809,10 @@ var facilitateSchema = z24.object({
11809
11809
  "Typed override reason (>= 12 chars) to push a constellation past a coherency hold instead of acknowledging."
11810
11810
  )
11811
11811
  });
11812
+ function conflictSuffix(c) {
11813
+ const seat = c.routeTarget ? `; seat team ${c.routeTarget.teamEntryId} role ${c.routeTarget.roleEntryId}` : "";
11814
+ return ` [${c.code}${seat}]`;
11815
+ }
11812
11816
  function buildCortexUrl(workspaceSlug, entryId) {
11813
11817
  const appUrl = process.env.PRODUCTBRAIN_APP_URL ?? "https://work.productbrain.io";
11814
11818
  return `${appUrl}/w/${workspaceSlug}/chain?entry=${encodeURIComponent(entryId)}&railTab=context`;
@@ -11938,7 +11942,7 @@ async function handleCommitConstellation(args) {
11938
11942
  }
11939
11943
  if (code === "CONSTELLATION_COMMIT_REFUSED") {
11940
11944
  const conflictIds = Array.isArray(diagnostics?.conflictIds) ? diagnostics.conflictIds : [];
11941
- const offenderLines = conflictIds.map((c) => `- \`${c.entryId}\` ${c.name}: ${c.reason}`).join("\n");
11945
+ const offenderLines = conflictIds.map((c) => `- \`${c.entryId}\` ${c.name}: ${c.reason}${conflictSuffix(c)}`).join("\n");
11942
11946
  return {
11943
11947
  content: [{
11944
11948
  type: "text",
@@ -12037,7 +12041,7 @@ No constellation entries were accepted.`
12037
12041
  if ((result2.conflictIds?.length ?? 0) > 0) {
12038
12042
  lines.push("", `**${result2.conflictIds.length} conflicts:**`);
12039
12043
  for (const c of result2.conflictIds) {
12040
- lines.push(`- \`${c.entryId}\` ${c.name}: ${c.reason}`);
12044
+ lines.push(`- \`${c.entryId}\` ${c.name}: ${c.reason}${conflictSuffix(c)}`);
12041
12045
  }
12042
12046
  }
12043
12047
  if ((result2.failedIds?.length ?? 0) > 0) {
@@ -14626,4 +14630,4 @@ export {
14626
14630
  createProductBrainServer,
14627
14631
  initFeatureFlags
14628
14632
  };
14629
- //# sourceMappingURL=chunk-KLCOIZH3.js.map
14633
+ //# sourceMappingURL=chunk-K5Y2FES2.js.map