clinkx 0.1.10 → 0.2.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 (179) hide show
  1. package/clinkx-workflows/dist/artifacts.d.ts +65 -0
  2. package/clinkx-workflows/dist/artifacts.js +268 -0
  3. package/clinkx-workflows/dist/artifacts.js.map +1 -0
  4. package/clinkx-workflows/dist/backend.d.ts +33 -0
  5. package/clinkx-workflows/dist/backend.js +9 -0
  6. package/clinkx-workflows/dist/backend.js.map +1 -0
  7. package/clinkx-workflows/dist/child-env.d.ts +23 -0
  8. package/clinkx-workflows/dist/child-env.js +53 -0
  9. package/clinkx-workflows/dist/child-env.js.map +1 -0
  10. package/clinkx-workflows/dist/clink-client.d.ts +51 -0
  11. package/clinkx-workflows/dist/clink-client.js +216 -0
  12. package/clinkx-workflows/dist/clink-client.js.map +1 -0
  13. package/clinkx-workflows/dist/config.d.ts +126 -0
  14. package/clinkx-workflows/dist/config.js +226 -0
  15. package/clinkx-workflows/dist/config.js.map +1 -0
  16. package/clinkx-workflows/dist/definition-normalizer.d.ts +59 -0
  17. package/clinkx-workflows/dist/definition-normalizer.js +75 -0
  18. package/clinkx-workflows/dist/definition-normalizer.js.map +1 -0
  19. package/clinkx-workflows/dist/engine.d.ts +235 -0
  20. package/clinkx-workflows/dist/engine.js +1044 -0
  21. package/clinkx-workflows/dist/engine.js.map +1 -0
  22. package/clinkx-workflows/dist/errors.d.ts +74 -0
  23. package/clinkx-workflows/dist/errors.js +84 -0
  24. package/clinkx-workflows/dist/errors.js.map +1 -0
  25. package/clinkx-workflows/dist/fidelity.d.ts +112 -0
  26. package/clinkx-workflows/dist/fidelity.js +140 -0
  27. package/clinkx-workflows/dist/fidelity.js.map +1 -0
  28. package/clinkx-workflows/dist/fingerprint.d.ts +69 -0
  29. package/clinkx-workflows/dist/fingerprint.js +143 -0
  30. package/clinkx-workflows/dist/fingerprint.js.map +1 -0
  31. package/clinkx-workflows/dist/index.d.ts +16 -0
  32. package/clinkx-workflows/dist/index.js +42 -0
  33. package/clinkx-workflows/dist/index.js.map +1 -0
  34. package/clinkx-workflows/dist/loader.d.ts +64 -0
  35. package/clinkx-workflows/dist/loader.js +371 -0
  36. package/clinkx-workflows/dist/loader.js.map +1 -0
  37. package/clinkx-workflows/dist/logger.d.ts +16 -0
  38. package/clinkx-workflows/dist/logger.js +31 -0
  39. package/clinkx-workflows/dist/logger.js.map +1 -0
  40. package/clinkx-workflows/dist/path-validation.d.ts +23 -0
  41. package/clinkx-workflows/dist/path-validation.js +73 -0
  42. package/clinkx-workflows/dist/path-validation.js.map +1 -0
  43. package/clinkx-workflows/dist/prompt-budget.d.ts +31 -0
  44. package/clinkx-workflows/dist/prompt-budget.js +78 -0
  45. package/clinkx-workflows/dist/prompt-budget.js.map +1 -0
  46. package/clinkx-workflows/dist/queue.d.ts +16 -0
  47. package/clinkx-workflows/dist/queue.js +46 -0
  48. package/clinkx-workflows/dist/queue.js.map +1 -0
  49. package/clinkx-workflows/dist/ranking-reducer.d.ts +11 -0
  50. package/clinkx-workflows/dist/ranking-reducer.js +245 -0
  51. package/clinkx-workflows/dist/ranking-reducer.js.map +1 -0
  52. package/clinkx-workflows/dist/reducers/index.d.ts +8 -0
  53. package/clinkx-workflows/dist/reducers/index.js +12 -0
  54. package/clinkx-workflows/dist/reducers/index.js.map +1 -0
  55. package/clinkx-workflows/dist/run-id.d.ts +17 -0
  56. package/clinkx-workflows/dist/run-id.js +26 -0
  57. package/clinkx-workflows/dist/run-id.js.map +1 -0
  58. package/clinkx-workflows/dist/run-summary/cards/council-answer.d.ts +8 -0
  59. package/clinkx-workflows/dist/run-summary/cards/council-answer.js +75 -0
  60. package/clinkx-workflows/dist/run-summary/cards/council-answer.js.map +1 -0
  61. package/clinkx-workflows/dist/run-summary/cards/council-code-review.d.ts +13 -0
  62. package/clinkx-workflows/dist/run-summary/cards/council-code-review.js +90 -0
  63. package/clinkx-workflows/dist/run-summary/cards/council-code-review.js.map +1 -0
  64. package/clinkx-workflows/dist/run-summary/cards/council-debug.d.ts +9 -0
  65. package/clinkx-workflows/dist/run-summary/cards/council-debug.js +79 -0
  66. package/clinkx-workflows/dist/run-summary/cards/council-debug.js.map +1 -0
  67. package/clinkx-workflows/dist/run-summary/cards/council-default.d.ts +11 -0
  68. package/clinkx-workflows/dist/run-summary/cards/council-default.js +57 -0
  69. package/clinkx-workflows/dist/run-summary/cards/council-default.js.map +1 -0
  70. package/clinkx-workflows/dist/run-summary/cards/council-discover.d.ts +10 -0
  71. package/clinkx-workflows/dist/run-summary/cards/council-discover.js +79 -0
  72. package/clinkx-workflows/dist/run-summary/cards/council-discover.js.map +1 -0
  73. package/clinkx-workflows/dist/run-summary/cards/generic.d.ts +2 -0
  74. package/clinkx-workflows/dist/run-summary/cards/generic.js +4 -0
  75. package/clinkx-workflows/dist/run-summary/cards/generic.js.map +1 -0
  76. package/clinkx-workflows/dist/run-summary/cards/index.d.ts +6 -0
  77. package/clinkx-workflows/dist/run-summary/cards/index.js +17 -0
  78. package/clinkx-workflows/dist/run-summary/cards/index.js.map +1 -0
  79. package/clinkx-workflows/dist/run-summary/utils.d.ts +6 -0
  80. package/clinkx-workflows/dist/run-summary/utils.js +30 -0
  81. package/clinkx-workflows/dist/run-summary/utils.js.map +1 -0
  82. package/clinkx-workflows/dist/run-summary-derived.d.ts +19 -0
  83. package/clinkx-workflows/dist/run-summary-derived.js +100 -0
  84. package/clinkx-workflows/dist/run-summary-derived.js.map +1 -0
  85. package/clinkx-workflows/dist/run-summary.d.ts +70 -0
  86. package/clinkx-workflows/dist/run-summary.js +125 -0
  87. package/clinkx-workflows/dist/run-summary.js.map +1 -0
  88. package/clinkx-workflows/dist/schema.d.ts +609 -0
  89. package/clinkx-workflows/dist/schema.js +123 -0
  90. package/clinkx-workflows/dist/schema.js.map +1 -0
  91. package/clinkx-workflows/dist/server.d.ts +16 -0
  92. package/clinkx-workflows/dist/server.js +33 -0
  93. package/clinkx-workflows/dist/server.js.map +1 -0
  94. package/clinkx-workflows/dist/shutdown.d.ts +54 -0
  95. package/clinkx-workflows/dist/shutdown.js +120 -0
  96. package/clinkx-workflows/dist/shutdown.js.map +1 -0
  97. package/clinkx-workflows/dist/state-schema.d.ts +141 -0
  98. package/clinkx-workflows/dist/state-schema.js +21 -0
  99. package/clinkx-workflows/dist/state-schema.js.map +1 -0
  100. package/clinkx-workflows/dist/state.d.ts +37 -0
  101. package/clinkx-workflows/dist/state.js +838 -0
  102. package/clinkx-workflows/dist/state.js.map +1 -0
  103. package/clinkx-workflows/dist/template-loader.d.ts +30 -0
  104. package/clinkx-workflows/dist/template-loader.js +77 -0
  105. package/clinkx-workflows/dist/template-loader.js.map +1 -0
  106. package/clinkx-workflows/dist/template.d.ts +54 -0
  107. package/clinkx-workflows/dist/template.js +128 -0
  108. package/clinkx-workflows/dist/template.js.map +1 -0
  109. package/clinkx-workflows/dist/transport.d.ts +91 -0
  110. package/clinkx-workflows/dist/transport.js +249 -0
  111. package/clinkx-workflows/dist/transport.js.map +1 -0
  112. package/clinkx-workflows/dist/types.d.ts +137 -0
  113. package/clinkx-workflows/dist/types.js +11 -0
  114. package/clinkx-workflows/dist/types.js.map +1 -0
  115. package/clinkx-workflows/dist/validators/council.d.ts +1488 -0
  116. package/clinkx-workflows/dist/validators/council.js +509 -0
  117. package/clinkx-workflows/dist/validators/council.js.map +1 -0
  118. package/clinkx-workflows/dist/validators/index.d.ts +40 -0
  119. package/clinkx-workflows/dist/validators/index.js +43 -0
  120. package/clinkx-workflows/dist/validators/index.js.map +1 -0
  121. package/clinkx-workflows/dist/workflow-receipt.d.ts +4 -0
  122. package/clinkx-workflows/dist/workflow-receipt.js +177 -0
  123. package/clinkx-workflows/dist/workflow-receipt.js.map +1 -0
  124. package/clinkx-workflows/dist/workflow-tools.d.ts +77 -0
  125. package/clinkx-workflows/dist/workflow-tools.js +1131 -0
  126. package/clinkx-workflows/dist/workflow-tools.js.map +1 -0
  127. package/clinkx-workflows/dist/workflows/council-default.d.ts +123 -0
  128. package/clinkx-workflows/dist/workflows/council-default.js +141 -0
  129. package/clinkx-workflows/dist/workflows/council-default.js.map +1 -0
  130. package/clinkx-workflows/dist/workflows/index.d.ts +12 -0
  131. package/clinkx-workflows/dist/workflows/index.js +15 -0
  132. package/clinkx-workflows/dist/workflows/index.js.map +1 -0
  133. package/conf/adapters/claude.json +13 -1
  134. package/conf/adapters/codex.json +11 -2
  135. package/conf/adapters/gemini.json +9 -0
  136. package/conf/adapters/glm.json +10 -0
  137. package/conf/adapters/hapi/claude.json +12 -2
  138. package/conf/adapters/hapi/codex.json +11 -2
  139. package/conf/adapters/hapi/gemini.json +9 -0
  140. package/conf/adapters/hapi/glm.json +10 -0
  141. package/conf/prompts/json-codereviewer.txt +6 -0
  142. package/conf/prompts/json-debug.txt +5 -0
  143. package/conf/prompts/json-default.txt +5 -0
  144. package/conf/prompts/json.txt +4 -1
  145. package/dist/config.d.ts +29 -4
  146. package/dist/config.js +23 -3
  147. package/dist/config.js.map +1 -1
  148. package/dist/handler.d.ts +2 -0
  149. package/dist/handler.js +2 -1
  150. package/dist/handler.js.map +1 -1
  151. package/dist/local-clink-backend.d.ts +30 -0
  152. package/dist/local-clink-backend.js +106 -0
  153. package/dist/local-clink-backend.js.map +1 -0
  154. package/dist/parsers/claude-stream-json.d.ts +1 -1
  155. package/dist/parsers/claude-stream-json.js +26 -8
  156. package/dist/parsers/claude-stream-json.js.map +1 -1
  157. package/dist/parsers/extract.d.ts +2 -0
  158. package/dist/parsers/extract.js +46 -20
  159. package/dist/parsers/extract.js.map +1 -1
  160. package/dist/pipeline.d.ts +2 -4
  161. package/dist/pipeline.js +246 -31
  162. package/dist/pipeline.js.map +1 -1
  163. package/dist/prompt.js +8 -1
  164. package/dist/prompt.js.map +1 -1
  165. package/dist/registry.d.ts +4 -0
  166. package/dist/registry.js +14 -0
  167. package/dist/registry.js.map +1 -1
  168. package/dist/result-contract.d.ts +6 -1
  169. package/dist/result-contract.js +10 -22
  170. package/dist/result-contract.js.map +1 -1
  171. package/dist/runner.js +59 -12
  172. package/dist/runner.js.map +1 -1
  173. package/dist/schema.d.ts +20 -0
  174. package/dist/schema.js +29 -2
  175. package/dist/schema.js.map +1 -1
  176. package/dist/server.d.ts +3 -3
  177. package/dist/server.js +119 -45
  178. package/dist/server.js.map +1 -1
  179. package/package.json +12 -5
