@nodetool-ai/runtime 0.8.2 → 0.8.4-a13.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 (295) hide show
  1. package/dist/.nodetool-build-stamp +1 -1
  2. package/dist/canvas-codec.d.ts +3 -0
  3. package/dist/canvas-codec.d.ts.map +1 -0
  4. package/dist/canvas-codec.js +12 -0
  5. package/dist/canvas-codec.js.map +1 -0
  6. package/dist/context-packer.d.ts +1 -1
  7. package/dist/context-packer.js +1 -1
  8. package/dist/context.d.ts +3 -0
  9. package/dist/context.d.ts.map +1 -1
  10. package/dist/context.js +16 -5
  11. package/dist/context.js.map +1 -1
  12. package/dist/host-binaries.d.ts.map +1 -1
  13. package/dist/host-binaries.js +4 -3
  14. package/dist/host-binaries.js.map +1 -1
  15. package/dist/http-client-spans.d.ts +9 -0
  16. package/dist/http-client-spans.d.ts.map +1 -0
  17. package/dist/http-client-spans.js +88 -0
  18. package/dist/http-client-spans.js.map +1 -0
  19. package/dist/image-codec.d.ts +6 -3
  20. package/dist/image-codec.d.ts.map +1 -1
  21. package/dist/image-codec.js +17 -17
  22. package/dist/image-codec.js.map +1 -1
  23. package/dist/image-model-tasks.d.ts +20 -0
  24. package/dist/image-model-tasks.d.ts.map +1 -1
  25. package/dist/image-model-tasks.js +44 -1
  26. package/dist/image-model-tasks.js.map +1 -1
  27. package/dist/index.d.ts +4 -3
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +4 -3
  30. package/dist/index.js.map +1 -1
  31. package/dist/media-ref-bytes.d.ts.map +1 -1
  32. package/dist/media-ref-bytes.js +31 -6
  33. package/dist/media-ref-bytes.js.map +1 -1
  34. package/dist/otlp-json-trace-exporter.d.ts +89 -0
  35. package/dist/otlp-json-trace-exporter.d.ts.map +1 -0
  36. package/dist/otlp-json-trace-exporter.js +155 -0
  37. package/dist/otlp-json-trace-exporter.js.map +1 -0
  38. package/dist/prompt-asset-refs.d.ts +12 -1
  39. package/dist/prompt-asset-refs.d.ts.map +1 -1
  40. package/dist/prompt-asset-refs.js +9 -4
  41. package/dist/prompt-asset-refs.js.map +1 -1
  42. package/dist/providers/antigravity-provider.d.ts +113 -0
  43. package/dist/providers/antigravity-provider.d.ts.map +1 -0
  44. package/dist/providers/antigravity-provider.js +527 -0
  45. package/dist/providers/antigravity-provider.js.map +1 -0
  46. package/dist/providers/api-route-provider.d.ts +22 -0
  47. package/dist/providers/api-route-provider.d.ts.map +1 -0
  48. package/dist/providers/api-route-provider.js +56 -0
  49. package/dist/providers/api-route-provider.js.map +1 -0
  50. package/dist/providers/azure-openai-provider.d.ts +69 -0
  51. package/dist/providers/azure-openai-provider.d.ts.map +1 -0
  52. package/dist/providers/azure-openai-provider.js +233 -0
  53. package/dist/providers/azure-openai-provider.js.map +1 -0
  54. package/dist/providers/base-provider.d.ts.map +1 -1
  55. package/dist/providers/base-provider.js +41 -4
  56. package/dist/providers/base-provider.js.map +1 -1
  57. package/dist/providers/bedrock-provider.d.ts +52 -0
  58. package/dist/providers/bedrock-provider.d.ts.map +1 -0
  59. package/dist/providers/bedrock-provider.js +648 -0
  60. package/dist/providers/bedrock-provider.js.map +1 -0
  61. package/dist/providers/bedrock-transport.d.ts +37 -0
  62. package/dist/providers/bedrock-transport.d.ts.map +1 -0
  63. package/dist/providers/bedrock-transport.js +186 -0
  64. package/dist/providers/bedrock-transport.js.map +1 -0
  65. package/dist/providers/chatgpt-provider.d.ts +48 -0
  66. package/dist/providers/chatgpt-provider.d.ts.map +1 -0
  67. package/dist/providers/chatgpt-provider.js +551 -0
  68. package/dist/providers/chatgpt-provider.js.map +1 -0
  69. package/dist/providers/claude-agent-provider.d.ts +29 -51
  70. package/dist/providers/claude-agent-provider.d.ts.map +1 -1
  71. package/dist/providers/claude-agent-provider.js +144 -202
  72. package/dist/providers/claude-agent-provider.js.map +1 -1
  73. package/dist/providers/claude-cli.d.ts +265 -0
  74. package/dist/providers/claude-cli.d.ts.map +1 -0
  75. package/dist/providers/claude-cli.js +488 -0
  76. package/dist/providers/claude-cli.js.map +1 -0
  77. package/dist/providers/codex-provider.d.ts +9 -2
  78. package/dist/providers/codex-provider.d.ts.map +1 -1
  79. package/dist/providers/codex-provider.js +25 -11
  80. package/dist/providers/codex-provider.js.map +1 -1
  81. package/dist/providers/context-window.d.ts.map +1 -1
  82. package/dist/providers/context-window.js +1 -0
  83. package/dist/providers/context-window.js.map +1 -1
  84. package/dist/providers/core-tools.d.ts +4 -1
  85. package/dist/providers/core-tools.d.ts.map +1 -1
  86. package/dist/providers/core-tools.js +5 -3
  87. package/dist/providers/core-tools.js.map +1 -1
  88. package/dist/providers/cost-calculator.d.ts.map +1 -1
  89. package/dist/providers/cost-calculator.js +9 -0
  90. package/dist/providers/cost-calculator.js.map +1 -1
  91. package/dist/providers/credential-check.d.ts +8 -0
  92. package/dist/providers/credential-check.d.ts.map +1 -1
  93. package/dist/providers/credential-check.js +22 -0
  94. package/dist/providers/credential-check.js.map +1 -1
  95. package/dist/providers/custom-openai-provider.d.ts.map +1 -1
  96. package/dist/providers/custom-openai-provider.js +19 -1
  97. package/dist/providers/custom-openai-provider.js.map +1 -1
  98. package/dist/providers/dreamina-pending.d.ts +22 -0
  99. package/dist/providers/dreamina-pending.d.ts.map +1 -0
  100. package/dist/providers/dreamina-pending.js +86 -0
  101. package/dist/providers/dreamina-pending.js.map +1 -0
  102. package/dist/providers/dreamina-provider.d.ts +10 -3
  103. package/dist/providers/dreamina-provider.d.ts.map +1 -1
  104. package/dist/providers/dreamina-provider.js +325 -45
  105. package/dist/providers/dreamina-provider.js.map +1 -1
  106. package/dist/providers/extension-tab.d.ts +42 -0
  107. package/dist/providers/extension-tab.d.ts.map +1 -0
  108. package/dist/providers/extension-tab.js +200 -0
  109. package/dist/providers/extension-tab.js.map +1 -0
  110. package/dist/providers/fake-provider.d.ts +3 -1
  111. package/dist/providers/fake-provider.d.ts.map +1 -1
  112. package/dist/providers/fake-provider.js +63 -9
  113. package/dist/providers/fake-provider.js.map +1 -1
  114. package/dist/providers/fake-schema-answer.d.ts +10 -0
  115. package/dist/providers/fake-schema-answer.d.ts.map +1 -0
  116. package/dist/providers/fake-schema-answer.js +64 -0
  117. package/dist/providers/fake-schema-answer.js.map +1 -0
  118. package/dist/providers/fal-provider.d.ts.map +1 -1
  119. package/dist/providers/fal-provider.js +5 -2
  120. package/dist/providers/fal-provider.js.map +1 -1
  121. package/dist/providers/gemini-web-provider.d.ts +76 -0
  122. package/dist/providers/gemini-web-provider.d.ts.map +1 -0
  123. package/dist/providers/gemini-web-provider.js +827 -0
  124. package/dist/providers/gemini-web-provider.js.map +1 -0
  125. package/dist/providers/http-transport.d.ts.map +1 -1
  126. package/dist/providers/http-transport.js +2 -0
  127. package/dist/providers/http-transport.js.map +1 -1
  128. package/dist/providers/huggingface-provider.d.ts.map +1 -1
  129. package/dist/providers/huggingface-provider.js +17 -1
  130. package/dist/providers/huggingface-provider.js.map +1 -1
  131. package/dist/providers/index.d.ts +18 -2
  132. package/dist/providers/index.d.ts.map +1 -1
  133. package/dist/providers/index.js +66 -15
  134. package/dist/providers/index.js.map +1 -1
  135. package/dist/providers/llama-provider.d.ts +8 -0
  136. package/dist/providers/llama-provider.d.ts.map +1 -1
  137. package/dist/providers/llama-provider.js +23 -5
  138. package/dist/providers/llama-provider.js.map +1 -1
  139. package/dist/providers/lmstudio-provider.js +2 -2
  140. package/dist/providers/lmstudio-provider.js.map +1 -1
  141. package/dist/providers/manifest-models.d.ts +2 -12
  142. package/dist/providers/manifest-models.d.ts.map +1 -1
  143. package/dist/providers/manifest-models.js +45 -3
  144. package/dist/providers/manifest-models.js.map +1 -1
  145. package/dist/providers/meta-provider.d.ts +53 -6
  146. package/dist/providers/meta-provider.d.ts.map +1 -1
  147. package/dist/providers/meta-provider.js +289 -6
  148. package/dist/providers/meta-provider.js.map +1 -1
  149. package/dist/providers/meta-segmentation.d.ts +27 -0
  150. package/dist/providers/meta-segmentation.d.ts.map +1 -0
  151. package/dist/providers/meta-segmentation.js +141 -0
  152. package/dist/providers/meta-segmentation.js.map +1 -0
  153. package/dist/providers/meta-transcription.d.ts +31 -0
  154. package/dist/providers/meta-transcription.d.ts.map +1 -0
  155. package/dist/providers/meta-transcription.js +187 -0
  156. package/dist/providers/meta-transcription.js.map +1 -0
  157. package/dist/providers/node-llama-cpp-provider.d.ts +6 -3
  158. package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -1
  159. package/dist/providers/node-llama-cpp-provider.js +77 -62
  160. package/dist/providers/node-llama-cpp-provider.js.map +1 -1
  161. package/dist/providers/ollama-provider.d.ts +23 -0
  162. package/dist/providers/ollama-provider.d.ts.map +1 -1
  163. package/dist/providers/ollama-provider.js +140 -27
  164. package/dist/providers/ollama-provider.js.map +1 -1
  165. package/dist/providers/openai-compat/client.d.ts +10 -1
  166. package/dist/providers/openai-compat/client.d.ts.map +1 -1
  167. package/dist/providers/openai-compat/client.js +21 -3
  168. package/dist/providers/openai-compat/client.js.map +1 -1
  169. package/dist/providers/openai-compat/index.d.ts +1 -1
  170. package/dist/providers/openai-compat/index.d.ts.map +1 -1
  171. package/dist/providers/openai-compat/index.js +1 -1
  172. package/dist/providers/openai-compat/index.js.map +1 -1
  173. package/dist/providers/openai-compat/types.d.ts +4 -0
  174. package/dist/providers/openai-compat/types.d.ts.map +1 -1
  175. package/dist/providers/openai-compat-provider.d.ts +11 -0
  176. package/dist/providers/openai-compat-provider.d.ts.map +1 -1
  177. package/dist/providers/openai-compat-provider.js +47 -2
  178. package/dist/providers/openai-compat-provider.js.map +1 -1
  179. package/dist/providers/openai-provider.d.ts +15 -0
  180. package/dist/providers/openai-provider.d.ts.map +1 -1
  181. package/dist/providers/openai-provider.js +50 -12
  182. package/dist/providers/openai-provider.js.map +1 -1
  183. package/dist/providers/opper-provider.d.ts +31 -0
  184. package/dist/providers/opper-provider.d.ts.map +1 -0
  185. package/dist/providers/opper-provider.js +91 -0
  186. package/dist/providers/opper-provider.js.map +1 -0
  187. package/dist/providers/provider-request-log.d.ts.map +1 -1
  188. package/dist/providers/provider-request-log.js +3 -2
  189. package/dist/providers/provider-request-log.js.map +1 -1
  190. package/dist/providers/python-provider.d.ts.map +1 -1
  191. package/dist/providers/python-provider.js +5 -3
  192. package/dist/providers/python-provider.js.map +1 -1
  193. package/dist/providers/responses-api.d.ts +12 -2
  194. package/dist/providers/responses-api.d.ts.map +1 -1
  195. package/dist/providers/responses-api.js +54 -3
  196. package/dist/providers/responses-api.js.map +1 -1
  197. package/dist/providers/safe-url.d.ts.map +1 -1
  198. package/dist/providers/safe-url.js +8 -0
  199. package/dist/providers/safe-url.js.map +1 -1
  200. package/dist/providers/scripted-provider.d.ts.map +1 -1
  201. package/dist/providers/scripted-provider.js +6 -1
  202. package/dist/providers/scripted-provider.js.map +1 -1
  203. package/dist/providers/types.d.ts +16 -0
  204. package/dist/providers/types.d.ts.map +1 -1
  205. package/dist/providers/types.js.map +1 -1
  206. package/dist/providers/vgenv-provider.d.ts +33 -0
  207. package/dist/providers/vgenv-provider.d.ts.map +1 -0
  208. package/dist/providers/vgenv-provider.js +261 -0
  209. package/dist/providers/vgenv-provider.js.map +1 -0
  210. package/dist/providers/vllm-provider.d.ts +7 -0
  211. package/dist/providers/vllm-provider.d.ts.map +1 -1
  212. package/dist/providers/vllm-provider.js +15 -3
  213. package/dist/providers/vllm-provider.js.map +1 -1
  214. package/dist/python-bridge-base.d.ts +16 -6
  215. package/dist/python-bridge-base.d.ts.map +1 -1
  216. package/dist/python-bridge-base.js +117 -40
  217. package/dist/python-bridge-base.js.map +1 -1
  218. package/dist/python-bridge-codec.d.ts +16 -1
  219. package/dist/python-bridge-codec.d.ts.map +1 -1
  220. package/dist/python-bridge-codec.js +60 -2
  221. package/dist/python-bridge-codec.js.map +1 -1
  222. package/dist/python-bridge-framing.d.ts +10 -1
  223. package/dist/python-bridge-framing.d.ts.map +1 -1
  224. package/dist/python-bridge-framing.js +33 -8
  225. package/dist/python-bridge-framing.js.map +1 -1
  226. package/dist/python-bridge-types.d.ts +26 -5
  227. package/dist/python-bridge-types.d.ts.map +1 -1
  228. package/dist/python-bridge-types.js.map +1 -1
  229. package/dist/python-graph-resolver.d.ts.map +1 -1
  230. package/dist/python-graph-resolver.js +12 -2
  231. package/dist/python-graph-resolver.js.map +1 -1
  232. package/dist/python-node-executor.d.ts +14 -3
  233. package/dist/python-node-executor.d.ts.map +1 -1
  234. package/dist/python-node-executor.js +185 -3
  235. package/dist/python-node-executor.js.map +1 -1
  236. package/dist/python-stdio-bridge.d.ts +6 -0
  237. package/dist/python-stdio-bridge.d.ts.map +1 -1
  238. package/dist/python-stdio-bridge.js +58 -12
  239. package/dist/python-stdio-bridge.js.map +1 -1
  240. package/dist/run-trace-context.d.ts +2 -27
  241. package/dist/run-trace-context.d.ts.map +1 -1
  242. package/dist/run-trace-context.js +4 -51
  243. package/dist/run-trace-context.js.map +1 -1
  244. package/dist/run-trace-processor.d.ts +3 -0
  245. package/dist/run-trace-processor.d.ts.map +1 -1
  246. package/dist/run-trace-processor.js +63 -46
  247. package/dist/run-trace-processor.js.map +1 -1
  248. package/dist/run-trace-scope.d.ts +28 -0
  249. package/dist/run-trace-scope.d.ts.map +1 -0
  250. package/dist/run-trace-scope.js +51 -0
  251. package/dist/run-trace-scope.js.map +1 -0
  252. package/dist/run-trace-serialization.d.ts.map +1 -1
  253. package/dist/run-trace-serialization.js +4 -3
  254. package/dist/run-trace-serialization.js.map +1 -1
  255. package/dist/span-record.d.ts +4 -0
  256. package/dist/span-record.d.ts.map +1 -0
  257. package/dist/span-record.js +48 -0
  258. package/dist/span-record.js.map +1 -0
  259. package/dist/swappable-python-bridge.d.ts +6 -6
  260. package/dist/swappable-python-bridge.d.ts.map +1 -1
  261. package/dist/swappable-python-bridge.js +10 -10
  262. package/dist/swappable-python-bridge.js.map +1 -1
  263. package/dist/telemetry.d.ts +2 -2
  264. package/dist/telemetry.d.ts.map +1 -1
  265. package/dist/telemetry.js +33 -34
  266. package/dist/telemetry.js.map +1 -1
  267. package/dist/testing.d.ts +1 -1
  268. package/dist/testing.d.ts.map +1 -1
  269. package/dist/testing.js +55 -3
  270. package/dist/testing.js.map +1 -1
  271. package/dist/token-counter.d.ts +4 -13
  272. package/dist/token-counter.d.ts.map +1 -1
  273. package/dist/token-counter.js +68 -18
  274. package/dist/token-counter.js.map +1 -1
  275. package/dist/trace-context-manager.d.ts +12 -0
  276. package/dist/trace-context-manager.d.ts.map +1 -0
  277. package/dist/trace-context-manager.js +30 -0
  278. package/dist/trace-context-manager.js.map +1 -0
  279. package/dist/trace-exporters.d.ts +2 -3
  280. package/dist/trace-exporters.d.ts.map +1 -1
  281. package/dist/trace-exporters.js +5 -52
  282. package/dist/trace-exporters.js.map +1 -1
  283. package/dist/trace-semantic-conventions.d.ts +2 -0
  284. package/dist/trace-semantic-conventions.d.ts.map +1 -0
  285. package/dist/trace-semantic-conventions.js +2 -0
  286. package/dist/trace-semantic-conventions.js.map +1 -0
  287. package/dist/traced-storage.d.ts +17 -0
  288. package/dist/traced-storage.d.ts.map +1 -0
  289. package/dist/traced-storage.js +41 -0
  290. package/dist/traced-storage.js.map +1 -0
  291. package/dist/tracing-module.d.ts +3 -0
  292. package/dist/tracing-module.d.ts.map +1 -0
  293. package/dist/tracing-module.js +12 -0
  294. package/dist/tracing-module.js.map +1 -0
  295. package/package.json +37 -18
