@descryy/mcp 0.4.0 → 0.6.0

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 (121) hide show
  1. package/dist/bin/descry-mcp.js +16 -2
  2. package/dist/bin/descry-mcp.js.map +1 -1
  3. package/dist/browser/driver.d.ts +105 -6
  4. package/dist/browser/driver.d.ts.map +1 -1
  5. package/dist/browser/driver.js +17 -3
  6. package/dist/browser/driver.js.map +1 -1
  7. package/dist/browser/evidence.d.ts +11 -0
  8. package/dist/browser/evidence.d.ts.map +1 -1
  9. package/dist/browser/evidence.js +64 -8
  10. package/dist/browser/evidence.js.map +1 -1
  11. package/dist/browser/fake-driver.d.ts +8 -0
  12. package/dist/browser/fake-driver.d.ts.map +1 -1
  13. package/dist/browser/fake-driver.js +26 -3
  14. package/dist/browser/fake-driver.js.map +1 -1
  15. package/dist/browser/playwright-driver.d.ts +68 -14
  16. package/dist/browser/playwright-driver.d.ts.map +1 -1
  17. package/dist/browser/playwright-driver.js +318 -38
  18. package/dist/browser/playwright-driver.js.map +1 -1
  19. package/dist/browser/provider.d.ts +10 -4
  20. package/dist/browser/provider.d.ts.map +1 -1
  21. package/dist/browser/provider.js +10 -4
  22. package/dist/browser/provider.js.map +1 -1
  23. package/dist/browser/scenario-runner.d.ts +9 -0
  24. package/dist/browser/scenario-runner.d.ts.map +1 -1
  25. package/dist/browser/scenario-runner.js +32 -2
  26. package/dist/browser/scenario-runner.js.map +1 -1
  27. package/dist/browser/tool-support.js +1 -1
  28. package/dist/browser/tool-support.js.map +1 -1
  29. package/dist/cancellation.d.ts +55 -0
  30. package/dist/cancellation.d.ts.map +1 -0
  31. package/dist/cancellation.js +76 -0
  32. package/dist/cancellation.js.map +1 -0
  33. package/dist/capped.d.ts +41 -0
  34. package/dist/capped.d.ts.map +1 -0
  35. package/dist/capped.js +35 -0
  36. package/dist/capped.js.map +1 -0
  37. package/dist/registry.d.ts +20 -1
  38. package/dist/registry.d.ts.map +1 -1
  39. package/dist/registry.js +71 -4
  40. package/dist/registry.js.map +1 -1
  41. package/dist/render.d.ts +92 -0
  42. package/dist/render.d.ts.map +1 -1
  43. package/dist/render.js +250 -5
  44. package/dist/render.js.map +1 -1
  45. package/dist/runtime-registry.d.ts +19 -1
  46. package/dist/runtime-registry.d.ts.map +1 -1
  47. package/dist/runtime-registry.js +88 -4
  48. package/dist/runtime-registry.js.map +1 -1
  49. package/dist/server.d.ts +19 -0
  50. package/dist/server.d.ts.map +1 -1
  51. package/dist/server.js +135 -11
  52. package/dist/server.js.map +1 -1
  53. package/dist/session.d.ts +22 -0
  54. package/dist/session.d.ts.map +1 -1
  55. package/dist/session.js +27 -1
  56. package/dist/session.js.map +1 -1
  57. package/dist/tools/analyze.d.ts +23 -3
  58. package/dist/tools/analyze.d.ts.map +1 -1
  59. package/dist/tools/analyze.js +35 -3
  60. package/dist/tools/analyze.js.map +1 -1
  61. package/dist/tools/browser-click.d.ts.map +1 -1
  62. package/dist/tools/browser-click.js +14 -0
  63. package/dist/tools/browser-click.js.map +1 -1
  64. package/dist/tools/browser-fill.d.ts.map +1 -1
  65. package/dist/tools/browser-fill.js +14 -0
  66. package/dist/tools/browser-fill.js.map +1 -1
  67. package/dist/tools/browser-navigate.d.ts.map +1 -1
  68. package/dist/tools/browser-navigate.js +14 -0
  69. package/dist/tools/browser-navigate.js.map +1 -1
  70. package/dist/tools/browser-run-scenario.d.ts.map +1 -1
  71. package/dist/tools/browser-run-scenario.js +12 -3
  72. package/dist/tools/browser-run-scenario.js.map +1 -1
  73. package/dist/tools/browser-save-scenario.d.ts.map +1 -1
  74. package/dist/tools/browser-save-scenario.js +109 -3
  75. package/dist/tools/browser-save-scenario.js.map +1 -1
  76. package/dist/tools/browser-start-session.d.ts.map +1 -1
  77. package/dist/tools/browser-start-session.js +43 -0
  78. package/dist/tools/browser-start-session.js.map +1 -1
  79. package/dist/tools/browser-type.d.ts.map +1 -1
  80. package/dist/tools/browser-type.js +14 -0
  81. package/dist/tools/browser-type.js.map +1 -1
  82. package/dist/tools/contracts.d.ts +41 -10
  83. package/dist/tools/contracts.d.ts.map +1 -1
  84. package/dist/tools/contracts.js +117 -17
  85. package/dist/tools/contracts.js.map +1 -1
  86. package/dist/tools/cross-pr.d.ts +39 -10
  87. package/dist/tools/cross-pr.d.ts.map +1 -1
  88. package/dist/tools/cross-pr.js +113 -29
  89. package/dist/tools/cross-pr.js.map +1 -1
  90. package/dist/tools/git-diff.d.ts.map +1 -1
  91. package/dist/tools/git-diff.js +30 -2
  92. package/dist/tools/git-diff.js.map +1 -1
  93. package/dist/tools/impact.d.ts.map +1 -1
  94. package/dist/tools/impact.js +50 -2
  95. package/dist/tools/impact.js.map +1 -1
  96. package/dist/tools/observe-runtime.d.ts.map +1 -1
  97. package/dist/tools/observe-runtime.js +84 -4
  98. package/dist/tools/observe-runtime.js.map +1 -1
  99. package/dist/tools/observe-tests.d.ts +12 -0
  100. package/dist/tools/observe-tests.d.ts.map +1 -1
  101. package/dist/tools/observe-tests.js +92 -8
  102. package/dist/tools/observe-tests.js.map +1 -1
  103. package/dist/tools/pre-push.d.ts +40 -7
  104. package/dist/tools/pre-push.d.ts.map +1 -1
  105. package/dist/tools/pre-push.js +65 -23
  106. package/dist/tools/pre-push.js.map +1 -1
  107. package/dist/tools/scope.d.ts.map +1 -1
  108. package/dist/tools/scope.js +20 -4
  109. package/dist/tools/scope.js.map +1 -1
  110. package/dist/tools/validate.d.ts +40 -1
  111. package/dist/tools/validate.d.ts.map +1 -1
  112. package/dist/tools/validate.js +150 -27
  113. package/dist/tools/validate.js.map +1 -1
  114. package/dist/tools/verification-status.d.ts.map +1 -1
  115. package/dist/tools/verification-status.js +3 -3
  116. package/dist/tools/verification-status.js.map +1 -1
  117. package/dist/transport.d.ts +12 -1
  118. package/dist/transport.d.ts.map +1 -1
  119. package/dist/transport.js +30 -16
  120. package/dist/transport.js.map +1 -1
  121. package/package.json +22 -13