@@ -10,4 +10,9 @@
10
10
  * - The file doesn't exist
11
11
  * - The file fails safety checks
12
12
  */
13
- export declare function readResultFile(runDir: string, filename: string): string | null;
13
+ export type ResultContractStatus = "ok" | "missing" | "disabled" | "empty" | "oversize" | "read_error" | "not_allowed" | "symlink" | "not_file" | "path_escape" | "realpath_failed";
14
+ export interface ResultContractOutcome {
15
+ content: string | null;
16
+ status: ResultContractStatus;
17
+ }
18
+ export declare function readResultFile(runDir: string, filename: string): ResultContractOutcome;
@@ -3,22 +3,10 @@ import * as path from "node:path";
3
3
  import { logger } from "./logger.js";
4
4
  /** Filenames we're willing to read from a run directory. */
5
5
  const ALLOWED_RESULT_FILES = new Set(["RESULT.md", "RESULT.json"]);
6
- /**
7
- * Safely read a result contract file from a run working directory.
8
- *
9
- * Safety rules:
10
- * 1. Only allowlisted filenames (RESULT.md, RESULT.json)
11
- * 2. lstat must show a regular file (not a symlink)
12
- * 3. realpath must resolve within the run directory
13
- *
14
- * Returns file contents as a string, or null if:
15
- * - The file doesn't exist
16
- * - The file fails safety checks
17
- */
18
6
  export function readResultFile(runDir, filename) {
19
7
  if (!ALLOWED_RESULT_FILES.has(filename)) {
20
8
  logger.warn({ filename }, "result contract: filename not in allowlist");
21
- return null;
9
+ return { content: null, status: "not_allowed" };
22
10
  }
23
11
  const filePath = path.join(runDir, filename);
24
12
  let resolvedRunDir;
@@ -35,23 +23,23 @@ export function readResultFile(runDir, filename) {
35
23
  }
36
24
  catch {
37
25
  // File doesn't exist — normal case
38
- return null;
26
+ return { content: null, status: "missing" };
39
27
  }
40
28
  // Reject symlinks
41
29
  if (stat.isSymbolicLink()) {
42
30
  logger.warn({ filePath }, "result contract: rejecting symlink");
43
- return null;
31
+ return { content: null, status: "symlink" };
44
32
  }
45
33
  // Must be a regular file
46
34
  if (!stat.isFile()) {
47
35
  logger.warn({ filePath }, "result contract: not a regular file");
48
- return null;
36
+ return { content: null, status: "not_file" };
49
37
  }
50
38
  // Enforce size limit to prevent memory pressure from oversized result files
51
39
  const MAX_RESULT_SIZE = 1_048_576; // 1 MB
52
40
  if (stat.size > MAX_RESULT_SIZE) {
53
41
  logger.warn({ filePath, size: stat.size, max: MAX_RESULT_SIZE }, "result contract: file exceeds size limit");
54
- return null;
42
+ return { content: null, status: "oversize" };
55
43
  }
56
44
  // Realpath must resolve within run dir
57
45
  let realFilePath;
@@ -60,26 +48,26 @@ export function readResultFile(runDir, filename) {
60
48
  }
61
49
  catch {
62
50
  logger.warn({ filePath }, "result contract: failed to resolve realpath");
63
- return null;
51
+ return { content: null, status: "realpath_failed" };
64
52
  }
65
53
  const normalizedRunDir = resolvedRunDir.endsWith(path.sep)
66
54
  ? resolvedRunDir
67
55
  : resolvedRunDir + path.sep;
68
56
  if (!realFilePath.startsWith(normalizedRunDir) && realFilePath !== resolvedRunDir) {
69
57
  logger.warn({ realFilePath, runDir: resolvedRunDir }, "result contract: realpath escapes run directory");
70
- return null;
58
+ return { content: null, status: "path_escape" };
71
59
  }
72
60
  try {
73
61
  const content = fs.readFileSync(filePath, "utf-8");
74
62
  if (content.trim().length === 0) {
75
63
  logger.warn({ filePath }, "result contract: file is empty");
76
- return null;
64
+ return { content: null, status: "empty" };
77
65
  }
78
- return content;
66
+ return { content, status: "ok" };
79
67
  }
80
68
  catch (err) {
81
69
  logger.warn({ filePath, err }, "result contract: failed to read file");
82
- return null;
70
+ return { content: null, status: "read_error" };
83
71
  }
84
72
  }
