@aotter/mantle-runtime 0.1.0-alpha.9 → 0.1.2-alpha.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 (108) hide show
  1. package/README.md +74 -4
  2. package/dist/MantleRuntime.js +12 -4
  3. package/dist/MantleRuntime.js.map +1 -1
  4. package/dist/domain/model/EntryRow.d.ts +10 -1
  5. package/dist/domain/model/EntryRow.d.ts.map +1 -1
  6. package/dist/domain/model/EntryRow.js +19 -0
  7. package/dist/domain/model/EntryRow.js.map +1 -1
  8. package/dist/domain/port/EntryReader.d.ts +34 -0
  9. package/dist/domain/port/EntryReader.d.ts.map +1 -1
  10. package/dist/domain/port/EntryRepository.d.ts +5 -0
  11. package/dist/domain/port/EntryRepository.d.ts.map +1 -1
  12. package/dist/domain/port/index.d.ts +1 -1
  13. package/dist/domain/port/index.d.ts.map +1 -1
  14. package/dist/domain/port/index.js.map +1 -1
  15. package/dist/domain/service/CallableCapabilityProjector.d.ts +28 -0
  16. package/dist/domain/service/CallableCapabilityProjector.d.ts.map +1 -0
  17. package/dist/domain/service/CallableCapabilityProjector.js +67 -0
  18. package/dist/domain/service/CallableCapabilityProjector.js.map +1 -0
  19. package/dist/domain/service/EntryMutationDiagnostics.d.ts.map +1 -1
  20. package/dist/domain/service/EntryMutationDiagnostics.js +11 -1
  21. package/dist/domain/service/EntryMutationDiagnostics.js.map +1 -1
  22. package/dist/domain/service/PathMatcher.d.ts +7 -0
  23. package/dist/domain/service/PathMatcher.d.ts.map +1 -1
  24. package/dist/domain/service/PathMatcher.js +56 -0
  25. package/dist/domain/service/PathMatcher.js.map +1 -1
  26. package/dist/domain/service/RuntimePlanCompiler.d.ts +7 -2
  27. package/dist/domain/service/RuntimePlanCompiler.d.ts.map +1 -1
  28. package/dist/domain/service/RuntimePlanCompiler.js +1 -0
  29. package/dist/domain/service/RuntimePlanCompiler.js.map +1 -1
  30. package/dist/domain/service/index.d.ts +1 -0
  31. package/dist/domain/service/index.d.ts.map +1 -1
  32. package/dist/domain/service/index.js +1 -0
  33. package/dist/domain/service/index.js.map +1 -1
  34. package/dist/domain/service/io/JoinedEntryReader.d.ts.map +1 -1
  35. package/dist/domain/service/io/JoinedEntryReader.js +2 -3
  36. package/dist/domain/service/io/JoinedEntryReader.js.map +1 -1
  37. package/dist/index.d.ts +8 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +7 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/infrastructure/boot/canonicalMigrations.d.ts +4 -2
  42. package/dist/infrastructure/boot/canonicalMigrations.d.ts.map +1 -1
  43. package/dist/infrastructure/boot/canonicalMigrations.js +9 -2
  44. package/dist/infrastructure/boot/canonicalMigrations.js.map +1 -1
  45. package/dist/infrastructure/http/createMantleRequestHandler.d.ts +3 -0
  46. package/dist/infrastructure/http/createMantleRequestHandler.d.ts.map +1 -1
  47. package/dist/infrastructure/http/createMantleRequestHandler.js +36 -15
  48. package/dist/infrastructure/http/createMantleRequestHandler.js.map +1 -1
  49. package/dist/infrastructure/http/readJsonBody.d.ts +8 -0
  50. package/dist/infrastructure/http/readJsonBody.d.ts.map +1 -0
  51. package/dist/infrastructure/http/readJsonBody.js +36 -0
  52. package/dist/infrastructure/http/readJsonBody.js.map +1 -0
  53. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts +22 -17
  54. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.d.ts.map +1 -1
  55. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js +74 -69
  56. package/dist/infrastructure/mcp/McpJsonRpcDispatcher.js.map +1 -1
  57. package/dist/infrastructure/mcp/McpToolCatalog.d.ts +11 -9
  58. package/dist/infrastructure/mcp/McpToolCatalog.d.ts.map +1 -1
  59. package/dist/infrastructure/mcp/McpToolCatalog.js +62 -72
  60. package/dist/infrastructure/mcp/McpToolCatalog.js.map +1 -1
  61. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts +3 -1
  62. package/dist/infrastructure/persistence/DatabaseEntryRepository.d.ts.map +1 -1
  63. package/dist/infrastructure/persistence/DatabaseEntryRepository.js +141 -20
  64. package/dist/infrastructure/persistence/DatabaseEntryRepository.js.map +1 -1
  65. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts +2 -0
  66. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.d.ts.map +1 -1
  67. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js +5 -1
  68. package/dist/infrastructure/persistence/DatabaseSiteConfigRepository.js.map +1 -1
  69. package/dist/infrastructure/persistence/Pagination.d.ts +6 -0
  70. package/dist/infrastructure/persistence/Pagination.d.ts.map +1 -1
  71. package/dist/infrastructure/persistence/Pagination.js +25 -0
  72. package/dist/infrastructure/persistence/Pagination.js.map +1 -1
  73. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.d.ts +11 -1
  74. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.d.ts.map +1 -1
  75. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.js +7 -3
  76. package/dist/infrastructure/storage/SqliteMantleStorageAdapter.js.map +1 -1
  77. package/dist/infrastructure/testing/HttpBenchmarkHarness.d.ts +26 -1
  78. package/dist/infrastructure/testing/HttpBenchmarkHarness.d.ts.map +1 -1
  79. package/dist/infrastructure/testing/HttpBenchmarkHarness.js +27 -12
  80. package/dist/infrastructure/testing/HttpBenchmarkHarness.js.map +1 -1
  81. package/dist/infrastructure/testing/StorageConformance.d.ts +32 -0
  82. package/dist/infrastructure/testing/StorageConformance.d.ts.map +1 -0
  83. package/dist/infrastructure/testing/StorageConformance.js +305 -0
  84. package/dist/infrastructure/testing/StorageConformance.js.map +1 -0
  85. package/dist/testing-storage.d.ts +3 -0
  86. package/dist/testing-storage.d.ts.map +1 -0
  87. package/dist/testing-storage.js +3 -0
  88. package/dist/testing-storage.js.map +1 -0
  89. package/dist/usecase/content/ListEntriesUseCase.d.ts +1 -1
  90. package/dist/usecase/content/ListEntriesUseCase.d.ts.map +1 -1
  91. package/dist/usecase/content/ListEntriesUseCase.js +18 -2
  92. package/dist/usecase/content/ListEntriesUseCase.js.map +1 -1
  93. package/dist/usecase/dto/content/index.d.ts +2 -0
  94. package/dist/usecase/dto/content/index.d.ts.map +1 -1
  95. package/dist/usecase/media/DeleteMediaAssetUseCase.d.ts +3 -3
  96. package/dist/usecase/media/DeleteMediaAssetUseCase.d.ts.map +1 -1
  97. package/dist/usecase/media/DeleteMediaAssetUseCase.js +35 -19
  98. package/dist/usecase/media/DeleteMediaAssetUseCase.js.map +1 -1
  99. package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts +8 -2
  100. package/dist/usecase/procedure/InvokeBuiltinUseCase.d.ts.map +1 -1
  101. package/dist/usecase/procedure/InvokeBuiltinUseCase.js +96 -14
  102. package/dist/usecase/procedure/InvokeBuiltinUseCase.js.map +1 -1
  103. package/dist/usecase/procedure/InvokeProcedureUseCase.js +2 -2
  104. package/dist/usecase/procedure/InvokeProcedureUseCase.js.map +1 -1
  105. package/dist/usecase/site/UpdateSiteSettingsUseCase.d.ts.map +1 -1
  106. package/dist/usecase/site/UpdateSiteSettingsUseCase.js +8 -1
  107. package/dist/usecase/site/UpdateSiteSettingsUseCase.js.map +1 -1
  108. package/package.json +9 -5