@@ -0,0 +1,488 @@
1
+ /**
2
+ * The headless Claude Code CLI as a streaming transport.
3
+ *
4
+ * `claude -p --input-format stream-json --output-format stream-json` reads
5
+ * JSON lines on stdin and writes JSON lines on stdout. Besides user messages
6
+ * and the conversation stream, both sides exchange `control_request` /
7
+ * `control_response` frames:
8
+ *
9
+ * - The host sends one `initialize` request first. It carries the system
10
+ * prompt, the structured-output schema, the skills to enable and the names
11
+ * of the MCP servers the host serves itself.
12
+ * - The CLI sends `mcp_message` requests for those host-served servers. Each
13
+ * wraps one JSON-RPC message (`initialize`, `tools/list`, `tools/call`, a
14
+ * notification). The host answers with the JSON-RPC response. This is how
15
+ * NodeTool's tools run in this process while the CLI drives the loop, with
16
+ * no MCP server listening on a port.
17
+ *
18
+ * This module finds the `claude` executable, turns {@link ClaudeCliOptions}
19
+ * into arguments and the `initialize` request, and runs one session.
20
+ */
21
+ import { createLogger, importNodeBuiltin } from "@nodetool-ai/config";
22
+ import { isObjectLike, isString } from "@nodetool-ai/protocol";
23
+ const log = createLogger("nodetool.runtime.providers.claude-cli");
24
+ /** The setting and environment variable that pin the CLI executable. */
25
+ export const CLAUDE_CLI_PATH_SETTING = "CLAUDE_CLI_PATH";
26
+ const INSTALL_HINT = "Install Claude Code (https://claude.com/claude-code), run `claude` once in " +
27
+ "a terminal to sign in, or set CLAUDE_CLI_PATH to the executable.";
28
+ /** How much of stderr is kept for an error message. */
29
+ const STDERR_TAIL_CHARS = 8192;
30
+ /** How long a finished session may take to exit before it is stopped. */
31
+ const RESULT_EXIT_GRACE_MS = 10_000;
32
+ // ---------------------------------------------------------------------------
33
+ // Arguments and the initialize request
34
+ // ---------------------------------------------------------------------------
35
+ /** The command-line arguments for one session. */
36
+ export function buildCliArgs(options) {
37
+ const args = [
38
+ "-p",
39
+ "--output-format",
40
+ "stream-json",
41
+ "--verbose",
42
+ "--input-format",
43
+ "stream-json"
44
+ ];
45
+ if (options.model)
46
+ args.push("--model", options.model);
47
+ if (options.maxTurns)
48
+ args.push("--max-turns", String(options.maxTurns));
49
+ if (options.effort)
50
+ args.push("--effort", options.effort);
51
+ const thinking = options.thinking;
52
+ if (thinking?.type === "enabled") {
53
+ args.push("--max-thinking-tokens", String(thinking.budgetTokens));
54
+ }
55
+ else if (thinking) {
56
+ args.push("--thinking", thinking.type);
57
+ }
58
+ if (options.outputFormat) {
59
+ args.push("--json-schema", JSON.stringify(options.outputFormat.schema));
60
+ }
61
+ // A skill runs through the `Skill` tool, which asks for permission per
62
+ // skill. Allow exactly the enabled ones.
63
+ const allowed = [
64
+ ...options.allowedTools,
65
+ ...options.skills.map((name) => `Skill(${name})`)
66
+ ];
67
+ if (allowed.length > 0)
68
+ args.push("--allowedTools", allowed.join(","));
69
+ if (options.disallowedTools.length > 0) {
70
+ args.push("--disallowedTools", options.disallowedTools.join(","));
71
+ }
72
+ args.push("--tools", options.tools.join(","));
73
+ args.push(`--setting-sources=${options.settingSources.join(",")}`);
74
+ if (options.strictMcpConfig)
75
+ args.push("--strict-mcp-config");
76
+ args.push("--permission-mode", options.permissionMode);
77
+ if (options.allowDangerouslySkipPermissions) {
78
+ args.push("--allow-dangerously-skip-permissions");
79
+ }
80
+ if (options.includePartialMessages)
81
+ args.push("--include-partial-messages");
82
+ for (const plugin of options.plugins ?? []) {
83
+ args.push(plugin.skipMcpDiscovery ? "--plugin-dir-no-mcp" : "--plugin-dir", plugin.path);
84
+ }
85
+ if (options.resume)
86
+ args.push(`--resume=${options.resume}`);
87
+ return args;
88
+ }
89
+ /** The first control request: what argv cannot carry or should not. */
90
+ export function buildInitializeRequest(options) {
91
+ const servers = Object.keys(options.mcpServers ?? {});
92
+ return {
93
+ subtype: "initialize",
94
+ // On stdin rather than argv: a long prompt would exceed the Windows
95
+ // command-line limit.
96
+ systemPrompt: [options.systemPrompt],
97
+ sdkMcpServers: servers.length > 0 ? servers : undefined,
98
+ jsonSchema: options.outputFormat?.schema,
99
+ skills: options.skills
100
+ };
101
+ }
102
+ /** One user turn as the stream-json input line expects it. */
103
+ export function userMessageLine(prompt) {
104
+ return {
105
+ type: "user",
106
+ session_id: "",
107
+ parent_tool_use_id: null,
108
+ message: {
109
+ role: "user",
110
+ content: isString(prompt) ? [{ type: "text", text: prompt }] : prompt
111
+ }
112
+ };
113
+ }
114
+ // ---------------------------------------------------------------------------
115
+ // Host-served MCP over the control channel
116
+ // ---------------------------------------------------------------------------
117
+ /** The MCP protocol revision answered when the CLI names none. */
118
+ const MCP_PROTOCOL_VERSION = "2025-06-18";
119
+ /**
120
+ * Answer one JSON-RPC message for a host-served server. Notifications get the
121
+ * empty acknowledgement the control channel expects.
122
+ */
123
+ export async function handleMcpMessage(server, message) {
124
+ if (message.id === undefined || message.id === null) {
125
+ return { jsonrpc: "2.0", result: {}, id: 0 };
126
+ }
127
+ const id = message.id;
128
+ const reply = (result) => ({ jsonrpc: "2.0", id, result });
129
+ const fail = (code, text) => ({
130
+ jsonrpc: "2.0",
131
+ id,
132
+ error: { code, message: text }
133
+ });
134
+ switch (message.method) {
135
+ case "initialize": {
136
+ const requested = message.params?.protocolVersion;
137
+ return reply({
138
+ protocolVersion: isString(requested) ? requested : MCP_PROTOCOL_VERSION,
139
+ capabilities: { tools: {} },
140
+ serverInfo: { name: server.name, version: server.version }
141
+ });
142
+ }
143
+ case "ping":
144
+ return reply({});
145
+ case "tools/list":
146
+ return reply({
147
+ tools: server.tools.map((tool) => ({
148
+ name: tool.name,
149
+ description: tool.description,
150
+ inputSchema: tool.inputSchema
151
+ }))
152
+ });
153
+ case "tools/call": {
154
+ const name = message.params?.name;
155
+ const tool = server.tools.find((t) => t.name === name);
156
+ if (!tool)
157
+ return fail(-32602, `Unknown tool: ${String(name)}`);
158
+ const rawArgs = message.params?.arguments;
159
+ const args = isObjectLike(rawArgs) && !Array.isArray(rawArgs)
160
+ ? rawArgs
161
+ : {};
162
+ try {
163
+ return reply(await tool.handler(args));
164
+ }
165
+ catch (err) {
166
+ // A tool failure is a result the model reads, not a protocol error.
167
+ return reply({
168
+ content: [
169
+ { type: "text", text: err instanceof Error ? err.message : String(err) }
170
+ ],
171
+ isError: true
172
+ });
173
+ }
174
+ }
175
+ default:
176
+ return fail(-32601, `Method not found: ${String(message.method)}`);
177
+ }
178
+ }
179
+ // ---------------------------------------------------------------------------
180
+ // Finding the executable
181
+ // ---------------------------------------------------------------------------
182
+ export class ClaudeCliNotFoundError extends Error {
183
+ constructor(detail) {
184
+ super(`${detail} ${INSTALL_HINT}`);
185
+ this.name = "ClaudeCliNotFoundError";
186
+ }
187
+ }
188
+ /**
189
+ * Where installers put `claude`, in the order they are tried after PATH. A
190
+ * desktop app started outside a shell often has a PATH without these.
191
+ */
192
+ export function claudeCliCandidates(lookup) {
193
+ const { platform, homedir, env } = lookup;
194
+ const sep = platform === "win32" ? "\\" : "/";
195
+ const join = (...parts) => parts.join(sep);
196
+ if (platform === "win32") {
197
+ const appData = env["APPDATA"];
198
+ const localAppData = env["LOCALAPPDATA"];
199
+ return [
200
+ join(homedir, ".local", "bin", "claude.exe"),
201
+ ...(localAppData
202
+ ? [join(localAppData, "Programs", "claude", "claude.exe")]
203
+ : []),
204
+ ...(appData ? [join(appData, "npm", "claude.exe")] : []),
205
+ join(homedir, ".bun", "bin", "claude.exe")
206
+ ];
207
+ }
208
+ return [
209
+ // The native installer.
210
+ join(homedir, ".local", "bin", "claude"),
211
+ // The older per-user npm install that `claude migrate-installer` made.
212
+ join(homedir, ".claude", "local", "claude"),
213
+ "/opt/homebrew/bin/claude",
214
+ "/usr/local/bin/claude",
215
+ "/usr/bin/claude",
216
+ join(homedir, ".npm-global", "bin", "claude"),
217
+ join(homedir, ".bun", "bin", "claude"),
218
+ join(homedir, ".volta", "bin", "claude")
219
+ ];
220
+ }
221
+ /** `claude` on PATH, as each PATH directory would resolve it. */
222
+ export function pathCandidates(lookup) {
223
+ const win = lookup.platform === "win32";
224
+ const pathVar = lookup.env["PATH"] ?? lookup.env["Path"] ?? "";
225
+ const dirs = pathVar.split(win ? ";" : ":").filter(Boolean);
226
+ // Only `.exe` on Windows: an npm `.cmd` shim needs a shell to start, and a
227
+ // shell would re-parse the JSON arguments.
228
+ const names = win ? ["claude.exe"] : ["claude"];
229
+ const sep = win ? "\\" : "/";
230
+ return dirs.flatMap((dir) => names.map((name) => `${dir.replace(/[\\/]+$/, "")}${sep}${name}`));
231
+ }
232
+ /**
233
+ * The CLI executable: the configured path when set (it must exist), else the
234
+ * first `claude` on PATH, else the first known install location.
235
+ */
236
+ export async function resolveClaudeCliPath(configured, lookup) {
237
+ const pinned = configured?.trim();
238
+ if (pinned) {
239
+ if (await lookup.isExecutable(pinned))
240
+ return pinned;
241
+ throw new ClaudeCliNotFoundError(`CLAUDE_CLI_PATH points to ${pinned}, which is not an executable file.`);
242
+ }
243
+ for (const candidate of [
244
+ ...pathCandidates(lookup),
245
+ ...claudeCliCandidates(lookup)
246
+ ]) {
247
+ if (await lookup.isExecutable(candidate))
248
+ return candidate;
249
+ }
250
+ throw new ClaudeCliNotFoundError("The Claude Code CLI (claude) was not found on PATH or in the usual install locations.");
251
+ }
252
+ /** The lookup environment of this process. */
253
+ export async function systemLookupEnv() {
254
+ const [fs, os] = await Promise.all([
255
+ importNodeBuiltin("node:fs/promises"),
256
+ importNodeBuiltin("node:os")
257
+ ]);
258
+ if (!fs || !os) {
259
+ throw new ClaudeCliNotFoundError("The Claude Agent provider requires Node.js.");
260
+ }
261
+ const win = process.platform === "win32";
262
+ return {
263
+ platform: process.platform,
264
+ homedir: os.homedir(),
265
+ env: process.env,
266
+ isExecutable: async (file) => {
267
+ try {
268
+ const stat = await fs.stat(file);
269
+ if (!stat.isFile())
270
+ return false;
271
+ if (!win)
272
+ await fs.access(file, fs.constants.X_OK);
273
+ return true;
274
+ }
275
+ catch {
276
+ return false;
277
+ }
278
+ }
279
+ };
280
+ }
281
+ const defaultSpawn = async (command, args, options) => {
282
+ const cp = await importNodeBuiltin("node:child_process");
283
+ if (!cp)
284
+ throw new ClaudeCliNotFoundError("The Claude Agent provider requires Node.js.");
285
+ return cp.spawn(command, args, {
286
+ cwd: options.cwd,
287
+ env: options.env,
288
+ stdio: ["pipe", "pipe", "pipe"],
289
+ windowsHide: true
290
+ });
291
+ };
292
+ /** A failed session. Carries the CLI's stderr tail when there is one. */
293
+ export class ClaudeCliError extends Error {
294
+ constructor(message) {
295
+ super(message);
296
+ this.name = "ClaudeCliError";
297
+ }
298
+ }
299
+ /** Async queue bridging stdout callbacks to the generator. */
300
+ class LineQueue {
301
+ items = [];
302
+ waiters = [];
303
+ ended = false;
304
+ failure = null;
305
+ push(item) {
306
+ this.items.push(item);
307
+ this.wake();
308
+ }
309
+ end() {
310
+ this.ended = true;
311
+ this.wake();
312
+ }
313
+ fail(err) {
314
+ this.failure ??= err;
315
+ this.wake();
316
+ }
317
+ wake() {
318
+ for (const waiter of this.waiters.splice(0))
319
+ waiter();
320
+ }
321
+ async *drain() {
322
+ for (;;) {
323
+ const item = this.items.shift();
324
+ if (item !== undefined) {
325
+ yield item;
326
+ continue;
327
+ }
328
+ if (this.failure)
329
+ throw this.failure;
330
+ if (this.ended)
331
+ return;
332
+ await new Promise((resolve) => this.waiters.push(resolve));
333
+ }
334
+ }
335
+ }
336
+ /**
337
+ * Start `claude`, send the initialize request and the prompt, answer the
338
+ * CLI's control requests, and yield every conversation message. Stdin is
339
+ * closed after the first `result`, which ends the process. Aborting the
340
+ * options' controller kills it.
341
+ */
342
+ export async function* runClaudeCli(params) {
343
+ const { options } = params;
344
+ const signal = options.abortController.signal;
345
+ if (signal.aborted)
346
+ return;
347
+ const args = buildCliArgs(options);
348
+ const env = { ...options.env };
349
+ // An inherited NODE_OPTIONS (Electron sets some) breaks an npm-installed CLI.
350
+ delete env["NODE_OPTIONS"];
351
+ log.debug("Spawning Claude CLI", { cliPath: params.cliPath });
352
+ const child = await (params.spawn ?? defaultSpawn)(params.cliPath, args, {
353
+ cwd: options.cwd,
354
+ env
355
+ });
356
+ let stderrTail = "";
357
+ child.stderr.setEncoding?.("utf8");
358
+ child.stderr.on("data", (data) => {
359
+ stderrTail = (stderrTail + String(data)).slice(-STDERR_TAIL_CHARS);
360
+ });
361
+ const withStderr = (message) => {
362
+ const tail = stderrTail.trim();
363
+ return tail ? `${message}. stderr: ${tail}` : message;
364
+ };
365
+ const queue = new LineQueue();
366
+ let sawResult = false;
367
+ let stdinOpen = true;
368
+ const write = (frame) => {
369
+ if (!stdinOpen)
370
+ return;
371
+ child.stdin.write(`${JSON.stringify(frame)}\n`);
372
+ };
373
+ const endInput = () => {
374
+ if (!stdinOpen)
375
+ return;
376
+ stdinOpen = false;
377
+ child.stdin.end();
378
+ };
379
+ child.stdin.on("error", () => {
380
+ // The process may exit before reading stdin. Its exit status reports why.
381
+ stdinOpen = false;
382
+ });
383
+ child.once("error", (err) => {
384
+ queue.fail(err.code === "ENOENT"
385
+ ? new ClaudeCliNotFoundError(`The Claude Code CLI was not found at ${params.cliPath}.`)
386
+ : new ClaudeCliError(`Failed to start the Claude Code CLI: ${err.message}`));
387
+ });
388
+ const servers = options.mcpServers ?? {};
389
+ const answerControlRequest = async (frame) => {
390
+ const { request } = frame;
391
+ let response;
392
+ try {
393
+ if (request.subtype !== "mcp_message") {
394
+ throw new Error(`Unsupported control request: ${request.subtype}`);
395
+ }
396
+ const server = servers[request.server_name ?? ""];
397
+ if (!server)
398
+ throw new Error(`Unknown MCP server: ${String(request.server_name)}`);
399
+ response = {
400
+ subtype: "success",
401
+ request_id: frame.request_id,
402
+ response: { mcp_response: await handleMcpMessage(server, request.message ?? {}) }
403
+ };
404
+ }
405
+ catch (err) {
406
+ response = {
407
+ subtype: "error",
408
+ request_id: frame.request_id,
409
+ error: err instanceof Error ? err.message : String(err)
410
+ };
411
+ }
412
+ write({ type: "control_response", response });
413
+ };
414
+ const initRequestId = `init_${crypto.randomUUID()}`;
415
+ const onLine = (line) => {
416
+ const trimmed = line.trim();
417
+ if (!trimmed.startsWith("{"))
418
+ return;
419
+ let frame;
420
+ try {
421
+ frame = JSON.parse(trimmed);
422
+ }
423
+ catch {
424
+ log.debug("Skipping a non-JSON Claude CLI output line");
425
+ return;
426
+ }
427
+ if (!isObjectLike(frame) || !isString(frame.type))
428
+ return;
429
+ const typed = frame;
430
+ if (typed.type === "control_request") {
431
+ void answerControlRequest(typed);
432
+ return;
433
+ }
434
+ if (typed.type === "control_response") {
435
+ const response = typed.response;
436
+ if (response.request_id === initRequestId && response.subtype === "error") {
437
+ queue.fail(new ClaudeCliError(`Claude Code rejected the session: ${response.error ?? "unknown error"}`));
438
+ }
439
+ return;
440
+ }
441
+ if (typed.type === "control_cancel_request" || typed.type === "keep_alive")
442
+ return;
443
+ if (typed.type === "result") {
444
+ sawResult = true;
445
+ // One prompt per session: the first result ends it.
446
+ endInput();
447
+ setTimeout(() => child.kill("SIGTERM"), RESULT_EXIT_GRACE_MS).unref?.();
448
+ }
449
+ queue.push(typed);
450
+ };
451
+ const readline = await importNodeBuiltin("node:readline");
452
+ if (!readline)
453
+ throw new ClaudeCliNotFoundError("The Claude Agent provider requires Node.js.");
454
+ const lines = readline.createInterface({ input: child.stdout, crlfDelay: Infinity });
455
+ lines.on("line", onLine);
456
+ child.once("close", (code, exitSignal) => {
457
+ if (signal.aborted || sawResult) {
458
+ queue.end();
459
+ }
460
+ else if (code !== 0) {
461
+ queue.fail(new ClaudeCliError(withStderr(exitSignal
462
+ ? `Claude Code CLI was terminated by ${exitSignal}`
463
+ : `Claude Code CLI exited with code ${code}`)));
464
+ }
465
+ else {
466
+ queue.fail(new ClaudeCliError(withStderr("Claude Code CLI exited without a result")));
467
+ }
468
+ });
469
+ const onAbort = () => {
470
+ endInput();
471
+ child.kill("SIGTERM");
472
+ };
473
+ signal.addEventListener("abort", onAbort, { once: true });
474
+ write({ type: "control_request", request_id: initRequestId, request: buildInitializeRequest(options) });
475
+ write(userMessageLine(params.prompt));
476
+ try {
477
+ yield* queue.drain();
478
+ }
479
+ finally {
480
+ signal.removeEventListener("abort", onAbort);
481
+ lines.close();
482
+ endInput();
483
+ // A consumer that stopped early leaves the process running its loop.
484
+ if (!sawResult || signal.aborted)
485
+ child.kill("SIGTERM");
486
+ }
487
+ }
488
+ //# sourceMappingURL=claude-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../../src/providers/claude-cli.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,12 @@
18
18
  import { OpenAIProvider } from "./openai-provider.js";