85
73
  //# sourceMappingURL=result-contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"result-contract.js","sourceRoot":"","sources":["../src/result-contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"result-contract.js","sourceRoot":"","sources":["../src/result-contract.ts"],"names":[],"mappings":"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"}
package/dist/runner.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { spawn } from "node:child_process";
2
+ import { openSync, closeSync, readSync, statSync } from "node:fs";
2
3
  import { join } from "node:path";
3
4
  import { logger } from "./logger.js";
4
5
  import { ExecutionError } from "./errors.js";
@@ -15,9 +16,8 @@ export function killAllActive() {
15
16
  }
16
17
  const DEFAULT_MAX_PROMPT_BYTES = 1_048_576; // 1 MB
17
18
  const DEFAULT_TIMEOUT_SECONDS = 600;
18
- const DEFAULT_MAX_OUTPUT_BYTES = 10_485_760; // 10 MB
19
+ const DEFAULT_MAX_CAPTURE_BYTES = 2_097_152; // 2 MB default capture retention
19
20
  const GRACE_PERIOD_MS = 5_000;
20
- const HEAD_TAIL_BYTES = 50_000; // 50 KB per head/tail segment
21
21
  const DEFAULT_IDLE_TIMEOUT_SECONDS = 0;
22
22
  const DEFAULT_IDLE_TIMEOUT_STARTUP_SECONDS = 180;