@@ -40,6 +40,24 @@
40
40
  * Every failure leaves here as a thrown `RuntimeAdapterLoadError` carrying the
41
41
  * specifier and the reason, so the caller cannot take an adapter without also
42
42
  * having to handle not getting one.
43
+ *
44
+ * ## B5: a bare specifier now resolves from the user's own repository first
45
+ *
46
+ * A bare specifier in a dynamic `import()` resolves against the IMPORTING
47
+ * MODULE's own location — this file's, unconditionally, before this fix. The
48
+ * documented launch (`npx -y @descryy/mcp <repo-path>`) puts this file inside
49
+ * an npx cache, so that root held only what npx installed; the user's
50
+ * repository, its `node_modules`, and the working directory were never
51
+ * consulted, which made the documented remedy ("install the adapter
52
+ * alongside this server") impossible under the documented configuration.
53
+ *
54
+ * `resolveAdapterModule` (below `loadRuntimeAdapter`) now tries three roots
55
+ * in order and names every one tried on failure: an already-resolved
56
+ * specifier is used directly; a bare specifier resolves from `repoPath` —
57
+ * the repository `observe_runtime` was pointed at — via `createRequire`
58
+ * anchored at that repo's own `package.json`; failing that, from this
59
+ * module's own closure, unchanged, so an adapter already declared as
60
+ * `@descryy/mcp`'s own dependency still resolves.
43
61
  */
44
62
  var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
45
63
  if (typeof path === "string" && /^\.\.?\//.test(path)) {
@@ -49,6 +67,9 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
49
67
  }
50
68
  return path;
51
69
  };
