@humain/terminal 0.0.3-beta.3 → 0.0.4-beta.2

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 (737) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +1 -0
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  6. package/dist/bun/restore-sandbox-env.js.map +1 -1
  7. package/dist/cli/args.d.ts +1 -0
  8. package/dist/cli/args.d.ts.map +1 -1
  9. package/dist/cli/args.js +11 -0
  10. package/dist/cli/args.js.map +1 -1
  11. package/dist/cli/auth-check.d.ts.map +1 -1
  12. package/dist/cli/auth-check.js.map +1 -1
  13. package/dist/cli/auth-command.d.ts.map +1 -1
  14. package/dist/cli/auth-command.js.map +1 -1
  15. package/dist/cli/config-selector.d.ts.map +1 -1
  16. package/dist/cli/config-selector.js.map +1 -1
  17. package/dist/cli/credential-print.d.ts.map +1 -1
  18. package/dist/cli/credential-print.js.map +1 -1
  19. package/dist/cli/experimental/auth.d.ts.map +1 -1
  20. package/dist/cli/experimental/auth.js.map +1 -1
  21. package/dist/cli/experimental/cli.d.ts.map +1 -1
  22. package/dist/cli/experimental/command-options.d.ts.map +1 -1
  23. package/dist/cli/experimental/command-options.js.map +1 -1
  24. package/dist/cli/experimental/command.d.ts.map +1 -1
  25. package/dist/cli/experimental/command.js +2 -5
  26. package/dist/cli/experimental/command.js.map +1 -1
  27. package/dist/cli/experimental/commands/client.d.ts.map +1 -1
  28. package/dist/cli/experimental/commands/client.js.map +1 -1
  29. package/dist/cli/experimental/commands/pi.d.ts.map +1 -1
  30. package/dist/cli/experimental/commands/pi.js.map +1 -1
  31. package/dist/cli/experimental/commands/server.d.ts.map +1 -1
  32. package/dist/cli/experimental/commands/server.js.map +1 -1
  33. package/dist/cli/experimental/transport-address.d.ts.map +1 -1
  34. package/dist/cli/experimental/transport-address.js.map +1 -1
  35. package/dist/cli/file-processor.d.ts.map +1 -1
  36. package/dist/cli/file-processor.js.map +1 -1
  37. package/dist/cli/initial-message.d.ts +1 -1
  38. package/dist/cli/initial-message.d.ts.map +1 -1
  39. package/dist/cli/initial-message.js.map +1 -1
  40. package/dist/cli/list-models.d.ts.map +1 -1
  41. package/dist/cli/list-models.js.map +1 -1
  42. package/dist/cli/project-trust.d.ts.map +1 -1
  43. package/dist/cli/project-trust.js.map +1 -1
  44. package/dist/cli/session-picker.d.ts.map +1 -1
  45. package/dist/cli/session-picker.js.map +1 -1
  46. package/dist/cli/startup-ui.d.ts.map +1 -1
  47. package/dist/cli/startup-ui.js.map +1 -1
  48. package/dist/cli.d.ts.map +1 -1
  49. package/dist/cli.js.map +1 -1
  50. package/dist/client/index.d.ts.map +1 -1
  51. package/dist/client/remote-session.d.ts.map +1 -1
  52. package/dist/client/remote-session.js.map +1 -1
  53. package/dist/client/transcript.d.ts.map +1 -1
  54. package/dist/client/transcript.js +1 -1
  55. package/dist/client/transcript.js.map +1 -1
  56. package/dist/config.d.ts.map +1 -1
  57. package/dist/config.js.map +1 -1
  58. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  59. package/dist/core/agent-session-runtime.js +0 -8
  60. package/dist/core/agent-session-runtime.js.map +1 -1
  61. package/dist/core/agent-session-services.d.ts.map +1 -1
  62. package/dist/core/agent-session-services.js.map +1 -1
  63. package/dist/core/agent-session.d.ts +36 -2
  64. package/dist/core/agent-session.d.ts.map +1 -1
  65. package/dist/core/agent-session.js +107 -129
  66. package/dist/core/agent-session.js.map +1 -1
  67. package/dist/core/auth-guidance.d.ts.map +1 -1
  68. package/dist/core/auth-guidance.js.map +1 -1
  69. package/dist/core/auth-storage.d.ts.map +1 -1
  70. package/dist/core/auth-storage.js +3 -8
  71. package/dist/core/auth-storage.js.map +1 -1
  72. package/dist/core/bash-executor.d.ts.map +1 -1
  73. package/dist/core/bash-executor.js.map +1 -1
  74. package/dist/core/cache-stats.d.ts.map +1 -1
  75. package/dist/core/cache-stats.js.map +1 -1
  76. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  77. package/dist/core/compaction/branch-summarization.js.map +1 -1
  78. package/dist/core/compaction/compaction.d.ts.map +1 -1
  79. package/dist/core/compaction/compaction.js.map +1 -1
  80. package/dist/core/compaction/index.d.ts.map +1 -1
  81. package/dist/core/compaction/utils.d.ts.map +1 -1
  82. package/dist/core/compaction/utils.js.map +1 -1
  83. package/dist/core/defaults.d.ts.map +1 -1
  84. package/dist/core/diagnostics.d.ts.map +1 -1
  85. package/dist/core/event-bus.d.ts.map +1 -1
  86. package/dist/core/event-bus.js.map +1 -1
  87. package/dist/core/exec.d.ts.map +1 -1
  88. package/dist/core/exec.js.map +1 -1
  89. package/dist/core/experimental.d.ts +4 -0
  90. package/dist/core/experimental.d.ts.map +1 -1
  91. package/dist/core/experimental.js +4 -0
  92. package/dist/core/experimental.js.map +1 -1
  93. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  94. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  95. package/dist/core/export-html/index.d.ts.map +1 -1
  96. package/dist/core/export-html/index.js.map +1 -1
  97. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  98. package/dist/core/export-html/tool-renderer.js.map +1 -1
  99. package/dist/core/extensions/index.d.ts.map +1 -1
  100. package/dist/core/extensions/loader.d.ts.map +1 -1
  101. package/dist/core/extensions/loader.js.map +1 -1
  102. package/dist/core/extensions/runner.d.ts.map +1 -1
  103. package/dist/core/extensions/runner.js +22 -30
  104. package/dist/core/extensions/runner.js.map +1 -1
  105. package/dist/core/extensions/types.d.ts +4 -0
  106. package/dist/core/extensions/types.d.ts.map +1 -1
  107. package/dist/core/extensions/types.js.map +1 -1
  108. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  109. package/dist/core/extensions/wrapper.js.map +1 -1
  110. package/dist/core/footer-data-provider.d.ts.map +1 -1
  111. package/dist/core/footer-data-provider.js +17 -18
  112. package/dist/core/footer-data-provider.js.map +1 -1
  113. package/dist/core/http-dispatcher.d.ts.map +1 -1
  114. package/dist/core/http-dispatcher.js.map +1 -1
  115. package/dist/core/index.d.ts.map +1 -1
  116. package/dist/core/keybindings.d.ts +24 -0
  117. package/dist/core/keybindings.d.ts.map +1 -1
  118. package/dist/core/keybindings.js +0 -1
  119. package/dist/core/keybindings.js.map +1 -1
  120. package/dist/core/messages.d.ts.map +1 -1
  121. package/dist/core/messages.js.map +1 -1
  122. package/dist/core/model-config.d.ts +5 -0
  123. package/dist/core/model-config.d.ts.map +1 -1
  124. package/dist/core/model-config.js +1 -2
  125. package/dist/core/model-config.js.map +1 -1
  126. package/dist/core/model-registry.d.ts.map +1 -1
  127. package/dist/core/model-registry.js +0 -1
  128. package/dist/core/model-registry.js.map +1 -1
  129. package/dist/core/model-resolver.d.ts.map +1 -1
  130. package/dist/core/model-resolver.js.map +1 -1
  131. package/dist/core/model-runtime.d.ts.map +1 -1
  132. package/dist/core/model-runtime.js +15 -25
  133. package/dist/core/model-runtime.js.map +1 -1
  134. package/dist/core/models-store.d.ts.map +1 -1
  135. package/dist/core/models-store.js +3 -4
  136. package/dist/core/models-store.js.map +1 -1
  137. package/dist/core/output-guard.d.ts.map +1 -1
  138. package/dist/core/output-guard.js.map +1 -1
  139. package/dist/core/package-manager.d.ts.map +1 -1
  140. package/dist/core/package-manager.js +0 -7
  141. package/dist/core/package-manager.js.map +1 -1
  142. package/dist/core/pi-manifest.d.ts.map +1 -1
  143. package/dist/core/pi-manifest.js.map +1 -1
  144. package/dist/core/project-trust.d.ts.map +1 -1
  145. package/dist/core/project-trust.js.map +1 -1
  146. package/dist/core/prompt-templates.d.ts.map +1 -1
  147. package/dist/core/prompt-templates.js.map +1 -1
  148. package/dist/core/provider-attribution.d.ts.map +1 -1
  149. package/dist/core/provider-attribution.js.map +1 -1
  150. package/dist/core/provider-composer.d.ts.map +1 -1
  151. package/dist/core/provider-composer.js.map +1 -1
  152. package/dist/core/radius.d.ts.map +1 -1
  153. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  154. package/dist/core/remote-catalog-provider.js.map +1 -1
  155. package/dist/core/resolve-config-value.d.ts.map +1 -1
  156. package/dist/core/resolve-config-value.js.map +1 -1
  157. package/dist/core/resource-loader.d.ts.map +1 -1
  158. package/dist/core/resource-loader.js +0 -44
  159. package/dist/core/resource-loader.js.map +1 -1
  160. package/dist/core/runtime-credentials.d.ts.map +1 -1
  161. package/dist/core/runtime-credentials.js +1 -2
  162. package/dist/core/runtime-credentials.js.map +1 -1
  163. package/dist/core/sdk.d.ts +5 -3
  164. package/dist/core/sdk.d.ts.map +1 -1
  165. package/dist/core/sdk.js +3 -2
  166. package/dist/core/sdk.js.map +1 -1
  167. package/dist/core/session-cwd.d.ts.map +1 -1
  168. package/dist/core/session-cwd.js +0 -1
  169. package/dist/core/session-cwd.js.map +1 -1
  170. package/dist/core/session-manager.d.ts +4 -0
  171. package/dist/core/session-manager.d.ts.map +1 -1
  172. package/dist/core/session-manager.js +55 -35
  173. package/dist/core/session-manager.js.map +1 -1
  174. package/dist/core/settings-manager.d.ts +6 -0
  175. package/dist/core/settings-manager.d.ts.map +1 -1
  176. package/dist/core/settings-manager.js +19 -17
  177. package/dist/core/settings-manager.js.map +1 -1
  178. package/dist/core/skills.d.ts.map +1 -1
  179. package/dist/core/skills.js.map +1 -1
  180. package/dist/core/slash-commands.d.ts.map +1 -1
  181. package/dist/core/source-info.d.ts.map +1 -1
  182. package/dist/core/source-info.js.map +1 -1
  183. package/dist/core/system-prompt.d.ts.map +1 -1
  184. package/dist/core/system-prompt.js +1 -1
  185. package/dist/core/system-prompt.js.map +1 -1
  186. package/dist/core/telemetry.d.ts.map +1 -1
  187. package/dist/core/telemetry.js.map +1 -1
  188. package/dist/core/timings.d.ts.map +1 -1
  189. package/dist/core/timings.js.map +1 -1
  190. package/dist/core/tools/bash.d.ts.map +1 -1
  191. package/dist/core/tools/bash.js +10 -5
  192. package/dist/core/tools/bash.js.map +1 -1
  193. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  194. package/dist/core/tools/edit-diff.js.map +1 -1
  195. package/dist/core/tools/edit.d.ts.map +1 -1
  196. package/dist/core/tools/edit.js +2 -0
  197. package/dist/core/tools/edit.js.map +1 -1
  198. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  199. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  200. package/dist/core/tools/find.d.ts +1 -1
  201. package/dist/core/tools/find.d.ts.map +1 -1
  202. package/dist/core/tools/find.js +1 -1
  203. package/dist/core/tools/find.js.map +1 -1
  204. package/dist/core/tools/grep.d.ts.map +1 -1
  205. package/dist/core/tools/grep.js +1 -1
  206. package/dist/core/tools/grep.js.map +1 -1
  207. package/dist/core/tools/index.d.ts +2 -1
  208. package/dist/core/tools/index.d.ts.map +1 -1
  209. package/dist/core/tools/index.js +9 -1
  210. package/dist/core/tools/index.js.map +1 -1
  211. package/dist/core/tools/ls.d.ts.map +1 -1
  212. package/dist/core/tools/ls.js.map +1 -1
  213. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  214. package/dist/core/tools/output-accumulator.js +12 -18
  215. package/dist/core/tools/output-accumulator.js.map +1 -1
  216. package/dist/core/tools/path-utils.d.ts.map +1 -1
  217. package/dist/core/tools/path-utils.js.map +1 -1
  218. package/dist/core/tools/read.d.ts.map +1 -1
  219. package/dist/core/tools/read.js +2 -0
  220. package/dist/core/tools/read.js.map +1 -1
  221. package/dist/core/tools/render-utils.d.ts.map +1 -1
  222. package/dist/core/tools/render-utils.js.map +1 -1
  223. package/dist/core/tools/subagent.d.ts +82 -0
  224. package/dist/core/tools/subagent.d.ts.map +1 -0
  225. package/dist/core/tools/subagent.js +980 -0
  226. package/dist/core/tools/subagent.js.map +1 -0
  227. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  228. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  229. package/dist/core/tools/truncate.d.ts.map +1 -1
  230. package/dist/core/tools/truncate.js.map +1 -1
  231. package/dist/core/tools/write.d.ts.map +1 -1
  232. package/dist/core/tools/write.js +2 -1
  233. package/dist/core/tools/write.js.map +1 -1
  234. package/dist/core/trust-manager.d.ts.map +1 -1
  235. package/dist/core/trust-manager.js +0 -1
  236. package/dist/core/trust-manager.js.map +1 -1
  237. package/dist/core/usage-totals.d.ts.map +1 -1
  238. package/dist/core/usage-totals.js.map +1 -1
  239. package/dist/extensions/index.d.ts.map +1 -1
  240. package/dist/extensions/llama/client.d.ts.map +1 -1
  241. package/dist/extensions/llama/client.js +0 -2
  242. package/dist/extensions/llama/client.js.map +1 -1
  243. package/dist/extensions/llama/huggingface.d.ts.map +1 -1
  244. package/dist/extensions/llama/huggingface.js +0 -2
  245. package/dist/extensions/llama/huggingface.js.map +1 -1
  246. package/dist/extensions/llama/index.d.ts.map +1 -1
  247. package/dist/extensions/llama/index.js.map +1 -1
  248. package/dist/extensions/llama/provider.d.ts.map +1 -1
  249. package/dist/extensions/llama/provider.js.map +1 -1
  250. package/dist/extensions/llama/ui.d.ts.map +1 -1
  251. package/dist/extensions/llama/ui.js +12 -28
  252. package/dist/extensions/llama/ui.js.map +1 -1
  253. package/dist/humain/agent-execution-protocol.d.ts.map +1 -1
  254. package/dist/humain/agent-execution-protocol.js.map +1 -1
  255. package/dist/humain/agent-execution-runtime.d.ts.map +1 -1
  256. package/dist/humain/agent-execution-runtime.js.map +1 -1
  257. package/dist/humain/bedrock-provider/vendor/index.bundle.mjs +127 -7
  258. package/dist/humain/brand-logo.d.ts.map +1 -1
  259. package/dist/humain/index.d.ts.map +1 -1
  260. package/dist/humain/index.js.map +1 -1
  261. package/dist/humain/legacy-workflow-tiers.d.ts.map +1 -1
  262. package/dist/humain/legacy-workflow-tiers.js.map +1 -1
  263. package/dist/humain/mcp-adapter/vendor/CHANGELOG.md +36 -0
  264. package/dist/humain/mcp-adapter/vendor/README.md +47 -5
  265. package/dist/humain/mcp-adapter/vendor/cli.js +163 -1
  266. package/dist/humain/mcp-adapter/vendor/commands.ts +128 -22
  267. package/dist/humain/mcp-adapter/vendor/config.ts +25 -7
  268. package/dist/humain/mcp-adapter/vendor/direct-tools.ts +5 -4
  269. package/dist/humain/mcp-adapter/vendor/index.bundle.mjs +1663 -458
  270. package/dist/humain/mcp-adapter/vendor/index.ts +219 -32
  271. package/dist/humain/mcp-adapter/vendor/init.ts +36 -4
  272. package/dist/humain/mcp-adapter/vendor/lifecycle.ts +315 -24
  273. package/dist/humain/mcp-adapter/vendor/mcp-auth-flow.ts +39 -6
  274. package/dist/humain/mcp-adapter/vendor/mcp-bearer-store.ts +387 -0
  275. package/dist/humain/mcp-adapter/vendor/mcp-callback-server.ts +27 -3
  276. package/dist/humain/mcp-adapter/vendor/mcp-code.ts +4 -0
  277. package/dist/humain/mcp-adapter/vendor/mcp-panel.ts +42 -13
  278. package/dist/humain/mcp-adapter/vendor/metadata-cache.ts +32 -21
  279. package/dist/humain/mcp-adapter/vendor/package-mcp-loader.ts +168 -0
  280. package/dist/humain/mcp-adapter/vendor/package.json +179 -177
  281. package/dist/humain/mcp-adapter/vendor/proxy-modes.ts +5 -4
  282. package/dist/humain/mcp-adapter/vendor/request-headers-command.ts +31 -37
  283. package/dist/humain/mcp-adapter/vendor/search-ranking.ts +92 -22
  284. package/dist/humain/mcp-adapter/vendor/server-manager.ts +140 -2
  285. package/dist/humain/mcp-adapter/vendor/session-recovery.ts +7 -0
  286. package/dist/humain/mcp-adapter/vendor/tool-approval.ts +15 -2
  287. package/dist/humain/mcp-adapter/vendor/tool-result-renderer.ts +44 -4
  288. package/dist/humain/mcp-adapter/vendor/types.ts +2 -0
  289. package/dist/humain/mcp-adapter/vendor/ui-server.ts +18 -16
  290. package/dist/humain/mcp-adapter/vendor/utils.ts +70 -0
  291. package/dist/humain/mcp-adapter.d.ts.map +1 -1
  292. package/dist/humain/mcp-adapter.js.map +1 -1
  293. package/dist/humain/pi-agent-execution-host.d.ts.map +1 -1
  294. package/dist/humain/pi-agent-execution-host.js.map +1 -1
  295. package/dist/humain/web-access/host.d.ts.map +1 -1
  296. package/dist/humain/web-access/index.d.ts.map +1 -1
  297. package/dist/humain/web-access/index.js.map +1 -1
  298. package/dist/humain/web-access/vendor/activity.d.ts.map +1 -1
  299. package/dist/humain/web-access/vendor/activity.js +7 -5
  300. package/dist/humain/web-access/vendor/activity.js.map +1 -1
  301. package/dist/humain/web-access/vendor/anysearch.d.ts.map +1 -1
  302. package/dist/humain/web-access/vendor/anysearch.js +3 -2
  303. package/dist/humain/web-access/vendor/anysearch.js.map +1 -1
  304. package/dist/humain/web-access/vendor/auth-fetch.d.ts.map +1 -1
  305. package/dist/humain/web-access/vendor/auth-fetch.js.map +1 -1
  306. package/dist/humain/web-access/vendor/bocha.d.ts.map +1 -1
  307. package/dist/humain/web-access/vendor/bocha.js.map +1 -1
  308. package/dist/humain/web-access/vendor/brave.d.ts.map +1 -1
  309. package/dist/humain/web-access/vendor/brave.js +14 -4
  310. package/dist/humain/web-access/vendor/brave.js.map +1 -1
  311. package/dist/humain/web-access/vendor/brightdata-unlocker.d.ts.map +1 -1
  312. package/dist/humain/web-access/vendor/brightdata-unlocker.js.map +1 -1
  313. package/dist/humain/web-access/vendor/brightdata.d.ts.map +1 -1
  314. package/dist/humain/web-access/vendor/brightdata.js.map +1 -1
  315. package/dist/humain/web-access/vendor/chrome-cookies.d.ts.map +1 -1
  316. package/dist/humain/web-access/vendor/chrome-cookies.js +92 -14
  317. package/dist/humain/web-access/vendor/chrome-cookies.js.map +1 -1
  318. package/dist/humain/web-access/vendor/content-find.d.ts.map +1 -1
  319. package/dist/humain/web-access/vendor/content-find.js.map +1 -1
  320. package/dist/humain/web-access/vendor/credential-source.d.ts.map +1 -1
  321. package/dist/humain/web-access/vendor/credential-source.js +0 -2
  322. package/dist/humain/web-access/vendor/credential-source.js.map +1 -1
  323. package/dist/humain/web-access/vendor/curator-page.d.ts +3 -0
  324. package/dist/humain/web-access/vendor/curator-page.d.ts.map +1 -1
  325. package/dist/humain/web-access/vendor/curator-page.js +4 -1
  326. package/dist/humain/web-access/vendor/curator-page.js.map +1 -1
  327. package/dist/humain/web-access/vendor/curator-server.d.ts +3 -0
  328. package/dist/humain/web-access/vendor/curator-server.d.ts.map +1 -1
  329. package/dist/humain/web-access/vendor/curator-server.js +6 -0
  330. package/dist/humain/web-access/vendor/curator-server.js.map +1 -1
  331. package/dist/humain/web-access/vendor/data-uri-sanitize.d.ts +21 -0
  332. package/dist/humain/web-access/vendor/data-uri-sanitize.d.ts.map +1 -0
  333. package/dist/humain/web-access/vendor/data-uri-sanitize.js +373 -0
  334. package/dist/humain/web-access/vendor/data-uri-sanitize.js.map +1 -0
  335. package/dist/humain/web-access/vendor/datalab-pdf-extract.d.ts.map +1 -1
  336. package/dist/humain/web-access/vendor/datalab-pdf-extract.js.map +1 -1
  337. package/dist/humain/web-access/vendor/declared-web-links.d.ts.map +1 -1
  338. package/dist/humain/web-access/vendor/declared-web-links.js.map +1 -1
  339. package/dist/humain/web-access/vendor/duckduckgo.d.ts.map +1 -1
  340. package/dist/humain/web-access/vendor/duckduckgo.js.map +1 -1
  341. package/dist/humain/web-access/vendor/exa.d.ts.map +1 -1
  342. package/dist/humain/web-access/vendor/exa.js +16 -7
  343. package/dist/humain/web-access/vendor/exa.js.map +1 -1
  344. package/dist/humain/web-access/vendor/extract.d.ts.map +1 -1
  345. package/dist/humain/web-access/vendor/extract.js +45 -5
  346. package/dist/humain/web-access/vendor/extract.js.map +1 -1
  347. package/dist/humain/web-access/vendor/feature-config.d.ts.map +1 -1
  348. package/dist/humain/web-access/vendor/feature-config.js.map +1 -1
  349. package/dist/humain/web-access/vendor/fetch-params.d.ts.map +1 -1
  350. package/dist/humain/web-access/vendor/fetch-params.js.map +1 -1
  351. package/dist/humain/web-access/vendor/firecrawl.d.ts.map +1 -1
  352. package/dist/humain/web-access/vendor/firecrawl.js +15 -2
  353. package/dist/humain/web-access/vendor/firecrawl.js.map +1 -1
  354. package/dist/humain/web-access/vendor/gemini-api.d.ts.map +1 -1
  355. package/dist/humain/web-access/vendor/gemini-api.js.map +1 -1
  356. package/dist/humain/web-access/vendor/gemini-pdf-extract.d.ts.map +1 -1
  357. package/dist/humain/web-access/vendor/gemini-pdf-extract.js.map +1 -1
  358. package/dist/humain/web-access/vendor/gemini-search.d.ts +2 -2
  359. package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -1
  360. package/dist/humain/web-access/vendor/gemini-search.js +25 -8
  361. package/dist/humain/web-access/vendor/gemini-search.js.map +1 -1
  362. package/dist/humain/web-access/vendor/gemini-url-context.d.ts.map +1 -1
  363. package/dist/humain/web-access/vendor/gemini-url-context.js.map +1 -1
  364. package/dist/humain/web-access/vendor/gemini-web-config.d.ts.map +1 -1
  365. package/dist/humain/web-access/vendor/gemini-web-config.js.map +1 -1
  366. package/dist/humain/web-access/vendor/gemini-web.d.ts.map +1 -1
  367. package/dist/humain/web-access/vendor/gemini-web.js.map +1 -1
  368. package/dist/humain/web-access/vendor/github-api.d.ts.map +1 -1
  369. package/dist/humain/web-access/vendor/github-api.js.map +1 -1
  370. package/dist/humain/web-access/vendor/github-extract.d.ts.map +1 -1
  371. package/dist/humain/web-access/vendor/github-extract.js +69 -35
  372. package/dist/humain/web-access/vendor/github-extract.js.map +1 -1
  373. package/dist/humain/web-access/vendor/index.d.ts.map +1 -1
  374. package/dist/humain/web-access/vendor/index.js +58 -54
  375. package/dist/humain/web-access/vendor/index.js.map +1 -1
  376. package/dist/humain/web-access/vendor/jina-search.d.ts.map +1 -1
  377. package/dist/humain/web-access/vendor/jina-search.js.map +1 -1
  378. package/dist/humain/web-access/vendor/kagi.d.ts.map +1 -1
  379. package/dist/humain/web-access/vendor/kagi.js.map +1 -1
  380. package/dist/humain/web-access/vendor/ollama.d.ts.map +1 -1
  381. package/dist/humain/web-access/vendor/ollama.js.map +1 -1
  382. package/dist/humain/web-access/vendor/openai-search.d.ts +1 -1
  383. package/dist/humain/web-access/vendor/openai-search.d.ts.map +1 -1
  384. package/dist/humain/web-access/vendor/openai-search.js +15 -5
  385. package/dist/humain/web-access/vendor/openai-search.js.map +1 -1
  386. package/dist/humain/web-access/vendor/page-query.d.ts +1 -2
  387. package/dist/humain/web-access/vendor/page-query.d.ts.map +1 -1
  388. package/dist/humain/web-access/vendor/page-query.js +5 -2
  389. package/dist/humain/web-access/vendor/page-query.js.map +1 -1
  390. package/dist/humain/web-access/vendor/parallel-mcp.d.ts +10 -0
  391. package/dist/humain/web-access/vendor/parallel-mcp.d.ts.map +1 -0
  392. package/dist/humain/web-access/vendor/parallel-mcp.js +224 -0
  393. package/dist/humain/web-access/vendor/parallel-mcp.js.map +1 -0
  394. package/dist/humain/web-access/vendor/parallel.d.ts +1 -0
  395. package/dist/humain/web-access/vendor/parallel.d.ts.map +1 -1
  396. package/dist/humain/web-access/vendor/parallel.js +2 -2
  397. package/dist/humain/web-access/vendor/parallel.js.map +1 -1
  398. package/dist/humain/web-access/vendor/pdf-extract.d.ts +1 -0
  399. package/dist/humain/web-access/vendor/pdf-extract.d.ts.map +1 -1
  400. package/dist/humain/web-access/vendor/pdf-extract.js +15 -5
  401. package/dist/humain/web-access/vendor/pdf-extract.js.map +1 -1
  402. package/dist/humain/web-access/vendor/perplexity.d.ts.map +1 -1
  403. package/dist/humain/web-access/vendor/perplexity.js.map +1 -1
  404. package/dist/humain/web-access/vendor/querit.d.ts.map +1 -1
  405. package/dist/humain/web-access/vendor/querit.js.map +1 -1
  406. package/dist/humain/web-access/vendor/query-rewrite.d.ts +3 -0
  407. package/dist/humain/web-access/vendor/query-rewrite.d.ts.map +1 -0
  408. package/dist/humain/web-access/vendor/query-rewrite.js +42 -0
  409. package/dist/humain/web-access/vendor/query-rewrite.js.map +1 -0
  410. package/dist/humain/web-access/vendor/render-search-error.d.ts.map +1 -1
  411. package/dist/humain/web-access/vendor/render-search-error.js.map +1 -1
  412. package/dist/humain/web-access/vendor/rsc-extract.d.ts.map +1 -1
  413. package/dist/humain/web-access/vendor/rsc-extract.js.map +1 -1
  414. package/dist/humain/web-access/vendor/search1api.d.ts.map +1 -1
  415. package/dist/humain/web-access/vendor/search1api.js.map +1 -1
  416. package/dist/humain/web-access/vendor/searchinfinity.d.ts.map +1 -1
  417. package/dist/humain/web-access/vendor/searchinfinity.js.map +1 -1
  418. package/dist/humain/web-access/vendor/searxng.d.ts.map +1 -1
  419. package/dist/humain/web-access/vendor/searxng.js.map +1 -1
  420. package/dist/humain/web-access/vendor/serpbase.d.ts.map +1 -1
  421. package/dist/humain/web-access/vendor/serpbase.js.map +1 -1
  422. package/dist/humain/web-access/vendor/serpdive.d.ts.map +1 -1
  423. package/dist/humain/web-access/vendor/serpdive.js.map +1 -1
  424. package/dist/humain/web-access/vendor/serper.d.ts +4 -0
  425. package/dist/humain/web-access/vendor/serper.d.ts.map +1 -0
  426. package/dist/humain/web-access/vendor/serper.js +206 -0
  427. package/dist/humain/web-access/vendor/serper.js.map +1 -0
  428. package/dist/humain/web-access/vendor/source-check.d.ts.map +1 -1
  429. package/dist/humain/web-access/vendor/source-check.js.map +1 -1
  430. package/dist/humain/web-access/vendor/ssrf-protection.d.ts +2 -0
  431. package/dist/humain/web-access/vendor/ssrf-protection.d.ts.map +1 -1
  432. package/dist/humain/web-access/vendor/ssrf-protection.js +11 -2
  433. package/dist/humain/web-access/vendor/ssrf-protection.js.map +1 -1
  434. package/dist/humain/web-access/vendor/storage.d.ts.map +1 -1
  435. package/dist/humain/web-access/vendor/storage.js.map +1 -1
  436. package/dist/humain/web-access/vendor/summary-model-scope.d.ts +5 -0
  437. package/dist/humain/web-access/vendor/summary-model-scope.d.ts.map +1 -1
  438. package/dist/humain/web-access/vendor/summary-model-scope.js +10 -5
  439. package/dist/humain/web-access/vendor/summary-model-scope.js.map +1 -1
  440. package/dist/humain/web-access/vendor/summary-review.d.ts.map +1 -1
  441. package/dist/humain/web-access/vendor/summary-review.js +40 -14
  442. package/dist/humain/web-access/vendor/summary-review.js.map +1 -1
  443. package/dist/humain/web-access/vendor/tavily.d.ts.map +1 -1
  444. package/dist/humain/web-access/vendor/tavily.js +14 -4
  445. package/dist/humain/web-access/vendor/tavily.js.map +1 -1
  446. package/dist/humain/web-access/vendor/tinyfish.d.ts.map +1 -1
  447. package/dist/humain/web-access/vendor/tinyfish.js.map +1 -1
  448. package/dist/humain/web-access/vendor/utils.d.ts +10 -0
  449. package/dist/humain/web-access/vendor/utils.d.ts.map +1 -1
  450. package/dist/humain/web-access/vendor/utils.js +70 -0
  451. package/dist/humain/web-access/vendor/utils.js.map +1 -1
  452. package/dist/humain/web-access/vendor/valyu.d.ts +6 -0
  453. package/dist/humain/web-access/vendor/valyu.d.ts.map +1 -0
  454. package/dist/humain/web-access/vendor/valyu.js +194 -0
  455. package/dist/humain/web-access/vendor/valyu.js.map +1 -0
  456. package/dist/humain/web-access/vendor/video-extract.d.ts.map +1 -1
  457. package/dist/humain/web-access/vendor/video-extract.js.map +1 -1
  458. package/dist/humain/web-access/vendor/xai-search.d.ts.map +1 -1
  459. package/dist/humain/web-access/vendor/xai-search.js.map +1 -1
  460. package/dist/humain/web-access/vendor/youtube-extract.d.ts.map +1 -1
  461. package/dist/humain/web-access/vendor/youtube-extract.js.map +1 -1
  462. package/dist/index.d.ts +1 -1
  463. package/dist/index.d.ts.map +1 -1
  464. package/dist/index.js.map +1 -1
  465. package/dist/main.d.ts.map +1 -1
  466. package/dist/main.js +4 -0
  467. package/dist/main.js.map +1 -1
  468. package/dist/migrations.d.ts.map +1 -1
  469. package/dist/migrations.js.map +1 -1
  470. package/dist/modes/agent-exec-mode.d.ts.map +1 -1
  471. package/dist/modes/agent-exec-mode.js.map +1 -1
  472. package/dist/modes/index.d.ts.map +1 -1
  473. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  474. package/dist/modes/interactive/components/armin.js +6 -10
  475. package/dist/modes/interactive/components/armin.js.map +1 -1
  476. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  477. package/dist/modes/interactive/components/assistant-message.js +2 -9
  478. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  479. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  480. package/dist/modes/interactive/components/bash-execution.js +4 -9
  481. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  482. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  483. package/dist/modes/interactive/components/bordered-loader.js +0 -3
  484. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  485. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  486. package/dist/modes/interactive/components/branch-summary-message.js +1 -3
  487. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  488. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  489. package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
  490. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  491. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  492. package/dist/modes/interactive/components/config-selector.js +5 -22
  493. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  494. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  495. package/dist/modes/interactive/components/countdown-timer.js +0 -5
  496. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  497. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  498. package/dist/modes/interactive/components/custom-editor.js +1 -8
  499. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  500. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  501. package/dist/modes/interactive/components/custom-entry.js +1 -4
  502. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  503. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  504. package/dist/modes/interactive/components/custom-message.js +1 -7
  505. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  506. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  507. package/dist/modes/interactive/components/daxnuts.js +6 -8
  508. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  509. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  510. package/dist/modes/interactive/components/diff.js +2 -2
  511. package/dist/modes/interactive/components/diff.js.map +1 -1
  512. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  513. package/dist/modes/interactive/components/dynamic-border.js +0 -1
  514. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  515. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  516. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  517. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  518. package/dist/modes/interactive/components/extension-editor.js +1 -7
  519. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  520. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  521. package/dist/modes/interactive/components/extension-input.js +2 -8
  522. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  523. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  524. package/dist/modes/interactive/components/extension-selector.js +1 -9
  525. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  526. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  527. package/dist/modes/interactive/components/first-time-setup.js +2 -4
  528. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  529. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  530. package/dist/modes/interactive/components/footer.js +1 -3
  531. package/dist/modes/interactive/components/footer.js.map +1 -1
  532. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  533. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  534. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  535. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  536. package/dist/modes/interactive/components/login-dialog.js +3 -9
  537. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  538. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  539. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  540. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  541. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  542. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  543. package/dist/modes/interactive/components/model-selector.js +14 -26
  544. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  545. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  546. package/dist/modes/interactive/components/oauth-selector.js +3 -11
  547. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  548. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  549. package/dist/modes/interactive/components/scoped-models-selector.js +9 -14
  550. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  551. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  552. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  553. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  554. package/dist/modes/interactive/components/session-selector.js +33 -57
  555. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  556. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  557. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  558. package/dist/modes/interactive/components/settings-selector.js +10 -14
  559. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  560. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  561. package/dist/modes/interactive/components/show-images-selector.js +0 -1
  562. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  563. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  564. package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
  565. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  566. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  567. package/dist/modes/interactive/components/status-indicator.js +0 -2
  568. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  569. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  570. package/dist/modes/interactive/components/theme-selector.js +0 -2
  571. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  572. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  573. package/dist/modes/interactive/components/thinking-selector.js +0 -1
  574. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  575. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  576. package/dist/modes/interactive/components/tool-execution.js +19 -25
  577. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  578. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  579. package/dist/modes/interactive/components/tree-selector.js +18 -34
  580. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  581. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  582. package/dist/modes/interactive/components/trust-selector.js +0 -6
  583. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  584. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  585. package/dist/modes/interactive/components/user-message-selector.js +3 -6
  586. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  587. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/user-message.js +0 -4
  589. package/dist/modes/interactive/components/user-message.js.map +1 -1
  590. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  591. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  592. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  593. package/dist/modes/interactive/external-editor.js.map +1 -1
  594. package/dist/modes/interactive/interactive-mode.d.ts +18 -2
  595. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  596. package/dist/modes/interactive/interactive-mode.js +147 -137
  597. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  598. package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
  599. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
  600. package/dist/modes/interactive/model-catalog-refresh.js +36 -0
  601. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
  602. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  603. package/dist/modes/interactive/model-search.js.map +1 -1
  604. package/dist/modes/interactive/theme/dark.json +2 -0
  605. package/dist/modes/interactive/theme/light.json +2 -0
  606. package/dist/modes/interactive/theme/theme-controller.d.ts +10 -2
  607. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  608. package/dist/modes/interactive/theme/theme-controller.js +25 -18
  609. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  610. package/dist/modes/interactive/theme/theme-schema.json +9 -1
  611. package/dist/modes/interactive/theme/theme.d.ts +7 -5
  612. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  613. package/dist/modes/interactive/theme/theme.js +12 -8
  614. package/dist/modes/interactive/theme/theme.js.map +1 -1
  615. package/dist/modes/json-event.d.ts +4 -1
  616. package/dist/modes/json-event.d.ts.map +1 -1
  617. package/dist/modes/json-event.js +5 -2
  618. package/dist/modes/json-event.js.map +1 -1
  619. package/dist/modes/print-mode.d.ts.map +1 -1
  620. package/dist/modes/print-mode.js.map +1 -1
  621. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  622. package/dist/modes/rpc/jsonl.js.map +1 -1
  623. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  624. package/dist/modes/rpc/rpc-client.js +9 -10
  625. package/dist/modes/rpc/rpc-client.js.map +1 -1
  626. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  627. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  628. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  629. package/dist/package-manager-cli.d.ts.map +1 -1
  630. package/dist/package-manager-cli.js.map +1 -1
  631. package/dist/rpc-entry.d.ts.map +1 -1
  632. package/dist/rpc-entry.js.map +1 -1
  633. package/dist/server/create-harness.d.ts.map +1 -1
  634. package/dist/server/create-harness.js +2 -0
  635. package/dist/server/create-harness.js.map +1 -1
  636. package/dist/utils/abort.d.ts.map +1 -1
  637. package/dist/utils/abort.js.map +1 -1
  638. package/dist/utils/ansi.d.ts.map +1 -1
  639. package/dist/utils/ansi.js.map +1 -1
  640. package/dist/utils/changelog.d.ts.map +1 -1
  641. package/dist/utils/changelog.js.map +1 -1
  642. package/dist/utils/child-process.d.ts.map +1 -1
  643. package/dist/utils/child-process.js.map +1 -1
  644. package/dist/utils/clipboard-image.d.ts.map +1 -1
  645. package/dist/utils/clipboard-image.js +1 -1
  646. package/dist/utils/clipboard-image.js.map +1 -1
  647. package/dist/utils/clipboard-native.d.ts.map +1 -1
  648. package/dist/utils/clipboard-native.js.map +1 -1
  649. package/dist/utils/clipboard.d.ts.map +1 -1
  650. package/dist/utils/clipboard.js.map +1 -1
  651. package/dist/utils/deprecation.d.ts.map +1 -1
  652. package/dist/utils/deprecation.js.map +1 -1
  653. package/dist/utils/exif-orientation.d.ts.map +1 -1
  654. package/dist/utils/exif-orientation.js.map +1 -1
  655. package/dist/utils/frontmatter.d.ts.map +1 -1
  656. package/dist/utils/frontmatter.js.map +1 -1
  657. package/dist/utils/fs-watch.d.ts.map +1 -1
  658. package/dist/utils/fs-watch.js.map +1 -1
  659. package/dist/utils/git.d.ts.map +1 -1
  660. package/dist/utils/git.js.map +1 -1
  661. package/dist/utils/html.d.ts.map +1 -1
  662. package/dist/utils/html.js.map +1 -1
  663. package/dist/utils/image-convert.d.ts.map +1 -1
  664. package/dist/utils/image-convert.js.map +1 -1
  665. package/dist/utils/image-process.d.ts.map +1 -1
  666. package/dist/utils/image-process.js.map +1 -1
  667. package/dist/utils/image-resize-core.d.ts.map +1 -1
  668. package/dist/utils/image-resize-core.js.map +1 -1
  669. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  670. package/dist/utils/image-resize-worker.js.map +1 -1
  671. package/dist/utils/image-resize.d.ts.map +1 -1
  672. package/dist/utils/image-resize.js.map +1 -1
  673. package/dist/utils/json.d.ts.map +1 -1
  674. package/dist/utils/json.js.map +1 -1
  675. package/dist/utils/management-http.d.ts.map +1 -1
  676. package/dist/utils/management-http.js.map +1 -1
  677. package/dist/utils/mime.d.ts.map +1 -1
  678. package/dist/utils/mime.js.map +1 -1
  679. package/dist/utils/open-browser.d.ts.map +1 -1
  680. package/dist/utils/open-browser.js.map +1 -1
  681. package/dist/utils/paths.d.ts.map +1 -1
  682. package/dist/utils/paths.js.map +1 -1
  683. package/dist/utils/photon.d.ts.map +1 -1
  684. package/dist/utils/photon.js.map +1 -1
  685. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  686. package/dist/utils/pi-user-agent.js.map +1 -1
  687. package/dist/utils/shell.d.ts.map +1 -1
  688. package/dist/utils/shell.js.map +1 -1
  689. package/dist/utils/sleep.d.ts.map +1 -1
  690. package/dist/utils/sleep.js.map +1 -1
  691. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  692. package/dist/utils/syntax-highlight.js +1 -1
  693. package/dist/utils/syntax-highlight.js.map +1 -1
  694. package/dist/utils/tool-result-images.d.ts.map +1 -1
  695. package/dist/utils/tool-result-images.js.map +1 -1
  696. package/dist/utils/tools-manager.d.ts +10 -1
  697. package/dist/utils/tools-manager.d.ts.map +1 -1
  698. package/dist/utils/tools-manager.js +14 -19
  699. package/dist/utils/tools-manager.js.map +1 -1
  700. package/dist/utils/version-check.d.ts.map +1 -1
  701. package/dist/utils/version-check.js.map +1 -1
  702. package/dist/utils/windows-self-update.d.ts.map +1 -1
  703. package/dist/utils/windows-self-update.js.map +1 -1
  704. package/docs/compaction.md +3 -3
  705. package/docs/custom-provider.md +1 -1
  706. package/docs/environment-variables.md +1 -0
  707. package/docs/extensions.md +5 -1
  708. package/docs/json.md +6 -4
  709. package/docs/keybindings.md +8 -2
  710. package/docs/rpc.md +15 -4
  711. package/docs/sdk.md +9 -0
  712. package/docs/settings.md +31 -0
  713. package/docs/terminal-setup.md +23 -2
  714. package/docs/themes.md +23 -3
  715. package/docs/tui.md +2 -2
  716. package/docs/usage.md +3 -2
  717. package/examples/extensions/README.md +1 -1
  718. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  719. package/examples/extensions/custom-provider-anthropic/package.json +2 -2
  720. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  721. package/examples/extensions/gondolin/package-lock.json +2 -2
  722. package/examples/extensions/gondolin/package.json +1 -1
  723. package/examples/extensions/minimal-mode.ts +6 -6
  724. package/examples/extensions/sandbox/package-lock.json +2 -2
  725. package/examples/extensions/sandbox/package.json +2 -2
  726. package/examples/extensions/subagent/README.md +24 -147
  727. package/examples/extensions/with-deps/package-lock.json +2 -2
  728. package/examples/extensions/with-deps/package.json +1 -1
  729. package/npm-shrinkwrap.json +853 -661
  730. package/package.json +33 -33
  731. package/src/humain/mcp-adapter/UPSTREAM.md +1 -1
  732. package/src/humain/mcp-adapter/upstream.json +3 -3
  733. package/src/humain/mcp-adapter/vendor/CHANGELOG.md +36 -0
  734. package/src/humain/web-access/UPSTREAM.md +1 -1
  735. package/src/humain/web-access/upstream.json +4 -4
  736. package/examples/extensions/subagent/agents.ts +0 -126
  737. package/examples/extensions/subagent/index.ts +0 -1015