@@ -1,9 +1,9 @@
1
- import { type MediaPurposePolicy, type ProcedureManifest, type SchemaManifest, type SiteIcon, type ViewManifest } from "@aotter/mantle-spec";
1
+ import { type Diagnostic, type MediaPurposePolicy, type SchemaManifest, type SiteIcon } from "@aotter/mantle-spec";
2
2
  import type { HandlerContext } from "../../domain/model/HandlerContext.js";
3
- import { ArchiveUseCase, CreateDraftUseCase, DeleteEntryUseCase, GetEntryUseCase, ListEntriesUseCase, RequestPublishUseCase, UnpublishUseCase, UpdateDraftUseCase } from "../../usecase/content/index.js";
3
+ import { ArchiveUseCase, CreateDraftUseCase, DeleteEntryUseCase, GetEntryUseCase, RequestPublishUseCase, UnpublishUseCase, UpdateDraftUseCase } from "../../usecase/content/index.js";
4
4
  import { CommitMediaUploadUseCase, CreateMediaUploadUseCase } from "../../usecase/media/index.js";
5
5
  import { ExecuteViewUseCase } from "../../usecase/view/index.js";
6
- import { InvokeProcedureUseCase } from "../../usecase/procedure/InvokeProcedureUseCase.js";
6
+ import type { RuntimeCallableCapability } from "../../domain/service/CallableCapabilityProjector.js";
7
7
  import { type McpToolSurface } from "./McpToolCatalog.js";
8
8
  export declare const MCP_PROTOCOL_VERSION = "2025-11-25";