70
+ import { createRequire } from "node:module";
71
+ import { isAbsolute, join } from "node:path";
72
+ import { fileURLToPath, pathToFileURL } from "node:url";
52
73
  /**
53
74
  * Distinct from a generic `Error` so the tool can tell "the adapter would not
54
75
  * load" (a refusal it must disclose) apart from "the run itself broke" (a
@@ -90,14 +111,77 @@ function isRuntimeAdapter(value) {
90
111
  typeof candidate.stackTraceParser === "object" &&
91
112
  typeof candidate.sourceLocationResolver === "object");
92
113
  }
93
- export async function loadRuntimeAdapter(spec) {
94
- let module;
114
+ /**
115
+ * This module's own directory — the root a bare specifier resolves against
116
+ * TODAY, unchanged, and the one root that was reachable before this fix.
117
+ * Under the documented `npx -y @descryy/mcp <repo-path>` launch this is
118
+ * somewhere under an npx cache, which is never a directory the user
119
+ * installed anything into — the refusal below names it as exactly that,
120
+ * rather than presenting it as though it were installable.
121
+ */
122
+ const SERVER_OWN_ROOT = fileURLToPath(new URL(".", import.meta.url));
123
+ /** An absolute filesystem path or a `file://` URL: already fully resolved, nothing left for repoPath or the server's own closure to add. */
124
+ function isAlreadyResolved(specifier) {
125
+ return isAbsolute(specifier) || specifier.startsWith("file://");
126
+ }
127
+ async function importSpecifier(specifier) {
128
+ return (await import(__rewriteRelativeImportExtension(specifier)));
129
+ }
130
+ /**
131
+ * B5's fix. A bare specifier in a dynamic `import()` resolves against the
132
+ * IMPORTING MODULE's own location — this file's, under the previous,
133
+ * single-root version of this function — never against `repoPath` or
134
+ * `process.cwd()`. Under the documented `npx -y @descryy/mcp <repo-path>`
135
+ * launch that resolution root is an npx cache holding only what npx
136
+ * installed, so the documented remedy ("install the adapter alongside this
137
+ * server") was impossible: there was no directory the user controls on that
138
+ * resolution path at all.
139
+ *
140
+ * Three roots, tried in this order, and a failure names every one tried —
141
+ * never only the one that happened to throw last:
142
+ *
143
+ * 1. An already-resolved specifier (`isAlreadyResolved`) is fully explicit;
144
+ * used directly, and no other root applies to it.
145
+ * 2. The repository the server was pointed at (`repoPath`) — resolved via
146
+ * `createRequire` anchored at that repo's own `package.json`, so
147
+ * `npm i -D <adapter>` in the user's project — the mental model the
148
+ * documentation already gives every reader — actually works.
149
+ * 3. This module's own closure (`SERVER_OWN_ROOT`, today's only root) —
150
+ * kept last rather than removed, so an adapter declared as a real
151
+ * dependency of `@descryy/mcp` itself still resolves (see this fix's
152
+ * own decisions-inbox entry on `optionalDependencies`).
153
+ */
154
+ async function resolveAdapterModule(spec, repoPath) {
155
+ if (isAlreadyResolved(spec.module)) {
156
+ try {
157
+ return await importSpecifier(spec.module);
158
+ }
159
+ catch (error) {
160
+ throw new RuntimeAdapterLoadError(spec, describe(error));
161
+ }
162
+ }
163
+ const repoNodeModules = join(repoPath, "node_modules");
95
164
  try {
96
- module = (await import(__rewriteRelativeImportExtension(spec.module)));
165
+ const repoRequire = createRequire(pathToFileURL(join(repoPath, "package.json")));
166
+ const resolved = repoRequire.resolve(spec.module);
167
+ return await importSpecifier(pathToFileURL(resolved).href);
168
+ }
169
+ catch {
170
+ // Fall through to the server's own closure — recorded below only if
171
+ // that root also fails, so a successful fallback never mentions this
172
+ // attempt at all.
173
+ }
174
+ try {
175
+ return await importSpecifier(spec.module);
97
176
  }
98
177
  catch (error) {
99
- throw new RuntimeAdapterLoadError(spec, describe(error));
178
+ throw new RuntimeAdapterLoadError(spec, `looked in "${repoNodeModules}", then in the server's own dependencies at "${SERVER_OWN_ROOT}" -- neither ` +
179
+ `has ${JSON.stringify(spec.module)} (${describe(error)}). Install it in your project ` +
180
+ `(\`npm i -D ${spec.module}\`), or give an absolute path to its dist/index.js.`);
100
181
  }
182
+ }
183
+ export async function loadRuntimeAdapter(spec, repoPath) {
184
+ const module = await resolveAdapterModule(spec, repoPath);
101
185
  let factoryName = spec.export;
102
186
  if (factoryName === undefined) {
103
187
  const candidates = Object.keys(module).filter((key) => FACTORY_PATTERN.test(key) && typeof module[key] === "function");
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-registry.js","sourceRoot":"","sources":["../src/runtime-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-registry.js","sourceRoot":"","sources":["../src/runtime-registry.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -26,12 +26,31 @@
26
26
  * broken protocol produces an error frame.
27
27
  */
28
28
  import type { Session } from "./session.ts";
29
+ import { type ToolDefinition } from "./tools/index.ts";
29
30
  import type { Transport } from "./transport.ts";
30
31
  export interface McpServerOptions {
31
32
  readonly session: Session;
32
33
  readonly name?: string;
33
34
  readonly version?: string;
35
+ /**
36
+ * Overrides the registry. Exists for tests of *this* layer: the cancellation
37
+ * path needs a call that is still running when the notification arrives, and
38
+ * of the thirty registered tools exactly one reads `ctx.signal` at all, so
39
+ * driving the mechanism through the real registry would test that one tool's
40
+ * plumbing rather than the server's dispatch.
41
+ */
42
+ readonly tools?: readonly ToolDefinition[];
34
43
  }
44
+ /**
45
+ * Does this frame have to jump the transport's ordering queue?
46
+ *
47
+ * True for `notifications/cancelled` and nothing else. Exported because the
48
+ * stdio runner needs the answer and the knowledge of what MCP methods mean
49
+ * belongs here, not in a module that otherwise only knows about bytes. Never
50
+ * throws — a line that will not parse is the dispatcher's to reject, with the
51
+ * error frame it already knows how to build.
52
+ */
53
+ export declare function isOutOfBand(line: string): boolean;
35
54
  export interface McpServer {
36
55
  /** Handle one newline-delimited frame. Never throws; every failure becomes a frame. */
37
56
  dispatch(line: string, transport: Transport): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAyBH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAYhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AA4DD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAqNpE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AA4BH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAYhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjD;AAED,MAAM,WAAW,SAAS;IACxB,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AA4DD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAyTpE"}
package/dist/server.js CHANGED
@@ -25,17 +25,42 @@
25
25
  * content with `isError`, which the model can read and act on. Only genuinely
26
26
  * broken protocol produces an error frame.
27
27
  */
28
+ import { randomUUID } from "node:crypto";
28
29
  import { resolveActionDispatch } from "./action-handshake.js";
29
30
  import { fail, isRequest, negotiateVersion, ok, parseMessage, ProtocolError, RPC_INTERNAL_ERROR, RPC_INVALID_PARAMS, RPC_METHOD_NOT_FOUND, } from "./protocol.js";
30
- import { renderAnswer, renderFailed, renderHandshake, renderTimedOut, renderToolError, } from "./render.js";
31
+ import { renderAnswer, renderFailed, renderHandshake, renderTimedOut, renderToolError, TOOL_OUTPUT_SCHEMA, } from "./render.js";
31
32
  import { createDisclosureLedger } from "./disclosure-ledger.js";
32
- import { TOOLS, TOOLS_BY_NAME, ToolInputError } from "./tools/index.js";
33
+ import { TOOLS, TOOLS_BY_NAME, ToolInputError, } from "./tools/index.js";
33
34
  /** Every call's declared budget (§6). Fixed today; per-trigger budgets are P26/P28 work. */
34
35
  const CALL_BUDGET_MS = 15 * 60 * 1000;
35
36
  function isAbort(error) {
36
37
  return ((error instanceof Error && error.name === "AbortError") ||
37
38
  (typeof DOMException !== "undefined" && error instanceof DOMException && error.name === "TimeoutError"));
38
39
  }
40
+ /**
41
+ * Does this frame have to jump the transport's ordering queue?
42
+ *
43
+ * True for `notifications/cancelled` and nothing else. Exported because the
44
+ * stdio runner needs the answer and the knowledge of what MCP methods mean
45
+ * belongs here, not in a module that otherwise only knows about bytes. Never
46
+ * throws — a line that will not parse is the dispatcher's to reject, with the
47
+ * error frame it already knows how to build.
48
+ */
49
+ export function isOutOfBand(line) {
50
+ try {
51
+ const message = JSON.parse(line);
52
+ if (typeof message !== "object" || message === null || Array.isArray(message))
53
+ return false;
54
+ const frame = message;
55
+ // A *request* named `notifications/cancelled` is malformed, not a
56
+ // cancellation. Letting it jump the queue would answer it out of order,
57
+ // which is the exact hazard the ordering exists to prevent.
58
+ return frame["method"] === "notifications/cancelled" && frame["id"] === undefined;
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ }
39
64
  const SERVER_INSTRUCTIONS = "Descry reads the repository's source into a code graph and answers questions about it.\n\n" +
40
65
  "Call `analyze` first — every other tool queries the graph it builds, and a stale graph " +
41
66
  "answers about code that has changed.\n\n" +
@@ -100,6 +125,17 @@ export function createMcpServer(options) {
100
125
  // `disclosure-ledger.ts` for why it is not shared across connections.
101
126
  const disclosureLedger = createDisclosureLedger();
102
127
  let initialized = false;
128
+ const tools = options.tools ?? TOOLS;
129
+ const toolsByName = options.tools === undefined
130
+ ? TOOLS_BY_NAME
131
+ : new Map(options.tools.map((tool) => [tool.name, tool]));
132
+ /**
133
+ * In-flight `tools/call`s, by request id, so `notifications/cancelled` has
134
+ * something to act on. Entries live exactly as long as the call: added
135
+ * before `tool.run`, removed in the `finally` that also drops the call's
136
+ * progress tick.
137
+ */
138
+ const pending = new Map();
103
139
  async function handleRequest(request, transport) {
104
140
  const { id, method } = request;
105
141
  const params = request.params ?? {};
@@ -122,7 +158,7 @@ export function createMcpServer(options) {
122
158
  }
123
159
  case "tools/list": {
124
160
  transport.send(ok(id, {
125
- tools: TOOLS.map((tool) => ({
161
+ tools: tools.map((tool) => ({
126
162
  name: tool.name,
127
163
  title: tool.title,
128
164
  description: tool.description,
@@ -138,12 +174,22 @@ export function createMcpServer(options) {
138
174
  // read it" reasoning as `class`, one line up.
139
175
  tier: tool.tier,
140
176
  toolVersion: tool.version,
177
+ // Every reply this server sends carries a `structuredContent`
178
+ // envelope, and without this a host has no way to validate one.
179
+ // Shared across all tools because the envelope is: see
180
+ // `TOOL_OUTPUT_SCHEMA`, including why `data` is left open.
181
+ outputSchema: TOOL_OUTPUT_SCHEMA,
141
182
  })),
142
183
  }));
143
184
  return;
144
185
  }
145
186
  case "tools/call": {
146
- transport.send(ok(id, await callTool(id, params, transport)));
187
+ const result = await callTool(id, params, transport);
188
+ // `null` means the call was cancelled while it ran. MCP forbids a
189
+ // response to a cancelled request, so the only correct frame here is
190
+ // no frame at all.
191
+ if (result !== null)
192
+ transport.send(ok(id, result));
147
193
  return;
148
194
  }
149
195
  default:
@@ -155,9 +201,9 @@ export function createMcpServer(options) {
155
201
  if (typeof name !== "string") {
156
202
  return renderToolError("tools/call", '"name" must be a string');
157
203
  }
158
- const tool = TOOLS_BY_NAME.get(name);
204
+ const tool = toolsByName.get(name);
159
205
  if (tool === undefined) {
160
- return renderToolError(name, `no such tool. Available: ${TOOLS.map((t) => t.name).join(", ")}.`);
206
+ return renderToolError(name, `no such tool. Available: ${tools.map((t) => t.name).join(", ")}.`);
161
207
  }
162
208
  const rawArgs = params["arguments"];
163
209
  if (rawArgs !== undefined && (typeof rawArgs !== "object" || rawArgs === null || Array.isArray(rawArgs))) {
@@ -185,12 +231,43 @@ export function createMcpServer(options) {
185
231
  });
186
232
  }
187
233
  : () => { };
234
+ // Two ways a call ends early, composed into the one signal the tool sees:
235
+ // its own budget running out, and the client asking for it to stop.
236
+ //
237
+ // **What this does and does not buy.** Aborting here stops the *server*
238
+ // waiting and suppresses the response the client is no longer listening
239
+ // for, which is the protocol's requirement and is met. It stops the actual
240
+ // work only in a tool that reads the signal it is handed, and today that is
241
+ // exactly one of thirty — `analyze`, which passes `ctx.signal` down. The
242
+ // other twenty-nine, `browser_run_scenario` and `observe_runtime` among
243
+ // them, take the signal and never look at it, so a cancelled call there
244
+ // leaves a real browser or a real application process running until it
245
+ // finishes on its own. That is a disclosed gap, filed as
246
+ // `DEC-NEXT-cancellation-reaches-one-tool-in-thirty.md`, not something this
247
+ // layer can fix from here — threading the signal is each tool's own work.
248
+ const controller = new AbortController();
249
+ pending.set(id, controller);
188
250
  const ctx = {
189
251
  session,
190
252
  progress,
191
- signal: AbortSignal.timeout(CALL_BUDGET_MS),
253
+ signal: AbortSignal.any([controller.signal, AbortSignal.timeout(CALL_BUDGET_MS)]),
192
254
  };
193
255
  const started = Date.now();
256
+ // B10: minted before any rendering happens, so every envelope this call
257
+ // can produce (handshake, failed, timed-out, or a real answer) carries
258
+ // the exact id `recordCallWithId` will file the record under below — a
259
+ // caller reading `callId` off the reply and citing it in `verify_claim`
260
+ // is citing the id that call is actually recorded as.
261
+ //
262
+ // `verify_claim` itself is the one exception, on the same reasoning as
263
+ // its exclusion from recording just below: it produces no fact for a
264
+ // later claim to cite, so its own `callId` is not drawn from the
265
+ // session's call-id sequence at all — `session.allocateCallId()` is
266
+ // reserved for calls that will actually be recorded under the id it
267
+ // returns. Reusing it here would consume a real id `verify_claim` never
268
+ // gets recorded under, opening a gap in the sequence a caller relies on
269
+ // corresponding exactly to recorded calls.
270
+ const callId = name === "verify_claim" ? randomUUID() : session.allocateCallId();
194
271
  const renderOptions = () => ({
195
272
  toolVersion: tool.version,
196
273
  toolClass: tool.class,
@@ -198,6 +275,7 @@ export function createMcpServer(options) {
198
275
  elapsedMs: Date.now() - started,
199
276
  limitMs: CALL_BUDGET_MS,
200
277
  disclosureLedger,
278
+ callId,
201
279
  });
202
280
  try {
203
281
  // §7's two-call handshake. Decided before any real work starts — a mint
@@ -208,16 +286,33 @@ export function createMcpServer(options) {
208
286
  return renderHandshake(name, dispatch.token, dispatch.willDo, renderOptions());
209
287
  }
210
288
  const outcome = await tool.run(dispatch.args, ctx);
289
+ // Cancelled while it was running, and it finished anyway — the client
290
+ // stopped listening for this id, so the answer is dropped rather than
291
+ // sent late. Not recorded on the session either: a fact the caller never
292
+ // received must not become one a later `verify_claim` can cite.
293
+ if (controller.signal.aborted)
294
+ return null;
211
295
  const rendered = renderAnswer(name, outcome, renderOptions());
212
296
  // MK-12: recorded after rendering, from the exact structuredContent the
213
297
  // host receives — not the pre-render outcome, which the host never
214
298
  // sees. `verify_claim` itself is excluded: it produces no fact for a
215
299
  // later claim to cite, only a verdict about other calls' facts.
300
+ //
301
+ // Recorded under `callId` — the same id `rendered.structuredContent`
302
+ // already carries as `callId` — rather than a freshly minted one
303
+ // (B10): the two must be the same value for a citation read off this
304
+ // reply to resolve.
216
305
  if (name !== "verify_claim")
217
- session.recordCall(name, args, rendered.structuredContent);
306
+ session.recordCallWithId(callId, name, args, rendered.structuredContent);
218
307
  return rendered;
219
308
  }
220
309
  catch (error) {
310
+ // Cancellation is checked before anything else, including
311
+ // `ToolInputError`: whatever the tool threw on its way out, the client
312
+ // has told us it is not listening, and the spec is explicit that a
313
+ // cancelled request gets no response at all.
314
+ if (controller.signal.aborted)
315
+ return null;
221
316
  if (error instanceof ToolInputError)
222
317
  return renderToolError(name, error.message);
223
318
  if (isAbort(error) || ctx.signal.aborted)
@@ -227,6 +322,31 @@ export function createMcpServer(options) {
227
322
  // error just ends the call with nothing it can use.
228
323
  return renderFailed(name, `${error instanceof Error ? error.message : String(error)}`, renderOptions());
229
324
  }
325
+ finally {
326
+ pending.delete(id);
327
+ }
328
+ }
329
+ /**
330
+ * Act on `notifications/cancelled`: abort the named call if it is still ours
331
+ * and still running.
332
+ *
333
+ * Silence in every other case is deliberate and is what the spec asks for. A
334
+ * cancellation racing a call that has already returned is ordinary client
335
+ * behaviour, not an error — the client sent it before our response reached
336
+ * it — and a notification cannot be answered anyway, so there is nowhere to
337
+ * report a bad `requestId` even if one were worth reporting.
338
+ */
339
+ function cancel(params) {
340
+ const requestId = params["requestId"];
341
+ if (typeof requestId !== "string" && typeof requestId !== "number")
342
+ return;
343
+ const controller = pending.get(requestId);
344
+ if (controller === undefined)
345
+ return;
346
+ const reason = params["reason"];
347
+ controller.abort(new Error(typeof reason === "string" && reason !== ""
348
+ ? `cancelled by client: ${reason}`
349
+ : "cancelled by client"));
230
350
  }
231
351
  // Monotonic per-request tick for narration with no natural count.
232
352
  const ticks = new Map();
@@ -258,9 +378,13 @@ export function createMcpServer(options) {
258
378
  if (!isRequest(message)) {
259
379
  if (message.method === "notifications/initialized")
260
380
  initialized = true;
261
- // Every other notification — cancellation, roots changed — is accepted
262
- // and ignored. A notification must never be answered, so silence here is
263
- // the protocol, not a gap.
381
+ else if (message.method === "notifications/cancelled")
382
+ cancel(message.params ?? {});
383
+ // Anything else — roots changed, and every notification a future spec
384
+ // adds — is accepted and ignored. A notification must never be
385
+ // answered, so silence on the wire is the protocol; silence *in
386
+ // response* is what cancellation could not afford, which is why it is
387
+ // the one handled above.
264
388
  return;
265
389
  }
266
390
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/session.d.ts CHANGED
@@ -314,6 +314,19 @@ export declare class Session {
314
314
  * live registry to record itself against.
315
315
  */
316
316
  dispose(): Promise<void>;
317
+ /**
318
+ * B10 — mint the next call id without recording anything yet.
319
+ *
320
+ * `server.ts` calls this before `renderAnswer` so the envelope can carry
321
+ * the id as `callId` (`render.ts`'s own doc on that field), and records
322
+ * under the same value afterwards with `recordCallWithId` — one id, used
323
+ * for both, rather than one minted for the reply and a different one
324
+ * minted later for the record. Exposed as its own method (rather than
325
+ * folded into `recordCall`) because the id has to exist *before* the
326
+ * result it will be recorded with does; there is no result yet at the
327
+ * point this is called.
328
+ */
329
+ allocateCallId(): string;
317
330
  /**
318
331
  * MK-12 — `verify_claim`'s fact boundary. Called once per completed tool
319
332
  * call from `server.ts`, right after rendering, with the exact
@@ -328,6 +341,15 @@ export declare class Session {
328
341
  * not a defect to guard against, the mechanism doing its job.
329
342
  */
330
343
  recordCall(tool: string, args: Record<string, unknown>, result: Record<string, unknown>): RecordedToolCall;
344
+ /**
345
+ * `recordCall`, under an id minted earlier by `allocateCallId` rather than
346
+ * one minted here — B10's fix. The id a caller reads off a real reply's
347
+ * `callId` is this exact value, so `recordedCall(id)` finds it: the
348
+ * positive path that was previously unreachable because the id the
349
+ * envelope would need did not exist until one step after the envelope was
350
+ * already built.
351
+ */
352
+ recordCallWithId(id: string, tool: string, args: Record<string, unknown>, result: Record<string, unknown>): RecordedToolCall;
331
353
  /** All calls recorded this session, oldest first. */
332
354
  recordedCalls(): readonly RecordedToolCall[];
333
355
  recordedCall(id: string): RecordedToolCall | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAsB,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAOL,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACX,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAiC,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACtH,OAAO,EAAgC,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IAClD;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACnD;;;;;;;;OAQG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC3D;;;;;;;;OAQG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAChD,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,oBAAoB,QAAiC,CAAC;AACnE,eAAO,MAAM,2BAA2B,QAA8B,CAAC;AAmGvE,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqDxE;AAgED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAqBpF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,aAAa,EAAE,GAC9B,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBpC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;CAAE,CAAC,CAoB7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAepC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAChC;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,OAAO;;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;gBAUlB,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK;WAM1E,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAM5D,IAAI,SAAS,IAAI,MAAM,CAItB;IAED,2CAA2C;IAC3C,KAAK,IAAI,KAAK;IAKd;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,IAAI;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAgBjD,QAAQ,IAAI,iBAAiB;IAK7B;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;IAe/B;;;;;;;;;;;;;OAaG;IACH,eAAe,IAAI,sBAAsB;IAKzC;;;;;;;;;OASG;IACH,cAAc,IAAI,cAAc;IAKhC;;;;;;;OAOG;IACH,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAO7C;;;;;;;OAOG;IACH,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAI5D;;;;;;;OAOG;IACH,KAAK,IAAI,IAAI;IAOb;;;;;;;;;;;OAWG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;;;;;;;;;OAWG;IACH,cAAc,IAAI,MAAM;IAIxB;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB;IAI1G;;;;;;;OAOG;IACH,gBAAgB,CACd,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,gBAAgB;IAMnB,qDAAqD;IACrD,aAAa,IAAI,SAAS,gBAAgB,EAAE;IAI5C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;CAGvD"}
package/dist/session.js CHANGED
@@ -562,6 +562,21 @@ export class Session {
562
562
  await this.#browserSessions.reapAll("clientDisconnect");
563
563
  this.close();
564
564
  }
565
+ /**
566
+ * B10 — mint the next call id without recording anything yet.
567
+ *
568
+ * `server.ts` calls this before `renderAnswer` so the envelope can carry
569
+ * the id as `callId` (`render.ts`'s own doc on that field), and records
570
+ * under the same value afterwards with `recordCallWithId` — one id, used
571
+ * for both, rather than one minted for the reply and a different one
572
+ * minted later for the record. Exposed as its own method (rather than
573
+ * folded into `recordCall`) because the id has to exist *before* the
574
+ * result it will be recorded with does; there is no result yet at the
575
+ * point this is called.
576
+ */
577
+ allocateCallId() {
578
+ return `call-${this.#nextCallId++}`;
579
+ }
565
580
  /**
566
581
  * MK-12 — `verify_claim`'s fact boundary. Called once per completed tool
567
582
  * call from `server.ts`, right after rendering, with the exact
@@ -576,7 +591,18 @@ export class Session {
576
591
  * not a defect to guard against, the mechanism doing its job.
577
592
  */
578
593
  recordCall(tool, args, result) {
579
- const call = { id: `call-${this.#nextCallId++}`, tool, args, result, at: Date.now() };
594
+ return this.recordCallWithId(this.allocateCallId(), tool, args, result);
595
+ }
596
+ /**
597
+ * `recordCall`, under an id minted earlier by `allocateCallId` rather than
598
+ * one minted here — B10's fix. The id a caller reads off a real reply's
599
+ * `callId` is this exact value, so `recordedCall(id)` finds it: the
600
+ * positive path that was previously unreachable because the id the
601
+ * envelope would need did not exist until one step after the envelope was
602
+ * already built.
603
+ */
604
+ recordCallWithId(id, tool, args, result) {
605
+ const call = { id, tool, args, result, at: Date.now() };
580
606
  this.#calls.push(call);
581
607
  return call;
582
608
  }