@pentoshi/clai 4.8.3 → 4.9.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 (268) hide show
  1. package/README.md +69 -3
  2. package/dist/agent/finalize-gate.js +0 -9
  3. package/dist/agent/finalize-gate.js.map +1 -1
  4. package/dist/agent/plan-mode-reminders.js +5 -5
  5. package/dist/agent/plan-mode-reminders.js.map +1 -1
  6. package/dist/agent/plan-tool.d.ts +1 -0
  7. package/dist/agent/plan-tool.js +50 -21
  8. package/dist/agent/plan-tool.js.map +1 -1
  9. package/dist/agent/reliability-policy.d.ts +9 -0
  10. package/dist/agent/reliability-policy.js +36 -1
  11. package/dist/agent/reliability-policy.js.map +1 -1
  12. package/dist/agent/runner.d.ts +4 -0
  13. package/dist/agent/runner.js +193 -116
  14. package/dist/agent/runner.js.map +1 -1
  15. package/dist/agent/task-analyzer.d.ts +8 -18
  16. package/dist/agent/task-analyzer.js +75 -182
  17. package/dist/agent/task-analyzer.js.map +1 -1
  18. package/dist/agent/task-evidence.js +10 -0
  19. package/dist/agent/task-evidence.js.map +1 -1
  20. package/dist/agent/tool-call-parser.js +14 -13
  21. package/dist/agent/tool-call-parser.js.map +1 -1
  22. package/dist/app/adapters/current-agent-adapter.d.ts +5 -1
  23. package/dist/app/adapters/current-agent-adapter.js +2 -1
  24. package/dist/app/adapters/current-agent-adapter.js.map +1 -1
  25. package/dist/app/commands/catalog.js +5 -0
  26. package/dist/app/commands/catalog.js.map +1 -1
  27. package/dist/app/controllers/session-compact-helper.js +3 -6
  28. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  29. package/dist/app/ports/transcript-item.d.ts +4 -0
  30. package/dist/classic/app/ClassicApp.js +1 -1
  31. package/dist/classic/app/ClassicApp.js.map +1 -1
  32. package/dist/classic/app/action-handlers.js +4 -0
  33. package/dist/classic/app/action-handlers.js.map +1 -1
  34. package/dist/classic/app/app-wiring.js +1 -0
  35. package/dist/classic/app/app-wiring.js.map +1 -1
  36. package/dist/classic/app/wiring-lifecycle.js +1 -0
  37. package/dist/classic/app/wiring-lifecycle.js.map +1 -1
  38. package/dist/classic/blocks/compacted-lines.js +3 -0
  39. package/dist/classic/blocks/compacted-lines.js.map +1 -1
  40. package/dist/classic/blocks/thinking-lines.js +11 -2
  41. package/dist/classic/blocks/thinking-lines.js.map +1 -1
  42. package/dist/classic/bootstrap/start-classic.js +3 -0
  43. package/dist/classic/bootstrap/start-classic.js.map +1 -1
  44. package/dist/classic/chrome/Composer.d.ts +6 -0
  45. package/dist/classic/chrome/Composer.js +2 -3
  46. package/dist/classic/chrome/Composer.js.map +1 -1
  47. package/dist/classic/chrome/composer-controller.d.ts +6 -1
  48. package/dist/classic/chrome/composer-controller.js +18 -8
  49. package/dist/classic/chrome/composer-controller.js.map +1 -1
  50. package/dist/classic/chrome/editor-view.d.ts +2 -1
  51. package/dist/classic/chrome/editor-view.js +1 -1
  52. package/dist/classic/chrome/editor-view.js.map +1 -1
  53. package/dist/classic/chrome/status-rows.js +3 -2
  54. package/dist/classic/chrome/status-rows.js.map +1 -1
  55. package/dist/classic/panels/TextEditorPanel.d.ts +3 -0
  56. package/dist/classic/panels/TextEditorPanel.js +7 -0
  57. package/dist/classic/panels/TextEditorPanel.js.map +1 -0
  58. package/dist/classic/panels/panel-controller.js +28 -1
  59. package/dist/classic/panels/panel-controller.js.map +1 -1
  60. package/dist/classic/panels/panel-effect.d.ts +3 -0
  61. package/dist/classic/panels/panel-effect.js.map +1 -1
  62. package/dist/classic/panels/panel-effects.js +3 -0
  63. package/dist/classic/panels/panel-effects.js.map +1 -1
  64. package/dist/classic/panels/panel-host.js +3 -0
  65. package/dist/classic/panels/panel-host.js.map +1 -1
  66. package/dist/classic/panels/panel-types.d.ts +2 -0
  67. package/dist/classic/panels/secret-panel.d.ts +1 -1
  68. package/dist/classic/panels/secret-panel.js +4 -2
  69. package/dist/classic/panels/secret-panel.js.map +1 -1
  70. package/dist/classic/panels/text-editor-panel.d.ts +33 -0
  71. package/dist/classic/panels/text-editor-panel.js +101 -0
  72. package/dist/classic/panels/text-editor-panel.js.map +1 -0
  73. package/dist/llm/adapters/anthropic-tools.d.ts +2 -1
  74. package/dist/llm/adapters/anthropic-tools.js +55 -4
  75. package/dist/llm/adapters/anthropic-tools.js.map +1 -1
  76. package/dist/llm/anthropic.js +1 -1
  77. package/dist/llm/anthropic.js.map +1 -1
  78. package/dist/llm/aws-mantle.js +2 -0
  79. package/dist/llm/aws-mantle.js.map +1 -1
  80. package/dist/llm/meta.js +62 -68
  81. package/dist/llm/meta.js.map +1 -1
  82. package/dist/llm/provider.js +7 -7
  83. package/dist/llm/request-plan.js +7 -2
  84. package/dist/llm/request-plan.js.map +1 -1
  85. package/dist/llm/tool-protocol.d.ts +1 -0
  86. package/dist/llm/tool-protocol.js +7 -0
  87. package/dist/llm/tool-protocol.js.map +1 -1
  88. package/dist/mcp/client.d.ts +27 -0
  89. package/dist/mcp/client.js +119 -0
  90. package/dist/mcp/client.js.map +1 -0
  91. package/dist/mcp/config-file.d.ts +35 -0
  92. package/dist/mcp/config-file.js +217 -0
  93. package/dist/mcp/config-file.js.map +1 -0
  94. package/dist/mcp/discovery.d.ts +4 -0
  95. package/dist/mcp/discovery.js +409 -0
  96. package/dist/mcp/discovery.js.map +1 -0
  97. package/dist/mcp/format.d.ts +17 -0
  98. package/dist/mcp/format.js +122 -0
  99. package/dist/mcp/format.js.map +1 -0
  100. package/dist/mcp/index.d.ts +15 -0
  101. package/dist/mcp/index.js +16 -0
  102. package/dist/mcp/index.js.map +1 -0
  103. package/dist/mcp/jsonrpc.d.ts +40 -0
  104. package/dist/mcp/jsonrpc.js +175 -0
  105. package/dist/mcp/jsonrpc.js.map +1 -0
  106. package/dist/mcp/manager.d.ts +36 -0
  107. package/dist/mcp/manager.js +300 -0
  108. package/dist/mcp/manager.js.map +1 -0
  109. package/dist/mcp/mentions.d.ts +9 -0
  110. package/dist/mcp/mentions.js +44 -0
  111. package/dist/mcp/mentions.js.map +1 -0
  112. package/dist/mcp/names.d.ts +15 -0
  113. package/dist/mcp/names.js +59 -0
  114. package/dist/mcp/names.js.map +1 -0
  115. package/dist/mcp/results.d.ts +6 -0
  116. package/dist/mcp/results.js +182 -0
  117. package/dist/mcp/results.js.map +1 -0
  118. package/dist/mcp/runtime.d.ts +107 -0
  119. package/dist/mcp/runtime.js +505 -0
  120. package/dist/mcp/runtime.js.map +1 -0
  121. package/dist/mcp/substitution.d.ts +13 -0
  122. package/dist/mcp/substitution.js +74 -0
  123. package/dist/mcp/substitution.js.map +1 -0
  124. package/dist/mcp/transport-http.d.ts +53 -0
  125. package/dist/mcp/transport-http.js +433 -0
  126. package/dist/mcp/transport-http.js.map +1 -0
  127. package/dist/mcp/transport-stdio.d.ts +39 -0
  128. package/dist/mcp/transport-stdio.js +268 -0
  129. package/dist/mcp/transport-stdio.js.map +1 -0
  130. package/dist/mcp/transport.d.ts +20 -0
  131. package/dist/mcp/transport.js +44 -0
  132. package/dist/mcp/transport.js.map +1 -0
  133. package/dist/mcp/types.d.ts +179 -0
  134. package/dist/mcp/types.js +30 -0
  135. package/dist/mcp/types.js.map +1 -0
  136. package/dist/mcp/validation.d.ts +16 -0
  137. package/dist/mcp/validation.js +222 -0
  138. package/dist/mcp/validation.js.map +1 -0
  139. package/dist/modes/agent.d.ts +2 -0
  140. package/dist/modes/agent.js.map +1 -1
  141. package/dist/noninteractive/start-noninteractive.js +4 -0
  142. package/dist/noninteractive/start-noninteractive.js.map +1 -1
  143. package/dist/prompts/embedded.js +2 -2
  144. package/dist/prompts/embedded.js.map +1 -1
  145. package/dist/prompts/index.d.ts +3 -0
  146. package/dist/prompts/index.js +70 -55
  147. package/dist/prompts/index.js.map +1 -1
  148. package/dist/prompts/system.agent.md +34 -10
  149. package/dist/prompts/system.ask.md +8 -0
  150. package/dist/safety/classifier.js +4 -0
  151. package/dist/safety/classifier.js.map +1 -1
  152. package/dist/store/logs.js +17 -6
  153. package/dist/store/logs.js.map +1 -1
  154. package/dist/store/plan.d.ts +2 -0
  155. package/dist/store/plan.js +12 -13
  156. package/dist/store/plan.js.map +1 -1
  157. package/dist/store/session-workspace.js +2 -1
  158. package/dist/store/session-workspace.js.map +1 -1
  159. package/dist/tools/definitions.js +18 -0
  160. package/dist/tools/definitions.js.map +1 -1
  161. package/dist/tools/external-tools.d.ts +30 -0
  162. package/dist/tools/external-tools.js +52 -0
  163. package/dist/tools/external-tools.js.map +1 -0
  164. package/dist/tools/registry.js +36 -5
  165. package/dist/tools/registry.js.map +1 -1
  166. package/dist/tui-v2/bootstrap/start-tui-v2.js +3 -0
  167. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  168. package/dist/tui-v2/components/completion/completion-menu.d.ts +4 -6
  169. package/dist/tui-v2/components/completion/completion-menu.js +34 -16
  170. package/dist/tui-v2/components/completion/completion-menu.js.map +1 -1
  171. package/dist/tui-v2/components/composer/composer-input-box.js +3 -1
  172. package/dist/tui-v2/components/composer/composer-input-box.js.map +1 -1
  173. package/dist/tui-v2/components/modal/secret-modal.js +6 -4
  174. package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
  175. package/dist/tui-v2/components/modal/text-editor-modal.d.ts +19 -0
  176. package/dist/tui-v2/components/modal/text-editor-modal.js +85 -0
  177. package/dist/tui-v2/components/modal/text-editor-modal.js.map +1 -0
  178. package/dist/tui-v2/components/overlay/overlay-host.js +2 -1
  179. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  180. package/dist/tui-v2/components/transcript/compacted-row.js +12 -3
  181. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  182. package/dist/tui-v2/components/transcript/thinking-block.d.ts +9 -1
  183. package/dist/tui-v2/components/transcript/thinking-block.js +253 -49
  184. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  185. package/dist/tui-v2/components/transcript/thinking-presentation.d.ts +46 -0
  186. package/dist/tui-v2/components/transcript/thinking-presentation.js +84 -0
  187. package/dist/tui-v2/components/transcript/thinking-presentation.js.map +1 -0
  188. package/dist/tui-v2/components/transcript/transcript-row.d.ts +2 -0
  189. package/dist/tui-v2/components/transcript/transcript-row.js +7 -2
  190. package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
  191. package/dist/tui-v2/components/transcript/transcript-view.js +195 -83
  192. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
  193. package/dist/tui-v2/composer/composer-editor.js +54 -39
  194. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  195. package/dist/tui-v2/composer/composer-highlight.d.ts +20 -0
  196. package/dist/tui-v2/composer/composer-highlight.js +97 -0
  197. package/dist/tui-v2/composer/composer-highlight.js.map +1 -0
  198. package/dist/tui-v2/composer/textarea-keybindings.d.ts +5 -0
  199. package/dist/tui-v2/composer/textarea-keybindings.js +12 -0
  200. package/dist/tui-v2/composer/textarea-keybindings.js.map +1 -1
  201. package/dist/ui/mentions.js +4 -1
  202. package/dist/ui/mentions.js.map +1 -1
  203. package/dist/ui-core/actions/action-id.d.ts +1 -1
  204. package/dist/ui-core/actions/action-id.js +1 -0
  205. package/dist/ui-core/actions/action-id.js.map +1 -1
  206. package/dist/ui-core/actions/format-shortcuts.js +5 -0
  207. package/dist/ui-core/actions/format-shortcuts.js.map +1 -1
  208. package/dist/ui-core/actions/keymap.js +3 -0
  209. package/dist/ui-core/actions/keymap.js.map +1 -1
  210. package/dist/ui-core/bootstrap/composition-root.d.ts +3 -0
  211. package/dist/ui-core/bootstrap/composition-root.js +5 -1
  212. package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
  213. package/dist/ui-core/commands/command-handlers.js +2 -0
  214. package/dist/ui-core/commands/command-handlers.js.map +1 -1
  215. package/dist/ui-core/commands/mcp-commands.d.ts +3 -0
  216. package/dist/ui-core/commands/mcp-commands.js +310 -0
  217. package/dist/ui-core/commands/mcp-commands.js.map +1 -0
  218. package/dist/ui-core/commands/picker-commands.d.ts +1 -1
  219. package/dist/ui-core/commands/picker-commands.js +2 -2
  220. package/dist/ui-core/commands/picker-commands.js.map +1 -1
  221. package/dist/ui-core/commands/session-commands.js +1 -0
  222. package/dist/ui-core/commands/session-commands.js.map +1 -1
  223. package/dist/ui-core/composer/completion-viewport.d.ts +40 -0
  224. package/dist/ui-core/composer/completion-viewport.js +105 -0
  225. package/dist/ui-core/composer/completion-viewport.js.map +1 -0
  226. package/dist/ui-core/controllers/overlay-controller.d.ts +24 -3
  227. package/dist/ui-core/controllers/overlay-controller.js +35 -4
  228. package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
  229. package/dist/ui-core/rendering/artifact-pager-source.d.ts +1 -0
  230. package/dist/ui-core/rendering/artifact-pager-source.js +67 -1
  231. package/dist/ui-core/rendering/artifact-pager-source.js.map +1 -1
  232. package/dist/ui-core/rendering/duration.d.ts +3 -1
  233. package/dist/ui-core/rendering/duration.js +14 -0
  234. package/dist/ui-core/rendering/duration.js.map +1 -1
  235. package/dist/ui-core/rendering/exit-summary.js +4 -4
  236. package/dist/ui-core/rendering/format-help.js +4 -0
  237. package/dist/ui-core/rendering/format-help.js.map +1 -1
  238. package/dist/ui-core/rendering/intro-header.js +4 -4
  239. package/dist/ui-core/rendering/open-tool-output.js +90 -32
  240. package/dist/ui-core/rendering/open-tool-output.js.map +1 -1
  241. package/dist/ui-core/rendering/theme.d.ts +5 -3
  242. package/dist/ui-core/rendering/theme.js +8 -4
  243. package/dist/ui-core/rendering/theme.js.map +1 -1
  244. package/dist/ui-core/rendering/wordmark.d.ts +2 -2
  245. package/dist/ui-core/rendering/wordmark.js +62 -62
  246. package/dist/ui-core/rendering/wordmark.js.map +1 -1
  247. package/dist/ui-core/state/thinking-copy.d.ts +13 -0
  248. package/dist/ui-core/state/thinking-copy.js +33 -0
  249. package/dist/ui-core/state/thinking-copy.js.map +1 -0
  250. package/dist/ui-core/state/transcript-hydrate.js +20 -0
  251. package/dist/ui-core/state/transcript-hydrate.js.map +1 -1
  252. package/dist/ui-core/state/transcript-reducer.js +140 -62
  253. package/dist/ui-core/state/transcript-reducer.js.map +1 -1
  254. package/dist/ui-core/state/transcript-store.d.ts +10 -0
  255. package/dist/ui-core/state/transcript-store.js +235 -31
  256. package/dist/ui-core/state/transcript-store.js.map +1 -1
  257. package/dist/ui-core/state/transcript-types.d.ts +10 -0
  258. package/dist/ui-core/state/transcript-types.js +1 -0
  259. package/dist/ui-core/state/transcript-types.js.map +1 -1
  260. package/dist/ui-core/state/transcript-window.d.ts +32 -0
  261. package/dist/ui-core/state/transcript-window.js +63 -0
  262. package/dist/ui-core/state/transcript-window.js.map +1 -0
  263. package/dist/version.generated.d.ts +2 -2
  264. package/dist/version.generated.js +2 -2
  265. package/package.json +1 -1
  266. package/dist/tui-v2/composer/skill-highlight.d.ts +0 -3
  267. package/dist/tui-v2/composer/skill-highlight.js +0 -63
  268. package/dist/tui-v2/composer/skill-highlight.js.map +0 -1
