@pentoshi/clai 4.8.4 → 4.10.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 (318) hide show
  1. package/README.md +91 -4
  2. package/dist/agent/compaction-executor.d.ts +3 -5
  3. package/dist/agent/compaction-executor.js +165 -28
  4. package/dist/agent/compaction-executor.js.map +1 -1
  5. package/dist/agent/finalize-gate.js +0 -9
  6. package/dist/agent/finalize-gate.js.map +1 -1
  7. package/dist/agent/plan-mode-reminders.js +5 -5
  8. package/dist/agent/plan-mode-reminders.js.map +1 -1
  9. package/dist/agent/plan-tool.d.ts +1 -0
  10. package/dist/agent/plan-tool.js +50 -21
  11. package/dist/agent/plan-tool.js.map +1 -1
  12. package/dist/agent/reliability-policy.d.ts +9 -0
  13. package/dist/agent/reliability-policy.js +36 -1
  14. package/dist/agent/reliability-policy.js.map +1 -1
  15. package/dist/agent/runner.d.ts +4 -0
  16. package/dist/agent/runner.js +193 -116
  17. package/dist/agent/runner.js.map +1 -1
  18. package/dist/agent/task-analyzer.d.ts +8 -18
  19. package/dist/agent/task-analyzer.js +75 -182
  20. package/dist/agent/task-analyzer.js.map +1 -1
  21. package/dist/agent/task-evidence.js +10 -0
  22. package/dist/agent/task-evidence.js.map +1 -1
  23. package/dist/agent/tool-call-parser.js +14 -13
  24. package/dist/agent/tool-call-parser.js.map +1 -1
  25. package/dist/app/adapters/current-agent-adapter.d.ts +5 -1
  26. package/dist/app/adapters/current-agent-adapter.js +2 -1
  27. package/dist/app/adapters/current-agent-adapter.js.map +1 -1
  28. package/dist/app/commands/catalog.js +10 -0
  29. package/dist/app/commands/catalog.js.map +1 -1
  30. package/dist/app/commands/registry.js +1 -0
  31. package/dist/app/commands/registry.js.map +1 -1
  32. package/dist/app/controllers/session-compact-helper.js +3 -6
  33. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  34. package/dist/app/ports/transcript-item.d.ts +4 -0
  35. package/dist/classic/app/ClassicApp.js +1 -1
  36. package/dist/classic/app/ClassicApp.js.map +1 -1
  37. package/dist/classic/app/action-handlers.js +4 -0
  38. package/dist/classic/app/action-handlers.js.map +1 -1
  39. package/dist/classic/app/app-wiring.js +1 -0
  40. package/dist/classic/app/app-wiring.js.map +1 -1
  41. package/dist/classic/app/wiring-lifecycle.js +1 -0
  42. package/dist/classic/app/wiring-lifecycle.js.map +1 -1
  43. package/dist/classic/blocks/compacted-lines.js +3 -0
  44. package/dist/classic/blocks/compacted-lines.js.map +1 -1
  45. package/dist/classic/blocks/thinking-lines.js +11 -2
  46. package/dist/classic/blocks/thinking-lines.js.map +1 -1
  47. package/dist/classic/bootstrap/start-classic.d.ts +1 -0
  48. package/dist/classic/bootstrap/start-classic.js +16 -0
  49. package/dist/classic/bootstrap/start-classic.js.map +1 -1
  50. package/dist/classic/chrome/Composer.d.ts +6 -0
  51. package/dist/classic/chrome/Composer.js +2 -3
  52. package/dist/classic/chrome/Composer.js.map +1 -1
  53. package/dist/classic/chrome/composer-controller.d.ts +6 -1
  54. package/dist/classic/chrome/composer-controller.js +18 -8
  55. package/dist/classic/chrome/composer-controller.js.map +1 -1
  56. package/dist/classic/chrome/editor-view.d.ts +2 -1
  57. package/dist/classic/chrome/editor-view.js +1 -1
  58. package/dist/classic/chrome/editor-view.js.map +1 -1
  59. package/dist/classic/chrome/status-rows.js +3 -2
  60. package/dist/classic/chrome/status-rows.js.map +1 -1
  61. package/dist/classic/panels/TextEditorPanel.d.ts +3 -0
  62. package/dist/classic/panels/TextEditorPanel.js +7 -0
  63. package/dist/classic/panels/TextEditorPanel.js.map +1 -0
  64. package/dist/classic/panels/panel-controller.js +28 -1
  65. package/dist/classic/panels/panel-controller.js.map +1 -1
  66. package/dist/classic/panels/panel-effect.d.ts +3 -0
  67. package/dist/classic/panels/panel-effect.js.map +1 -1
  68. package/dist/classic/panels/panel-effects.js +3 -0
  69. package/dist/classic/panels/panel-effects.js.map +1 -1
  70. package/dist/classic/panels/panel-host.js +3 -0
  71. package/dist/classic/panels/panel-host.js.map +1 -1
  72. package/dist/classic/panels/panel-types.d.ts +2 -0
  73. package/dist/classic/panels/secret-panel.d.ts +1 -1
  74. package/dist/classic/panels/secret-panel.js +4 -2
  75. package/dist/classic/panels/secret-panel.js.map +1 -1
  76. package/dist/classic/panels/text-editor-panel.d.ts +33 -0
  77. package/dist/classic/panels/text-editor-panel.js +101 -0
  78. package/dist/classic/panels/text-editor-panel.js.map +1 -0
  79. package/dist/index.js +60 -7
  80. package/dist/index.js.map +1 -1
  81. package/dist/interactive-session/transport-node-pty.d.ts +10 -1
  82. package/dist/interactive-session/transport-node-pty.js +36 -12
  83. package/dist/interactive-session/transport-node-pty.js.map +1 -1
  84. package/dist/llm/adapters/anthropic-tools.d.ts +2 -1
  85. package/dist/llm/adapters/anthropic-tools.js +55 -4
  86. package/dist/llm/adapters/anthropic-tools.js.map +1 -1
  87. package/dist/llm/anthropic.js +1 -1
  88. package/dist/llm/anthropic.js.map +1 -1
  89. package/dist/llm/aws-mantle.js +2 -0
  90. package/dist/llm/aws-mantle.js.map +1 -1
  91. package/dist/llm/meta.js +62 -68
  92. package/dist/llm/meta.js.map +1 -1
  93. package/dist/llm/operation-ledger.js +6 -2
  94. package/dist/llm/operation-ledger.js.map +1 -1
  95. package/dist/llm/provider.js +7 -7
  96. package/dist/llm/request-plan.js +7 -2
  97. package/dist/llm/request-plan.js.map +1 -1
  98. package/dist/llm/tool-protocol.d.ts +1 -0
  99. package/dist/llm/tool-protocol.js +7 -0
  100. package/dist/llm/tool-protocol.js.map +1 -1
  101. package/dist/mcp/client.d.ts +27 -0
  102. package/dist/mcp/client.js +119 -0
  103. package/dist/mcp/client.js.map +1 -0
  104. package/dist/mcp/config-file.d.ts +35 -0
  105. package/dist/mcp/config-file.js +217 -0
  106. package/dist/mcp/config-file.js.map +1 -0
  107. package/dist/mcp/discovery.d.ts +4 -0
  108. package/dist/mcp/discovery.js +409 -0
  109. package/dist/mcp/discovery.js.map +1 -0
  110. package/dist/mcp/format.d.ts +17 -0
  111. package/dist/mcp/format.js +122 -0
  112. package/dist/mcp/format.js.map +1 -0
  113. package/dist/mcp/index.d.ts +15 -0
  114. package/dist/mcp/index.js +16 -0
  115. package/dist/mcp/index.js.map +1 -0
  116. package/dist/mcp/jsonrpc.d.ts +40 -0
  117. package/dist/mcp/jsonrpc.js +175 -0
  118. package/dist/mcp/jsonrpc.js.map +1 -0
  119. package/dist/mcp/manager.d.ts +36 -0
  120. package/dist/mcp/manager.js +300 -0
  121. package/dist/mcp/manager.js.map +1 -0
  122. package/dist/mcp/mentions.d.ts +9 -0
  123. package/dist/mcp/mentions.js +44 -0
  124. package/dist/mcp/mentions.js.map +1 -0
  125. package/dist/mcp/names.d.ts +15 -0
  126. package/dist/mcp/names.js +59 -0
  127. package/dist/mcp/names.js.map +1 -0
  128. package/dist/mcp/results.d.ts +6 -0
  129. package/dist/mcp/results.js +182 -0
  130. package/dist/mcp/results.js.map +1 -0
  131. package/dist/mcp/runtime.d.ts +107 -0
  132. package/dist/mcp/runtime.js +505 -0
  133. package/dist/mcp/runtime.js.map +1 -0
  134. package/dist/mcp/substitution.d.ts +13 -0
  135. package/dist/mcp/substitution.js +74 -0
  136. package/dist/mcp/substitution.js.map +1 -0
  137. package/dist/mcp/transport-http.d.ts +53 -0
  138. package/dist/mcp/transport-http.js +433 -0
  139. package/dist/mcp/transport-http.js.map +1 -0
  140. package/dist/mcp/transport-stdio.d.ts +39 -0
  141. package/dist/mcp/transport-stdio.js +268 -0
  142. package/dist/mcp/transport-stdio.js.map +1 -0
  143. package/dist/mcp/transport.d.ts +20 -0
  144. package/dist/mcp/transport.js +44 -0
  145. package/dist/mcp/transport.js.map +1 -0
  146. package/dist/mcp/types.d.ts +179 -0
  147. package/dist/mcp/types.js +30 -0
  148. package/dist/mcp/types.js.map +1 -0
  149. package/dist/mcp/validation.d.ts +16 -0
  150. package/dist/mcp/validation.js +222 -0
  151. package/dist/mcp/validation.js.map +1 -0
  152. package/dist/modes/agent.d.ts +2 -0
  153. package/dist/modes/agent.js.map +1 -1
  154. package/dist/noninteractive/start-noninteractive.js +4 -0
  155. package/dist/noninteractive/start-noninteractive.js.map +1 -1
  156. package/dist/prompts/embedded.js +2 -2
  157. package/dist/prompts/embedded.js.map +1 -1
  158. package/dist/prompts/index.d.ts +3 -0
  159. package/dist/prompts/index.js +70 -55
  160. package/dist/prompts/index.js.map +1 -1
  161. package/dist/prompts/system.agent.md +34 -10
  162. package/dist/prompts/system.ask.md +8 -0
  163. package/dist/safety/classifier.js +4 -0
  164. package/dist/safety/classifier.js.map +1 -1
  165. package/dist/session-runtime/binding.d.ts +5 -0
  166. package/dist/session-runtime/binding.js +28 -0
  167. package/dist/session-runtime/binding.js.map +1 -0
  168. package/dist/session-runtime/child-bridge.d.ts +31 -0
  169. package/dist/session-runtime/child-bridge.js +169 -0
  170. package/dist/session-runtime/child-bridge.js.map +1 -0
  171. package/dist/session-runtime/client.d.ts +8 -0
  172. package/dist/session-runtime/client.js +448 -0
  173. package/dist/session-runtime/client.js.map +1 -0
  174. package/dist/session-runtime/discovery.d.ts +6 -0
  175. package/dist/session-runtime/discovery.js +100 -0
  176. package/dist/session-runtime/discovery.js.map +1 -0
  177. package/dist/session-runtime/host.d.ts +77 -0
  178. package/dist/session-runtime/host.js +758 -0
  179. package/dist/session-runtime/host.js.map +1 -0
  180. package/dist/session-runtime/launch.d.ts +11 -0
  181. package/dist/session-runtime/launch.js +68 -0
  182. package/dist/session-runtime/launch.js.map +1 -0
  183. package/dist/session-runtime/paths.d.ts +8 -0
  184. package/dist/session-runtime/paths.js +92 -0
  185. package/dist/session-runtime/paths.js.map +1 -0
  186. package/dist/session-runtime/protocol.d.ts +22 -0
  187. package/dist/session-runtime/protocol.js +149 -0
  188. package/dist/session-runtime/protocol.js.map +1 -0
  189. package/dist/session-runtime/replay-buffer.d.ts +12 -0
  190. package/dist/session-runtime/replay-buffer.js +50 -0
  191. package/dist/session-runtime/replay-buffer.js.map +1 -0
  192. package/dist/session-runtime/store.d.ts +14 -0
  193. package/dist/session-runtime/store.js +143 -0
  194. package/dist/session-runtime/store.js.map +1 -0
  195. package/dist/session-runtime/types.d.ts +102 -0
  196. package/dist/session-runtime/types.js +2 -0
  197. package/dist/session-runtime/types.js.map +1 -0
  198. package/dist/store/logs.js +17 -6
  199. package/dist/store/logs.js.map +1 -1
  200. package/dist/store/plan.d.ts +2 -0
  201. package/dist/store/plan.js.map +1 -1
  202. package/dist/store/session-workspace.js +2 -1
  203. package/dist/store/session-workspace.js.map +1 -1
  204. package/dist/tools/definitions.js +18 -0
  205. package/dist/tools/definitions.js.map +1 -1
  206. package/dist/tools/external-tools.d.ts +30 -0
  207. package/dist/tools/external-tools.js +52 -0
  208. package/dist/tools/external-tools.js.map +1 -0
  209. package/dist/tools/registry.js +36 -5
  210. package/dist/tools/registry.js.map +1 -1
  211. package/dist/tui-v2/bootstrap/start-tui-v2.d.ts +1 -0
  212. package/dist/tui-v2/bootstrap/start-tui-v2.js +16 -0
  213. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  214. package/dist/tui-v2/components/completion/completion-menu.d.ts +4 -6
  215. package/dist/tui-v2/components/completion/completion-menu.js +34 -16
  216. package/dist/tui-v2/components/completion/completion-menu.js.map +1 -1
  217. package/dist/tui-v2/components/composer/composer-input-box.js +3 -1
  218. package/dist/tui-v2/components/composer/composer-input-box.js.map +1 -1
  219. package/dist/tui-v2/components/modal/secret-modal.js +6 -4
  220. package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
  221. package/dist/tui-v2/components/modal/text-editor-modal.d.ts +19 -0
  222. package/dist/tui-v2/components/modal/text-editor-modal.js +85 -0
  223. package/dist/tui-v2/components/modal/text-editor-modal.js.map +1 -0
  224. package/dist/tui-v2/components/overlay/overlay-host.js +2 -1
  225. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  226. package/dist/tui-v2/components/transcript/compacted-row.js +12 -3
  227. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  228. package/dist/tui-v2/components/transcript/thinking-block.d.ts +9 -1
  229. package/dist/tui-v2/components/transcript/thinking-block.js +253 -49
  230. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  231. package/dist/tui-v2/components/transcript/thinking-presentation.d.ts +46 -0
  232. package/dist/tui-v2/components/transcript/thinking-presentation.js +84 -0
  233. package/dist/tui-v2/components/transcript/thinking-presentation.js.map +1 -0
  234. package/dist/tui-v2/components/transcript/transcript-row.d.ts +2 -0
  235. package/dist/tui-v2/components/transcript/transcript-row.js +7 -2
  236. package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
  237. package/dist/tui-v2/components/transcript/transcript-view.js +195 -83
  238. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
  239. package/dist/tui-v2/composer/composer-editor.js +54 -39
  240. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  241. package/dist/tui-v2/composer/composer-highlight.d.ts +20 -0
  242. package/dist/tui-v2/composer/composer-highlight.js +97 -0
  243. package/dist/tui-v2/composer/composer-highlight.js.map +1 -0
  244. package/dist/tui-v2/composer/textarea-keybindings.d.ts +5 -0
  245. package/dist/tui-v2/composer/textarea-keybindings.js +12 -0
  246. package/dist/tui-v2/composer/textarea-keybindings.js.map +1 -1
  247. package/dist/ui/mentions.js +4 -1
  248. package/dist/ui/mentions.js.map +1 -1
  249. package/dist/ui-core/actions/action-id.d.ts +1 -1
  250. package/dist/ui-core/actions/action-id.js +1 -0
  251. package/dist/ui-core/actions/action-id.js.map +1 -1
  252. package/dist/ui-core/actions/format-shortcuts.js +5 -0
  253. package/dist/ui-core/actions/format-shortcuts.js.map +1 -1
  254. package/dist/ui-core/actions/keymap.js +3 -0
  255. package/dist/ui-core/actions/keymap.js.map +1 -1
  256. package/dist/ui-core/bootstrap/composition-root.d.ts +7 -0
  257. package/dist/ui-core/bootstrap/composition-root.js +7 -1
  258. package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
  259. package/dist/ui-core/commands/command-handlers.js +5 -2
  260. package/dist/ui-core/commands/command-handlers.js.map +1 -1
  261. package/dist/ui-core/commands/config-commands.d.ts +1 -0
  262. package/dist/ui-core/commands/config-commands.js +6 -0
  263. package/dist/ui-core/commands/config-commands.js.map +1 -1
  264. package/dist/ui-core/commands/mcp-commands.d.ts +3 -0
  265. package/dist/ui-core/commands/mcp-commands.js +310 -0
  266. package/dist/ui-core/commands/mcp-commands.js.map +1 -0
  267. package/dist/ui-core/commands/picker-commands.d.ts +1 -1
  268. package/dist/ui-core/commands/picker-commands.js +70 -27
  269. package/dist/ui-core/commands/picker-commands.js.map +1 -1
  270. package/dist/ui-core/commands/session-commands.js +1 -0
  271. package/dist/ui-core/commands/session-commands.js.map +1 -1
  272. package/dist/ui-core/composer/completion-viewport.d.ts +40 -0
  273. package/dist/ui-core/composer/completion-viewport.js +105 -0
  274. package/dist/ui-core/composer/completion-viewport.js.map +1 -0
  275. package/dist/ui-core/controllers/overlay-controller.d.ts +24 -3
  276. package/dist/ui-core/controllers/overlay-controller.js +35 -4
  277. package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
  278. package/dist/ui-core/rendering/artifact-pager-source.d.ts +1 -0
  279. package/dist/ui-core/rendering/artifact-pager-source.js +67 -1
  280. package/dist/ui-core/rendering/artifact-pager-source.js.map +1 -1
  281. package/dist/ui-core/rendering/duration.d.ts +3 -1
  282. package/dist/ui-core/rendering/duration.js +14 -0
  283. package/dist/ui-core/rendering/duration.js.map +1 -1
  284. package/dist/ui-core/rendering/exit-summary.js +4 -4
  285. package/dist/ui-core/rendering/format-help.js +4 -0
  286. package/dist/ui-core/rendering/format-help.js.map +1 -1
  287. package/dist/ui-core/rendering/intro-header.js +4 -4
  288. package/dist/ui-core/rendering/open-tool-output.js +90 -32
  289. package/dist/ui-core/rendering/open-tool-output.js.map +1 -1
  290. package/dist/ui-core/rendering/theme.d.ts +5 -3
  291. package/dist/ui-core/rendering/theme.js +8 -4
  292. package/dist/ui-core/rendering/theme.js.map +1 -1
  293. package/dist/ui-core/rendering/wordmark.d.ts +2 -2
  294. package/dist/ui-core/rendering/wordmark.js +62 -62
  295. package/dist/ui-core/rendering/wordmark.js.map +1 -1
  296. package/dist/ui-core/state/thinking-copy.d.ts +13 -0
  297. package/dist/ui-core/state/thinking-copy.js +33 -0
  298. package/dist/ui-core/state/thinking-copy.js.map +1 -0
  299. package/dist/ui-core/state/transcript-hydrate.js +20 -0
  300. package/dist/ui-core/state/transcript-hydrate.js.map +1 -1
  301. package/dist/ui-core/state/transcript-reducer.js +140 -62
  302. package/dist/ui-core/state/transcript-reducer.js.map +1 -1
  303. package/dist/ui-core/state/transcript-store.d.ts +10 -0
  304. package/dist/ui-core/state/transcript-store.js +235 -31
  305. package/dist/ui-core/state/transcript-store.js.map +1 -1
  306. package/dist/ui-core/state/transcript-types.d.ts +10 -0
  307. package/dist/ui-core/state/transcript-types.js +1 -0
  308. package/dist/ui-core/state/transcript-types.js.map +1 -1
  309. package/dist/ui-core/state/transcript-window.d.ts +32 -0
  310. package/dist/ui-core/state/transcript-window.js +63 -0
  311. package/dist/ui-core/state/transcript-window.js.map +1 -0
  312. package/dist/version.generated.d.ts +2 -2
  313. package/dist/version.generated.js +2 -2
  314. package/dist/version.generated.js.map +1 -1
  315. package/package.json +1 -1
  316. package/dist/tui-v2/composer/skill-highlight.d.ts +0 -3
  317. package/dist/tui-v2/composer/skill-highlight.js +0 -63
  318. package/dist/tui-v2/composer/skill-highlight.js.map +0 -1