19
19
  import type { ImageModel, LanguageModel, Message, ProviderStreamItem, ProviderTool, TextToImageParams } from "./types.js";
20
20
  import type { ProviderCapability } from "./base-provider.js";
21
+ /**
22
+ * The models the Codex CLI lists in its picker, mirrored from its bundled
23
+ * `models.json` (entries with `visibility: "list"`). Shown only when the live
24
+ * `/models` listing is unavailable.
25
+ */
26
+ export declare const CODEX_FALLBACK_MODELS: LanguageModel[];
21
27
  /** Remove tokenizer control markers that can arrive in untrusted tool output. */
22
28
  export declare function sanitizeCodexControlTokens(text: string): string;
23
29
  export declare class CodexProvider extends OpenAIProvider {
@@ -33,8 +39,9 @@ export declare class CodexProvider extends OpenAIProvider {
33
39
  /** The OAuth bearer is short-lived — never leak it into a container env. */
34
40
  getContainerEnv(): {};
35
41
  /**
36
- * Return the account- and version-specific models served by Codex. Use the
37
- * shared OpenAI catalog only when the live listing is unavailable or empty.
42
+ * Return the account- and version-specific models served by Codex, minus
43
+ * the ones Codex itself hides from its picker. Use {@link CODEX_FALLBACK_MODELS}
44
+ * only when the live listing is unavailable or empty.
38
45
  */
39
46
  getAvailableLanguageModels(): Promise<LanguageModel[]>;
40
47
  hasToolSupport(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"codex-provider.d.ts","sourceRoot":"","sources":["../../src/providers/codex-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-provider.d.ts","sourceRoot":"","sources":["../../src/providers/codex-provider.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@
18
18
  import OpenAI from "openai";
19
19
  import { createLogger } from "@nodetool-ai/config";
20
20
  import { CODEX_BACKEND_BASE_URL, CODEX_DEFAULT_ORIGINATOR, CODEX_CLIENT_VERSION, PROVIDER_IDS, isString } from "@nodetool-ai/protocol";
21
- import { OpenAIProvider, OPENAI_FALLBACK_MODELS } from "./openai-provider.js";
21
+ import { OpenAIProvider } from "./openai-provider.js";
22
22
  import { extractChatGptAccountId } from "./oauth/jwt-claims.js";
23
23
  import { isProviderSessionUpdate, isProviderMessageEvent, isProviderStop } from "./types.js";
24
24
  const log = createLogger("nodetool.runtime.codex");
@@ -28,6 +28,21 @@ const log = createLogger("nodetool.runtime.codex");
28
28
  * Responses built-in `image_generation` tool from a normal chat model.
29
29
  */
30
30
  const CODEX_IMAGE_ORCHESTRATOR_MODEL = "gpt-5.5";
31
+ /**
32
+ * The models the Codex CLI lists in its picker, mirrored from its bundled
33
+ * `models.json` (entries with `visibility: "list"`). Shown only when the live
34
+ * `/models` listing is unavailable.
35
+ */
36
+ export const CODEX_FALLBACK_MODELS = [
37
+ ["gpt-6.1-sol", "GPT-6.1-Sol"],
38
+ ["gpt-6-sol", "GPT-6-Sol"],
39
+ ["gpt-6-luna", "GPT-6-Luna"],
40
+ ["gpt-6-astra", "GPT-6-Astra"],
41
+ ["gpt-5.6-sol", "GPT-5.6-Sol"],
42
+ ["gpt-5.6-terra", "GPT-5.6-Terra"],
43
+ ["gpt-5.6-luna", "GPT-5.6-Luna"],
44
+ ["gpt-5.5", "GPT-5.5"]
45
+ ].map(([id, name]) => ({ id, name, provider: PROVIDER_IDS.CODEX }));
31
46
  const CODEX_CONTROL_TOKEN = /<\|(?:endoftext|endofprompt|startoftext)\|>/g;
32
47
  /** Remove tokenizer control markers that can arrive in untrusted tool output. */
33
48
  export function sanitizeCodexControlTokens(text) {
@@ -92,33 +107,32 @@ export class CodexProvider extends OpenAIProvider {
92
107
  return {};
93
108
  }
94
109
  /**
95
- * Return the account- and version-specific models served by Codex. Use the
96
- * shared OpenAI catalog only when the live listing is unavailable or empty.
110
+ * Return the account- and version-specific models served by Codex, minus
111
+ * the ones Codex itself hides from its picker. Use {@link CODEX_FALLBACK_MODELS}
112
+ * only when the live listing is unavailable or empty.
97
113
  */
98
114
  async getAvailableLanguageModels() {
99
- const fallback = OPENAI_FALLBACK_MODELS.map((model) => ({
100
- ...model,
101
- provider: PROVIDER_IDS.CODEX
102
- }));
103
115
  try {
104
116
  const url = `${CODEX_BACKEND_BASE_URL}/models?client_version=${encodeURIComponent(codexClientVersion())}`;
105
117
  const res = await fetch(url, {
106
118
  headers: this.buildHeaders("application/json")
107
119
  });
108
120
  if (!res.ok)
109
- return fallback;
121
+ return CODEX_FALLBACK_MODELS;
110
122
  const payload = (await res.json());
111
123
  const models = (payload.models ?? [])
112
- .filter((m) => typeof m.slug === "string" && m.slug.length > 0)
124
+ .filter((m) => typeof m.slug === "string" &&
125
+ m.slug.length > 0 &&
126
+ m.visibility !== "hide")
113
127
  .map((m) => ({
114
128
  id: m.slug,
115
129
  name: m.display_name ?? m.slug,
116
130
  provider: PROVIDER_IDS.CODEX
117
131
  }));
118
- return models.length > 0 ? models : fallback;
132
+ return models.length > 0 ? models : CODEX_FALLBACK_MODELS;
119
133
  }
120
134
  catch {
121
- return fallback;
135
+ return CODEX_FALLBACK_MODELS;
122
136
  }
123
137
  }
124
138
  async hasToolSupport() {