@@ -0,0 +1,53 @@
1
+ import { type McpTransport } from "./transport.js";
2
+ import { type JsonRpcNotification, type JsonRpcRequest, type JsonRpcResponse, type McpHttpConfig, type McpRequestOptions } from "./types.js";
3
+ export interface HttpTransportOptions {
4
+ readonly requestTimeoutMs?: number | undefined;
5
+ readonly maxResponseBytes?: number | undefined;
6
+ readonly fetchImpl?: typeof fetch | undefined;
7
+ }
8
+ export declare class StreamableHttpTransport implements McpTransport {
9
+ private readonly config;
10
+ private readonly options;
11
+ readonly kind: "http";
12
+ private session;
13
+ private protocolVersion;
14
+ private nextId;
15
+ private closed;
16
+ constructor(config: McpHttpConfig, options?: HttpTransportOptions);
17
+ private get fetchImpl();
18
+ private get maxBytes();
19
+ sessionId(): string | undefined;
20
+ setProtocolVersion(version: string): void;
21
+ start(): Promise<void>;
22
+ private mergedHeaders;
23
+ request(message: JsonRpcRequest, options?: McpRequestOptions): Promise<JsonRpcResponse>;
24
+ notify(message: JsonRpcNotification, options?: McpRequestOptions): Promise<void>;
25
+ private captureSession;
26
+ close(): Promise<void>;
27
+ }
28
+ export declare class LegacySseTransport implements McpTransport {
29
+ private readonly config;
30
+ private readonly options;
31
+ readonly kind: "sse";
32
+ private protocolVersion;
33
+ private nextId;
34
+ private closed;
35
+ private endpointUrl;
36
+ private readonly streamController;
37
+ private readonly pending;
38
+ private readyPromise;
39
+ private pumpError;
40
+ constructor(config: McpHttpConfig, options?: HttpTransportOptions);
41
+ private get fetchImpl();
42
+ private get maxBytes();
43
+ sessionId(): string | undefined;
44
+ setProtocolVersion(version: string): void;
45
+ start(): Promise<void>;
46
+ private pump;
47
+ private handleEvent;
48
+ private failAll;
49
+ private postMessage;
50
+ request(message: JsonRpcRequest, options?: McpRequestOptions): Promise<JsonRpcResponse>;
51
+ notify(message: JsonRpcNotification, options?: McpRequestOptions): Promise<void>;
52
+ close(): Promise<void>;
53
+ }
@@ -0,0 +1,433 @@
1
+ import { isJsonRpcResponse, parseMessage, SseDecoder, } from "./jsonrpc.js";
2
+ import { McpTransportError, withTimeout, } from "./transport.js";
3
+ import { MCP_PROTOCOL_VERSION, } from "./types.js";
4
+ const DEFAULT_REQUEST_TIMEOUT_MS = 60_000;
5
+ const MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
6
+ const SESSION_HEADER = "mcp-session-id";
7
+ const PROTOCOL_HEADER = "mcp-protocol-version";
8
+ function mapFetchError(error, signal) {
9
+ if (error instanceof McpTransportError)
10
+ return error;
11
+ const reason = signal?.reason;
12
+ if (reason instanceof McpTransportError)
13
+ return reason;
14
+ const err = error;
15
+ if (err?.name === "AbortError") {
16
+ return new McpTransportError("cancelled", "MCP HTTP request aborted.");
17
+ }
18
+ const detail = err?.cause?.message ?? err?.message ?? "unknown error";
19
+ return new McpTransportError("network", `MCP HTTP request failed: ${detail}`);
20
+ }
21
+ function redirectError(response) {
22
+ const status = response.status;
23
+ const isRedirect = response.type === "opaqueredirect" || (status >= 300 && status < 400);
24
+ if (!isRedirect)
25
+ return undefined;
26
+ const location = response.headers.get("location") ?? "an undisclosed location";
27
+ return new McpTransportError("protocol", `MCP HTTP endpoint attempted a redirect (${status || "opaque"}) to "${location}". Refusing to follow it so credentials cannot cross origin; update the server url to the final endpoint.`);
28
+ }
29
+ async function readBoundedText(response, maxBytes) {
30
+ const body = response.body;
31
+ if (!body)
32
+ return await response.text();
33
+ const reader = body.getReader();
34
+ const decoder = new TextDecoder();
35
+ let out = "";
36
+ let total = 0;
37
+ while (true) {
38
+ const { done, value } = await reader.read();
39
+ if (done)
40
+ break;
41
+ if (value) {
42
+ total += value.byteLength;
43
+ if (total > maxBytes) {
44
+ await reader.cancel().catch(() => undefined);
45
+ throw new McpTransportError("too-large", "MCP HTTP response exceeded the size limit.");
46
+ }
47
+ out += decoder.decode(value, { stream: true });
48
+ }
49
+ }
50
+ out += decoder.decode();
51
+ return out;
52
+ }
53
+ function baseHeaders(sessionId, protocolVersion, accept) {
54
+ const headers = {
55
+ "content-type": "application/json",
56
+ accept,
57
+ };
58
+ if (sessionId)
59
+ headers[SESSION_HEADER] = sessionId;
60
+ if (protocolVersion)
61
+ headers[PROTOCOL_HEADER] = protocolVersion;
62
+ return headers;
63
+ }
64
+ async function collectSseResponse(response, targetId, maxBytes) {
65
+ const body = response.body;
66
+ if (!body) {
67
+ throw new McpTransportError("protocol", "MCP SSE response had no body.");
68
+ }
69
+ const reader = body.getReader();
70
+ const sse = new SseDecoder();
71
+ let total = 0;
72
+ try {
73
+ while (true) {
74
+ const { done, value } = await reader.read();
75
+ if (done)
76
+ break;
77
+ if (!value)
78
+ continue;
79
+ total += value.byteLength;
80
+ if (total > maxBytes) {
81
+ throw new McpTransportError("too-large", "MCP SSE stream exceeded the size limit.");
82
+ }
83
+ for (const event of sse.push(value)) {
84
+ const message = parseMessage(event.data);
85
+ if (message && isJsonRpcResponse(message) && String(message.id) === String(targetId)) {
86
+ return message;
87
+ }
88
+ }
89
+ }
90
+ }
91
+ finally {
92
+ await reader.cancel().catch(() => undefined);
93
+ }
94
+ throw new McpTransportError("protocol", "MCP SSE stream closed before a matching response arrived.");
95
+ }
96
+ export class StreamableHttpTransport {
97
+ config;
98
+ options;
99
+ kind = "http";
100
+ session;
101
+ protocolVersion = MCP_PROTOCOL_VERSION;
102
+ nextId = 1;
103
+ closed = false;
104
+ constructor(config, options = {}) {
105
+ this.config = config;
106
+ this.options = options;
107
+ }
108
+ get fetchImpl() {
109
+ return this.options.fetchImpl ?? fetch;
110
+ }
111
+ get maxBytes() {
112
+ return this.options.maxResponseBytes ?? MAX_RESPONSE_BYTES;
113
+ }
114
+ sessionId() {
115
+ return this.session;
116
+ }
117
+ setProtocolVersion(version) {
118
+ this.protocolVersion = version;
119
+ }
120
+ start() {
121
+ return Promise.resolve();
122
+ }
123
+ mergedHeaders(accept) {
124
+ return {
125
+ ...baseHeaders(this.session, this.protocolVersion, accept),
126
+ ...this.config.headers,
127
+ };
128
+ }
129
+ async request(message, options = {}) {
130
+ if (this.closed)
131
+ throw new McpTransportError("closed", "MCP HTTP transport closed.");
132
+ const id = this.nextId++;
133
+ const framed = { ...message, id };
134
+ const timeoutMs = options.timeoutMs ?? this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
135
+ const { signal, dispose } = withTimeout(options.signal, timeoutMs);
136
+ try {
137
+ const response = await this.fetchImpl(this.config.url, {
138
+ method: "POST",
139
+ headers: this.mergedHeaders("application/json, text/event-stream"),
140
+ body: JSON.stringify(framed),
141
+ signal,
142
+ });
143
+ this.captureSession(response);
144
+ if (!response.ok) {
145
+ const detail = await readBoundedText(response, this.maxBytes).catch(() => "");
146
+ throw new McpTransportError("network", `MCP HTTP request returned ${response.status}${detail ? `: ${detail.slice(0, 400)}` : ""}.`);
147
+ }
148
+ const contentType = (response.headers.get("content-type") ?? "").toLowerCase();
149
+ if (contentType.includes("text/event-stream")) {
150
+ return await collectSseResponse(response, framed.id, this.maxBytes);
151
+ }
152
+ const text = await readBoundedText(response, this.maxBytes);
153
+ const parsed = parseMessage(text);
154
+ if (!parsed || !isJsonRpcResponse(parsed)) {
155
+ throw new McpTransportError("protocol", "MCP HTTP response was not a JSON-RPC response.");
156
+ }
157
+ return parsed;
158
+ }
159
+ catch (error) {
160
+ throw mapFetchError(error);
161
+ }
162
+ finally {
163
+ dispose();
164
+ }
165
+ }
166
+ async notify(message, options = {}) {
167
+ if (this.closed)
168
+ throw new McpTransportError("closed", "MCP HTTP transport closed.");
169
+ const timeoutMs = options.timeoutMs ?? this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
170
+ const { signal, dispose } = withTimeout(options.signal, timeoutMs);
171
+ try {
172
+ const response = await this.fetchImpl(this.config.url, {
173
+ method: "POST",
174
+ headers: this.mergedHeaders("application/json, text/event-stream"),
175
+ body: JSON.stringify(message),
176
+ signal,
177
+ });
178
+ this.captureSession(response);
179
+ if (response.body)
180
+ await response.body.cancel().catch(() => undefined);
181
+ }
182
+ catch (error) {
183
+ throw mapFetchError(error);
184
+ }
185
+ finally {
186
+ dispose();
187
+ }
188
+ }
189
+ captureSession(response) {
190
+ const id = response.headers.get(SESSION_HEADER);
191
+ if (id && id.length > 0)
192
+ this.session = id;
193
+ }
194
+ async close() {
195
+ if (this.closed)
196
+ return;
197
+ this.closed = true;
198
+ if (!this.session)
199
+ return;
200
+ try {
201
+ const response = await this.fetchImpl(this.config.url, {
202
+ method: "DELETE",
203
+ headers: this.mergedHeaders("application/json"),
204
+ });
205
+ if (response.body)
206
+ await response.body.cancel().catch(() => undefined);
207
+ }
208
+ catch {
209
+ void 0;
210
+ }
211
+ }
212
+ }
213
+ export class LegacySseTransport {
214
+ config;
215
+ options;
216
+ kind = "sse";
217
+ protocolVersion = MCP_PROTOCOL_VERSION;
218
+ nextId = 1;
219
+ closed = false;
220
+ endpointUrl;
221
+ streamController = new AbortController();
222
+ pending = new Map();
223
+ readyPromise;
224
+ pumpError;
225
+ constructor(config, options = {}) {
226
+ this.config = config;
227
+ this.options = options;
228
+ }
229
+ get fetchImpl() {
230
+ return this.options.fetchImpl ?? fetch;
231
+ }
232
+ get maxBytes() {
233
+ return this.options.maxResponseBytes ?? MAX_RESPONSE_BYTES;
234
+ }
235
+ sessionId() {
236
+ return undefined;
237
+ }
238
+ setProtocolVersion(version) {
239
+ this.protocolVersion = version;
240
+ }
241
+ start() {
242
+ if (this.readyPromise)
243
+ return this.readyPromise;
244
+ this.readyPromise = new Promise((resolve, reject) => {
245
+ let settled = false;
246
+ const onReady = () => {
247
+ if (settled)
248
+ return;
249
+ settled = true;
250
+ resolve();
251
+ };
252
+ const onFail = (error) => {
253
+ if (settled)
254
+ return;
255
+ settled = true;
256
+ reject(error);
257
+ };
258
+ this.pump(onReady, onFail).catch((error) => onFail(mapFetchError(error)));
259
+ });
260
+ return this.readyPromise;
261
+ }
262
+ async pump(onReady, onFail) {
263
+ let response;
264
+ try {
265
+ response = await this.fetchImpl(this.config.url, {
266
+ method: "GET",
267
+ headers: {
268
+ accept: "text/event-stream",
269
+ ...(this.protocolVersion ? { [PROTOCOL_HEADER]: this.protocolVersion } : {}),
270
+ ...this.config.headers,
271
+ },
272
+ signal: this.streamController.signal,
273
+ });
274
+ }
275
+ catch (error) {
276
+ onFail(mapFetchError(error));
277
+ return;
278
+ }
279
+ if (!response.ok || !response.body) {
280
+ onFail(new McpTransportError("network", `MCP SSE stream returned ${response.status}.`));
281
+ return;
282
+ }
283
+ const reader = response.body.getReader();
284
+ const sse = new SseDecoder();
285
+ let total = 0;
286
+ try {
287
+ while (true) {
288
+ const { done, value } = await reader.read();
289
+ if (done)
290
+ break;
291
+ if (!value)
292
+ continue;
293
+ total += value.byteLength;
294
+ if (total > this.maxBytes) {
295
+ throw new McpTransportError("too-large", "MCP SSE stream exceeded the size limit.");
296
+ }
297
+ for (const event of sse.push(value)) {
298
+ this.handleEvent(event.event, event.data, onReady);
299
+ }
300
+ }
301
+ this.failAll(new McpTransportError("closed", "MCP SSE stream closed."));
302
+ }
303
+ catch (error) {
304
+ const mapped = mapFetchError(error);
305
+ this.pumpError = mapped;
306
+ onFail(mapped);
307
+ this.failAll(mapped);
308
+ }
309
+ finally {
310
+ await reader.cancel().catch(() => undefined);
311
+ }
312
+ }
313
+ handleEvent(event, data, onReady) {
314
+ if (event === "endpoint") {
315
+ try {
316
+ this.endpointUrl = new URL(data, this.config.url).toString();
317
+ onReady();
318
+ }
319
+ catch {
320
+ void 0;
321
+ }
322
+ return;
323
+ }
324
+ const message = parseMessage(data);
325
+ if (!message || !isJsonRpcResponse(message))
326
+ return;
327
+ const numericId = typeof message.id === "number" ? message.id : Number(message.id);
328
+ if (!Number.isFinite(numericId))
329
+ return;
330
+ const entry = this.pending.get(numericId);
331
+ if (!entry)
332
+ return;
333
+ this.pending.delete(numericId);
334
+ entry.dispose();
335
+ entry.resolve(message);
336
+ }
337
+ failAll(error) {
338
+ for (const [, entry] of this.pending) {
339
+ entry.dispose();
340
+ entry.reject(error);
341
+ }
342
+ this.pending.clear();
343
+ }
344
+ async postMessage(body, signal) {
345
+ if (!this.endpointUrl) {
346
+ throw new McpTransportError("protocol", "MCP SSE endpoint was never announced.");
347
+ }
348
+ const response = await this.fetchImpl(this.endpointUrl, {
349
+ method: "POST",
350
+ headers: {
351
+ "content-type": "application/json",
352
+ ...(this.protocolVersion ? { [PROTOCOL_HEADER]: this.protocolVersion } : {}),
353
+ ...this.config.headers,
354
+ },
355
+ body,
356
+ signal,
357
+ });
358
+ if (response.body)
359
+ await response.body.cancel().catch(() => undefined);
360
+ if (!response.ok) {
361
+ throw new McpTransportError("network", `MCP SSE POST returned ${response.status}.`);
362
+ }
363
+ }
364
+ async request(message, options = {}) {
365
+ if (this.closed)
366
+ throw new McpTransportError("closed", "MCP SSE transport closed.");
367
+ await this.start();
368
+ if (this.pumpError)
369
+ throw this.pumpError;
370
+ const id = this.nextId++;
371
+ const framed = { ...message, id };
372
+ const timeoutMs = options.timeoutMs ?? this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
373
+ const { signal, dispose } = withTimeout(options.signal, timeoutMs);
374
+ return await new Promise((resolve, reject) => {
375
+ const onAbort = () => {
376
+ const entry = this.pending.get(id);
377
+ if (entry) {
378
+ this.pending.delete(id);
379
+ entry.dispose();
380
+ }
381
+ const reason = signal.reason;
382
+ reject(reason instanceof McpTransportError
383
+ ? reason
384
+ : new McpTransportError("cancelled", "MCP request cancelled."));
385
+ };
386
+ const disposeEntry = () => {
387
+ dispose();
388
+ signal.removeEventListener("abort", onAbort);
389
+ };
390
+ if (signal.aborted) {
391
+ disposeEntry();
392
+ onAbort();
393
+ return;
394
+ }
395
+ signal.addEventListener("abort", onAbort, { once: true });
396
+ this.pending.set(id, { resolve, reject, dispose: disposeEntry });
397
+ this.postMessage(JSON.stringify(framed), signal).catch((error) => {
398
+ const entry = this.pending.get(id);
399
+ if (entry) {
400
+ this.pending.delete(id);
401
+ entry.dispose();
402
+ }
403
+ reject(mapFetchError(error));
404
+ });
405
+ });
406
+ }
407
+ async notify(message, options = {}) {
408
+ if (this.closed)
409
+ throw new McpTransportError("closed", "MCP SSE transport closed.");
410
+ await this.start();
411
+ const timeoutMs = options.timeoutMs ?? this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
412
+ const { signal, dispose } = withTimeout(options.signal, timeoutMs);
413
+ try {
414
+ await this.postMessage(JSON.stringify(message), signal);
415
+ }
416
+ finally {
417
+ dispose();
418
+ }
419
+ }
420
+ async close() {
421
+ if (this.closed)
422
+ return;
423
+ this.closed = true;
424
+ this.failAll(new McpTransportError("closed", "MCP SSE transport closed."));
425
+ try {
426
+ this.streamController.abort();
427
+ }
428
+ catch {
429
+ void 0;
430
+ }
431
+ }
432
+ }
433
+ //# sourceMappingURL=transport-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-http.js","sourceRoot":"","sources":["../../src/mcp/transport-http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { type McpTransport } from "./transport.js";
2
+ import type { JsonRpcNotification, JsonRpcRequest, JsonRpcResponse, McpRequestOptions, McpStdioConfig } from "./types.js";
3
+ export interface StdioTransportOptions {
4
+ readonly requestTimeoutMs?: number | undefined;
5
+ readonly closeGraceMs?: number | undefined;
6
+ readonly baseEnv?: Readonly<Record<string, string | undefined>> | undefined;
7
+ }
8
+ export declare class StdioTransport implements McpTransport {
9
+ private readonly config;
10
+ private readonly options;
11
+ readonly kind: "stdio";
12
+ private child;
13
+ private readonly decoder;
14
+ private readonly pending;
15
+ private nextId;
16
+ private closed;
17
+ private exited;
18
+ private stderrTail;
19
+ private processGroupId;
20
+ private protocolVersion;
21
+ private startPromise;
22
+ constructor(config: McpStdioConfig, options?: StdioTransportOptions);
23
+ sessionId(): string | undefined;
24
+ setProtocolVersion(version: string): void;
25
+ start(): Promise<void>;
26
+ private buildEnv;
27
+ private spawnChild;
28
+ private onStdout;
29
+ private onStderr;
30
+ private failAll;
31
+ request(message: JsonRpcRequest, options?: McpRequestOptions): Promise<JsonRpcResponse>;
32
+ notify(message: JsonRpcNotification): Promise<void>;
33
+ close(): Promise<void>;
34
+ private waitForExit;
35
+ private forceKill;
36
+ private disposeChild;
37
+ diagnostics(): string;
38
+ }
39
+ export declare function isTransportAbort(error: unknown): boolean;