@@ -8,64 +8,62 @@ const DEFAULT_TIMEOUT_MS = 10_000;
8
8
  const MAX_OUTPUT_BYTES = 64 * 1024;
9
9
  const USE_PROCESS_GROUP = process.platform !== "win32";
10
10
  const CLEANUP_TOKEN_ENV = "PI_MCP_REQUEST_HEADERS_CLEANUP_TOKEN";
11
+ // Busy hosts can exceed spawnSync's 1 MiB default when `ps axeww` dumps each
12
+ // process environment. Keep discovery below a bounded cap instead of letting
13
+ // `ps` get SIGTERM'd and reporting a false cleanup failure.
14
+ const PS_MAX_BUFFER_BYTES = 8 * 1024 * 1024;
11
15
 
12
16
  function isNoSuchProcessError(error: unknown): boolean {
13
17
  return typeof error === "object" && error !== null && "code" in error && (error as NodeJS.ErrnoException).code === "ESRCH";
14
18
  }
15
19
 
16
- function runPosixPs(args: string[]): { status: number | null; stdout: string } {
17
- if (process.env.PI_MCP_ADAPTER_TEST_FAIL_PS === "1") return { status: 1, stdout: "" };
18
- return spawnSync("ps", args, { encoding: "utf8" });
20
+ function runPosixPs(args: string[]): { status: number | null; signal: NodeJS.Signals | null; stdout: string } {
21
+ if (process.env.PI_MCP_ADAPTER_TEST_FAIL_PS === "1") return { status: 1, signal: null, stdout: "" };
22
+ const result = spawnSync("ps", args, { encoding: "utf8", maxBuffer: PS_MAX_BUFFER_BYTES });
23
+ return { status: result.status, signal: result.signal, stdout: result.stdout };
19
24
  }
20
25
 
21
- function collectPosixDescendantPids(rootPid: number): number[] {
22
- const result = runPosixPs(["-axo", "pid=,ppid="]);
26
+ function psFailureReason(result: { status: number | null; signal: NodeJS.Signals | null }): string {
27
+ return result.status === null
28
+ ? `ps was killed by signal ${result.signal ?? "unknown"}`
29
+ : `ps exited with code ${result.status}`;
30
+ }
31
+
32
+ function collectPosixProcessPids(rootPid: number, cleanupToken?: string): number[] {
33
+ const result = runPosixPs(["axeww", "-o", "pid=,ppid=,command="]);
23
34
  if (result.status !== 0) {
24
- throw new Error(`HTTP request headers command cleanup failed: ps exited with code ${result.status ?? "unknown"}`);
35
+ throw new Error(`HTTP request headers command cleanup failed: ${psFailureReason(result)}`);
25
36
  }
26
37
 
27
38
  const childrenByParent = new Map<number, number[]>();
39
+ const processPids = new Set<number>();
40
+ const needle = cleanupToken ? `${CLEANUP_TOKEN_ENV}=${cleanupToken}` : undefined;
28
41
  for (const line of result.stdout.split("\n")) {
29
- const [pidText, ppidText] = line.trim().split(/\s+/, 2);
30
- const pid = Number(pidText);
31
- const ppid = Number(ppidText);
42
+ const match = /^\s*(\d+)\s+(\d+)(?:\s+(.*))?$/.exec(line);
43
+ if (!match) continue;
44
+ const pid = Number(match[1]);
45
+ const ppid = Number(match[2]);
32
46
  if (!Number.isInteger(pid) || !Number.isInteger(ppid)) continue;
33
47
  const children = childrenByParent.get(ppid);
34
48
  if (children) children.push(pid);
35
49
  else childrenByParent.set(ppid, [pid]);
50
+ if (needle && pid !== process.pid && match[3]?.includes(needle)) processPids.add(pid);
36
51
  }
37
52
 
38
- const descendants: number[] = [];
39
53
  const stack = [...(childrenByParent.get(rootPid) ?? [])];
40
54
  while (stack.length > 0) {
41
55
  const pid = stack.pop()!;
42
- descendants.push(pid);
56
+ processPids.add(pid);
43
57
  stack.push(...(childrenByParent.get(pid) ?? []));
44
58
  }
45
- return descendants;
59
+ return [...processPids];
46
60
  }
47
61
 
48
- function collectPosixCleanupTokenPids(cleanupToken: string): number[] {
49
- const result = runPosixPs(["axeww", "-o", "pid=,command="]);
62
+ function assertPosixProcessDiscoveryAvailable(): void {
63
+ const result = runPosixPs(["axeww", "-o", "pid=,ppid=,command="]);
50
64
  if (result.status !== 0) {
51
- throw new Error(`HTTP request headers command cleanup failed: ps exited with code ${result.status ?? "unknown"}`);
65
+ throw new Error(`HTTP request headers command cleanup failed: ${psFailureReason(result)}`);
52
66
  }
53
-
54
- const needle = `${CLEANUP_TOKEN_ENV}=${cleanupToken}`;
55
- const pids: number[] = [];
56
- for (const line of result.stdout.split("\n")) {
57
- const trimmed = line.trim();
58
- if (!trimmed.includes(needle)) continue;
59
- const [pidText] = trimmed.split(/\s+/, 1);
60
- const pid = Number(pidText);
61
- if (Number.isInteger(pid) && pid !== process.pid) pids.push(pid);
62
- }
63
- return pids;
64
- }
65
-
66
- function assertPosixProcessDiscoveryAvailable(): void {
67
- collectPosixDescendantPids(process.pid);
68
- collectPosixCleanupTokenPids(`${process.pid}-preflight`);
69
67
  }
70
68
 
71
69
  function isTaskkillNoSuchProcess(result: ReturnType<typeof spawnSync>): boolean {
@@ -109,10 +107,7 @@ function killRequestHeadersCommand(child: ChildProcess, trackedPosixDescendantPi
109
107
  }
110
108
  let stablePasses = 0;
111
109
  for (let pass = 0; pass < 16; pass++) {
112
- const candidates = [
113
- ...collectPosixDescendantPids(child.pid),
114
- ...(cleanupToken ? collectPosixCleanupTokenPids(cleanupToken) : []),
115
- ];
110
+ const candidates = collectPosixProcessPids(child.pid, cleanupToken);
116
111
  const newPids = candidates.filter(pid => !frozenPids.has(pid));
117
112
  if (newPids.length === 0) {
118
113
  stablePasses++;
@@ -212,8 +207,7 @@ async function invokeRequestHeadersCommand(
212
207
  const trackPosixDescendants = () => {
213
208
  if (!USE_PROCESS_GROUP || child.pid === undefined || settled || trackingError) return;
214
209
  try {
215
- for (const pid of collectPosixDescendantPids(child.pid)) trackedPosixDescendantPids.add(pid);
216
- for (const pid of collectPosixCleanupTokenPids(cleanupToken)) trackedPosixDescendantPids.add(pid);
210
+ for (const pid of collectPosixProcessPids(child.pid, cleanupToken)) trackedPosixDescendantPids.add(pid);
217
211
  } catch (error) {
218
212
  trackingError = error instanceof Error ? error : new Error(String(error));
219
213
  }
@@ -23,6 +23,26 @@ export interface RankedToolMatch {
23
23
  score: number;
24
24
  }
25
25
 
26
+ type SearchField = Exclude<keyof typeof FIELD_WEIGHTS, "keywords">;
27
+
28
+ interface PreparedToolSearch {
29
+ tool: ToolMetadata;
30
+ fields: Array<[SearchField, string, string[]]>;
31
+ nameTokens: string[];
32
+ keywordPhrases: string[];
33
+ keywordTokens: string[];
34
+ }
35
+
36
+ interface CachedServerSearch {
37
+ metadata: ToolMetadata[];
38
+ searchKeywords: ServerEntry["searchKeywords"];
39
+ toolPrefix: ReturnType<typeof resolveToolPrefix>;
40
+ withKeywords?: PreparedToolSearch[];
41
+ withoutKeywords?: PreparedToolSearch[];
42
+ }
43
+
44
+ const searchCache = new WeakMap<McpExtensionState, Map<string, CachedServerSearch>>();
45
+
26
46
  /**
27
47
  * Resolve the configured searchKeywords entries that apply to a tool.
28
48
  * Keys match by original name, prefixed name, or glob — the same candidate
@@ -64,25 +84,37 @@ export function tokenize(value: string): string[] {
64
84
  return normalizeSearchText(value).split(/[^a-z0-9]+/).filter(Boolean);
65
85
  }
66
86
 
67
- export function scoreToolMatch(tool: ToolMetadata, server: string, query: string, keywords?: string[]): number | null {
68
- const normalizedQuery = normalizeSearchText(query).trim();
69
- const queryTokens = tokenize(query);
70
- if (queryTokens.length === 0) return null;
71
-
87
+ function prepareToolSearch(tool: ToolMetadata, server: string, keywords?: string[]): PreparedToolSearch {
72
88
  const fields = {
73
89
  name: normalizeSearchText(tool.name),
74
90
  originalName: normalizeSearchText(tool.originalName),
75
91
  server: normalizeSearchText(server),
76
92
  description: normalizeSearchText(tool.description),
77
93
  };
94
+ const preparedFields = (Object.entries(fields) as Array<[SearchField, string]>)
95
+ .map(([field, value]): [SearchField, string, string[]] => [field, value, tokenize(value)]);
96
+ const keywordPhrases = keywords?.map(keyword => normalizeSearchText(keyword).trim()).filter(Boolean) ?? [];
97
+ return {
98
+ tool,
99
+ fields: preparedFields,
100
+ nameTokens: preparedFields[0]![2],
101
+ keywordPhrases,
102
+ keywordTokens: keywordPhrases.flatMap(tokenize),
103
+ };
104
+ }
105
+
106
+ function scorePreparedToolMatch(
107
+ prepared: PreparedToolSearch,
108
+ normalizedQuery: string,
109
+ queryTokens: string[],
110
+ ): number | null {
78
111
  let score = 0;
79
112
  let phraseMatched = false;
80
113
  let wholeFieldExact = false;
81
114
  const matchedTokens = new Set<string>();
82
115
 
83
- for (const [field, value] of Object.entries(fields) as Array<[keyof typeof FIELD_WEIGHTS, string]>) {
116
+ for (const [field, value, fieldTokens] of prepared.fields) {
84
117
  const weight = FIELD_WEIGHTS[field];
85
- const fieldTokens = tokenize(value);
86
118
  if (value === normalizedQuery) {
87
119
  score += weight * 14;
88
120
  phraseMatched = true;
@@ -112,11 +144,10 @@ export function scoreToolMatch(tool: ToolMetadata, server: string, query: string
112
144
  // Configured keywords are discrete phrases, so the phrase-level bonus is
113
145
  // computed per phrase (best match wins) rather than on a joined string,
114
146
  // which would phrase-match queries spanning two unrelated keywords.
115
- if (keywords !== undefined && keywords.length > 0) {
147
+ if (prepared.keywordPhrases.length > 0) {
116
148
  const weight = FIELD_WEIGHTS.keywords;
117
- const phrases = keywords.map(keyword => normalizeSearchText(keyword).trim()).filter(Boolean);
118
149
  let phraseScore = 0;
119
- for (const phrase of phrases) {
150
+ for (const phrase of prepared.keywordPhrases) {
120
151
  if (phrase === normalizedQuery) {
121
152
  phraseScore = Math.max(phraseScore, weight * 14);
122
153
  phraseMatched = true;
@@ -131,15 +162,14 @@ export function scoreToolMatch(tool: ToolMetadata, server: string, query: string
131
162
  }
132
163
  score += phraseScore;
133
164
 
134
- const keywordTokens = phrases.flatMap(tokenize);
135
165
  for (const token of queryTokens) {
136
- if (keywordTokens.includes(token)) {
166
+ if (prepared.keywordTokens.includes(token)) {
137
167
  score += weight * 4;
138
168
  matchedTokens.add(token);
139
- } else if (keywordTokens.some(keywordToken => keywordToken.startsWith(token) || (keywordToken.length >= MIN_STEM_LENGTH && token.startsWith(keywordToken)))) {
169
+ } else if (prepared.keywordTokens.some(keywordToken => keywordToken.startsWith(token) || (keywordToken.length >= MIN_STEM_LENGTH && token.startsWith(keywordToken)))) {
140
170
  score += weight * 2;
141
171
  matchedTokens.add(token);
142
- } else if (phrases.some(phrase => phrase.includes(token))) {
172
+ } else if (prepared.keywordPhrases.some(phrase => phrase.includes(token))) {
143
173
  score += weight;
144
174
  matchedTokens.add(token);
145
175
  }
@@ -151,11 +181,52 @@ export function scoreToolMatch(tool: ToolMetadata, server: string, query: string
151
181
 
152
182
  score += coverage === 1 ? 25 : Math.round(coverage * 10);
153
183
  const firstQueryToken = queryTokens[0];
154
- if (firstQueryToken !== undefined && tokenize(fields.name).includes(firstQueryToken)) score += 8;
184
+ if (firstQueryToken !== undefined && prepared.nameTokens.includes(firstQueryToken)) score += 8;
155
185
  if (wholeFieldExact) score += 20;
156
186
  return score;
157
187
  }
158
188
 
189
+ export function scoreToolMatch(tool: ToolMetadata, server: string, query: string, keywords?: string[]): number | null {
190
+ const normalizedQuery = normalizeSearchText(query).trim();
191
+ const queryTokens = tokenize(query);
192
+ if (queryTokens.length === 0) return null;
193
+ return scorePreparedToolMatch(prepareToolSearch(tool, server, keywords), normalizedQuery, queryTokens);
194
+ }
195
+
196
+ function getPreparedTools(
197
+ state: McpExtensionState,
198
+ serverName: string,
199
+ metadata: ToolMetadata[],
200
+ definition: ServerEntry | undefined,
201
+ globalPrefix: ToolPrefix,
202
+ includeKeywords: boolean,
203
+ ): PreparedToolSearch[] {
204
+ let stateCache = searchCache.get(state);
205
+ if (!stateCache) {
206
+ stateCache = new Map();
207
+ searchCache.set(state, stateCache);
208
+ }
209
+ const toolPrefix = resolveToolPrefix(definition, globalPrefix);
210
+ let cached = stateCache.get(serverName);
211
+ if (cached?.metadata !== metadata || cached.searchKeywords !== definition?.searchKeywords || cached.toolPrefix !== toolPrefix) {
212
+ cached = { metadata, searchKeywords: definition?.searchKeywords, toolPrefix };
213
+ stateCache.set(serverName, cached);
214
+ }
215
+ const cacheKey = includeKeywords ? "withKeywords" : "withoutKeywords";
216
+ let prepared = cached[cacheKey];
217
+ if (!prepared) {
218
+ prepared = metadata.map(tool => prepareToolSearch(
219
+ tool,
220
+ serverName,
221
+ includeKeywords && definition?.searchKeywords !== undefined
222
+ ? resolveSearchKeywords(definition, tool.originalName, serverName, globalPrefix)
223
+ : undefined,
224
+ ));
225
+ cached[cacheKey] = prepared;
226
+ }
227
+ return prepared;
228
+ }
229
+
159
230
  export function rankToolMatches(
160
231
  state: McpExtensionState,
161
232
  query: string,
@@ -163,18 +234,17 @@ export function rankToolMatches(
163
234
  includeKeywords = true,
164
235
  ): RankedToolMatch[] {
165
236
  const matches: RankedToolMatch[] = [];
237
+ const normalizedQuery = normalizeSearchText(query).trim();
238
+ const queryTokens = tokenize(query);
239
+ if (queryTokens.length === 0) return matches;
166
240
  const globalPrefix = state.config.settings?.toolPrefix ?? "server";
167
241
  for (const [serverName, metadata] of state.toolMetadata.entries()) {
168
242
  if (server && serverName !== server) continue;
169
243
  const definition = state.config.mcpServers[serverName];
170
244
  if (isServerDisabled(definition)) continue;
171
- const hasKeywords = includeKeywords && definition?.searchKeywords !== undefined;
172
- for (const tool of metadata) {
173
- const keywords = hasKeywords
174
- ? resolveSearchKeywords(definition, tool.originalName, serverName, globalPrefix)
175
- : undefined;
176
- const score = scoreToolMatch(tool, serverName, query, keywords);
177
- if (score !== null) matches.push({ server: serverName, tool, score });
245
+ for (const prepared of getPreparedTools(state, serverName, metadata, definition, globalPrefix, includeKeywords)) {
246
+ const score = scorePreparedToolMatch(prepared, normalizedQuery, queryTokens);
247
+ if (score !== null) matches.push({ server: serverName, tool: prepared.tool, score });
178
248
  }
179
249
  }
180
250
  return matches.sort((a, b) => b.score - a.score || a.tool.name.localeCompare(b.tool.name));
@@ -1,12 +1,16 @@
1
1
  import { mkdirSync } from "node:fs";
2
+ import { isDeepStrictEqual } from "node:util";
2
3
  import {
3
4
  Client,
5
+ SdkError,
6
+ SdkErrorCode,
4
7
  SdkHttpError,
5
8
  SSEClientTransport,
6
9
  StreamableHTTPClientTransport,
7
10
  UnauthorizedError,
8
11
  type GetPromptResult,
9
12
  type ReadResourceResult,
13
+ type CacheableRequestOptions,
10
14
  type RequestOptions,
11
15
  type UrlElicitationRequiredError,
12
16
  type VersionNegotiationOptions,
@@ -32,6 +36,7 @@ import { logger } from "./logger.ts";
32
36
  import { McpOAuthProvider } from "./mcp-oauth-provider.ts";
33
37
  import { extractOAuthConfig, supportsOAuth, type McpOAuthRuntime } from "./mcp-auth-flow.ts";
34
38
  import { invalidateAuthEntryCache, type AuthStorageOptions } from "./mcp-auth.ts";
39
+ import { getBearerTokenForUrl } from "./mcp-bearer-store.ts";
35
40
  import { registerSamplingHandler, type ServerSamplingConfig } from "./sampling-handler.ts";
36
41
  import {
37
42
  handleUrlElicitation,
@@ -123,6 +128,8 @@ export interface ServerConnection {
123
128
  transport: Transport;
124
129
  definition: ServerDefinition;
125
130
  tools: McpTool[];
131
+ /** Monotonic guard against older refresh responses replacing newer notifications. */
132
+ toolsRevision?: number;
126
133
  resources: McpResource[];
127
134
  prompts: McpPrompt[];
128
135
  /** True when prompts were advertised but prompts/list failed. */
@@ -139,6 +146,10 @@ export interface ServerConnection {
139
146
  type UiStreamListener = (serverName: string, notification: ServerStreamResultPatchNotification["params"]) => void;
140
147
  type MetadataListChangedListener = (serverName: string, reason: string) => void;
141
148
 
149
+ export type ToolRefreshResult = "updated" | "unchanged" | "superseded" | "refresh-timeout";
150
+
151
+ const KEEP_ALIVE_REFRESH_TIMEOUT_MS = 5_000;
152
+
142
153
  export class McpServerManager {
143
154
  private connections = new Map<string, ServerConnection>();
144
155
  private connectPromises = new Map<string, Promise<ServerConnection>>();
@@ -146,6 +157,10 @@ export class McpServerManager {
146
157
  private uiStreamListeners = new Map<string, UiStreamListener>();
147
158
  private samplingConfig: ServerSamplingConfig | undefined;
148
159
  private metadataListChangedListener: MetadataListChangedListener | undefined;
160
+ private pendingMetadataPublications = new Map<
161
+ string,
162
+ { connection: ServerConnection; reason: string }
163
+ >();
149
164
  private elicitationConfig: ServerElicitationConfig | undefined;
150
165
  private authStorageOptions: AuthStorageOptions = {};
151
166
  private oauthRuntime: McpOAuthRuntime | undefined;
@@ -170,6 +185,25 @@ export class McpServerManager {
170
185
  this.metadataListChangedListener = listener;
171
186
  }
172
187
 
188
+ publishMetadataChanged(
189
+ name: string,
190
+ expectedConnection: ServerConnection,
191
+ reason: string,
192
+ ): boolean {
193
+ const current = this.connections.get(name);
194
+ if (current !== expectedConnection || current.status !== "connected") return false;
195
+ try {
196
+ this.metadataListChangedListener?.(name, reason);
197
+ this.pendingMetadataPublications.delete(name);
198
+ return true;
199
+ } catch (error) {
200
+ this.pendingMetadataPublications.set(name, { connection: expectedConnection, reason });
201
+ const message = error instanceof Error ? error.message : String(error);
202
+ logger.debug(`MCP: metadata publication failed for ${name}; queued for retry: ${message}`);
203
+ return false;
204
+ }
205
+ }
206
+
173
207
  setElicitationConfig(config: ServerElicitationConfig | undefined): void {
174
208
  this.elicitationConfig = config;
175
209
  }
@@ -303,6 +337,100 @@ export class McpServerManager {
303
337
  return abortable(promise, ownedSignal);
304
338
  }
305
339
 
340
+ /**
341
+ * Fetch the authoritative tool catalog for a connection that still appears
342
+ * connected. The SDK response cache is explicitly bypassed so this request
343
+ * also proves the remote Streamable HTTP session is usable. Results are
344
+ * identity-guarded: a late response from a replaced connection is ignored.
345
+ */
346
+ async refreshTools(
347
+ name: string,
348
+ expectedConnection: ServerConnection,
349
+ signal?: AbortSignal,
350
+ ): Promise<ToolRefreshResult> {
351
+ if (this.stopped) throw new Error("MCP server manager is closed");
352
+ const ownedSignal = combineAbortSignals(this.runtimeSignal, signal);
353
+ throwIfAborted(ownedSignal);
354
+
355
+ const current = this.connections.get(name);
356
+ if (current !== expectedConnection || current.status !== "connected") {
357
+ return "superseded";
358
+ }
359
+
360
+ const requestOptions = this.buildRequestOptions(expectedConnection.definition, signal);
361
+ const timeout = Math.min(requestOptions?.timeout ?? KEEP_ALIVE_REFRESH_TIMEOUT_MS, KEEP_ALIVE_REFRESH_TIMEOUT_MS);
362
+ const healthOptions = {
363
+ ...requestOptions,
364
+ timeout,
365
+ };
366
+ if (!expectedConnection.client.getServerCapabilities?.()?.tools) {
367
+ await expectedConnection.client.ping(healthOptions);
368
+ throwIfAborted(ownedSignal);
369
+ if (this.connections.get(name) !== expectedConnection || expectedConnection.status !== "connected") {
370
+ return "superseded";
371
+ }
372
+ this.retryPendingMetadataPublication(name, expectedConnection);
373
+ return "unchanged";
374
+ }
375
+
376
+ const toolsRevision = expectedConnection.toolsRevision ?? 0;
377
+ const refreshSignal = combineAbortSignals(healthOptions.signal, AbortSignal.timeout(timeout));
378
+ let tools: McpTool[];
379
+ try {
380
+ tools = await this.fetchAllTools(expectedConnection.client, {
381
+ ...healthOptions,
382
+ ...(refreshSignal ? { signal: refreshSignal } : {}),
383
+ cacheMode: "refresh",
384
+ });
385
+ } catch (error) {
386
+ throwIfAborted(ownedSignal);
387
+ if (this.connections.get(name) !== expectedConnection || expectedConnection.status !== "connected") {
388
+ return "superseded";
389
+ }
390
+ if (error instanceof SdkError && error.code === SdkErrorCode.RequestTimeout) {
391
+ return "refresh-timeout";
392
+ }
393
+ throw error;
394
+ }
395
+ throwIfAborted(ownedSignal);
396
+
397
+ if (this.connections.get(name) !== expectedConnection || expectedConnection.status !== "connected") {
398
+ return "superseded";
399
+ }
400
+ if ((expectedConnection.toolsRevision ?? 0) !== toolsRevision) {
401
+ return "superseded";
402
+ }
403
+
404
+ if (isDeepStrictEqual(expectedConnection.tools, tools)) {
405
+ this.retryPendingMetadataPublication(name, expectedConnection);
406
+ return "unchanged";
407
+ }
408
+
409
+ const previousTools = expectedConnection.tools;
410
+ expectedConnection.tools = tools;
411
+ expectedConnection.toolsRevision = toolsRevision + 1;
412
+ try {
413
+ await this.metadataListChangedListener?.(name, "keep-alive-refresh");
414
+ this.pendingMetadataPublications.delete(name);
415
+ } catch (error) {
416
+ if (this.connections.get(name) === expectedConnection && expectedConnection.tools === tools) {
417
+ expectedConnection.tools = previousTools;
418
+ expectedConnection.toolsRevision = toolsRevision;
419
+ }
420
+ throw error;
421
+ }
422
+ return "updated";
423
+ }
424
+
425
+ private retryPendingMetadataPublication(name: string, connection: ServerConnection): void {
426
+ const pendingPublication = this.pendingMetadataPublications.get(name);
427
+ if (pendingPublication?.connection !== connection) return;
428
+ this.metadataListChangedListener?.(name, pendingPublication.reason);
429
+ if (this.pendingMetadataPublications.get(name) === pendingPublication) {
430
+ this.pendingMetadataPublications.delete(name);
431
+ }
432
+ }
433
+
306
434
  private async doReconnect(
307
435
  name: string,
308
436
  definition: ServerDefinition,
@@ -440,6 +568,7 @@ export class McpServerManager {
440
568
  transport,
441
569
  definition,
442
570
  tools: [],
571
+ toolsRevision: 0,
443
572
  resources: [],
444
573
  prompts: [],
445
574
  ...(instructions !== undefined ? { instructions } : {}),
@@ -641,7 +770,9 @@ export class McpServerManager {
641
770
  const connection = this.connections.get(serverName);
642
771
  if (!connection || connection.client !== client || connection.status !== "connected") return;
643
772
  connection.tools = tools;
773
+ connection.toolsRevision = (connection.toolsRevision ?? 0) + 1;
644
774
  this.metadataListChangedListener?.(serverName, "tools-list-changed");
775
+ this.pendingMetadataPublications.delete(serverName);
645
776
  }
646
777
 
647
778
  private handlePromptsListChanged(
@@ -660,6 +791,7 @@ export class McpServerManager {
660
791
  connection.prompts = prompts;
661
792
  connection.promptDiscoveryFailed = false;
662
793
  this.metadataListChangedListener?.(serverName, "prompts-list-changed");
794
+ this.pendingMetadataPublications.delete(serverName);
663
795
  }
664
796
 
665
797
  private handleResourcesListChanged(
@@ -677,6 +809,7 @@ export class McpServerManager {
677
809
  if (!connection || connection.client !== client || connection.status !== "connected") return;
678
810
  connection.resources = resources;
679
811
  this.metadataListChangedListener?.(serverName, "resources-list-changed");
812
+ this.pendingMetadataPublications.delete(serverName);
680
813
  }
681
814
 
682
815
  async handleUrlElicitationRequired(
@@ -734,7 +867,10 @@ export class McpServerManager {
734
867
  if (definition.auth === "bearer") {
735
868
  const token = commandBearer
736
869
  ? resolveCommandSecret(commandBearer, `MCP server "${serverName}" HTTP bearer token`)
737
- : resolveBearerToken(definition);
870
+ : resolveBearerToken(definition)
871
+ ?? (definition.bearerToken === undefined && definition.bearerTokenEnv === undefined && definition.bearerTokenStore === true
872
+ ? getBearerTokenForUrl(serverName, serverUrl)
873
+ : undefined);
738
874
  if (token) headers["Authorization"] = `Bearer ${token}`;
739
875
  }
740
876
 
@@ -851,7 +987,7 @@ export class McpServerManager {
851
987
  }
852
988
  }
853
989
 
854
- private async fetchAllTools(client: Client, requestOptions?: RequestOptions): Promise<McpTool[]> {
990
+ private async fetchAllTools(client: Client, requestOptions?: CacheableRequestOptions): Promise<McpTool[]> {
855
991
  const allTools: McpTool[] = [];
856
992
  let cursor: string | undefined;
857
993
 
@@ -979,6 +1115,7 @@ export class McpServerManager {
979
1115
  async close(name: string): Promise<void> {
980
1116
  this.closeGenerations.set(name, (this.closeGenerations.get(name) ?? 0) + 1);
981
1117
  this.connectAttempts.get(name)?.abort(new Error(`MCP connection ${name} was closed`));
1118
+ this.pendingMetadataPublications.delete(name);
982
1119
 
983
1120
  const connection = this.connections.get(name);
984
1121
  if (!connection) {
@@ -1042,6 +1179,7 @@ export class McpServerManager {
1042
1179
  .filter(error => this.containsCleanupFailure(error));
1043
1180
  this.uiStreamListeners.clear();
1044
1181
  this.acceptedUrlElicitations.clear();
1182
+ this.pendingMetadataPublications.clear();
1045
1183
  this.samplingConfig = undefined;
1046
1184
  this.elicitationConfig = undefined;
1047
1185
  await this.traceWriter?.flush();
@@ -146,6 +146,13 @@ export async function withSessionRecovery<T>(
146
146
  throw err;
147
147
  }
148
148
 
149
+ try {
150
+ deps.manager.publishMetadataChanged(serverName, freshConnection, "session-reconnect");
151
+ } catch (publicationError) {
152
+ const message = publicationError instanceof Error ? publicationError.message : String(publicationError);
153
+ logger.debug(`MCP metadata publication after reconnect failed for "${serverName}": ${message}`);
154
+ }
155
+ throwIfAborted(deps.signal);
149
156
  return fn(freshConnection);
150
157
  }
151
158
  }
@@ -1,4 +1,4 @@
1
- import { randomUUID } from "node:crypto";
1
+ import { createHash, randomUUID } from "node:crypto";
2
2
  import { abortable } from "./abort.ts";
3
3
  import { combineAbortSignals } from "./runtime-owner.ts";
4
4
  import type { McpExtensionState } from "./state.ts";
@@ -20,6 +20,18 @@ export type ToolCallApprovalResult =
20
20
  | { ok: true }
21
21
  | { ok: false; reason: "denied" | "approval_required_headless" };
22
22
 
23
+ function stableStringify(value: unknown): string {
24
+ if (value === null || value === undefined || typeof value !== "object") {
25
+ const serialized = JSON.stringify(value);
26
+ return serialized === undefined ? "undefined" : serialized;
27
+ }
28
+ if (Array.isArray(value)) {
29
+ return `[${value.map(item => stableStringify(item)).join(",")}]`;
30
+ }
31
+ const object = value as Record<string, unknown>;
32
+ return `{${Object.keys(object).sort().map(key => `${JSON.stringify(key)}:${stableStringify(object[key])}`).join(",")}}`;
33
+ }
34
+
23
35
  export function isToolCallApprovalRequired(
24
36
  config: McpConfig,
25
37
  serverName: string,
@@ -136,7 +148,8 @@ export async function ensureToolCallApproved(
136
148
  origin: McpToolApprovalOrigin = toolMeta.resourceUri ? "resource" : "proxy",
137
149
  approvalMetadata?: ReadonlyMap<string, readonly ToolMetadata[]>,
138
150
  ): Promise<ToolCallApprovalResult> {
139
- const cacheKey = `${serverName}\u0000${toolMeta.originalName}`;
151
+ const argsHash = createHash("sha256").update(stableStringify(args ?? {})).digest("hex");
152
+ const cacheKey = `${serverName}\u0000${toolMeta.originalName}\u0000${argsHash}`;
140
153
  const approvedToolCalls = state.approvedToolCalls ??= new Map<string, true>();
141
154
  if (approvedToolCalls.has(cacheKey)) {
142
155
  return { ok: true };