@@ -0,0 +1,17 @@
1
+ import type { McpDiscoveryResult, McpServerConfig, McpServerDefinition, McpServerStatus, McpSnapshot, McpToolMetadata } from "./types.js";
2
+ export declare function redactSecrets(text: string, secretValues: readonly string[]): string;
3
+ export interface DisplayServerConfig {
4
+ readonly transport: McpServerConfig["transport"];
5
+ readonly command?: string | undefined;
6
+ readonly args?: readonly string[] | undefined;
7
+ readonly env?: Readonly<Record<string, string>> | undefined;
8
+ readonly cwd?: string | undefined;
9
+ readonly url?: string | undefined;
10
+ readonly headers?: Readonly<Record<string, string>> | undefined;
11
+ }
12
+ export declare function redactServerConfig(definition: McpServerDefinition): DisplayServerConfig;
13
+ export declare function formatToolLine(tool: McpToolMetadata): string;
14
+ export declare function formatStatusLine(status: McpServerStatus): string;
15
+ export declare function formatStatuses(statuses: readonly McpServerStatus[]): string;
16
+ export declare function formatCatalog(snapshot: McpSnapshot): string;
17
+ export declare function formatDiscoverySummary(result: McpDiscoveryResult): string;
@@ -0,0 +1,122 @@
1
+ const SECRET_MASK = "***";
2
+ export function redactSecrets(text, secretValues) {
3
+ let out = text;
4
+ for (const secret of secretValues) {
5
+ if (secret.length === 0)
6
+ continue;
7
+ out = out.split(secret).join(SECRET_MASK);
8
+ }
9
+ return out;
10
+ }
11
+ export function redactServerConfig(definition) {
12
+ const config = definition.config;
13
+ const secrets = definition.secretValues;
14
+ if (config.transport === "stdio") {
15
+ const env = {};
16
+ for (const key of Object.keys(config.env))
17
+ env[key] = SECRET_MASK;
18
+ return {
19
+ transport: "stdio",
20
+ command: redactSecrets(config.command, secrets),
21
+ args: config.args.map((arg) => redactSecrets(arg, secrets)),
22
+ env,
23
+ ...(config.cwd !== undefined ? { cwd: redactSecrets(config.cwd, secrets) } : {}),
24
+ };
25
+ }
26
+ const headers = {};
27
+ for (const key of Object.keys(config.headers))
28
+ headers[key] = SECRET_MASK;
29
+ return {
30
+ transport: config.transport,
31
+ url: redactSecrets(config.url, secrets),
32
+ headers,
33
+ };
34
+ }
35
+ function statusSymbol(status) {
36
+ switch (status) {
37
+ case "ready":
38
+ return "ready";
39
+ case "degraded":
40
+ return "degraded";
41
+ case "disabled":
42
+ return "disabled";
43
+ case "connecting":
44
+ return "connecting";
45
+ default:
46
+ return "error";
47
+ }
48
+ }
49
+ function riskLabel(tool) {
50
+ if (tool.risk === "safe")
51
+ return "safe";
52
+ if (tool.destructive)
53
+ return "confirm/destructive";
54
+ return "confirm";
55
+ }
56
+ export function formatToolLine(tool) {
57
+ const summary = tool.description.split("\n")[0]?.trim() ?? "";
58
+ const trimmed = summary.length > 80 ? `${summary.slice(0, 77)}...` : summary;
59
+ return ` ${tool.canonicalName} [${riskLabel(tool)}]${trimmed ? ` - ${trimmed}` : ""}`;
60
+ }
61
+ export function formatStatusLine(status) {
62
+ const info = status.serverInfo ? ` (${status.serverInfo.name} ${status.serverInfo.version})` : "";
63
+ const detail = status.detail ? ` - ${status.detail}` : "";
64
+ return `${statusSymbol(status.status)} ${status.name}${info} [${status.transport} · ${status.source.kind}] tools=${status.toolCount} · ${status.source.path}${detail}`;
65
+ }
66
+ export function formatStatuses(statuses) {
67
+ if (statuses.length === 0)
68
+ return "No MCP servers configured.";
69
+ return statuses.map(formatStatusLine).join("\n");
70
+ }
71
+ export function formatCatalog(snapshot) {
72
+ const lines = [];
73
+ for (const status of snapshot.statuses) {
74
+ lines.push(formatStatusLine(status));
75
+ const tools = snapshot.tools.filter((tool) => tool.serverName === status.name);
76
+ for (const tool of tools)
77
+ lines.push(formatToolLine(tool));
78
+ }
79
+ if (snapshot.shadowed.length > 0) {
80
+ lines.push("");
81
+ lines.push("Shadowed servers:");
82
+ for (const entry of snapshot.shadowed) {
83
+ lines.push(` ${entry.name} in ${entry.source.path} (shadowed by ${entry.shadowedBy.path})`);
84
+ }
85
+ }
86
+ if (snapshot.invalid.length > 0) {
87
+ lines.push("");
88
+ lines.push("Invalid servers:");
89
+ for (const entry of snapshot.invalid) {
90
+ lines.push(` ${entry.name} in ${entry.source.path}: ${entry.errors.join("; ")}`);
91
+ }
92
+ }
93
+ return lines.length > 0 ? lines.join("\n") : "No MCP servers configured.";
94
+ }
95
+ export function formatDiscoverySummary(result) {
96
+ const lines = [];
97
+ lines.push(`Sources read: ${result.sources.length}`);
98
+ for (const source of result.sources) {
99
+ lines.push(` [${source.kind}] ${source.path}`);
100
+ }
101
+ lines.push(`Servers: ${result.servers.length}`);
102
+ for (const server of result.servers) {
103
+ const flag = server.disabled ? " (disabled)" : "";
104
+ lines.push(` ${server.name}${flag} [${server.config.transport}] from ${server.source.kind}`);
105
+ }
106
+ if (result.shadowed.length > 0) {
107
+ lines.push(`Shadowed: ${result.shadowed.length}`);
108
+ for (const entry of result.shadowed) {
109
+ lines.push(` ${entry.name} (${entry.source.kind}) < ${entry.shadowedBy.kind}`);
110
+ }
111
+ }
112
+ if (result.invalid.length > 0) {
113
+ lines.push(`Invalid: ${result.invalid.length}`);
114
+ for (const entry of result.invalid) {
115
+ lines.push(` ${entry.name}: ${entry.errors.join("; ")}`);
116
+ }
117
+ }
118
+ for (const warning of result.warnings)
119
+ lines.push(`Warning: ${warning}`);
120
+ return lines.join("\n");
121
+ }
122
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/mcp/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export * from "./types.js";
2
+ export { JsonRpcError, LineDecoder, SseDecoder, createNotification, createRequest, encodeLine, encodeMessage, isJsonRpcFailure, isJsonRpcNotification, isJsonRpcRequest, isJsonRpcResponse, isJsonRpcSuccess, parseMessage, resultOrThrow, type SseEvent, } from "./jsonrpc.js";
3
+ export { buildInputMap, substituteVariables, type McpSubstitutionContext, type McpSubstitutionResult, } from "./substitution.js";
4
+ export { validateServerEntry, type ServerValidation, type ValidatedServer, } from "./validation.js";
5
+ export { computeConfigSignature, discoverMcpServers, parseJsonc, } from "./discovery.js";
6
+ export { deriveRisk, normalizeToolResult, parseToolDescriptor, toToolMetadata, } from "./results.js";
7
+ export { displayMcpConfigPath, parseMcpServerSnippet, projectMcpConfigPath, writeProjectMcpServer, type McpConfigWriteResult, type McpServerSnippet, type McpSnippetParseResult, } from "./config-file.js";
8
+ export { MCP_CANONICAL_PREFIX, MCP_WIRE_MAX_LENGTH, MCP_WIRE_PREFIX, WireNameAllocator, allocateWireNames, canonicalToolName, isCanonicalToolName, toolIdentity, } from "./names.js";
9
+ export { McpTransportError, isAbortError, withTimeout, type McpTransport, type McpTransportFailureKind, } from "./transport.js";
10
+ export { StdioTransport, type StdioTransportOptions } from "./transport-stdio.js";
11
+ export { LegacySseTransport, StreamableHttpTransport, type HttpTransportOptions, } from "./transport-http.js";
12
+ export { McpClient, type McpClientOptions } from "./client.js";
13
+ export { McpManager, type McpManagerOptions, type McpTransportFactory, } from "./manager.js";
14
+ export { formatCatalog, formatDiscoverySummary, formatStatuses, formatStatusLine, formatToolLine, redactSecrets, redactServerConfig, type DisplayServerConfig, } from "./format.js";
15
+ export { McpRuntime, type McpRuntimeOptions, type McpRuntimeSelection, type McpRuntimeState, } from "./runtime.js";
@@ -0,0 +1,16 @@
1
+ export * from "./types.js";
2
+ export { JsonRpcError, LineDecoder, SseDecoder, createNotification, createRequest, encodeLine, encodeMessage, isJsonRpcFailure, isJsonRpcNotification, isJsonRpcRequest, isJsonRpcResponse, isJsonRpcSuccess, parseMessage, resultOrThrow, } from "./jsonrpc.js";
3
+ export { buildInputMap, substituteVariables, } from "./substitution.js";
4
+ export { validateServerEntry, } from "./validation.js";
5
+ export { computeConfigSignature, discoverMcpServers, parseJsonc, } from "./discovery.js";
6
+ export { deriveRisk, normalizeToolResult, parseToolDescriptor, toToolMetadata, } from "./results.js";
7
+ export { displayMcpConfigPath, parseMcpServerSnippet, projectMcpConfigPath, writeProjectMcpServer, } from "./config-file.js";
8
+ export { MCP_CANONICAL_PREFIX, MCP_WIRE_MAX_LENGTH, MCP_WIRE_PREFIX, WireNameAllocator, allocateWireNames, canonicalToolName, isCanonicalToolName, toolIdentity, } from "./names.js";
9
+ export { McpTransportError, isAbortError, withTimeout, } from "./transport.js";
10
+ export { StdioTransport } from "./transport-stdio.js";
11
+ export { LegacySseTransport, StreamableHttpTransport, } from "./transport-http.js";
12
+ export { McpClient } from "./client.js";
13
+ export { McpManager, } from "./manager.js";
14
+ export { formatCatalog, formatDiscoverySummary, formatStatuses, formatStatusLine, formatToolLine, redactSecrets, redactServerConfig, } from "./format.js";
15
+ export { McpRuntime, } from "./runtime.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,aAAa,GAEd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,mBAAmB,GAGpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,GAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GAItB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,WAAW,GAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAA8B,MAAM,sBAAsB,CAAC;AAClF,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GAExB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAyB,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,UAAU,GAGX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,UAAU,GAIX,MAAM,cAAc,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { JsonRpcErrorPayload, JsonRpcFailure, JsonRpcId, JsonRpcMessage, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse, JsonRpcSuccess } from "./types.js";
2
+ export declare const MCP_MAX_FRAME_BYTES: number;
3
+ export declare class JsonRpcError extends Error {
4
+ readonly code: number;
5
+ readonly data: unknown;
6
+ constructor(payload: JsonRpcErrorPayload);
7
+ }
8
+ export declare function createRequest(id: JsonRpcId, method: string, params?: unknown): JsonRpcRequest;
9
+ export declare function createNotification(method: string, params?: unknown): JsonRpcNotification;
10
+ export declare function encodeMessage(message: JsonRpcMessage): string;
11
+ export declare function encodeLine(message: JsonRpcMessage): string;
12
+ export declare function isJsonRpcResponse(value: unknown): value is JsonRpcResponse;
13
+ export declare function isJsonRpcSuccess(value: JsonRpcResponse): value is JsonRpcSuccess;
14
+ export declare function isJsonRpcFailure(value: JsonRpcResponse): value is JsonRpcFailure;
15
+ export declare function isJsonRpcRequest(value: unknown): value is JsonRpcRequest;
16
+ export declare function isJsonRpcNotification(value: unknown): value is JsonRpcNotification;
17
+ export declare function parseMessage(line: string): JsonRpcMessage | undefined;
18
+ export declare function resultOrThrow(response: JsonRpcResponse): unknown;
19
+ export declare class LineDecoder {
20
+ private buffer;
21
+ private readonly decoder;
22
+ private readonly maxBytes;
23
+ constructor(maxBytes?: number);
24
+ push(chunk: Uint8Array | string): string[];
25
+ flush(): string[];
26
+ }
27
+ export interface SseEvent {
28
+ readonly event: string;
29
+ readonly data: string;
30
+ readonly id?: string | undefined;
31
+ }
32
+ export declare class SseDecoder {
33
+ private buffer;
34
+ private readonly decoder;
35
+ private readonly maxBytes;
36
+ constructor(maxBytes?: number);
37
+ push(chunk: Uint8Array | string): SseEvent[];
38
+ private nextBoundary;
39
+ private parseBlock;
40
+ }
@@ -0,0 +1,175 @@
1
+ import { McpTransportError } from "./transport.js";
2
+ export const MCP_MAX_FRAME_BYTES = 16 * 1024 * 1024;
3
+ export class JsonRpcError extends Error {
4
+ code;
5
+ data;
6
+ constructor(payload) {
7
+ super(payload.message);
8
+ this.name = "JsonRpcError";
9
+ this.code = payload.code;
10
+ this.data = payload.data;
11
+ }
12
+ }
13
+ export function createRequest(id, method, params) {
14
+ return params === undefined
15
+ ? { jsonrpc: "2.0", id, method }
16
+ : { jsonrpc: "2.0", id, method, params };
17
+ }
18
+ export function createNotification(method, params) {
19
+ return params === undefined
20
+ ? { jsonrpc: "2.0", method }
21
+ : { jsonrpc: "2.0", method, params };
22
+ }
23
+ export function encodeMessage(message) {
24
+ return JSON.stringify(message);
25
+ }
26
+ export function encodeLine(message) {
27
+ return `${JSON.stringify(message)}\n`;
28
+ }
29
+ export function isJsonRpcResponse(value) {
30
+ if (typeof value !== "object" || value === null)
31
+ return false;
32
+ const record = value;
33
+ if (record.jsonrpc !== "2.0")
34
+ return false;
35
+ if (!("id" in record))
36
+ return false;
37
+ return "result" in record || "error" in record;
38
+ }
39
+ export function isJsonRpcSuccess(value) {
40
+ return "result" in value;
41
+ }
42
+ export function isJsonRpcFailure(value) {
43
+ return "error" in value;
44
+ }
45
+ export function isJsonRpcRequest(value) {
46
+ if (typeof value !== "object" || value === null)
47
+ return false;
48
+ const record = value;
49
+ return record.jsonrpc === "2.0" && typeof record.method === "string" && "id" in record;
50
+ }
51
+ export function isJsonRpcNotification(value) {
52
+ if (typeof value !== "object" || value === null)
53
+ return false;
54
+ const record = value;
55
+ return (record.jsonrpc === "2.0" &&
56
+ typeof record.method === "string" &&
57
+ !("id" in record));
58
+ }
59
+ export function parseMessage(line) {
60
+ const trimmed = line.trim();
61
+ if (trimmed.length === 0)
62
+ return undefined;
63
+ let parsed;
64
+ try {
65
+ parsed = JSON.parse(trimmed);
66
+ }
67
+ catch {
68
+ return undefined;
69
+ }
70
+ if (isJsonRpcResponse(parsed) ||
71
+ isJsonRpcRequest(parsed) ||
72
+ isJsonRpcNotification(parsed)) {
73
+ return parsed;
74
+ }
75
+ return undefined;
76
+ }
77
+ export function resultOrThrow(response) {
78
+ if (isJsonRpcFailure(response))
79
+ throw new JsonRpcError(response.error);
80
+ return response.result;
81
+ }
82
+ export class LineDecoder {
83
+ buffer = "";
84
+ decoder = new TextDecoder();
85
+ maxBytes;
86
+ constructor(maxBytes = MCP_MAX_FRAME_BYTES) {
87
+ this.maxBytes = maxBytes > 0 ? maxBytes : MCP_MAX_FRAME_BYTES;
88
+ }
89
+ push(chunk) {
90
+ this.buffer +=
91
+ typeof chunk === "string" ? chunk : this.decoder.decode(chunk, { stream: true });
92
+ const lines = [];
93
+ let index = this.buffer.indexOf("\n");
94
+ while (index !== -1) {
95
+ const line = this.buffer.slice(0, index).replace(/\r$/, "");
96
+ this.buffer = this.buffer.slice(index + 1);
97
+ if (line.length > 0)
98
+ lines.push(line);
99
+ index = this.buffer.indexOf("\n");
100
+ }
101
+ if (this.buffer.length > this.maxBytes) {
102
+ this.buffer = "";
103
+ throw new McpTransportError("too-large", `MCP message exceeded the ${this.maxBytes}-byte line framing limit before a newline arrived.`);
104
+ }
105
+ return lines;
106
+ }
107
+ flush() {
108
+ const remaining = this.buffer.replace(/\r$/, "");
109
+ this.buffer = "";
110
+ return remaining.length > 0 ? [remaining] : [];
111
+ }
112
+ }
113
+ export class SseDecoder {
114
+ buffer = "";
115
+ decoder = new TextDecoder();
116
+ maxBytes;
117
+ constructor(maxBytes = MCP_MAX_FRAME_BYTES) {
118
+ this.maxBytes = maxBytes > 0 ? maxBytes : MCP_MAX_FRAME_BYTES;
119
+ }
120
+ push(chunk) {
121
+ this.buffer +=
122
+ typeof chunk === "string" ? chunk : this.decoder.decode(chunk, { stream: true });
123
+ const events = [];
124
+ let boundary = this.nextBoundary();
125
+ while (boundary) {
126
+ const block = this.buffer.slice(0, boundary.index);
127
+ this.buffer = this.buffer.slice(boundary.index + boundary.length);
128
+ const parsed = this.parseBlock(block);
129
+ if (parsed)
130
+ events.push(parsed);
131
+ boundary = this.nextBoundary();
132
+ }
133
+ if (this.buffer.length > this.maxBytes) {
134
+ this.buffer = "";
135
+ throw new McpTransportError("too-large", `MCP SSE event exceeded the ${this.maxBytes}-byte framing limit before a boundary arrived.`);
136
+ }
137
+ return events;
138
+ }
139
+ nextBoundary() {
140
+ const lf = this.buffer.indexOf("\n\n");
141
+ const crlf = this.buffer.indexOf("\r\n\r\n");
142
+ if (lf === -1 && crlf === -1)
143
+ return undefined;
144
+ if (crlf !== -1 && (lf === -1 || crlf < lf)) {
145
+ return { index: crlf, length: 4 };
146
+ }
147
+ return { index: lf, length: 2 };
148
+ }
149
+ parseBlock(block) {
150
+ let event = "message";
151
+ const dataLines = [];
152
+ let id;
153
+ for (const rawLine of block.split(/\r?\n/)) {
154
+ if (rawLine.length === 0 || rawLine.startsWith(":"))
155
+ continue;
156
+ const colon = rawLine.indexOf(":");
157
+ const field = colon === -1 ? rawLine : rawLine.slice(0, colon);
158
+ let value = colon === -1 ? "" : rawLine.slice(colon + 1);
159
+ if (value.startsWith(" "))
160
+ value = value.slice(1);
161
+ if (field === "event")
162
+ event = value;
163
+ else if (field === "data")
164
+ dataLines.push(value);
165
+ else if (field === "id")
166
+ id = value;
167
+ }
168
+ if (dataLines.length === 0)
169
+ return undefined;
170
+ return id === undefined
171
+ ? { event, data: dataLines.join("\n") }
172
+ : { event, data: dataLines.join("\n"), id };
173
+ }
174
+ }
175
+ //# sourceMappingURL=jsonrpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonrpc.js","sourceRoot":"","sources":["../../src/mcp/jsonrpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type McpClientOptions } from "./client.js";
2
+ import { type McpTransport } from "./transport.js";
3
+ import type { McpDiscoveryOptions, McpDiscoveryResult, McpNormalizedResult, McpRequestOptions, McpServerDefinition, McpSnapshot, McpToolMetadata } from "./types.js";
4
+ export type McpTransportFactory = (definition: McpServerDefinition) => McpTransport;
5
+ export interface McpManagerOptions {
6
+ readonly discovery?: McpDiscoveryOptions | undefined;
7
+ readonly connectConcurrency?: number | undefined;
8
+ readonly connectTimeoutMs?: number | undefined;
9
+ readonly requestTimeoutMs?: number | undefined;
10
+ readonly transportFactory?: McpTransportFactory | undefined;
11
+ readonly clientOptions?: McpClientOptions | undefined;
12
+ }
13
+ export declare class McpManager {
14
+ private readonly options;
15
+ private readonly connections;
16
+ private discovery;
17
+ constructor(options?: McpManagerOptions);
18
+ private get connectTimeoutMs();
19
+ private get requestTimeoutMs();
20
+ private createTransport;
21
+ getDiscovery(): McpDiscoveryResult;
22
+ refresh(options?: {
23
+ force?: boolean;
24
+ }): Promise<McpSnapshot>;
25
+ forceRefresh(): Promise<McpSnapshot>;
26
+ reconnect(name: string): Promise<McpSnapshot>;
27
+ private connect;
28
+ private reconcileToolNames;
29
+ private disposeConnection;
30
+ closeAll(): Promise<void>;
31
+ snapshot(): McpSnapshot;
32
+ private toStatus;
33
+ getTool(name: string): McpToolMetadata | undefined;
34
+ listTools(): McpToolMetadata[];
35
+ callTool(name: string, args: Record<string, unknown>, options?: McpRequestOptions): Promise<McpNormalizedResult>;
36
+ }