23
23
  function safeParseInt(val, fallback) {
@@ -33,8 +33,14 @@ function safeParseIntNonNeg(val, fallback) {
33
33
  return Number.isFinite(n) && n >= 0 ? n : fallback;
34
34
  }
35
35
  function createStreamCapture(maxBytes) {
36
- const headSize = Math.min(HEAD_TAIL_BYTES, Math.floor(maxBytes / 2));
37
- const tailSize = Math.min(HEAD_TAIL_BYTES, Math.floor(maxBytes / 2));
36
+ // Preserve small-budget behavior while avoiding zero-byte buffers for tiny values.
37
+ const normalizedMaxBytes = Math.max(2, maxBytes);
38
+ const headSize = normalizedMaxBytes <= 2_048
39
+ ? Math.floor(normalizedMaxBytes / 2)
40
+ : Math.max(1024, Math.floor(normalizedMaxBytes / 2));
41
+ const tailSize = normalizedMaxBytes <= 2_048
42
+ ? normalizedMaxBytes - headSize
43
+ : Math.max(1024, normalizedMaxBytes - headSize);
38
44
  const capture = {
39
45
  head: Buffer.alloc(0),
40
46
  tail: Buffer.alloc(0),
@@ -109,18 +115,18 @@ export function runSubprocess(options) {
109
115
  adapter.timeout_seconds ??
110
116
  safeParseInt(process.env["CLINKX_TIMEOUT_SECONDS"], DEFAULT_TIMEOUT_SECONDS);
111
117
  // Idle timeout resolution: RunOptions > adapter config > env var > default
112
- // Result contract guard: when enabled, CLI may write to disk with no stdout — disable idle
113
- const resultContractEnabled = adapter.result_contract.enabled;
114
- const idleTimeoutSeconds = resultContractEnabled ? 0 :
118
+ // Suppress-stdout guard: when stdout is suppressed, CLI produces no stdout — disable idle
119
+ const suppressesStdout = adapter.suppress_stdout === true;
120
+ const idleTimeoutSeconds = suppressesStdout ? 0 :
115
121
  (options.idleTimeoutSeconds ??
116
122
  adapter.idle_timeout_seconds ??
117
123
  safeParseIntNonNeg(process.env["CLINKX_IDLE_TIMEOUT_SECONDS"], DEFAULT_IDLE_TIMEOUT_SECONDS));
118
- const idleStartupSeconds = resultContractEnabled ? 0 :
124
+ const idleStartupSeconds = suppressesStdout ? 0 :
119
125
  (options.idleTimeoutStartupSeconds ??
120
126
  adapter.idle_timeout_startup_seconds ??
121
127
  safeParseIntNonNeg(process.env["CLINKX_IDLE_TIMEOUT_STARTUP_SECONDS"], DEFAULT_IDLE_TIMEOUT_STARTUP_SECONDS));
122
128
  const maxPromptBytes = safeParseInt(process.env["CLINKX_MAX_PROMPT_BYTES"], DEFAULT_MAX_PROMPT_BYTES);
123
- const maxOutputBytes = safeParseInt(process.env["CLINKX_MAX_OUTPUT_BYTES"], DEFAULT_MAX_OUTPUT_BYTES);
129
+ const maxCaptureBytes = safeParseInt(process.env["CLINKX_MAX_CAPTURE_BYTES"] ?? process.env["CLINKX_MAX_OUTPUT_BYTES"], DEFAULT_MAX_CAPTURE_BYTES);
124
130
  // Bound input size
125
131
  const promptBuf = Buffer.from(prompt, "utf-8");
126
132
  if (promptBuf.length > maxPromptBytes) {
@@ -164,6 +170,13 @@ export function runSubprocess(options) {
164
170
  let timeoutHandle;
165
171
  let graceHandle;
166
172
  let idleHandle;
173
+ let stderrFd;
174
+ const stderrFilePath = adapter.stderr_to_file
175
+ ? join(runDirPath, "stderr.log")
176
+ : undefined;
177
+ if (stderrFilePath != null) {
178
+ stderrFd = openSync(stderrFilePath, "w");
179
+ }
167
180
  let child;
168
181
  try {
169
182
  child = spawn(adapter.command, args, {
@@ -173,16 +186,22 @@ export function runSubprocess(options) {
173
186
  stdio: [
174
187
  delivery.useStdin ? "pipe" : "ignore",
175
188
  adapter.suppress_stdout ? "ignore" : "pipe",
176
- "pipe",
189
+ stderrFd != null ? stderrFd : "pipe",
177
190
  ],
178
191
  detached: true, // New process group for clean kill
179
192
  });
180
193
  }
181
194
  catch (err) {
195
+ if (stderrFd != null)
196
+ closeSync(stderrFd);
182
197
  const msg = err instanceof Error ? err.message : String(err);
183
198
  reject(new ExecutionError(`Failed to spawn "${adapter.command}": ${msg}`));
184
199
  return;
185
200
  }
201
+ if (stderrFd != null) {
202
+ closeSync(stderrFd);
203
+ stderrFd = undefined;
204
+ }
186
205
  activeProcesses.add(child);
187
206
  // Shared kill guard — prevents double-SIGTERM races across wall/idle/cancel paths
188
207
  function initiateKill(reason) {
@@ -227,8 +246,8 @@ export function runSubprocess(options) {
227
246
  }
228
247
  const stdoutCapture = adapter.suppress_stdout
229
248
  ? { capture: { head: Buffer.alloc(0), tail: Buffer.alloc(0), totalBytes: 0, truncated: false }, onData(_chunk) { } }
230
- : createStreamCapture(maxOutputBytes);
231
- const stderrCapture = createStreamCapture(maxOutputBytes);
249
+ : createStreamCapture(maxCaptureBytes);
250
+ const stderrCapture = createStreamCapture(maxCaptureBytes);
232
251
  child.stdout?.on("data", (chunk) => {
233
252
  if (chunk.length === 0)
234
253
  return;
@@ -286,6 +305,34 @@ export function runSubprocess(options) {
286
305
  clearTimeout(graceHandle);
287
306
  signal?.removeEventListener("abort", onAbort);
288
307
  activeProcesses.delete(child);
308
+ // Post-mortem stderr hydration from file-backed capture
309
+ if (stderrFilePath != null) {
310
+ try {
311
+ const st = statSync(stderrFilePath, { throwIfNoEntry: false });
312
+ if (st != null && st.size > 0) {
313
+ const fd = openSync(stderrFilePath, "r");
314
+ try {
315
+ const CHUNK = 65_536;
316
+ const buf = Buffer.alloc(Math.min(CHUNK, st.size));
317
+ let pos = 0;
318
+ let n;
319
+ do {
320
+ n = readSync(fd, buf, 0, buf.length, pos);
321
+ if (n > 0) {
322
+ stderrCapture.onData(buf.subarray(0, n));
323
+ pos += n;
324
+ }
325
+ } while (n > 0);
326
+ }
327
+ finally {
328
+ closeSync(fd);
329
+ }
330
+ }
331
+ }
332
+ catch {
333
+ // Best-effort: file may not exist if process was killed immediately
334
+ }
335
+ }
289
336
  resolve({
290
337
  exitCode: code,
291
338
  signal: exitSignal ?? null,
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts CHANGED
@@ -28,6 +28,22 @@ export declare const ClinkInputSchema: z.ZodObject<{
28
28
  * overrides of user adapter config.
29
29
  */
30
30
  timeout_seconds: z.ZodOptional<z.ZodNumber>;
31
+ /**
32
+ * Response size override (characters).
33
+ *
34
+ * Accepted for internal/workflow use, but not advertised in tools/list.
35
+ * This extends the frozen v1 schema for internal callers only, following
36
+ * the same hidden-field pattern established by `timeout_seconds`.
37
+ */
38
+ max_response_chars: z.ZodOptional<z.ZodNumber>;
39
+ /**
40
+ * Internal JSON enforcement flag.
41
+ *
42
+ * When true, pipeline enforces JSON validation/salvage regardless of role.
43
+ * Not advertised in tools/list — internal/workflow use only, following
44
+ * the same hidden-field pattern as timeout_seconds and max_response_chars.
45
+ */
46
+ expect_json: z.ZodOptional<z.ZodBoolean>;
31
47
  /** Enable debug metadata in response. */
32
48
  debug: z.ZodDefault<z.ZodBoolean>;
33
49
  /** Keep run artifacts after completion (requires debug=true). */
@@ -43,6 +59,8 @@ export declare const ClinkInputSchema: z.ZodObject<{
43
59
  images?: string[] | undefined;
44
60
  context?: string | undefined;
45
61
  continuation_id?: string | undefined;
62
+ max_response_chars?: number | undefined;
63
+ expect_json?: boolean | undefined;
46
64
  }, {
47
65
  prompt: string;
48
66
  timeout_seconds?: number | undefined;
@@ -52,6 +70,8 @@ export declare const ClinkInputSchema: z.ZodObject<{
52
70
  images?: string[] | undefined;
53
71
  context?: string | undefined;
54
72
  continuation_id?: string | undefined;
73
+ max_response_chars?: number | undefined;
74
+ expect_json?: boolean | undefined;
55
75
  debug?: boolean | undefined;
56
76
  debug_keep_artifacts?: boolean | undefined;
57
77
  }>;
package/dist/schema.js CHANGED
@@ -52,6 +52,30 @@ export const ClinkInputSchema = z
52
52
  .positive()
53
53
  .optional()
54
54
  .describe("Request timeout override (seconds)"),
55
+ /**
56
+ * Response size override (characters).
57
+ *
58
+ * Accepted for internal/workflow use, but not advertised in tools/list.
59
+ * This extends the frozen v1 schema for internal callers only, following
60
+ * the same hidden-field pattern established by `timeout_seconds`.
61
+ */
62
+ max_response_chars: z
63
+ .number()
64
+ .int()
65
+ .positive()
66
+ .optional()
67
+ .describe("Response size override (characters)"),
68
+ /**
69
+ * Internal JSON enforcement flag.
70
+ *
71
+ * When true, pipeline enforces JSON validation/salvage regardless of role.
72
+ * Not advertised in tools/list — internal/workflow use only, following
73
+ * the same hidden-field pattern as timeout_seconds and max_response_chars.
74
+ */
75
+ expect_json: z
76
+ .boolean()
77
+ .optional()
78
+ .describe("Internal JSON enforcement flag"),
55
79
  /** Enable debug metadata in response. */
56
80
  debug: z.boolean().default(false).describe("Include debug metadata"),
57
81
  /** Keep run artifacts after completion (requires debug=true). */
@@ -73,13 +97,16 @@ export function clinkJsonSchema() {
73
97
  $refStrategy: "none",
74
98
  });
75
99
  // Do not advertise timeout_seconds in tools/list schema.
76
- // We still accept it in the runtime zod parse for backward compatibility.
100
+ // We still accept it in the runtime zod parse for backward compatibility/internal use.
77
101
  // Note: additionalProperties: false remains in the schema, which means a client
78
- // doing outbound schema validation would reject timeout_seconds. This is acceptable
102
+ // doing outbound schema validation would reject timeout_seconds/max_response_chars.
103
+ // This is acceptable
79
104
  // because MCP clients don't validate outbound requests against the tool schema.
80
105
  const props = schema["properties"];
81
106
  if (props != null) {
82
107
  delete props["timeout_seconds"];
108
+ delete props["max_response_chars"];
109
+ delete props["expect_json"];
83
110
  }
84
111
  return schema;
85
112
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,6CAA6C;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAEpE,4DAA4D;IAC5D,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kBAAkB,CAAC;IAE/B,oDAAoD;IACpD,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CAAC,iGAAiG,CAAC;IAE9G,6DAA6D;IAC7D,mBAAmB,EAAE,CAAC;SACnB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,kCAAkC,CAAC;IAE/C,4BAA4B;IAC5B,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,sBAAsB,CAAC;IAEnC,kFAAkF;IAClF,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,8EAA8E,CAC/E;IAEH,0DAA0D;IAC1D,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IAEpD;;;;;;OAMG;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,oCAAoC,CAAC;IAEjD,yCAAyC;IACzC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAEpE,iEAAiE;IACjE,oBAAoB,EAAE,CAAC;SACpB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,qCAAqC,CAAC;CACnD,CAAC;KACD,MAAM,EAAE,CAAC;AAIZ;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,EAAE;QAC/C,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE,MAAM;KACrB,CAA4B,CAAC;IAE9B,yDAAyD;IACzD,0EAA0E;IAC1E,gFAAgF;IAChF,oFAAoF;IACpF,gFAAgF;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAwC,CAAC;IAC1E,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,6CAA6C;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAEpE,4DAA4D;IAC5D,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kBAAkB,CAAC;IAE/B,oDAAoD;IACpD,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CAAC,iGAAiG,CAAC;IAE9G,6DAA6D;IAC7D,mBAAmB,EAAE,CAAC;SACnB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,kCAAkC,CAAC;IAE/C,4BAA4B;IAC5B,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,sBAAsB,CAAC;IAEnC,kFAAkF;IAClF,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,8EAA8E,CAC/E;IAEH,0DAA0D;IAC1D,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IAEpD;;;;;;OAMG;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,oCAAoC,CAAC;IAEjD;;;;;;OAMG;IACH,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,qCAAqC,CAAC;IAElD;;;;;;OAMG;IACH,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,gCAAgC,CAAC;IAE7C,yCAAyC;IACzC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAEpE,iEAAiE;IACjE,oBAAoB,EAAE,CAAC;SACpB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,qCAAqC,CAAC;CACnD,CAAC;KACD,MAAM,EAAE,CAAC;AAIZ;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,EAAE;QAC/C,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE,MAAM;KACrB,CAA4B,CAAC;IAE9B,yDAAyD;IACzD,uFAAuF;IACvF,gFAAgF;IAChF,oFAAoF;IACpF,qBAAqB;IACrB,gFAAgF;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAwC,CAAC;IAC1E,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/server.d.ts CHANGED
@@ -2,9 +2,9 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
2
  /**
3
3
  * Create and configure the ClinkX MCP server.
4
4
  *
5
- * Registers two handlers:
6
- * - tools/list: returns the single `clink` tool with its JSON schema
7
- * - tools/call: validates + dispatches to the clink handler pipeline
5
+ * Registers unified handlers that expose:
6
+ * - clink: CLI subagent bridge (existing)
7
+ * - run_workflow, resume_workflow, list_workflows: multi-stage workflow orchestration
8
8
  *
9
9
  * Does NOT connect transport — caller is responsible for that.
10
10
  */
package/dist/server.js CHANGED
@@ -1,17 +1,21 @@
1
1
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
2
+ import { CallToolRequestSchema, ListToolsRequestSchema, McpError, ErrorCode, } from "@modelcontextprotocol/sdk/types.js";
3
3
  import { clinkJsonSchema } from "./schema.js";
4
4
  import { handleClink } from "./handler.js";
5
5
  import { handleToolError, CancellationError } from "./errors.js";
6
6
  import { logger } from "./logger.js";
7
7
  import { extractProgressToken } from "./progress.js";
8
8
  import { AdapterRegistry } from "./registry.js";
9
+ import { LocalClinkBackend } from "./local-clink-backend.js";
10
+ import { getWorkflowToolDefinitions, handleWorkflowToolCall, WORKFLOW_TOOL_NAMES, } from "../clinkx-workflows/dist/workflow-tools.js";
11
+ import { WorkflowCancellationError } from "../clinkx-workflows/dist/errors.js";
12
+ import { getChildConfigPath, getChildMaxResponseChars, getStateDir, getArtifactsDir, } from "../clinkx-workflows/dist/config.js";
9
13
  /**
10
14
  * Create and configure the ClinkX MCP server.
11
15
  *
12
- * Registers two handlers:
13
- * - tools/list: returns the single `clink` tool with its JSON schema
14
- * - tools/call: validates + dispatches to the clink handler pipeline
16
+ * Registers unified handlers that expose:
17
+ * - clink: CLI subagent bridge (existing)
18
+ * - run_workflow, resume_workflow, list_workflows: multi-stage workflow orchestration
15
19
  *
16
20
  * Does NOT connect transport — caller is responsible for that.
17
21
  */
@@ -20,7 +24,8 @@ export function createServer() {
20
24
  capabilities: { tools: {} },
21
25
  instructions: "ClinkX bridges requests to external CLI subagents (e.g. Gemini, Codex, Claude) " +
22
26
  "as subprocesses and returns their output. Use the clink tool to delegate tasks " +
23
- "to any configured CLI. Multiple clink calls can run in parallel for independent tasks.",
27
+ "to any configured CLI. Multiple clink calls can run in parallel for independent tasks. " +
28
+ "Use run_workflow/resume_workflow/list_workflows for multi-stage workflow orchestration.",
24
29
  });
25
30
  // Eagerly load adapter names + role names for tool description & schema enum (once, not per-request)
26
31
  let cliSuffix = "";
@@ -37,7 +42,35 @@ export function createServer() {
37
42
  catch (err) {
38
43
  logger.warn({ err }, "failed to load adapter registry for tool description");
39
44
  }
40
- // tools/list advertise the clink tool with dynamic CLI names
45
+ // Ensure workflow state/artifacts dirs are in allowed roots for the in-process
46
+ // backend path. The subprocess path (ClinkSession) injects these via
47
+ // deriveAllowedRoots() + buildChildEnv(), but LocalClinkBackend shares the
48
+ // parent's process.env — so we augment it once at startup.
49
+ const stateDir = getStateDir();
50
+ const artifactsDir = getArtifactsDir();
51
+ const existingRoots = process.env["CLINKX_ALLOWED_ROOTS"];
52
+ const baseRoots = existingRoots != null && existingRoots.length > 0
53
+ ? existingRoots
54
+ : process.cwd();
55
+ process.env["CLINKX_ALLOWED_ROOTS"] = `${baseRoots},${stateDir},${artifactsDir}`;
56
+ logger.debug({ allowed_roots: process.env["CLINKX_ALLOWED_ROOTS"] }, "augmented allowed roots with workflow state/artifacts dirs");
57
+ // Workflow options — factory creates in-process backends using the registry metadata.
58
+ // When CLINKX_WORKFLOWS_CHILD_CONFIG_PATH is set, build a workflow-specific registry
59
+ // so the in-process path uses the same adapter config the workflow state fingerprints against.
60
+ const childConfigPath = getChildConfigPath();
61
+ const workflowRegistry = childConfigPath != null
62
+ ? AdapterRegistry.loadFromPath(childConfigPath)
63
+ : undefined;
64
+ const workflowCliNames = workflowRegistry?.getAdapterNames() ?? cliNames;
65
+ const workflowRoleNames = workflowRegistry?.getAllRoleNames() ?? roleNames;
66
+ const workflowMaxResponseChars = getChildMaxResponseChars();
67
+ const workflowOptions = {
68
+ createBackend: () => new LocalClinkBackend(workflowCliNames, workflowRoleNames, {
69
+ registry: workflowRegistry,
70
+ defaultMaxResponseChars: workflowMaxResponseChars,
71
+ }),
72
+ };
73
+ // tools/list — advertise clink + workflow tools
41
74
  server.setRequestHandler(ListToolsRequestSchema, async () => {
42
75
  const schema = clinkJsonSchema();
43
76
  // Inject enum arrays into cli_name and role properties (Fix 1)
@@ -55,54 +88,95 @@ export function createServer() {
55
88
  `Role for the subagent — use "default" unless a specific role is needed. Available: ${roleEnum.join(", ")}.`;
56
89
  }
57
90
  }
91
+ // Build unified tool list: clink + workflow tools
92
+ const clinkTool = {
93
+ name: "clink",
94
+ description: "Execute a configured local CLI as a subagent and return the model's final output." +
95
+ " Multiple clink calls can run in parallel for independent tasks." +
96
+ " Pass file paths via absolute_file_paths rather than inlining content." +
97
+ cliSuffix,
98
+ inputSchema: schema,
99
+ annotations: {
100
+ // readOnlyHint: true enables MCP clients to dispatch multiple clink calls
101
+ // in parallel. Despite subprocesses potentially writing files, this matches
102
+ // PAL's behavior — the MCP spec treats annotations as hints, not contracts.
103
+ readOnlyHint: true,
104
+ },
105
+ };
106
+ const workflowTools = getWorkflowToolDefinitions();
58
107
  return {
59
- tools: [
60
- {
61
- name: "clink",
62
- description: "Execute a configured local CLI as a subagent and return the model's final output." +
63
- " Multiple clink calls can run in parallel for independent tasks." +
64
- " Pass file paths via absolute_file_paths rather than inlining content." +
65
- cliSuffix,
66
- inputSchema: schema,
67
- annotations: {
68
- // readOnlyHint: true enables MCP clients to dispatch multiple clink calls
69
- // in parallel. Despite subprocesses potentially writing files, this matches
70
- // PAL's behavior — the MCP spec treats annotations as hints, not contracts.
71
- readOnlyHint: true,
72
- },
73
- },
74
- ],
108
+ tools: [clinkTool, ...workflowTools],
75
109
  };
76
110
  });
77
- // tools/call — dispatch clink invocations with cancellation support
111
+ // tools/call — unified dispatch for clink + workflow tools
78
112
  server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
79
113
  const { name, arguments: args } = request.params;
80
- if (name !== "clink") {
81
- logger.warn({ tool: name }, "unknown tool requested");
82
- return {
83
- content: [{ type: "text", text: `Unknown tool: ${name}` }],
84
- isError: true,
85
- };
86
- }
87
114
  const progressToken = extractProgressToken(request.params);
88
- try {
89
- return await handleClink(args, {
90
- ...(extra.signal != null ? { signal: extra.signal } : {}),
91
- ...(progressToken != null
92
- ? { progress: { server, token: progressToken } }
93
- : {}),
94
- });
115
+ // Dispatch workflow tools
116
+ if (WORKFLOW_TOOL_NAMES.has(name)) {
117
+ try {
118
+ // Cast: root and workflow packages have separate SDK installations with
119
+ // nominally different Server types (private properties). At runtime they
120
+ // are API-compatible — the workflow tools only call server.notification().
121
+ const result = await handleWorkflowToolCall(server, workflowOptions, name, args ?? {}, extra.signal, progressToken);
122
+ if (result != null) {
123
+ return result;
124
+ }
125
+ // handleWorkflowToolCall matched the tool name but returned null —
126
+ // surface an explicit error instead of falling through to "Unknown tool".
127
+ return {
128
+ content: [{ type: "text", text: `Workflow tool "${String(name)}" returned no result` }],
129
+ isError: true,
130
+ };
131
+ }
132
+ catch (err) {
133
+ if (err instanceof WorkflowCancellationError) {
134
+ // MCP spec: do NOT send a response for cancelled requests.
135
+ throw err;
136
+ }
137
+ // McpError from the workflow package (separate SDK installation) must
138
+ // propagate as a proper JSON-RPC error, not be downgraded to a tool
139
+ // result with isError: true. Detect by constructor name since
140
+ // instanceof fails across package boundaries.
141
+ if (err instanceof Error &&
142
+ err.constructor.name === "McpError" &&
143
+ typeof err["code"] === "number") {
144
+ const code = err.code ?? ErrorCode.InternalError;
145
+ // Strip existing "MCP error <code>: " prefix to avoid double-prefixing
146
+ // when rewrapping across package boundaries.
147
+ const rawMessage = err.message.replace(/^MCP error -?\d+: /, "");
148
+ throw new McpError(code, rawMessage);
149
+ }
150
+ return handleToolError(err);
151
+ }
95
152
  }
96
- catch (err) {
97
- if (err instanceof CancellationError) {
98
- // MCP spec: do NOT send a response for cancelled requests.
99
- // Re-throw so the SDK handles it properly.
100
- throw err;
153
+ // Dispatch clink tool
154
+ if (name === "clink") {
155
+ try {
156
+ return await handleClink(args, {
157
+ ...(extra.signal != null ? { signal: extra.signal } : {}),
158
+ ...(progressToken != null
159
+ ? { progress: { server, token: progressToken } }
160
+ : {}),
161
+ });
162
+ }
163
+ catch (err) {
164
+ if (err instanceof CancellationError) {
165
+ // MCP spec: do NOT send a response for cancelled requests.
166
+ // Re-throw so the SDK handles it properly.
167
+ throw err;
168
+ }
169
+ // handleToolError re-throws McpError for InvalidParamsError (-32602),
170
+ // returns { isError: true } for everything else.
171
+ return handleToolError(err);
101
172
  }
102
- // handleToolError re-throws McpError for InvalidParamsError (-32602),
103
- // returns { isError: true } for everything else.
104
- return handleToolError(err);
105
173
  }
174
+ // Unknown tool
175
+ logger.warn({ tool: name }, "unknown tool requested");
176
+ return {
177
+ content: [{ type: "text", text: `Unknown tool: ${name}` }],
178
+ isError: true,
179
+ };
106
180
  });
107
181
  return server;
108
182
  }