9
9
  export interface McpServerInfo {
@@ -22,7 +22,6 @@ export interface McpServerInfo {
22
22
  * assembly root assembles these alongside everything else).
23
23
  */
24
24
  export interface McpUseCases {
25
- readonly listEntries: ListEntriesUseCase;
26
25
  readonly getEntry: GetEntryUseCase;
27
26
  readonly createDraft: CreateDraftUseCase;
28
27
  readonly updateDraft: UpdateDraftUseCase;
@@ -31,11 +30,22 @@ export interface McpUseCases {
31
30
  readonly archive: ArchiveUseCase;
32
31
  readonly deleteEntry: DeleteEntryUseCase;
33
32
  readonly executeView?: Pick<ExecuteViewUseCase, "execute">;
34
- /** Optional. When set together with `options.procedures`, MCP
35
- * Triggers (#281) route through here. The dispatcher evaluates the
36
- * Procedure's `requires.auth` against the HandlerContext before
37
- * invoking. */
38
- readonly invokeProcedure?: Pick<InvokeProcedureUseCase, "execute">;
33
+ /** Optional. Trigger-backed callable capabilities route through the
34
+ * runtime's shared Trigger invocation chokepoint. */
35
+ readonly invokeTrigger?: {
36
+ execute(request: {
37
+ readonly trigger: string;
38
+ readonly input: unknown;
39
+ readonly ctx: HandlerContext;
40
+ readonly pathPrefix?: string;
41
+ }): Promise<{
42
+ readonly ok: true;
43
+ readonly data: unknown;
44
+ } | {
45
+ readonly ok: false;
46
+ readonly diagnostic: Diagnostic;
47
+ }>;
48
+ };
39
49
  /** Optional. When set, `create_media_upload` and
40
50
  * `commit_media_upload` appear in the catalog and route here.
41
51
  * `purposes` is the declared taxonomy (#272 shape — name +
@@ -60,21 +70,16 @@ export declare class McpJsonRpcDispatcher {
60
70
  * collection name. */
61
71
  private readonly schemaBySegment;
62
72
  private readonly readOnlyCollections;
63
- private readonly viewBySegment;
64
- /** tool-name → Procedure manifest, for MCP triggers (#281). */
65
- private readonly procedureByToolName;
73
+ private readonly capabilityByToolName;
66
74
  constructor(useCases: McpUseCases, schemas: ReadonlyArray<SchemaManifest>, options?: {
67
75
  readonly surface?: McpToolSurface;
68
- readonly views?: ReadonlyArray<ViewManifest>;
69
- /** Procedures exposed on this MCP surface via
70
- * `Trigger.source.kind: "mcp"` (#281). Adapter pre-filters
71
- * by surface; dispatcher trusts the slice. */
72
- readonly procedures?: ReadonlyArray<ProcedureManifest>;
76
+ readonly capabilities?: readonly RuntimeCallableCapability[];
73
77
  readonly serverInfo?: McpServerInfo;
74
78
  });
75
79
  dispatch(req: Request, ctx: HandlerContext): Promise<Response>;
76
80
  private handleToolCall;
77
81
  private dispatchToolByName;
82
+ private assertStaffRole;
78
83
  private assertEntryMutable;
79
84
  }
80
85
  //# sourceMappingURL=McpJsonRpcDispatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"McpJsonRpcDispatcher.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/mcp/McpJsonRpcDispatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"McpJsonRpcDispatcher.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/mcp/McpJsonRpcDispatcher.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { DiagnosticError, redactForWire, runtimeDiagnostic, } from "@aotter/mantle-spec";
2
- import { mcpToolNameSegment } from "@aotter/mantle-spec";
3
- import { CREATE_DRAFT_PREFIX, CREATE_RECORD_PREFIX, QUERY_VIEW_PREFIX, UPDATE_DRAFT_PREFIX, UPDATE_RECORD_PREFIX, buildMcpToolCatalog, extractCollectionSegment, } from "./McpToolCatalog.js";
1
+ import { DiagnosticError, meetsRole, mcpToolNameSegment, redactForWire, runtimeDiagnostic, resolveLifecycle, } from "@aotter/mantle-spec";
2
+ import { CREATE_DRAFT_PREFIX, CONTENT_LIFECYCLE_TOOLS, CREATE_RECORD_PREFIX, UPDATE_DRAFT_PREFIX, UPDATE_RECORD_PREFIX, buildMcpToolCatalog, extractCollectionSegment, } from "./McpToolCatalog.js";
4
3
  import { jsonRpcError, jsonRpcOk, jsonRpcOkRaw, } from "./McpResponses.js";
5
4
  import packageJson from "../../../package.json" with { type: "json" };
5
+ import { JsonBodyTooLargeError, readJsonBody } from "../http/readJsonBody.js";
6
6
  export const MCP_PROTOCOL_VERSION = "2025-11-25";
7
7
  export class McpJsonRpcDispatcher {
8
8
  useCases;
@@ -17,9 +17,7 @@ export class McpJsonRpcDispatcher {
17
17
  * collection name. */
18
18
  schemaBySegment;
19
19
  readOnlyCollections;
20
- viewBySegment;
21
- /** tool-name → Procedure manifest, for MCP triggers (#281). */
22
- procedureByToolName;
20
+ capabilityByToolName;
23
21
  constructor(useCases, schemas, options = {}) {
24
22
  this.useCases = useCases;
25
23
  this.schemas = schemas;
@@ -28,8 +26,7 @@ export class McpJsonRpcDispatcher {
28
26
  surface: options.surface ?? "staff",
29
27
  mediaEnabled: useCases.media !== undefined,
30
28
  mediaPurposes: useCases.media?.purposes,
31
- views: options.views,
32
- procedures: options.procedures,
29
+ capabilities: options.capabilities,
33
30
  });
34
31
  this.catalogWireJson = `{"tools":${JSON.stringify(this.catalog)}}`;
35
32
  this.catalogToolNames = new Set(this.catalog.map((tool) => tool.name));
@@ -38,15 +35,9 @@ export class McpJsonRpcDispatcher {
38
35
  for (const s of schemas)
39
36
  map.set(mcpToolNameSegment(s.metadata.name), s.metadata.name);
40
37
  this.schemaBySegment = map;
41
- const views = new Map();
42
- for (const v of options.views ?? [])
43
- views.set(mcpToolNameSegment(v.metadata.name), v);
44
- this.viewBySegment = views;
45
- const procs = new Map();
46
- for (const p of options.procedures ?? []) {
47
- procs.set(mcpToolNameSegment(p.metadata.name), p);
48
- }
49
- this.procedureByToolName = procs;
38
+ this.capabilityByToolName = new Map((options.capabilities ?? [])
39
+ .filter((item) => item.surface === (options.surface ?? "staff"))
40
+ .map((item) => [item.name, item]));
50
41
  }
51
42
  async dispatch(req, ctx) {
52
43
  if (req.method !== "POST") {
@@ -54,9 +45,12 @@ export class McpJsonRpcDispatcher {
54
45
  }
55
46
  let body;
56
47
  try {
57
- body = (await req.json());
48
+ body = (await readJsonBody(req));
58
49
  }
59
- catch {
50
+ catch (error) {
51
+ if (error instanceof JsonBodyTooLargeError) {
52
+ return new Response(error.message, { status: 413 });
53
+ }
60
54
  return jsonRpcError(null, -32700, "parse error");
61
55
  }
62
56
  if (!body
@@ -123,17 +117,12 @@ export class McpJsonRpcDispatcher {
123
117
  }
124
118
  }
125
119
  async dispatchToolByName(name, args, ctx) {
126
- // Procedure-derived MCP tools (#281). Check first on every
127
- // surface — a Procedure's tool name lives in the same namespace
128
- // as the per-collection / per-view tools, and the catalog
129
- // collision check runs at boot so we don't have to disambiguate
130
- // here.
131
- const procedure = this.procedureByToolName.get(name);
132
- if (procedure) {
133
- if (!this.useCases.invokeProcedure)
120
+ const capability = this.capabilityByToolName.get(name);
121
+ if (capability?.kind === "procedure") {
122
+ if (!this.useCases.invokeTrigger)
134
123
  return UNKNOWN_TOOL;
135
- const result = await this.useCases.invokeProcedure.execute({
136
- procedure,
124
+ const result = await this.useCases.invokeTrigger.execute({
125
+ trigger: capability.trigger,
137
126
  input: args,
138
127
  ctx,
139
128
  pathPrefix: `MCP ${name}`,
@@ -142,20 +131,15 @@ export class McpJsonRpcDispatcher {
142
131
  throw new DiagnosticError(result.diagnostic);
143
132
  return result.data;
144
133
  }
145
- // Views exist on both public and staff MCP surfaces. The adapter
146
- // passes a pre-filtered slice, so a guessed public call cannot
147
- // resolve a staff View while staff MCP can list and invoke it.
148
- const viewSegment = extractCollectionSegment(name, QUERY_VIEW_PREFIX);
149
- if (viewSegment) {
150
- const view = this.viewBySegment.get(viewSegment);
151
- if (!view || !this.useCases.executeView)
134
+ if (capability?.kind === "view") {
135
+ if (!this.useCases.executeView)
152
136
  return UNKNOWN_TOOL;
153
137
  // Use the adapter-normalized caller so the executeView use case can
154
138
  // evaluate `requires.auth.all`. Without
155
139
  // this, every auth-gated public-surface View returned
156
140
  // UNAUTHENTICATED for every caller including authenticated staff.
157
141
  const result = await this.useCases.executeView.execute({
158
- view,
142
+ view: capability.manifest,
159
143
  options: {
160
144
  params: stripViewReservedArgs(args),
161
145
  page: typeof args["page"] === "number" ? args["page"] : undefined,
@@ -171,35 +155,10 @@ export class McpJsonRpcDispatcher {
171
155
  if ((this.options.surface ?? "staff") === "public") {
172
156
  return UNKNOWN_TOOL;
173
157
  }
158
+ const minimumRole = genericStaffToolMinimumRole(name);
159
+ if (minimumRole)
160
+ this.assertStaffRole(name, ctx, minimumRole);
174
161
  switch (name) {
175
- case "list_entries": {
176
- const collection = args["collection"];
177
- if (typeof collection !== "string")
178
- return MISSING_ARG;
179
- // MCP exposes the cursored shape so agents can walk pages
180
- // through `nextCursor`. App code reaches for `execute()`
181
- // instead and gets a flat array.
182
- return this.useCases.listEntries.executePage({
183
- collection,
184
- status: args["status"],
185
- search: typeof args["search"] === "string" ? args["search"] : undefined,
186
- sort: typeof args["sort"] === "string"
187
- ? {
188
- field: args["sort"],
189
- direction: args["direction"] === "asc" ? "asc" : "desc",
190
- }
191
- : undefined,
192
- limit: typeof args["limit"] === "number" ? args["limit"] : undefined,
193
- cursor: typeof args["cursor"] === "string" ? args["cursor"] : undefined,
194
- cursorDirection: args["cursorDirection"] === "backward" ? "backward" : "forward",
195
- });
196
- }
197
- case "get_entry": {
198
- const id = args["id"];
199
- if (typeof id !== "string")
200
- return MISSING_ARG;
201
- return this.useCases.getEntry.execute({ id });
202
- }
203
162
  case "request_publish": {
204
163
  const id = args["id"];
205
164
  if (typeof id !== "string")
@@ -321,9 +280,7 @@ export class McpJsonRpcDispatcher {
321
280
  const expected = args["expected_version"];
322
281
  if (typeof id !== "string" || typeof expected !== "number")
323
282
  return MISSING_ARG;
324
- // Caller may also call get_entry separately; we don't need
325
- // the collection on the chokepoint args because UpdateDraft
326
- // looks it up from the existing row.
283
+ await this.assertEntryMutable(id, name, collection);
327
284
  const data = stripReservedArgs(args);
328
285
  return this.useCases.updateDraft.execute({
329
286
  id,
@@ -337,8 +294,35 @@ export class McpJsonRpcDispatcher {
337
294
  }
338
295
  }
339
296
  }
340
- async assertEntryMutable(id, toolName) {
297
+ assertStaffRole(toolName, ctx, minimumRole) {
298
+ const role = ctx.staff?.role;
299
+ if (role && meetsRole(role, minimumRole))
300
+ return;
301
+ throw new DiagnosticError(runtimeDiagnostic({
302
+ code: "AUTH_DENIED",
303
+ severity: "error",
304
+ path: `MCP ${toolName}`,
305
+ expected: `${minimumRole} role or higher for the signed-in staff user`,
306
+ message: `Tool '${toolName}' requires the ${minimumRole} role.`,
307
+ }));
308
+ }
309
+ async assertEntryMutable(id, toolName, collection) {
341
310
  const entry = await this.useCases.getEntry.execute({ id });
311
+ if (collection !== undefined && entry.collection !== collection) {
312
+ throw new DiagnosticError(runtimeDiagnostic({
313
+ code: "NOT_FOUND", severity: "error", path: `MCP ${toolName}`,
314
+ value: id, expected: `entry in '${collection}'`,
315
+ message: `No entry with id '${id}' in collection '${collection}'.`,
316
+ }));
317
+ }
318
+ const schema = this.schemas.find((s) => s.metadata.name === entry.collection);
319
+ if (CONTENT_LIFECYCLE_TOOLS.has(toolName) && (!schema || resolveLifecycle(schema) === "operational")) {
320
+ throw new DiagnosticError(runtimeDiagnostic({
321
+ code: "CONFLICT", severity: "error", path: `MCP ${toolName}`,
322
+ value: entry.collection, expected: "a content lifecycle",
323
+ message: `Tool '${toolName}' requires a content lifecycle; '${entry.collection}' does not support publishing transitions. Use its declared Procedures.`,
324
+ }));
325
+ }
342
326
  if (!this.readOnlyCollections.has(entry.collection))
343
327
  return;
344
328
  throw new DiagnosticError(runtimeDiagnostic({
@@ -353,6 +337,27 @@ export class McpJsonRpcDispatcher {
353
337
  }
354
338
  const UNKNOWN_TOOL = Symbol("unknown-tool");
355
339
  const MISSING_ARG = Symbol("missing-arg");
340
+ const EDITOR_GENERIC_TOOLS = new Set([
341
+ "request_publish",
342
+ "unpublish_entry",
343
+ "archive_entry",
344
+ "delete_entry",
345
+ "create_media_upload",
346
+ "commit_media_upload",
347
+ ]);
348
+ function genericStaffToolMinimumRole(name) {
349
+ if (EDITOR_GENERIC_TOOLS.has(name))
350
+ return "editor";
351
+ if (extractCollectionSegment(name, CREATE_RECORD_PREFIX) ||
352
+ extractCollectionSegment(name, UPDATE_RECORD_PREFIX)) {
353
+ return "editor";
354
+ }
355
+ if (extractCollectionSegment(name, CREATE_DRAFT_PREFIX) ||
356
+ extractCollectionSegment(name, UPDATE_DRAFT_PREFIX)) {
357
+ return "contributor";
358
+ }
359
+ return null;
360
+ }
356
361
  /**
357
362
  * Strip the `id` + `expected_version` envelope keys before passing
358
363
  * the rest to the chokepoint as `data`. Per-collection update tools
@@ -1 +1 @@
1
- {"version":3,"file":"McpJsonRpcDispatcher.js","sourceRoot":"","sources":["../../../src/infrastructure/mcp/McpJsonRpcDispatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"McpJsonRpcDispatcher.js","sourceRoot":"","sources":["../../../src/infrastructure/mcp/McpJsonRpcDispatcher.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { type MediaPurposePolicy, type ProcedureManifest, type SchemaManifest, type ViewManifest } from "@aotter/mantle-spec";
1
+ import { type MediaPurposePolicy, type SchemaManifest } from "@aotter/mantle-spec";
2
+ import type { RuntimeCallableCapability } from "../../domain/service/CallableCapabilityProjector.js";
2
3
  /**
3
- * MCP tool catalog. Mix of generic tools (read paths, status flips
4
- * that take only an `id`) plus per-collection emitted authoring
4
+ * MCP tool catalog. Mix of generic lifecycle tools plus per-collection emitted authoring
5
5
  * tools (`create_draft_*` / `update_draft_*` for authored content,
6
6
  * `create_record_*` / `update_record_*` for operational records)
7
7
  * with the Schema's properties inlined into the tool's `inputSchema`
@@ -29,8 +29,12 @@ import { type MediaPurposePolicy, type ProcedureManifest, type SchemaManifest, t
29
29
  */
30
30
  export interface McpToolDefinition {
31
31
  readonly name: string;
32
+ readonly title?: string;
32
33
  readonly description: string;
33
34
  readonly inputSchema: Record<string, unknown>;
35
+ readonly annotations?: {
36
+ readonly readOnlyHint?: boolean;
37
+ };
34
38
  }
35
39
  export declare const COMMIT_MEDIA_UPLOAD_TOOL: McpToolDefinition;
36
40
  export declare const GENERIC_TOOLS: readonly McpToolDefinition[];
@@ -60,14 +64,12 @@ export interface BuildMcpToolCatalogOpts {
60
64
  /** Staff surface exposes authoring / lifecycle tools. Public
61
65
  * surface exposes only read-only View queries for v0.1. */
62
66
  readonly surface?: McpToolSurface;
63
- readonly views?: ReadonlyArray<ViewManifest>;
64
- /** Procedures exposed on this MCP surface via `Trigger.source.kind: "mcp"`
65
- * (#281). The adapter pre-filters Triggers by surface and passes the
66
- * matching Procedures here. The catalog factory does NOT re-filter
67
- * by surface — caller is authoritative. */
68
- readonly procedures?: ReadonlyArray<ProcedureManifest>;
67
+ /** Sealed-plan callable projection. The same descriptors drive
68
+ * discovery and tools/call routing. */
69
+ readonly capabilities?: readonly RuntimeCallableCapability[];
69
70
  }
70
71
  export declare function buildMcpToolCatalog(schemas: ReadonlyArray<SchemaManifest>, opts?: BuildMcpToolCatalogOpts): readonly McpToolDefinition[];
72
+ export declare const CONTENT_LIFECYCLE_TOOLS: ReadonlySet<string>;
71
73
  /** Re-export the naming util from `domain/service/` so existing
72
74
  * consumers of `McpToolCatalog` (the dispatcher) keep their import
73
75
  * surface stable. */
@@ -1 +1 @@
1
- {"version":3,"file":"McpToolCatalog.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/mcp/McpToolCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/C;AAED,eAAO,MAAM,wBAAwB,EAAE,iBAiBtC,CAAC;AAqGF,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAgErD,CAAC;AAEF,eAAO,MAAM,mBAAmB,kBAA0B,CAAC;AAC3D,eAAO,MAAM,mBAAmB,kBAA0B,CAAC;AAC3D,eAAO,MAAM,oBAAoB,mBAA2B,CAAC;AAC7D,eAAO,MAAM,oBAAoB,mBAA2B,CAAC;AAC7D,eAAO,MAAM,iBAAiB,gBAAwB,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC;;uCAEmC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;sDAKkD;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvD;gEAC4D;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC7C;;;gDAG4C;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;CACxD;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,EACtC,IAAI,GAAE,uBAA4B,GACjC,SAAS,iBAAiB,EAAE,CAmB9B;AAiED;;sBAEsB;AACtB;oEACoE;AACpE,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAIf"}
1
+ {"version":3,"file":"McpToolCatalog.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/mcp/McpToolCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAaL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAEV,yBAAyB,EAE1B,MAAM,qDAAqD,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;KACjC,CAAC;CACH;AAED,eAAO,MAAM,wBAAwB,EAAE,iBAiBtC,CAAC;AAqGF,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAqCrD,CAAC;AAEF,eAAO,MAAM,mBAAmB,kBAA0B,CAAC;AAC3D,eAAO,MAAM,mBAAmB,kBAA0B,CAAC;AAC3D,eAAO,MAAM,oBAAoB,mBAA2B,CAAC;AAC7D,eAAO,MAAM,oBAAoB,mBAA2B,CAAC;AAC7D,eAAO,MAAM,iBAAiB,gBAAwB,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC;;uCAEmC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;sDAKkD;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvD;gEAC4D;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAClC;4CACwC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC9D;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,EACtC,IAAI,GAAE,uBAA4B,GACjC,SAAS,iBAAiB,EAAE,CA2B9B;AAED,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAEtD,CAAC;AAqFH;;sBAEsB;AACtB;oEACoE;AACpE,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAIf"}
@@ -1,4 +1,4 @@
1
- import { MANTLE_BIND_KEYWORD, MCP_CREATE_DRAFT_PREFIX, MCP_CREATE_RECORD_PREFIX, MCP_QUERY_VIEW_PREFIX, MCP_UPDATE_DRAFT_PREFIX, MCP_UPDATE_RECORD_PREFIX, mcpToolNameSegment, expandPolicyRequired, resolveLifecycle, resolveLocalizedText, } from "@aotter/mantle-spec";
1
+ import { MANTLE_BIND_KEYWORD, MCP_CREATE_DRAFT_PREFIX, MCP_CREATE_RECORD_PREFIX, MCP_QUERY_VIEW_PREFIX, MCP_UPDATE_DRAFT_PREFIX, MCP_UPDATE_RECORD_PREFIX, mcpToolNameSegment, expandPolicyRequired, resolveLifecycle, schemaSortableFields, resolveLocalizedText, } from "@aotter/mantle-spec";
2
2
  export const COMMIT_MEDIA_UPLOAD_TOOL = {
3
3
  name: "commit_media_upload",
4
4
  description: "Commit a previously-PUT variant bundle. Verifies every variant landed at the storage backend (HEAD + bytes per declared mime) and writes the committed MediaAsset to the media_assets table. Returns the asset with its variants populated; write the returned MediaAsset.id into the relevant media asset id field via the authoring tools. Only registered when the runtime has a media storage adapter bound and a media.purposes taxonomy declared.",
@@ -95,33 +95,6 @@ function buildCreateMediaUploadTool(mediaPurposes = []) {
95
95
  };
96
96
  }
97
97
  export const GENERIC_TOOLS = [
98
- {
99
- name: "list_entries",
100
- description: "Search, sort, and page through entries in a collection. Result is { rows, previousCursor?, nextCursor? }; cursors are opaque.",
101
- inputSchema: {
102
- type: "object",
103
- properties: {
104
- collection: { type: "string" },
105
- status: { type: "string", enum: ["draft", "published", "archived"] },
106
- search: { type: "string", description: "Substring matched against entry id and the Schema's searchableFields." },
107
- sort: { type: "string", description: "id, status, updatedAt, or a Schema-indexed required scalar field." },
108
- direction: { type: "string", enum: ["asc", "desc"] },
109
- limit: { type: "number" },
110
- cursor: { type: "string", description: "Opaque continuation token from a previous list_entries response." },
111
- cursorDirection: { type: "string", enum: ["forward", "backward"] },
112
- },
113
- required: ["collection"],
114
- },
115
- },
116
- {
117
- name: "get_entry",
118
- description: "Fetch a single entry by id.",
119
- inputSchema: {
120
- type: "object",
121
- properties: { id: { type: "string" } },
122
- required: ["id"],
123
- },
124
- },
125
98
  {
126
99
  name: "request_publish",
127
100
  description: "Publish a draft immediately. Not available for operational records.",
@@ -166,14 +139,22 @@ export const UPDATE_RECORD_PREFIX = MCP_UPDATE_RECORD_PREFIX;
166
139
  export const QUERY_VIEW_PREFIX = MCP_QUERY_VIEW_PREFIX;
167
140
  export function buildMcpToolCatalog(schemas, opts = {}) {
168
141
  const surface = opts.surface ?? "staff";
169
- const procedureTools = (opts.procedures ?? []).map(buildProcedureTool);
142
+ const capabilities = (opts.capabilities ?? []).filter((item) => item.surface === surface);
143
+ const callableTools = capabilities.map(buildCallableTool);
170
144
  if (surface === "public") {
171
- return collapseToolSchemaAnnotations([
172
- ...(opts.views ?? []).map(buildQueryViewTool),
173
- ...procedureTools,
174
- ]);
145
+ return collapseToolSchemaAnnotations(callableTools);
175
146
  }
176
- const out = [...GENERIC_TOOLS];
147
+ const writable = schemas.filter((s) => s.spec.schema.readOnly !== true);
148
+ const content = writable.filter((s) => resolveLifecycle(s) !== "operational");
149
+ const out = GENERIC_TOOLS.flatMap((tool) => {
150
+ const targets = CONTENT_LIFECYCLE_TOOLS.has(tool.name) ? content
151
+ : tool.name === "delete_entry" ? writable : schemas;
152
+ if (targets.length === 0)
153
+ return [];
154
+ const summary = targets.map((s) => `${s.metadata.name} (${resolveLifecycle(s)}${s.spec.schema.readOnly ? "; Procedure-only writes" : ""}; search: ${["id", ...(s.spec.searchableFields ?? [])].join(", ")}; sort: ${["id", "status", "updatedAt", ...schemaSortableFields(s)].join(", ")})`).join("; ");
155
+ return [{ ...tool, description: `${tool.description} Collections: ${summary}. Prefer declared business Procedures and Views when available.`,
156
+ }];
157
+ });
177
158
  if (opts.mediaEnabled)
178
159
  out.push(...buildMediaTools(opts.mediaPurposes ?? []));
179
160
  for (const s of schemas) {
@@ -182,10 +163,12 @@ export function buildMcpToolCatalog(schemas, opts = {}) {
182
163
  out.push(buildCreateTool(s));
183
164
  out.push(buildUpdateTool(s));
184
165
  }
185
- out.push(...(opts.views ?? []).map(buildQueryViewTool));
186
- out.push(...procedureTools);
166
+ out.push(...callableTools);
187
167
  return collapseToolSchemaAnnotations(out);
188
168
  }
169
+ export const CONTENT_LIFECYCLE_TOOLS = new Set([
170
+ "request_publish", "unpublish_entry", "archive_entry",
171
+ ]);
189
172
  function collapseToolSchemaAnnotations(tools) {
190
173
  return tools.map((tool) => ({
191
174
  ...tool,
@@ -242,6 +225,23 @@ function collapseSchemaAnnotations(schema) {
242
225
  function isRecord(value) {
243
226
  return typeof value === "object" && value !== null && !Array.isArray(value);
244
227
  }
228
+ const OBSERVED_VERSION_DESCRIPTION = "Observed native entry.version at read time (not version+1). A successful write still bumps storage to this value + 1. First-party Admin/SDK bind this field automatically; other callers must send the version they read.";
229
+ function annotateExpectedVersion(schema) {
230
+ const properties = schema["properties"];
231
+ if (!isRecord(properties) || !isRecord(properties["expectedVersion"]))
232
+ return schema;
233
+ const current = properties["expectedVersion"];
234
+ const description = current["description"];
235
+ if (typeof description === "string" && description.trim())
236
+ return schema;
237
+ return {
238
+ ...schema,
239
+ properties: {
240
+ ...properties,
241
+ expectedVersion: { ...current, description: OBSERVED_VERSION_DESCRIPTION },
242
+ },
243
+ };
244
+ }
245
245
  /** Re-export the naming util from `domain/service/` so existing
246
246
  * consumers of `McpToolCatalog` (the dispatcher) keep their import
247
247
  * surface stable. */
@@ -275,7 +275,7 @@ function buildUpdateTool(schema) {
275
275
  id: { type: "string", description: "Entry id to update." },
276
276
  expected_version: {
277
277
  type: "number",
278
- description: "OCC version (must match current row version).",
278
+ description: "Observed native entry.version at read time (not version+1). A successful write still bumps storage to this value + 1.",
279
279
  },
280
280
  ...properties,
281
281
  },
@@ -291,8 +291,7 @@ function buildUpdateTool(schema) {
291
291
  * Per-Procedure MCP tool factory (#281). The Procedure's `input`
292
292
  * JSON Schema becomes the tool's `inputSchema`; localized schema
293
293
  * annotations are collapsed at the catalog boundary. The
294
- * description comes from `input.description` when set, otherwise a
295
- * generic stub naming the Procedure. `output` is not surfaced — MCP
294
+ * description comes from the projected Procedure contract. `output` is not surfaced — MCP
296
295
  * clients infer the response shape from the `tools/call` result.
297
296
  *
298
297
  * Naming: the tool name is the Procedure's metadata name mangled
@@ -300,39 +299,26 @@ function buildUpdateTool(schema) {
300
299
  * that the mangled name does not collide with generic tools, media
301
300
  * tools, or per-schema authoring tools.
302
301
  */
303
- function buildProcedureTool(procedure) {
304
- const input = procedure.spec.input;
305
- // `input.description` is the standard JSON Schema keyword and, like
306
- // property `description` (#453, same LocalizedText shape as property
307
- // `title` — #443), may be a locale map for the admin UI's benefit.
308
- // MCP tool descriptions are plain strings read by the agent, not the
309
- // localized admin-UI surface, so collapse to `en` (or the map's first
310
- // entry) here rather than passing a locale map through.
311
- const description = resolveLocalizedText(input.description, "en") ??
312
- `Invoke Procedure '${procedure.metadata.name}'. Input shape declared by the manifest.`;
302
+ function buildCallableTool(capability) {
303
+ return capability.kind === "view"
304
+ ? buildQueryViewTool(capability)
305
+ : buildProcedureTool(capability);
306
+ }
307
+ function buildProcedureTool(capability) {
313
308
  return {
314
- name: mcpToolNameSegment(procedure.metadata.name),
315
- description: `${description}${authorizationSummary(procedure.spec.requires)}`,
316
- inputSchema: input,
309
+ name: capability.name,
310
+ ...(capability.title ? { title: capability.title } : {}),
311
+ description: `${capability.description}${authorizationSummary(capability.manifest.spec.requires)}`,
312
+ inputSchema: annotateExpectedVersion(capability.inputSchema),
317
313
  };
318
314
  }
319
- function buildQueryViewTool(view) {
320
- const params = view.spec.params;
321
- const properties = {
322
- ...(params?.properties ?? {}),
323
- page: { type: "number", description: "Optional 1-based page number." },
324
- show: { type: "number", description: "Optional page size, capped by the View limit." },
325
- };
326
- const inputSchema = {
327
- type: "object",
328
- properties,
329
- };
330
- if (params?.required?.length)
331
- inputSchema["required"] = params.required;
315
+ function buildQueryViewTool(capability) {
332
316
  return {
333
- name: `${QUERY_VIEW_PREFIX}${mcpToolNameSegment(view.metadata.name)}`,
334
- description: `Query ${view.spec.surface} View '${view.metadata.name}'.${authorizationSummary(view.spec.requires)}`,
335
- inputSchema,
317
+ name: capability.name,
318
+ ...(capability.title ? { title: capability.title } : {}),
319
+ description: `${capability.description}${authorizationSummary(capability.manifest.spec.requires)}`,
320
+ inputSchema: capability.inputSchema,
321
+ annotations: { readOnlyHint: true },
336
322
  };
337
323
  }
338
324
  function authorizationSummary(requires) {
@@ -356,12 +342,16 @@ function describeCreateTool(schema) {
356
342
  const base = resolveLifecycle(schema) === "operational"
357
343
  ? `Create a live operational record in '${schema.metadata.name}'.`
358
344
  : `Create a new draft entry in '${schema.metadata.name}'.`;
359
- return schema.spec.description ? `${base} ${schema.spec.description}`.trim() : base;
345
+ const description = resolveLocalizedText(schema.spec.description, "en");
346
+ return description ? `${base} ${description}` : base;
360
347
  }
361
348
  function describeUpdateTool(schema) {
362
- return resolveLifecycle(schema) === "operational"
363
- ? `Update an operational record in '${schema.metadata.name}' with optimistic-concurrency check.`
364
- : `Update a draft entry in '${schema.metadata.name}' with optimistic-concurrency check.`;
349
+ const occ = " Send expected_version as the observed native entry.version from read time, not version+1.";
350
+ const base = resolveLifecycle(schema) === "operational"
351
+ ? `Update an operational record in '${schema.metadata.name}' with optimistic-concurrency check.${occ}`
352
+ : `Update a draft entry in '${schema.metadata.name}' with optimistic-concurrency check.${occ}`;
353
+ const description = resolveLocalizedText(schema.spec.description, "en");
354
+ return description ? `${base} ${description}` : base;
365
355
  }
366
356
  /**
367
357
  * Strip server-stamped properties (those carrying `x-mantle-bind`) from