@humain/terminal 0.0.2 → 0.0.3-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (688) hide show
  1. package/CHANGELOG.md +251 -24
  2. package/README.md +143 -119
  3. package/dist/cli/args.d.ts +4 -2
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +37 -39
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/auth-check.d.ts +19 -0
  8. package/dist/cli/auth-check.d.ts.map +1 -0
  9. package/dist/cli/auth-check.js +50 -0
  10. package/dist/cli/auth-check.js.map +1 -0
  11. package/dist/cli/auth-command.d.ts +24 -0
  12. package/dist/cli/auth-command.d.ts.map +1 -0
  13. package/dist/cli/auth-command.js +103 -0
  14. package/dist/cli/auth-command.js.map +1 -0
  15. package/dist/cli/config-selector.d.ts.map +1 -1
  16. package/dist/cli/config-selector.js +2 -2
  17. package/dist/cli/config-selector.js.map +1 -1
  18. package/dist/cli/credential-print.d.ts +5 -15
  19. package/dist/cli/credential-print.d.ts.map +1 -1
  20. package/dist/cli/credential-print.js +42 -83
  21. package/dist/cli/credential-print.js.map +1 -1
  22. package/dist/cli/experimental/auth.d.ts +16 -0
  23. package/dist/cli/experimental/auth.d.ts.map +1 -0
  24. package/dist/cli/experimental/auth.js +13 -0
  25. package/dist/cli/experimental/auth.js.map +1 -0
  26. package/dist/cli/experimental/cli.d.ts +6 -0
  27. package/dist/cli/experimental/cli.d.ts.map +1 -0
  28. package/dist/cli/experimental/cli.js +5 -0
  29. package/dist/cli/experimental/cli.js.map +1 -0
  30. package/dist/cli/experimental/command-options.d.ts +17 -0
  31. package/dist/cli/experimental/command-options.d.ts.map +1 -0
  32. package/dist/cli/experimental/command-options.js +35 -0
  33. package/dist/cli/experimental/command-options.js.map +1 -0
  34. package/dist/cli/experimental/command.d.ts +63 -0
  35. package/dist/cli/experimental/command.d.ts.map +1 -0
  36. package/dist/cli/experimental/command.js +130 -0
  37. package/dist/cli/experimental/command.js.map +1 -0
  38. package/dist/cli/experimental/commands/client.d.ts +13 -0
  39. package/dist/cli/experimental/commands/client.d.ts.map +1 -0
  40. package/dist/cli/experimental/commands/client.js +25 -0
  41. package/dist/cli/experimental/commands/client.js.map +1 -0
  42. package/dist/cli/experimental/commands/pi.d.ts +15 -0
  43. package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
  44. package/dist/cli/experimental/commands/pi.js +28 -0
  45. package/dist/cli/experimental/commands/pi.js.map +1 -0
  46. package/dist/cli/experimental/commands/server.d.ts +13 -0
  47. package/dist/cli/experimental/commands/server.d.ts.map +1 -0
  48. package/dist/cli/experimental/commands/server.js +25 -0
  49. package/dist/cli/experimental/commands/server.js.map +1 -0
  50. package/dist/cli/experimental/transport-address.d.ts +10 -0
  51. package/dist/cli/experimental/transport-address.d.ts.map +1 -0
  52. package/dist/cli/experimental/transport-address.js +38 -0
  53. package/dist/cli/experimental/transport-address.js.map +1 -0
  54. package/dist/cli/list-models.d.ts +1 -1
  55. package/dist/cli/list-models.d.ts.map +1 -1
  56. package/dist/cli/list-models.js +2 -2
  57. package/dist/cli/list-models.js.map +1 -1
  58. package/dist/cli/startup-ui.d.ts +1 -1
  59. package/dist/cli/startup-ui.d.ts.map +1 -1
  60. package/dist/cli/startup-ui.js +2 -2
  61. package/dist/cli/startup-ui.js.map +1 -1
  62. package/dist/client/index.d.ts +3 -0
  63. package/dist/client/index.d.ts.map +1 -0
  64. package/dist/client/index.js +3 -0
  65. package/dist/client/index.js.map +1 -0
  66. package/dist/client/remote-session.d.ts +53 -0
  67. package/dist/client/remote-session.d.ts.map +1 -0
  68. package/dist/client/remote-session.js +340 -0
  69. package/dist/client/remote-session.js.map +1 -0
  70. package/dist/client/transcript.d.ts +12 -0
  71. package/dist/client/transcript.d.ts.map +1 -0
  72. package/dist/client/transcript.js +98 -0
  73. package/dist/client/transcript.js.map +1 -0
  74. package/dist/config.d.ts.map +1 -1
  75. package/dist/config.js +4 -3
  76. package/dist/config.js.map +1 -1
  77. package/dist/core/agent-session-services.d.ts +1 -0
  78. package/dist/core/agent-session-services.d.ts.map +1 -1
  79. package/dist/core/agent-session-services.js +1 -0
  80. package/dist/core/agent-session-services.js.map +1 -1
  81. package/dist/core/agent-session.d.ts +1 -10
  82. package/dist/core/agent-session.d.ts.map +1 -1
  83. package/dist/core/agent-session.js +72 -70
  84. package/dist/core/agent-session.js.map +1 -1
  85. package/dist/core/auth-storage.d.ts +25 -9
  86. package/dist/core/auth-storage.d.ts.map +1 -1
  87. package/dist/core/auth-storage.js +237 -39
  88. package/dist/core/auth-storage.js.map +1 -1
  89. package/dist/core/extensions/index.d.ts +1 -1
  90. package/dist/core/extensions/index.d.ts.map +1 -1
  91. package/dist/core/extensions/index.js.map +1 -1
  92. package/dist/core/extensions/loader.d.ts.map +1 -1
  93. package/dist/core/extensions/loader.js +60 -41
  94. package/dist/core/extensions/loader.js.map +1 -1
  95. package/dist/core/extensions/runner.d.ts +2 -1
  96. package/dist/core/extensions/runner.d.ts.map +1 -1
  97. package/dist/core/extensions/runner.js +3 -0
  98. package/dist/core/extensions/runner.js.map +1 -1
  99. package/dist/core/extensions/types.d.ts +27 -4
  100. package/dist/core/extensions/types.d.ts.map +1 -1
  101. package/dist/core/extensions/types.js.map +1 -1
  102. package/dist/core/http-dispatcher.d.ts.map +1 -1
  103. package/dist/core/http-dispatcher.js +5 -0
  104. package/dist/core/http-dispatcher.js.map +1 -1
  105. package/dist/core/keybindings.d.ts +45 -5
  106. package/dist/core/keybindings.d.ts.map +1 -1
  107. package/dist/core/keybindings.js.map +1 -1
  108. package/dist/core/model-config.d.ts +29 -5
  109. package/dist/core/model-config.d.ts.map +1 -1
  110. package/dist/core/model-config.js +4 -0
  111. package/dist/core/model-config.js.map +1 -1
  112. package/dist/core/model-registry.d.ts +5 -3
  113. package/dist/core/model-registry.d.ts.map +1 -1
  114. package/dist/core/model-registry.js +13 -10
  115. package/dist/core/model-registry.js.map +1 -1
  116. package/dist/core/model-resolver.d.ts +4 -3
  117. package/dist/core/model-resolver.d.ts.map +1 -1
  118. package/dist/core/model-resolver.js +42 -10
  119. package/dist/core/model-resolver.js.map +1 -1
  120. package/dist/core/model-runtime.d.ts +30 -13
  121. package/dist/core/model-runtime.d.ts.map +1 -1
  122. package/dist/core/model-runtime.js +233 -73
  123. package/dist/core/model-runtime.js.map +1 -1
  124. package/dist/core/models-store.d.ts +12 -7
  125. package/dist/core/models-store.d.ts.map +1 -1
  126. package/dist/core/models-store.js +83 -14
  127. package/dist/core/models-store.js.map +1 -1
  128. package/dist/core/package-manager.d.ts +6 -3
  129. package/dist/core/package-manager.d.ts.map +1 -1
  130. package/dist/core/package-manager.js +80 -61
  131. package/dist/core/package-manager.js.map +1 -1
  132. package/dist/core/pi-manifest.d.ts +8 -0
  133. package/dist/core/pi-manifest.d.ts.map +1 -0
  134. package/dist/core/pi-manifest.js +28 -0
  135. package/dist/core/pi-manifest.js.map +1 -0
  136. package/dist/core/provider-composer.d.ts +4 -1
  137. package/dist/core/provider-composer.d.ts.map +1 -1
  138. package/dist/core/provider-composer.js +36 -15
  139. package/dist/core/provider-composer.js.map +1 -1
  140. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  141. package/dist/core/remote-catalog-provider.js +73 -67
  142. package/dist/core/remote-catalog-provider.js.map +1 -1
  143. package/dist/core/resource-loader.d.ts.map +1 -1
  144. package/dist/core/resource-loader.js +2 -2
  145. package/dist/core/resource-loader.js.map +1 -1
  146. package/dist/core/runtime-credentials.d.ts +5 -5
  147. package/dist/core/runtime-credentials.d.ts.map +1 -1
  148. package/dist/core/runtime-credentials.js +11 -8
  149. package/dist/core/runtime-credentials.js.map +1 -1
  150. package/dist/core/sdk.d.ts +1 -1
  151. package/dist/core/sdk.d.ts.map +1 -1
  152. package/dist/core/sdk.js +2 -2
  153. package/dist/core/sdk.js.map +1 -1
  154. package/dist/core/session-manager.d.ts.map +1 -1
  155. package/dist/core/session-manager.js +3 -1
  156. package/dist/core/session-manager.js.map +1 -1
  157. package/dist/core/settings-manager.d.ts +12 -0
  158. package/dist/core/settings-manager.d.ts.map +1 -1
  159. package/dist/core/settings-manager.js +40 -16
  160. package/dist/core/settings-manager.js.map +1 -1
  161. package/dist/core/system-prompt.d.ts.map +1 -1
  162. package/dist/core/system-prompt.js +8 -0
  163. package/dist/core/system-prompt.js.map +1 -1
  164. package/dist/core/tools/bash.d.ts +5 -1
  165. package/dist/core/tools/bash.d.ts.map +1 -1
  166. package/dist/core/tools/bash.js +16 -15
  167. package/dist/core/tools/bash.js.map +1 -1
  168. package/dist/core/tools/edit.d.ts +4 -0
  169. package/dist/core/tools/edit.d.ts.map +1 -1
  170. package/dist/core/tools/edit.js +11 -7
  171. package/dist/core/tools/edit.js.map +1 -1
  172. package/dist/core/tools/find.d.ts +7 -0
  173. package/dist/core/tools/find.d.ts.map +1 -1
  174. package/dist/core/tools/find.js +16 -19
  175. package/dist/core/tools/find.js.map +1 -1
  176. package/dist/core/tools/grep.d.ts +4 -0
  177. package/dist/core/tools/grep.d.ts.map +1 -1
  178. package/dist/core/tools/grep.js +5 -1
  179. package/dist/core/tools/grep.js.map +1 -1
  180. package/dist/core/tools/ls.d.ts +4 -0
  181. package/dist/core/tools/ls.d.ts.map +1 -1
  182. package/dist/core/tools/ls.js +5 -1
  183. package/dist/core/tools/ls.js.map +1 -1
  184. package/dist/core/tools/read.d.ts +4 -0
  185. package/dist/core/tools/read.d.ts.map +1 -1
  186. package/dist/core/tools/read.js +7 -3
  187. package/dist/core/tools/read.js.map +1 -1
  188. package/dist/core/tools/write.d.ts +4 -0
  189. package/dist/core/tools/write.d.ts.map +1 -1
  190. package/dist/core/tools/write.js +6 -2
  191. package/dist/core/tools/write.js.map +1 -1
  192. package/dist/extensions/llama/index.d.ts.map +1 -1
  193. package/dist/extensions/llama/index.js +11 -2
  194. package/dist/extensions/llama/index.js.map +1 -1
  195. package/dist/extensions/llama/provider.d.ts.map +1 -1
  196. package/dist/extensions/llama/provider.js +21 -7
  197. package/dist/extensions/llama/provider.js.map +1 -1
  198. package/dist/humain/agent-execution-protocol.d.ts +218 -0
  199. package/dist/humain/agent-execution-protocol.d.ts.map +1 -0
  200. package/dist/humain/agent-execution-protocol.js +204 -0
  201. package/dist/humain/agent-execution-protocol.js.map +1 -0
  202. package/dist/humain/agent-execution-runtime.d.ts +35 -0
  203. package/dist/humain/agent-execution-runtime.d.ts.map +1 -0
  204. package/dist/humain/agent-execution-runtime.js +170 -0
  205. package/dist/humain/agent-execution-runtime.js.map +1 -0
  206. package/dist/humain/index.d.ts.map +1 -1
  207. package/dist/humain/index.js +8 -7
  208. package/dist/humain/index.js.map +1 -1
  209. package/dist/humain/mcp-adapter/vendor/CHANGELOG.md +673 -0
  210. package/dist/humain/mcp-adapter/vendor/LICENSE +21 -0
  211. package/dist/humain/mcp-adapter/vendor/README.md +736 -0
  212. package/dist/humain/mcp-adapter/vendor/abort.ts +34 -0
  213. package/dist/humain/mcp-adapter/vendor/agent-dir.ts +68 -0
  214. package/dist/humain/mcp-adapter/vendor/agent-plugin-loader.ts +377 -0
  215. package/dist/humain/mcp-adapter/vendor/app-bridge.bundle.js +67 -0
  216. package/dist/humain/mcp-adapter/vendor/banner.png +0 -0
  217. package/dist/humain/mcp-adapter/vendor/cli.js +230 -0
  218. package/dist/humain/mcp-adapter/vendor/commands.ts +627 -0
  219. package/dist/humain/mcp-adapter/vendor/config.ts +1226 -0
  220. package/dist/humain/mcp-adapter/vendor/consent-manager.ts +64 -0
  221. package/dist/humain/mcp-adapter/vendor/direct-tools.ts +607 -0
  222. package/dist/humain/mcp-adapter/vendor/elicitation-handler.ts +348 -0
  223. package/dist/humain/mcp-adapter/vendor/error-signal.ts +21 -0
  224. package/dist/humain/mcp-adapter/vendor/errors.ts +223 -0
  225. package/dist/humain/mcp-adapter/vendor/glimpse-ui.ts +80 -0
  226. package/dist/humain/mcp-adapter/vendor/host-html-template.ts +461 -0
  227. package/dist/humain/mcp-adapter/vendor/index.bundle.d.mts +4 -0
  228. package/dist/humain/mcp-adapter/vendor/index.bundle.mjs +16279 -0
  229. package/dist/humain/mcp-adapter/vendor/index.ts +898 -0
  230. package/dist/humain/mcp-adapter/vendor/init.ts +649 -0
  231. package/dist/humain/mcp-adapter/vendor/json-schema-validator.ts +69 -0
  232. package/dist/humain/mcp-adapter/vendor/lifecycle.ts +147 -0
  233. package/dist/humain/mcp-adapter/vendor/logger.ts +169 -0
  234. package/dist/humain/mcp-adapter/vendor/mcp-auth-flow.ts +993 -0
  235. package/dist/humain/mcp-adapter/vendor/mcp-auth.ts +1000 -0
  236. package/dist/humain/mcp-adapter/vendor/mcp-callback-server.ts +510 -0
  237. package/dist/humain/mcp-adapter/vendor/mcp-code.ts +354 -0
  238. package/dist/humain/mcp-adapter/vendor/mcp-keyring-helper.cjs +89 -0
  239. package/dist/humain/mcp-adapter/vendor/mcp-oauth-provider.ts +616 -0
  240. package/dist/humain/mcp-adapter/vendor/mcp-output-guard.ts +408 -0
  241. package/dist/humain/mcp-adapter/vendor/mcp-panel.ts +1015 -0
  242. package/dist/humain/mcp-adapter/vendor/mcp-probe.ts +187 -0
  243. package/dist/humain/mcp-adapter/vendor/mcp-script-worker.mjs +130 -0
  244. package/dist/humain/mcp-adapter/vendor/mcp-setup-panel.ts +667 -0
  245. package/dist/humain/mcp-adapter/vendor/mcp-status.ts +109 -0
  246. package/dist/humain/mcp-adapter/vendor/mcp-trace.ts +306 -0
  247. package/dist/humain/mcp-adapter/vendor/metadata-cache.ts +363 -0
  248. package/dist/humain/mcp-adapter/vendor/npx-resolver.ts +543 -0
  249. package/dist/humain/mcp-adapter/vendor/oauth-handler.ts +30 -0
  250. package/dist/humain/mcp-adapter/vendor/oauth.ts +48 -0
  251. package/dist/humain/mcp-adapter/vendor/onboarding-state.ts +76 -0
  252. package/dist/humain/mcp-adapter/vendor/package.json +179 -0
  253. package/dist/humain/mcp-adapter/vendor/panel-keys.ts +53 -0
  254. package/dist/humain/mcp-adapter/vendor/prompts.ts +353 -0
  255. package/dist/humain/mcp-adapter/vendor/proxy-modes.ts +1331 -0
  256. package/dist/humain/mcp-adapter/vendor/request-headers-command.ts +336 -0
  257. package/dist/humain/mcp-adapter/vendor/resource-tools.ts +17 -0
  258. package/dist/humain/mcp-adapter/vendor/runtime-owner.ts +91 -0
  259. package/dist/humain/mcp-adapter/vendor/sampling-handler.ts +284 -0
  260. package/dist/humain/mcp-adapter/vendor/search-ranking.ts +206 -0
  261. package/dist/humain/mcp-adapter/vendor/server-manager.ts +1129 -0
  262. package/dist/humain/mcp-adapter/vendor/session-recovery.ts +151 -0
  263. package/dist/humain/mcp-adapter/vendor/skills/mcp-scripting/SKILL.md +38 -0
  264. package/dist/humain/mcp-adapter/vendor/state.ts +62 -0
  265. package/dist/humain/mcp-adapter/vendor/tool-approval.ts +182 -0
  266. package/dist/humain/mcp-adapter/vendor/tool-metadata.ts +296 -0
  267. package/dist/humain/mcp-adapter/vendor/tool-registrar.ts +253 -0
  268. package/dist/humain/mcp-adapter/vendor/tool-result-renderer.ts +423 -0
  269. package/dist/humain/mcp-adapter/vendor/ts-shape.ts +149 -0
  270. package/dist/humain/mcp-adapter/vendor/types.ts +942 -0
  271. package/dist/humain/mcp-adapter/vendor/ui-app-bridge-helpers.ts +40 -0
  272. package/dist/humain/mcp-adapter/vendor/ui-resource-handler.ts +250 -0
  273. package/dist/humain/mcp-adapter/vendor/ui-server.ts +866 -0
  274. package/dist/humain/mcp-adapter/vendor/ui-session.ts +570 -0
  275. package/dist/humain/mcp-adapter/vendor/ui-stream-types.ts +89 -0
  276. package/dist/humain/mcp-adapter/vendor/ui-tool-visibility.ts +25 -0
  277. package/dist/humain/mcp-adapter/vendor/unix-socket-transport.ts +85 -0
  278. package/dist/humain/mcp-adapter/vendor/utils.ts +310 -0
  279. package/dist/humain/mcp-adapter.d.ts +3 -0
  280. package/dist/humain/mcp-adapter.d.ts.map +1 -0
  281. package/dist/humain/mcp-adapter.js +5 -0
  282. package/dist/humain/mcp-adapter.js.map +1 -0
  283. package/dist/humain/pi-agent-execution-host.d.ts +34 -0
  284. package/dist/humain/pi-agent-execution-host.d.ts.map +1 -0
  285. package/dist/humain/pi-agent-execution-host.js +77 -0
  286. package/dist/humain/pi-agent-execution-host.js.map +1 -0
  287. package/dist/humain/web-access/host.d.ts +4 -0
  288. package/dist/humain/web-access/host.d.ts.map +1 -0
  289. package/dist/humain/web-access/host.js +3 -0
  290. package/dist/humain/web-access/host.js.map +1 -0
  291. package/dist/humain/web-access/index.d.ts +3 -0
  292. package/dist/humain/web-access/index.d.ts.map +1 -0
  293. package/dist/humain/web-access/index.js +5 -0
  294. package/dist/humain/web-access/index.js.map +1 -0
  295. package/dist/humain/web-access/vendor/activity.d.ts +34 -0
  296. package/dist/humain/web-access/vendor/activity.d.ts.map +1 -0
  297. package/dist/humain/web-access/vendor/activity.js +68 -0
  298. package/dist/humain/web-access/vendor/activity.js.map +1 -0
  299. package/dist/humain/web-access/vendor/anysearch.d.ts +8 -0
  300. package/dist/humain/web-access/vendor/anysearch.d.ts.map +1 -0
  301. package/dist/humain/web-access/vendor/anysearch.js +167 -0
  302. package/dist/humain/web-access/vendor/anysearch.js.map +1 -0
  303. package/dist/humain/web-access/vendor/auth-fetch.d.ts +13 -0
  304. package/dist/humain/web-access/vendor/auth-fetch.d.ts.map +1 -0
  305. package/dist/humain/web-access/vendor/auth-fetch.js +134 -0
  306. package/dist/humain/web-access/vendor/auth-fetch.js.map +1 -0
  307. package/dist/humain/web-access/vendor/bocha.d.ts +4 -0
  308. package/dist/humain/web-access/vendor/bocha.d.ts.map +1 -0
  309. package/dist/humain/web-access/vendor/bocha.js +219 -0
  310. package/dist/humain/web-access/vendor/bocha.js.map +1 -0
  311. package/dist/humain/web-access/vendor/brave.d.ts +4 -0
  312. package/dist/humain/web-access/vendor/brave.d.ts.map +1 -0
  313. package/dist/humain/web-access/vendor/brave.js +194 -0
  314. package/dist/humain/web-access/vendor/brave.js.map +1 -0
  315. package/dist/humain/web-access/vendor/brightdata-unlocker.d.ts +12 -0
  316. package/dist/humain/web-access/vendor/brightdata-unlocker.d.ts.map +1 -0
  317. package/dist/humain/web-access/vendor/brightdata-unlocker.js +230 -0
  318. package/dist/humain/web-access/vendor/brightdata-unlocker.js.map +1 -0
  319. package/dist/humain/web-access/vendor/brightdata.d.ts +8 -0
  320. package/dist/humain/web-access/vendor/brightdata.d.ts.map +1 -0
  321. package/dist/humain/web-access/vendor/brightdata.js +519 -0
  322. package/dist/humain/web-access/vendor/brightdata.js.map +1 -0
  323. package/dist/humain/web-access/vendor/chrome-cookies.d.ts +23 -0
  324. package/dist/humain/web-access/vendor/chrome-cookies.d.ts.map +1 -0
  325. package/dist/humain/web-access/vendor/chrome-cookies.js +522 -0
  326. package/dist/humain/web-access/vendor/chrome-cookies.js.map +1 -0
  327. package/dist/humain/web-access/vendor/content-find.d.ts +11 -0
  328. package/dist/humain/web-access/vendor/content-find.d.ts.map +1 -0
  329. package/dist/humain/web-access/vendor/content-find.js +117 -0
  330. package/dist/humain/web-access/vendor/content-find.js.map +1 -0
  331. package/dist/humain/web-access/vendor/credential-source.d.ts +28 -0
  332. package/dist/humain/web-access/vendor/credential-source.d.ts.map +1 -0
  333. package/dist/humain/web-access/vendor/credential-source.js +151 -0
  334. package/dist/humain/web-access/vendor/credential-source.js.map +1 -0
  335. package/dist/humain/web-access/vendor/curator-page.d.ts +30 -0
  336. package/dist/humain/web-access/vendor/curator-page.d.ts.map +1 -0
  337. package/dist/humain/web-access/vendor/curator-page.js +3556 -0
  338. package/dist/humain/web-access/vendor/curator-page.js.map +1 -0
  339. package/dist/humain/web-access/vendor/curator-server.d.ts +94 -0
  340. package/dist/humain/web-access/vendor/curator-server.d.ts.map +1 -0
  341. package/dist/humain/web-access/vendor/curator-server.js +690 -0
  342. package/dist/humain/web-access/vendor/curator-server.js.map +1 -0
  343. package/dist/humain/web-access/vendor/datalab-pdf-extract.d.ts +60 -0
  344. package/dist/humain/web-access/vendor/datalab-pdf-extract.d.ts.map +1 -0
  345. package/dist/humain/web-access/vendor/datalab-pdf-extract.js +416 -0
  346. package/dist/humain/web-access/vendor/datalab-pdf-extract.js.map +1 -0
  347. package/dist/humain/web-access/vendor/declared-web-links.d.ts +16 -0
  348. package/dist/humain/web-access/vendor/declared-web-links.d.ts.map +1 -0
  349. package/dist/humain/web-access/vendor/declared-web-links.js +168 -0
  350. package/dist/humain/web-access/vendor/declared-web-links.js.map +1 -0
  351. package/dist/humain/web-access/vendor/duckduckgo.d.ts +4 -0
  352. package/dist/humain/web-access/vendor/duckduckgo.d.ts.map +1 -0
  353. package/dist/humain/web-access/vendor/duckduckgo.js +123 -0
  354. package/dist/humain/web-access/vendor/duckduckgo.js.map +1 -0
  355. package/dist/humain/web-access/vendor/exa.d.ts +10 -0
  356. package/dist/humain/web-access/vendor/exa.d.ts.map +1 -0
  357. package/dist/humain/web-access/vendor/exa.js +426 -0
  358. package/dist/humain/web-access/vendor/exa.js.map +1 -0
  359. package/dist/humain/web-access/vendor/extract.d.ts +48 -0
  360. package/dist/humain/web-access/vendor/extract.d.ts.map +1 -0
  361. package/dist/humain/web-access/vendor/extract.js +1126 -0
  362. package/dist/humain/web-access/vendor/extract.js.map +1 -0
  363. package/dist/humain/web-access/vendor/feature-config.d.ts +3 -0
  364. package/dist/humain/web-access/vendor/feature-config.d.ts.map +1 -0
  365. package/dist/humain/web-access/vendor/feature-config.js +27 -0
  366. package/dist/humain/web-access/vendor/feature-config.js.map +1 -0
  367. package/dist/humain/web-access/vendor/fetch-params.d.ts +27 -0
  368. package/dist/humain/web-access/vendor/fetch-params.d.ts.map +1 -0
  369. package/dist/humain/web-access/vendor/fetch-params.js +71 -0
  370. package/dist/humain/web-access/vendor/fetch-params.js.map +1 -0
  371. package/dist/humain/web-access/vendor/firecrawl.d.ts +19 -0
  372. package/dist/humain/web-access/vendor/firecrawl.d.ts.map +1 -0
  373. package/dist/humain/web-access/vendor/firecrawl.js +370 -0
  374. package/dist/humain/web-access/vendor/firecrawl.js.map +1 -0
  375. package/dist/humain/web-access/vendor/gemini-api.d.ts +27 -0
  376. package/dist/humain/web-access/vendor/gemini-api.d.ts.map +1 -0
  377. package/dist/humain/web-access/vendor/gemini-api.js +230 -0
  378. package/dist/humain/web-access/vendor/gemini-api.js.map +1 -0
  379. package/dist/humain/web-access/vendor/gemini-pdf-extract.d.ts +9 -0
  380. package/dist/humain/web-access/vendor/gemini-pdf-extract.d.ts.map +1 -0
  381. package/dist/humain/web-access/vendor/gemini-pdf-extract.js +85 -0
  382. package/dist/humain/web-access/vendor/gemini-pdf-extract.js.map +1 -0
  383. package/dist/humain/web-access/vendor/gemini-search.d.ts +40 -0
  384. package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -0
  385. package/dist/humain/web-access/vendor/gemini-search.js +832 -0
  386. package/dist/humain/web-access/vendor/gemini-search.js.map +1 -0
  387. package/dist/humain/web-access/vendor/gemini-url-context.d.ts +4 -0
  388. package/dist/humain/web-access/vendor/gemini-url-context.d.ts.map +1 -0
  389. package/dist/humain/web-access/vendor/gemini-url-context.js +101 -0
  390. package/dist/humain/web-access/vendor/gemini-url-context.js.map +1 -0
  391. package/dist/humain/web-access/vendor/gemini-web-config.d.ts +4 -0
  392. package/dist/humain/web-access/vendor/gemini-web-config.d.ts.map +1 -0
  393. package/dist/humain/web-access/vendor/gemini-web-config.js +42 -0
  394. package/dist/humain/web-access/vendor/gemini-web-config.js.map +1 -0
  395. package/dist/humain/web-access/vendor/gemini-web.d.ts +18 -0
  396. package/dist/humain/web-access/vendor/gemini-web.d.ts.map +1 -0
  397. package/dist/humain/web-access/vendor/gemini-web.js +385 -0
  398. package/dist/humain/web-access/vendor/gemini-web.js.map +1 -0
  399. package/dist/humain/web-access/vendor/github-api.d.ts +7 -0
  400. package/dist/humain/web-access/vendor/github-api.d.ts.map +1 -0
  401. package/dist/humain/web-access/vendor/github-api.js +160 -0
  402. package/dist/humain/web-access/vendor/github-api.js.map +1 -0
  403. package/dist/humain/web-access/vendor/github-extract.d.ts +13 -0
  404. package/dist/humain/web-access/vendor/github-extract.d.ts.map +1 -0
  405. package/dist/humain/web-access/vendor/github-extract.js +635 -0
  406. package/dist/humain/web-access/vendor/github-extract.js.map +1 -0
  407. package/dist/humain/web-access/vendor/index.d.ts +4 -0
  408. package/dist/humain/web-access/vendor/index.d.ts.map +1 -0
  409. package/dist/humain/web-access/vendor/index.js +3076 -0
  410. package/dist/humain/web-access/vendor/index.js.map +1 -0
  411. package/dist/humain/web-access/vendor/jina-search.d.ts +8 -0
  412. package/dist/humain/web-access/vendor/jina-search.d.ts.map +1 -0
  413. package/dist/humain/web-access/vendor/jina-search.js +255 -0
  414. package/dist/humain/web-access/vendor/jina-search.js.map +1 -0
  415. package/dist/humain/web-access/vendor/kagi.d.ts +15 -0
  416. package/dist/humain/web-access/vendor/kagi.d.ts.map +1 -0
  417. package/dist/humain/web-access/vendor/kagi.js +262 -0
  418. package/dist/humain/web-access/vendor/kagi.js.map +1 -0
  419. package/dist/humain/web-access/vendor/ollama.d.ts +15 -0
  420. package/dist/humain/web-access/vendor/ollama.d.ts.map +1 -0
  421. package/dist/humain/web-access/vendor/ollama.js +216 -0
  422. package/dist/humain/web-access/vendor/ollama.js.map +1 -0
  423. package/dist/humain/web-access/vendor/openai-search.d.ts +15 -0
  424. package/dist/humain/web-access/vendor/openai-search.d.ts.map +1 -0
  425. package/dist/humain/web-access/vendor/openai-search.js +459 -0
  426. package/dist/humain/web-access/vendor/openai-search.js.map +1 -0
  427. package/dist/humain/web-access/vendor/page-query.d.ts +16 -0
  428. package/dist/humain/web-access/vendor/page-query.d.ts.map +1 -0
  429. package/dist/humain/web-access/vendor/page-query.js +79 -0
  430. package/dist/humain/web-access/vendor/page-query.js.map +1 -0
  431. package/dist/humain/web-access/vendor/parallel.d.ts +12 -0
  432. package/dist/humain/web-access/vendor/parallel.d.ts.map +1 -0
  433. package/dist/humain/web-access/vendor/parallel.js +343 -0
  434. package/dist/humain/web-access/vendor/parallel.js.map +1 -0
  435. package/dist/humain/web-access/vendor/pdf-extract.d.ts +44 -0
  436. package/dist/humain/web-access/vendor/pdf-extract.d.ts.map +1 -0
  437. package/dist/humain/web-access/vendor/pdf-extract.js +298 -0
  438. package/dist/humain/web-access/vendor/pdf-extract.js.map +1 -0
  439. package/dist/humain/web-access/vendor/perplexity.d.ts +20 -0
  440. package/dist/humain/web-access/vendor/perplexity.d.ts.map +1 -0
  441. package/dist/humain/web-access/vendor/perplexity.js +159 -0
  442. package/dist/humain/web-access/vendor/perplexity.js.map +1 -0
  443. package/dist/humain/web-access/vendor/querit.d.ts +10 -0
  444. package/dist/humain/web-access/vendor/querit.d.ts.map +1 -0
  445. package/dist/humain/web-access/vendor/querit.js +335 -0
  446. package/dist/humain/web-access/vendor/querit.js.map +1 -0
  447. package/dist/humain/web-access/vendor/render-search-error.d.ts +57 -0
  448. package/dist/humain/web-access/vendor/render-search-error.d.ts.map +1 -0
  449. package/dist/humain/web-access/vendor/render-search-error.js +130 -0
  450. package/dist/humain/web-access/vendor/render-search-error.js.map +1 -0
  451. package/dist/humain/web-access/vendor/rsc-extract.d.ts +12 -0
  452. package/dist/humain/web-access/vendor/rsc-extract.d.ts.map +1 -0
  453. package/dist/humain/web-access/vendor/rsc-extract.js +329 -0
  454. package/dist/humain/web-access/vendor/rsc-extract.js.map +1 -0
  455. package/dist/humain/web-access/vendor/search1api.d.ts +10 -0
  456. package/dist/humain/web-access/vendor/search1api.d.ts.map +1 -0
  457. package/dist/humain/web-access/vendor/search1api.js +251 -0
  458. package/dist/humain/web-access/vendor/search1api.js.map +1 -0
  459. package/dist/humain/web-access/vendor/searchinfinity.d.ts +8 -0
  460. package/dist/humain/web-access/vendor/searchinfinity.d.ts.map +1 -0
  461. package/dist/humain/web-access/vendor/searchinfinity.js +229 -0
  462. package/dist/humain/web-access/vendor/searchinfinity.js.map +1 -0
  463. package/dist/humain/web-access/vendor/searxng.d.ts +4 -0
  464. package/dist/humain/web-access/vendor/searxng.d.ts.map +1 -0
  465. package/dist/humain/web-access/vendor/searxng.js +238 -0
  466. package/dist/humain/web-access/vendor/searxng.js.map +1 -0
  467. package/dist/humain/web-access/vendor/serpbase.d.ts +4 -0
  468. package/dist/humain/web-access/vendor/serpbase.d.ts.map +1 -0
  469. package/dist/humain/web-access/vendor/serpbase.js +211 -0
  470. package/dist/humain/web-access/vendor/serpbase.js.map +1 -0
  471. package/dist/humain/web-access/vendor/serpdive.d.ts +8 -0
  472. package/dist/humain/web-access/vendor/serpdive.d.ts.map +1 -0
  473. package/dist/humain/web-access/vendor/serpdive.js +267 -0
  474. package/dist/humain/web-access/vendor/serpdive.js.map +1 -0
  475. package/dist/humain/web-access/vendor/source-check.d.ts +99 -0
  476. package/dist/humain/web-access/vendor/source-check.d.ts.map +1 -0
  477. package/dist/humain/web-access/vendor/source-check.js +205 -0
  478. package/dist/humain/web-access/vendor/source-check.js.map +1 -0
  479. package/dist/humain/web-access/vendor/ssrf-protection.d.ts +50 -0
  480. package/dist/humain/web-access/vendor/ssrf-protection.d.ts.map +1 -0
  481. package/dist/humain/web-access/vendor/ssrf-protection.js +466 -0
  482. package/dist/humain/web-access/vendor/ssrf-protection.js.map +1 -0
  483. package/dist/humain/web-access/vendor/storage.d.ts +55 -0
  484. package/dist/humain/web-access/vendor/storage.d.ts.map +1 -0
  485. package/dist/humain/web-access/vendor/storage.js +485 -0
  486. package/dist/humain/web-access/vendor/storage.js.map +1 -0
  487. package/dist/humain/web-access/vendor/summary-model-scope.d.ts +25 -0
  488. package/dist/humain/web-access/vendor/summary-model-scope.d.ts.map +1 -0
  489. package/dist/humain/web-access/vendor/summary-model-scope.js +98 -0
  490. package/dist/humain/web-access/vendor/summary-model-scope.js.map +1 -0
  491. package/dist/humain/web-access/vendor/summary-review.d.ts +26 -0
  492. package/dist/humain/web-access/vendor/summary-review.d.ts.map +1 -0
  493. package/dist/humain/web-access/vendor/summary-review.js +344 -0
  494. package/dist/humain/web-access/vendor/summary-review.js.map +1 -0
  495. package/dist/humain/web-access/vendor/tavily.d.ts +8 -0
  496. package/dist/humain/web-access/vendor/tavily.d.ts.map +1 -0
  497. package/dist/humain/web-access/vendor/tavily.js +194 -0
  498. package/dist/humain/web-access/vendor/tavily.js.map +1 -0
  499. package/dist/humain/web-access/vendor/tinyfish.d.ts +11 -0
  500. package/dist/humain/web-access/vendor/tinyfish.d.ts.map +1 -0
  501. package/dist/humain/web-access/vendor/tinyfish.js +331 -0
  502. package/dist/humain/web-access/vendor/tinyfish.js.map +1 -0
  503. package/dist/humain/web-access/vendor/utils.d.ts +20 -0
  504. package/dist/humain/web-access/vendor/utils.d.ts.map +1 -0
  505. package/dist/humain/web-access/vendor/utils.js +91 -0
  506. package/dist/humain/web-access/vendor/utils.js.map +1 -0
  507. package/dist/humain/web-access/vendor/video-extract.d.ts +16 -0
  508. package/dist/humain/web-access/vendor/video-extract.d.ts.map +1 -0
  509. package/dist/humain/web-access/vendor/video-extract.js +335 -0
  510. package/dist/humain/web-access/vendor/video-extract.js.map +1 -0
  511. package/dist/humain/web-access/vendor/xai-search.d.ts +13 -0
  512. package/dist/humain/web-access/vendor/xai-search.d.ts.map +1 -0
  513. package/dist/humain/web-access/vendor/xai-search.js +331 -0
  514. package/dist/humain/web-access/vendor/xai-search.js.map +1 -0
  515. package/dist/humain/web-access/vendor/youtube-extract.d.ts +27 -0
  516. package/dist/humain/web-access/vendor/youtube-extract.d.ts.map +1 -0
  517. package/dist/humain/web-access/vendor/youtube-extract.js +282 -0
  518. package/dist/humain/web-access/vendor/youtube-extract.js.map +1 -0
  519. package/dist/index.d.ts +7 -4
  520. package/dist/index.d.ts.map +1 -1
  521. package/dist/index.js +5 -2
  522. package/dist/index.js.map +1 -1
  523. package/dist/main.d.ts +2 -2
  524. package/dist/main.d.ts.map +1 -1
  525. package/dist/main.js +169 -102
  526. package/dist/main.js.map +1 -1
  527. package/dist/modes/agent-exec-mode.d.ts +14 -0
  528. package/dist/modes/agent-exec-mode.d.ts.map +1 -0
  529. package/dist/modes/agent-exec-mode.js +92 -0
  530. package/dist/modes/agent-exec-mode.js.map +1 -0
  531. package/dist/modes/index.d.ts +4 -2
  532. package/dist/modes/index.d.ts.map +1 -1
  533. package/dist/modes/index.js +2 -1
  534. package/dist/modes/index.js.map +1 -1
  535. package/dist/modes/interactive/components/assistant-message.d.ts +5 -2
  536. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  537. package/dist/modes/interactive/components/assistant-message.js +13 -4
  538. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  539. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  540. package/dist/modes/interactive/components/custom-editor.js +7 -0
  541. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  542. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  543. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  544. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  545. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  546. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  547. package/dist/modes/interactive/components/footer.js +1 -1
  548. package/dist/modes/interactive/components/footer.js.map +1 -1
  549. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  550. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  551. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  552. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  553. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  554. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  555. package/dist/modes/interactive/components/mermaid.js +75 -0
  556. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  557. package/dist/modes/interactive/components/model-selector.d.ts +1 -1
  558. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  559. package/dist/modes/interactive/components/model-selector.js +16 -4
  560. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  561. package/dist/modes/interactive/components/scoped-models-selector.d.ts +4 -0
  562. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  563. package/dist/modes/interactive/components/scoped-models-selector.js +26 -0
  564. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  565. package/dist/modes/interactive/components/settings-selector.d.ts +8 -2
  566. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  567. package/dist/modes/interactive/components/settings-selector.js +30 -0
  568. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  569. package/dist/modes/interactive/components/user-message.d.ts +3 -1
  570. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  571. package/dist/modes/interactive/components/user-message.js +9 -2
  572. package/dist/modes/interactive/components/user-message.js.map +1 -1
  573. package/dist/modes/interactive/interactive-mode.d.ts +45 -9
  574. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  575. package/dist/modes/interactive/interactive-mode.js +581 -211
  576. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  577. package/dist/modes/interactive/theme/dark.json +1 -0
  578. package/dist/modes/interactive/theme/light.json +1 -0
  579. package/dist/modes/interactive/theme/theme-controller.d.ts +3 -0
  580. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  581. package/dist/modes/interactive/theme/theme-controller.js +10 -1
  582. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  583. package/dist/modes/interactive/theme/theme-schema.json +5 -1
  584. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  585. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  586. package/dist/modes/interactive/theme/theme.js +24 -6
  587. package/dist/modes/interactive/theme/theme.js.map +1 -1
  588. package/dist/modes/json-event.d.ts +28 -0
  589. package/dist/modes/json-event.d.ts.map +1 -0
  590. package/dist/modes/json-event.js +12 -0
  591. package/dist/modes/json-event.js.map +1 -0
  592. package/dist/modes/print-mode.d.ts.map +1 -1
  593. package/dist/modes/print-mode.js +12 -2
  594. package/dist/modes/print-mode.js.map +1 -1
  595. package/dist/modes/rpc/rpc-client.d.ts +12 -5
  596. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  597. package/dist/modes/rpc/rpc-client.js +55 -1
  598. package/dist/modes/rpc/rpc-client.js.map +1 -1
  599. package/dist/modes/rpc/rpc-mode.d.ts +1 -1
  600. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  601. package/dist/modes/rpc/rpc-mode.js +13 -3
  602. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  603. package/dist/modes/rpc/rpc-types.d.ts +15 -0
  604. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  605. package/dist/modes/rpc/rpc-types.js.map +1 -1
  606. package/dist/package-manager-cli.d.ts.map +1 -1
  607. package/dist/package-manager-cli.js +11 -9
  608. package/dist/package-manager-cli.js.map +1 -1
  609. package/dist/rpc-entry.d.ts.map +1 -1
  610. package/dist/rpc-entry.js +3 -2
  611. package/dist/rpc-entry.js.map +1 -1
  612. package/dist/server/create-harness.d.ts +26 -0
  613. package/dist/server/create-harness.d.ts.map +1 -0
  614. package/dist/server/create-harness.js +104 -0
  615. package/dist/server/create-harness.js.map +1 -0
  616. package/dist/utils/abort.d.ts +5 -0
  617. package/dist/utils/abort.d.ts.map +1 -0
  618. package/dist/utils/abort.js +48 -0
  619. package/dist/utils/abort.js.map +1 -0
  620. package/dist/utils/clipboard.d.ts +1 -1
  621. package/dist/utils/clipboard.d.ts.map +1 -1
  622. package/dist/utils/clipboard.js +22 -2
  623. package/dist/utils/clipboard.js.map +1 -1
  624. package/dist/utils/management-http.d.ts +23 -0
  625. package/dist/utils/management-http.d.ts.map +1 -0
  626. package/dist/utils/management-http.js +50 -0
  627. package/dist/utils/management-http.js.map +1 -0
  628. package/dist/utils/paths.d.ts +3 -0
  629. package/dist/utils/paths.d.ts.map +1 -1
  630. package/dist/utils/paths.js +23 -1
  631. package/dist/utils/paths.js.map +1 -1
  632. package/dist/utils/tool-result-images.d.ts +19 -0
  633. package/dist/utils/tool-result-images.d.ts.map +1 -0
  634. package/dist/utils/tool-result-images.js +45 -0
  635. package/dist/utils/tool-result-images.js.map +1 -0
  636. package/dist/utils/tools-manager.d.ts.map +1 -1
  637. package/dist/utils/tools-manager.js +13 -25
  638. package/dist/utils/tools-manager.js.map +1 -1
  639. package/dist/utils/version-check.d.ts +4 -0
  640. package/dist/utils/version-check.d.ts.map +1 -1
  641. package/dist/utils/version-check.js +23 -5
  642. package/dist/utils/version-check.js.map +1 -1
  643. package/docs/compaction.md +2 -2
  644. package/docs/custom-provider.md +7 -5
  645. package/docs/extensions.md +30 -5
  646. package/docs/humain-terminal.md +21 -1
  647. package/docs/json.md +24 -19
  648. package/docs/keybindings.md +46 -14
  649. package/docs/models.md +32 -11
  650. package/docs/providers.md +9 -1
  651. package/docs/quickstart.md +39 -37
  652. package/docs/rpc.md +31 -11
  653. package/docs/sdk.md +21 -2
  654. package/docs/security.md +21 -21
  655. package/docs/session-format.md +14 -14
  656. package/docs/settings.md +4 -1
  657. package/docs/themes.md +5 -3
  658. package/docs/usage.md +7 -0
  659. package/examples/extensions/custom-compaction.ts +3 -18
  660. package/examples/extensions/custom-provider-anthropic/index.ts +5 -1
  661. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  662. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  663. package/examples/extensions/custom-provider-gitlab-duo/index.ts +5 -1
  664. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  665. package/examples/extensions/doom-overlay/wad-finder.ts +7 -3
  666. package/examples/extensions/gondolin/package-lock.json +2 -2
  667. package/examples/extensions/gondolin/package.json +1 -1
  668. package/examples/extensions/handoff.ts +4 -13
  669. package/examples/extensions/qna.ts +5 -9
  670. package/examples/extensions/sandbox/package-lock.json +2 -2
  671. package/examples/extensions/sandbox/package.json +1 -1
  672. package/examples/extensions/summarize.ts +9 -20
  673. package/examples/extensions/with-deps/package-lock.json +2 -2
  674. package/examples/extensions/with-deps/package.json +1 -1
  675. package/examples/rpc-extension-ui.ts +11 -2
  676. package/examples/sdk/02-custom-model.ts +2 -3
  677. package/examples/sdk/09-api-keys-and-oauth.ts +1 -1
  678. package/examples/sdk/12-full-control.ts +1 -1
  679. package/examples/sdk/README.md +1 -1
  680. package/npm-shrinkwrap.json +2771 -535
  681. package/package.json +40 -11
  682. package/src/humain/mcp-adapter/UPSTREAM.md +15 -0
  683. package/src/humain/mcp-adapter/upstream.json +7 -0
  684. package/src/humain/mcp-adapter/vendor/CHANGELOG.md +673 -0
  685. package/src/humain/mcp-adapter/vendor/LICENSE +21 -0
  686. package/src/humain/web-access/UPSTREAM.md +17 -0
  687. package/src/humain/web-access/upstream.json +23 -0
  688. package/src/humain/web-access/vendor/LICENSE +21 -0
@@ -0,0 +1,832 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { activityMonitor } from "./activity.js";
3
+ import { CredentialResolutionError } from "./credential-source.js";
4
+ import { getApiKey, getVersionedApiBase, fetchGeminiApi, isGatewayConfigured, isGeminiApiAvailable, redactGeminiApiResponse } from "./gemini-api.js";
5
+ import { getGeminiWebAvailabilityDiagnostic, isGeminiWebAvailable, queryWithCookies } from "./gemini-web.js";
6
+ import { isPerplexityAvailable, searchWithPerplexity } from "./perplexity.js";
7
+ import { isExaAvailable, searchWithExa } from "./exa.js";
8
+ import { isBraveAvailable, searchWithBrave } from "./brave.js";
9
+ import { isOpenAISearchAvailable, searchWithOpenAI } from "./openai-search.js";
10
+ import { isParallelAvailable, searchWithParallel } from "./parallel.js";
11
+ import { isTinyFishAvailable, searchWithTinyFish } from "./tinyfish.js";
12
+ import { isSearch1APIAvailable, searchWithSearch1API } from "./search1api.js";
13
+ import { isSearchinfinityAvailable, searchWithSearchinfinity } from "./searchinfinity.js";
14
+ import { isQueritAvailable, searchWithQuerit } from "./querit.js";
15
+ import { isTavilyAvailable, searchWithTavily } from "./tavily.js";
16
+ import { isFirecrawlAvailable, searchWithFirecrawl } from "./firecrawl.js";
17
+ import { isJinaSearchAvailable, searchWithJina } from "./jina-search.js";
18
+ import { isSerpdiveAvailable, searchWithSerpdive } from "./serpdive.js";
19
+ import { isKagiAvailable, searchWithKagi } from "./kagi.js";
20
+ import { isBochaAvailable, searchWithBocha } from "./bocha.js";
21
+ import { isOllamaAvailable, searchWithOllama } from "./ollama.js";
22
+ import { isSearXNGAvailable, searchWithSearXNG } from "./searxng.js";
23
+ import { isDuckDuckGoAvailable, searchWithDuckDuckGo } from "./duckduckgo.js";
24
+ import { isAnySearchAvailable, searchWithAnySearch } from "./anysearch.js";
25
+ import { isXaiSearchAvailable, searchWithXai } from "./xai-search.js";
26
+ import { isBrightDataAvailable, searchWithBrightData } from "./brightdata.js";
27
+ import { isSerpBaseAvailable, searchWithSerpBase } from "./serpbase.js";
28
+ import { getWebSearchConfigPath } from "./utils.js";
29
+ export const RESOLVED_SEARCH_PROVIDERS = ["openai", "brave", "parallel", "tinyfish", "search1api", "searchinfinity", "querit", "tavily", "firecrawl", "jina", "searxng", "duckduckgo", "perplexity", "gemini", "exa", "serpdive", "kagi", "ollama", "anysearch", "xai", "brightdata", "serpbase", "bocha"];
30
+ export const SEARCH_PROVIDERS = ["auto", "all", ...RESOLVED_SEARCH_PROVIDERS];
31
+ export class SearchProviderError extends Error {
32
+ provider;
33
+ kind;
34
+ status;
35
+ causeError;
36
+ constructor(provider, kind, message, status, cause) {
37
+ super(`${provider} search failed (${kind}): ${message}`);
38
+ this.name = "SearchProviderError";
39
+ this.provider = provider;
40
+ this.kind = kind;
41
+ this.status = status;
42
+ this.causeError = cause;
43
+ }
44
+ }
45
+ const CONFIG_PATH = getWebSearchConfigPath();
46
+ const DEFAULT_SEARCH_MODEL = "gemini-3.6-flash";
47
+ // Explicit-only providers (DuckDuckGo, AnySearch, xAI, Bright Data, SerpBase) are deliberately absent:
48
+ // `all` must never fan out to an opt-in or paid provider without the user asking for it.
49
+ const ALL_SEARCH_PROVIDERS = ["searxng", "openai", "exa", "brave", "parallel", "tinyfish", "search1api", "searchinfinity", "querit", "tavily", "firecrawl", "jina", "serpdive", "kagi", "ollama", "perplexity", "gemini", "bocha"];
50
+ const VALID_ROUTING_KINDS = ["transient", "quota", "network", "invalid-response"];
51
+ let cachedSearchConfig = null;
52
+ function getSearchConfig() {
53
+ if (cachedSearchConfig)
54
+ return cachedSearchConfig;
55
+ if (!existsSync(CONFIG_PATH)) {
56
+ cachedSearchConfig = { searchProvider: "auto", searchProviderConfigured: false };
57
+ return cachedSearchConfig;
58
+ }
59
+ const rawText = readFileSync(CONFIG_PATH, "utf-8");
60
+ let raw;
61
+ try {
62
+ const parsed = JSON.parse(rawText);
63
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
64
+ throw new Error("expected a JSON object");
65
+ }
66
+ raw = parsed;
67
+ }
68
+ catch (err) {
69
+ const message = err instanceof Error ? err.message : String(err);
70
+ throw new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);
71
+ }
72
+ const searchModel = normalizeSearchModel(raw.searchModel);
73
+ const searchProviderConfigured = Object.hasOwn(raw, "searchProvider") || Object.hasOwn(raw, "provider");
74
+ cachedSearchConfig = {
75
+ searchProvider: normalizeSearchProviderSelection(raw.searchProvider ?? raw.provider, `provider in ${CONFIG_PATH}`),
76
+ searchProviderConfigured,
77
+ ...(Object.hasOwn(raw, "searchRouting") ? { searchRouting: normalizeSearchRouting(raw.searchRouting) } : {}),
78
+ ...(searchModel ? { searchModel } : {}),
79
+ };
80
+ return cachedSearchConfig;
81
+ }
82
+ function normalizeSearchRouting(value) {
83
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
84
+ throw new Error(`searchRouting in ${CONFIG_PATH} must be an object`);
85
+ }
86
+ const raw = value;
87
+ const providers = normalizeResolvedProviderList(raw.providers, `searchRouting.providers in ${CONFIG_PATH}`);
88
+ if (!Array.isArray(raw.fallbackOn) || raw.fallbackOn.length === 0) {
89
+ throw new Error(`searchRouting.fallbackOn in ${CONFIG_PATH} must be a non-empty array`);
90
+ }
91
+ const fallbackOn = [];
92
+ for (const kind of raw.fallbackOn) {
93
+ if (typeof kind !== "string" || !VALID_ROUTING_KINDS.includes(kind)) {
94
+ throw new Error(`searchRouting.fallbackOn in ${CONFIG_PATH} may only contain transient, quota, network, or invalid-response`);
95
+ }
96
+ if (!fallbackOn.includes(kind)) {
97
+ fallbackOn.push(kind);
98
+ }
99
+ }
100
+ return { providers, fallbackOn };
101
+ }
102
+ export function getConfiguredSearchRouting() {
103
+ const config = getSearchConfig();
104
+ return config.searchProviderConfigured ? undefined : config.searchRouting;
105
+ }
106
+ function normalizeSearchModel(value) {
107
+ if (typeof value !== "string")
108
+ return undefined;
109
+ const normalized = value.trim();
110
+ return normalized.length > 0 ? normalized : undefined;
111
+ }
112
+ function normalizeResolvedProviderList(value, label) {
113
+ if (!Array.isArray(value) || value.length === 0) {
114
+ throw new Error(`${label} must be a non-empty array`);
115
+ }
116
+ const providers = [];
117
+ for (const provider of value) {
118
+ const normalized = typeof provider === "string" ? provider.trim().toLowerCase() : "";
119
+ if (!RESOLVED_SEARCH_PROVIDERS.includes(normalized)) {
120
+ throw new Error(`${label} contains an invalid provider: ${String(provider)}`);
121
+ }
122
+ if (providers.includes(normalized)) {
123
+ throw new Error(`${label} must not contain duplicates: ${normalized}`);
124
+ }
125
+ providers.push(normalized);
126
+ }
127
+ return providers;
128
+ }
129
+ export function normalizeSearchProviderSelection(value, label = "provider") {
130
+ if (Array.isArray(value))
131
+ return normalizeResolvedProviderList(value, label);
132
+ const normalized = typeof value === "string" ? value.trim().toLowerCase() : "";
133
+ return SEARCH_PROVIDERS.includes(normalized) ? normalized : "auto";
134
+ }
135
+ function errorMessage(err) {
136
+ return err instanceof Error ? err.message : String(err);
137
+ }
138
+ function isAbortError(err) {
139
+ return errorMessage(err).toLowerCase().includes("abort");
140
+ }
141
+ function shouldTryOpenAIInAuto(options) {
142
+ if (options.recencyFilter)
143
+ return false;
144
+ if (typeof options.numResults === "number" && Number.isFinite(options.numResults) && Math.floor(options.numResults) !== 5) {
145
+ return false;
146
+ }
147
+ return true;
148
+ }
149
+ async function searchWithGemini(query, options, strictErrors) {
150
+ const errors = [];
151
+ try {
152
+ const apiResult = await searchWithGeminiApi(query, options);
153
+ if (apiResult)
154
+ return apiResult;
155
+ }
156
+ catch (err) {
157
+ if (err instanceof CredentialResolutionError || isAbortError(err))
158
+ throw err;
159
+ errors.push(`Gemini API: ${errorMessage(err)}`);
160
+ }
161
+ try {
162
+ const webResult = await searchWithGeminiWeb(query, options);
163
+ if (webResult)
164
+ return webResult;
165
+ const diagnostic = getGeminiWebAvailabilityDiagnostic();
166
+ if (diagnostic)
167
+ errors.push(`Gemini Web: ${diagnostic}`);
168
+ }
169
+ catch (err) {
170
+ if (isAbortError(err))
171
+ throw err;
172
+ errors.push(`Gemini Web: ${errorMessage(err)}`);
173
+ }
174
+ if (strictErrors && errors.length > 0) {
175
+ throw new Error(`Gemini search failed:\n - ${errors.join("\n - ")}`);
176
+ }
177
+ return null;
178
+ }
179
+ function providerErrorStatus(message) {
180
+ const match = message.match(/\b(?:error|status|http)\s+(\d{3})\b/i);
181
+ if (!match)
182
+ return undefined;
183
+ return Number(match[1]);
184
+ }
185
+ function classifyProviderError(provider, err) {
186
+ if (err instanceof SearchProviderError)
187
+ return err;
188
+ const message = errorMessage(err);
189
+ const lower = message.toLowerCase();
190
+ const status = providerErrorStatus(message);
191
+ let kind = "unknown";
192
+ if (err instanceof CredentialResolutionError || /(?:api )?key (?:not found|missing)|credential resolution/.test(lower)) {
193
+ kind = "credential";
194
+ }
195
+ else if (isAbortError(err)) {
196
+ kind = "aborted";
197
+ }
198
+ else if (provider === "xai" && status === 403 && /spending[- ]limit|(?:no|out of) credits?|insufficient quota|quota (?:exceeded|exhausted)|credits? (?:exhausted|depleted|used up)/.test(lower)) {
199
+ kind = "quota";
200
+ }
201
+ else if (status === 401 || status === 403) {
202
+ kind = "auth";
203
+ }
204
+ else if (status === 400 || status === 422) {
205
+ kind = "invalid-request";
206
+ }
207
+ else if (status === 402 || status === 429) {
208
+ kind = "quota";
209
+ }
210
+ else if (status !== undefined && (status === 408 || status === 425 || status >= 500)) {
211
+ kind = "transient";
212
+ }
213
+ else if (/rate limit|quota|too many requests/.test(lower)) {
214
+ kind = "quota";
215
+ }
216
+ else if (/unauthorized|forbidden|permission denied/.test(lower)) {
217
+ kind = "auth";
218
+ }
219
+ else if (/bad request|invalid request/.test(lower)) {
220
+ kind = "invalid-request";
221
+ }
222
+ else if (/invalid json|no parseable response|no parseable results|invalid response|returned empty response/.test(lower)) {
223
+ kind = "invalid-response";
224
+ }
225
+ else if (/temporar|service unavailable|server error/.test(lower)) {
226
+ kind = "transient";
227
+ }
228
+ else if (err instanceof TypeError || /fetch failed|network|econnreset|econnrefused|enotfound|etimedout|timed out|socket/.test(lower)) {
229
+ kind = "network";
230
+ }
231
+ else if (/invalid or missing|invalid config|failed to parse|must be an? |configuration/.test(lower)) {
232
+ kind = "config";
233
+ }
234
+ return new SearchProviderError(provider, kind, message, status, err);
235
+ }
236
+ async function searchWithResolvedProvider(provider, query, options) {
237
+ if (provider === "openai") {
238
+ const result = await searchWithOpenAI(query, options, options.extensionContext);
239
+ return { ...result, provider };
240
+ }
241
+ if (provider === "brave")
242
+ return { ...(await searchWithBrave(query, options)), provider };
243
+ if (provider === "parallel")
244
+ return { ...(await searchWithParallel(query, options)), provider };
245
+ if (provider === "tinyfish")
246
+ return { ...(await searchWithTinyFish(query, options)), provider };
247
+ if (provider === "search1api")
248
+ return { ...(await searchWithSearch1API(query, options)), provider };
249
+ if (provider === "searchinfinity")
250
+ return { ...(await searchWithSearchinfinity(query, options)), provider };
251
+ if (provider === "querit")
252
+ return { ...(await searchWithQuerit(query, options)), provider };
253
+ if (provider === "tavily")
254
+ return { ...(await searchWithTavily(query, options)), provider };
255
+ if (provider === "firecrawl")
256
+ return { ...(await searchWithFirecrawl(query, options)), provider };
257
+ if (provider === "jina")
258
+ return { ...(await searchWithJina(query, options)), provider };
259
+ if (provider === "serpdive")
260
+ return { ...(await searchWithSerpdive(query, options)), provider };
261
+ if (provider === "kagi")
262
+ return { ...(await searchWithKagi(query, options)), provider };
263
+ if (provider === "bocha")
264
+ return { ...(await searchWithBocha(query, options)), provider };
265
+ if (provider === "ollama")
266
+ return { ...(await searchWithOllama(query, options)), provider };
267
+ if (provider === "anysearch")
268
+ return { ...(await searchWithAnySearch(query, options)), provider };
269
+ if (provider === "xai")
270
+ return { ...(await searchWithXai(query, options, options.extensionContext)), provider };
271
+ if (provider === "brightdata")
272
+ return { ...(await searchWithBrightData(query, options)), provider };
273
+ if (provider === "serpbase")
274
+ return { ...(await searchWithSerpBase(query, options)), provider };
275
+ if (provider === "perplexity")
276
+ return { ...(await searchWithPerplexity(query, options)), provider };
277
+ if (provider === "searxng")
278
+ return { ...(await searchWithSearXNG(query, options)), provider };
279
+ if (provider === "duckduckgo")
280
+ return { ...(await searchWithDuckDuckGo(query, options)), provider };
281
+ if (provider === "gemini") {
282
+ const result = await searchWithGemini(query, options, true);
283
+ if (result)
284
+ return { ...result, provider };
285
+ throw new Error("Gemini search unavailable. Either:\n" +
286
+ ` 1. Configure geminiApiKey in ${CONFIG_PATH} or set GEMINI_API_KEY\n` +
287
+ " 2. Set GOOGLE_GEMINI_BASE_URL + CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\n" +
288
+ " 3. Sign into gemini.google.com in a supported Chromium-based browser");
289
+ }
290
+ const result = await searchWithExa(query, options);
291
+ if (result)
292
+ return { ...result, provider };
293
+ throw new Error("Exa search returned no results.");
294
+ }
295
+ async function isResolvedProviderAvailable(provider, options) {
296
+ if (provider === "openai")
297
+ return isOpenAISearchAvailable(options.extensionContext);
298
+ if (provider === "brave")
299
+ return isBraveAvailable();
300
+ if (provider === "parallel")
301
+ return isParallelAvailable();
302
+ if (provider === "tinyfish")
303
+ return isTinyFishAvailable();
304
+ if (provider === "search1api")
305
+ return isSearch1APIAvailable();
306
+ if (provider === "searchinfinity")
307
+ return isSearchinfinityAvailable();
308
+ if (provider === "querit")
309
+ return isQueritAvailable();
310
+ if (provider === "tavily")
311
+ return isTavilyAvailable();
312
+ if (provider === "firecrawl")
313
+ return isFirecrawlAvailable();
314
+ if (provider === "jina")
315
+ return isJinaSearchAvailable();
316
+ if (provider === "serpdive")
317
+ return isSerpdiveAvailable();
318
+ if (provider === "kagi")
319
+ return isKagiAvailable();
320
+ if (provider === "bocha")
321
+ return isBochaAvailable();
322
+ if (provider === "ollama")
323
+ return isOllamaAvailable();
324
+ if (provider === "anysearch")
325
+ return isAnySearchAvailable();
326
+ if (provider === "xai")
327
+ return isXaiSearchAvailable(options.extensionContext);
328
+ if (provider === "brightdata")
329
+ return isBrightDataAvailable();
330
+ if (provider === "serpbase")
331
+ return isSerpBaseAvailable();
332
+ if (provider === "perplexity")
333
+ return isPerplexityAvailable();
334
+ if (provider === "searxng")
335
+ return isSearXNGAvailable();
336
+ if (provider === "duckduckgo")
337
+ return isDuckDuckGoAvailable();
338
+ if (provider === "gemini")
339
+ return isGeminiApiAvailable() || !!(await isGeminiWebAvailable());
340
+ return isExaAvailable();
341
+ }
342
+ function providerLabel(provider) {
343
+ if (provider === "openai")
344
+ return "OpenAI";
345
+ if (provider === "tinyfish")
346
+ return "TinyFish";
347
+ if (provider === "search1api")
348
+ return "Search1API";
349
+ if (provider === "searchinfinity")
350
+ return "Searchinfinity";
351
+ if (provider === "querit")
352
+ return "Querit";
353
+ if (provider === "firecrawl")
354
+ return "Firecrawl";
355
+ if (provider === "serpdive")
356
+ return "SERPdive";
357
+ if (provider === "searxng")
358
+ return "SearXNG";
359
+ if (provider === "duckduckgo")
360
+ return "DuckDuckGo";
361
+ if (provider === "kagi")
362
+ return "Kagi";
363
+ if (provider === "bocha")
364
+ return "Bocha";
365
+ if (provider === "ollama")
366
+ return "Ollama";
367
+ if (provider === "xai")
368
+ return "xAI";
369
+ if (provider === "brightdata")
370
+ return "Bright Data";
371
+ if (provider === "serpbase")
372
+ return "SerpBase";
373
+ return provider.charAt(0).toUpperCase() + provider.slice(1);
374
+ }
375
+ async function searchWithAllProvider(provider, query, options) {
376
+ if (provider !== "gemini")
377
+ return searchWithResolvedProvider(provider, query, options);
378
+ const result = await searchWithGeminiApi(query, options);
379
+ if (result)
380
+ return { ...result, provider };
381
+ throw new Error("Gemini API search returned no results.");
382
+ }
383
+ async function searchWithProviders(query, options, selectedProviders) {
384
+ const providers = selectedProviders ?? (await Promise.all(ALL_SEARCH_PROVIDERS.map(async (provider) => ({
385
+ provider,
386
+ available: provider === "gemini"
387
+ ? isGeminiApiAvailable()
388
+ : await isResolvedProviderAvailable(provider, options),
389
+ })))).filter((entry) => entry.available).map((entry) => entry.provider);
390
+ if (providers.length === 0) {
391
+ throw new Error("No configured search provider available for provider \"all\". AnySearch, xAI, Bright Data, and SerpBase are excluded.");
392
+ }
393
+ const settled = await Promise.allSettled(providers.map((provider) => selectedProviders
394
+ ? searchWithResolvedProvider(provider, query, options)
395
+ : searchWithAllProvider(provider, query, options)));
396
+ if (options.signal?.aborted)
397
+ throw new Error("Aborted");
398
+ const successes = [];
399
+ const failures = [];
400
+ for (let index = 0; index < settled.length; index++) {
401
+ const outcome = settled[index];
402
+ if (outcome.status === "fulfilled") {
403
+ successes.push(outcome.value);
404
+ }
405
+ else {
406
+ failures.push({ provider: providers[index], error: errorMessage(outcome.reason) });
407
+ }
408
+ }
409
+ if (successes.length === 0) {
410
+ const label = selectedProviders ? "Selected-provider" : "All-provider";
411
+ throw new Error(`${label} search failed:\n - ${failures.map(({ provider, error }) => `${providerLabel(provider)}: ${error}`).join("\n - ")}`);
412
+ }
413
+ const results = [];
414
+ const seenResultUrls = new Set();
415
+ const inlineContent = [];
416
+ const seenInlineUrls = new Set();
417
+ for (const response of successes) {
418
+ for (const result of response.results) {
419
+ if (seenResultUrls.has(result.url))
420
+ continue;
421
+ seenResultUrls.add(result.url);
422
+ results.push(result);
423
+ }
424
+ for (const content of response.inlineContent ?? []) {
425
+ if (seenInlineUrls.has(content.url))
426
+ continue;
427
+ seenInlineUrls.add(content.url);
428
+ inlineContent.push(content);
429
+ }
430
+ }
431
+ const answerSections = successes.map((response) => `## ${providerLabel(response.provider)}\n\n${response.answer || "(No answer text returned.)"}`);
432
+ if (failures.length > 0) {
433
+ answerSections.push(`## Provider errors\n\n${failures.map(({ provider, error }) => `- **${providerLabel(provider)}:** ${error}`).join("\n")}`);
434
+ }
435
+ return {
436
+ provider: "all",
437
+ answer: answerSections.join("\n\n"),
438
+ results,
439
+ providerResponses: successes,
440
+ ...(failures.length > 0 ? { providerErrors: failures } : {}),
441
+ ...(inlineContent.length > 0 ? { inlineContent } : {}),
442
+ };
443
+ }
444
+ async function searchWithConfiguredRouting(query, options, routing) {
445
+ const diagnostics = [];
446
+ for (const provider of routing.providers) {
447
+ if (!(await isResolvedProviderAvailable(provider, options))) {
448
+ diagnostics.push(`${provider}: unavailable`);
449
+ continue;
450
+ }
451
+ try {
452
+ return await searchWithResolvedProvider(provider, query, options);
453
+ }
454
+ catch (err) {
455
+ const classified = classifyProviderError(provider, err);
456
+ diagnostics.push(`${provider} [${classified.kind}]: ${errorMessage(err)}`);
457
+ if (!routing.fallbackOn.includes(classified.kind)) {
458
+ throw classified;
459
+ }
460
+ }
461
+ }
462
+ throw new Error(`Configured search routing exhausted:\n - ${diagnostics.join("\n - ")}`);
463
+ }
464
+ export async function search(query, options = {}) {
465
+ const config = getSearchConfig();
466
+ const provider = options.provider === undefined || options.provider === "auto"
467
+ ? config.searchProvider
468
+ : options.provider;
469
+ if (Array.isArray(provider)) {
470
+ return searchWithProviders(query, options, normalizeResolvedProviderList(provider, "provider"));
471
+ }
472
+ if (provider === "all")
473
+ return searchWithProviders(query, options);
474
+ if (provider !== "auto")
475
+ return searchWithResolvedProvider(provider, query, options);
476
+ if (!config.searchProviderConfigured && config.searchRouting) {
477
+ return searchWithConfiguredRouting(query, options, config.searchRouting);
478
+ }
479
+ const fallbackErrors = [];
480
+ if (isSearXNGAvailable()) {
481
+ try {
482
+ const result = await searchWithSearXNG(query, options);
483
+ return { ...result, provider: "searxng" };
484
+ }
485
+ catch (err) {
486
+ if (isAbortError(err))
487
+ throw err;
488
+ fallbackErrors.push(`SearXNG: ${errorMessage(err)}`);
489
+ }
490
+ }
491
+ if (shouldTryOpenAIInAuto(options)) {
492
+ try {
493
+ if (await isOpenAISearchAvailable(options.extensionContext)) {
494
+ const result = await searchWithOpenAI(query, options, options.extensionContext);
495
+ return { ...result, provider: "openai" };
496
+ }
497
+ }
498
+ catch (err) {
499
+ if (isAbortError(err))
500
+ throw err;
501
+ fallbackErrors.push(`OpenAI: ${errorMessage(err)}`);
502
+ }
503
+ }
504
+ if (isExaAvailable()) {
505
+ try {
506
+ const result = await searchWithExa(query, options);
507
+ if (result)
508
+ return { ...result, provider: "exa" };
509
+ }
510
+ catch (err) {
511
+ if (err instanceof CredentialResolutionError || isAbortError(err))
512
+ throw err;
513
+ fallbackErrors.push(`Exa: ${errorMessage(err)}`);
514
+ }
515
+ }
516
+ if (isBraveAvailable()) {
517
+ try {
518
+ const result = await searchWithBrave(query, options);
519
+ return { ...result, provider: "brave" };
520
+ }
521
+ catch (err) {
522
+ if (isAbortError(err))
523
+ throw err;
524
+ fallbackErrors.push(`Brave: ${errorMessage(err)}`);
525
+ }
526
+ }
527
+ if (isParallelAvailable()) {
528
+ try {
529
+ const result = await searchWithParallel(query, options);
530
+ return { ...result, provider: "parallel" };
531
+ }
532
+ catch (err) {
533
+ if (isAbortError(err))
534
+ throw err;
535
+ fallbackErrors.push(`Parallel: ${errorMessage(err)}`);
536
+ }
537
+ }
538
+ if (isTinyFishAvailable()) {
539
+ try {
540
+ const result = await searchWithTinyFish(query, options);
541
+ return { ...result, provider: "tinyfish" };
542
+ }
543
+ catch (err) {
544
+ if (isAbortError(err))
545
+ throw err;
546
+ fallbackErrors.push(`TinyFish: ${errorMessage(err)}`);
547
+ }
548
+ }
549
+ if (isSearch1APIAvailable()) {
550
+ try {
551
+ const result = await searchWithSearch1API(query, options);
552
+ return { ...result, provider: "search1api" };
553
+ }
554
+ catch (err) {
555
+ if (isAbortError(err))
556
+ throw err;
557
+ fallbackErrors.push(`Search1API: ${errorMessage(err)}`);
558
+ }
559
+ }
560
+ if (isSearchinfinityAvailable()) {
561
+ try {
562
+ const result = await searchWithSearchinfinity(query, options);
563
+ return { ...result, provider: "searchinfinity" };
564
+ }
565
+ catch (err) {
566
+ if (isAbortError(err))
567
+ throw err;
568
+ fallbackErrors.push(`Searchinfinity: ${errorMessage(err)}`);
569
+ }
570
+ }
571
+ if (isQueritAvailable()) {
572
+ try {
573
+ const result = await searchWithQuerit(query, options);
574
+ return { ...result, provider: "querit" };
575
+ }
576
+ catch (err) {
577
+ if (isAbortError(err))
578
+ throw err;
579
+ fallbackErrors.push(`Querit: ${errorMessage(err)}`);
580
+ }
581
+ }
582
+ if (isTavilyAvailable()) {
583
+ try {
584
+ const result = await searchWithTavily(query, options);
585
+ return { ...result, provider: "tavily" };
586
+ }
587
+ catch (err) {
588
+ if (isAbortError(err))
589
+ throw err;
590
+ fallbackErrors.push(`Tavily: ${errorMessage(err)}`);
591
+ }
592
+ }
593
+ if (isFirecrawlAvailable()) {
594
+ try {
595
+ const result = await searchWithFirecrawl(query, options);
596
+ return { ...result, provider: "firecrawl" };
597
+ }
598
+ catch (err) {
599
+ if (isAbortError(err))
600
+ throw err;
601
+ fallbackErrors.push(`Firecrawl: ${errorMessage(err)}`);
602
+ }
603
+ }
604
+ if (isJinaSearchAvailable()) {
605
+ try {
606
+ const result = await searchWithJina(query, options);
607
+ return { ...result, provider: "jina" };
608
+ }
609
+ catch (err) {
610
+ if (isAbortError(err))
611
+ throw err;
612
+ fallbackErrors.push(`Jina: ${errorMessage(err)}`);
613
+ }
614
+ }
615
+ if (isSerpdiveAvailable()) {
616
+ try {
617
+ const result = await searchWithSerpdive(query, options);
618
+ return { ...result, provider: "serpdive" };
619
+ }
620
+ catch (err) {
621
+ if (isAbortError(err))
622
+ throw err;
623
+ fallbackErrors.push(`SERPdive: ${errorMessage(err)}`);
624
+ }
625
+ }
626
+ if (isKagiAvailable()) {
627
+ try {
628
+ const result = await searchWithKagi(query, options);
629
+ return { ...result, provider: "kagi" };
630
+ }
631
+ catch (err) {
632
+ if (isAbortError(err))
633
+ throw err;
634
+ fallbackErrors.push(`Kagi: ${errorMessage(err)}`);
635
+ }
636
+ }
637
+ if (isBochaAvailable()) {
638
+ try {
639
+ const result = await searchWithBocha(query, options);
640
+ return { ...result, provider: "bocha" };
641
+ }
642
+ catch (err) {
643
+ if (isAbortError(err))
644
+ throw err;
645
+ fallbackErrors.push(`Bocha: ${errorMessage(err)}`);
646
+ }
647
+ }
648
+ if (isOllamaAvailable()) {
649
+ try {
650
+ const result = await searchWithOllama(query, options);
651
+ return { ...result, provider: "ollama" };
652
+ }
653
+ catch (err) {
654
+ if (isAbortError(err))
655
+ throw err;
656
+ fallbackErrors.push(`Ollama: ${errorMessage(err)}`);
657
+ }
658
+ }
659
+ if (isPerplexityAvailable()) {
660
+ try {
661
+ const result = await searchWithPerplexity(query, options);
662
+ return { ...result, provider: "perplexity" };
663
+ }
664
+ catch (err) {
665
+ if (isAbortError(err))
666
+ throw err;
667
+ fallbackErrors.push(`Perplexity: ${errorMessage(err)}`);
668
+ }
669
+ }
670
+ try {
671
+ const geminiResult = await searchWithGemini(query, options, false);
672
+ if (geminiResult)
673
+ return { ...geminiResult, provider: "gemini" };
674
+ }
675
+ catch (err) {
676
+ if (isAbortError(err))
677
+ throw err;
678
+ fallbackErrors.push(`Gemini: ${errorMessage(err)}`);
679
+ }
680
+ if (fallbackErrors.length > 0) {
681
+ throw new Error(`Auto provider search failed:\n - ${fallbackErrors.join("\n - ")}`);
682
+ }
683
+ throw new Error("No search provider available. Either:\n" +
684
+ " 1. Use /login to sign in with a Codex subscription for OpenAI web search\n" +
685
+ ` 2. Set openaiApiKey, braveApiKey, parallelApiKey, tinyfishApiKey, search1apiApiKey, searchinfinityApiKey, queritApiKey, tavilyApiKey, firecrawlBaseUrl, jinaApiKey, serpdiveApiKey, kagiApiKey, ollamaApiKey, searxngBaseUrl, perplexityApiKey, exaApiKey, geminiApiKey, bochaApiKey, or cloudflareApiKey in ${CONFIG_PATH}\n` +
686
+ " 3. Set OPENAI_API_KEY, BRAVE_API_KEY, PARALLEL_API_KEY, TINYFISH_API_KEY, SEARCH1API_KEY, SEARCHINFINITY_API_KEY, QUERIT_API_KEY, TAVILY_API_KEY, FIRECRAWL_BASE_URL, JINA_API_KEY, SERPDIVE_API_KEY, KAGI_API_KEY, BOCHA_API_KEY, OLLAMA_API_KEY, SEARXNG_BASE_URL, EXA_API_KEY, PERPLEXITY_API_KEY, GEMINI_API_KEY, or CLOUDFLARE_API_KEY env vars\n" +
687
+ " 4. Set GOOGLE_GEMINI_BASE_URL with CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\n" +
688
+ " 5. Sign into gemini.google.com in a supported Chromium-based browser\n" +
689
+ " 6. Explicitly select provider: \"anysearch\" for anonymous AnySearch, \"xai\" for Grok, \"brightdata\" with brightdataSerpZone for paid Bright Data SERP, or \"serpbase\" with serpbaseApiKey for paid Google SERP");
690
+ }
691
+ async function searchWithGeminiApi(query, options = {}) {
692
+ const requestSignal = AbortSignal.any([
693
+ AbortSignal.timeout(120000),
694
+ ...(options.signal ? [options.signal] : []),
695
+ ]);
696
+ const apiKey = await getApiKey(requestSignal);
697
+ if (!apiKey && !isGatewayConfigured())
698
+ return null;
699
+ const activityId = activityMonitor.logStart({ type: "api", query });
700
+ try {
701
+ const model = getSearchConfig().searchModel ?? DEFAULT_SEARCH_MODEL;
702
+ const body = {
703
+ contents: [{ role: "user", parts: [{ text: query }] }],
704
+ tools: [{ google_search: {} }],
705
+ };
706
+ const res = await fetchGeminiApi(`${getVersionedApiBase()}/models/${model}:generateContent`, {
707
+ method: "POST",
708
+ headers: { "Content-Type": "application/json" },
709
+ body: JSON.stringify(body),
710
+ signal: requestSignal,
711
+ }, apiKey);
712
+ if (!res.ok) {
713
+ const errorText = redactGeminiApiResponse(res, await res.text(), apiKey);
714
+ throw new Error(`Gemini API error ${res.status}: ${errorText.slice(0, 300)}`);
715
+ }
716
+ const data = await res.json();
717
+ activityMonitor.logComplete(activityId, res.status);
718
+ const answer = data.candidates?.[0]?.content?.parts
719
+ ?.map(p => p.text).filter(Boolean).join("\n") ?? "";
720
+ const metadata = data.candidates?.[0]?.groundingMetadata;
721
+ const results = await resolveGroundingChunks(metadata?.groundingChunks, options.signal);
722
+ if (!answer && results.length === 0)
723
+ return null;
724
+ return { answer, results };
725
+ }
726
+ catch (err) {
727
+ const message = err instanceof Error ? err.message : String(err);
728
+ if (message.toLowerCase().includes("abort")) {
729
+ activityMonitor.logComplete(activityId, 0);
730
+ }
731
+ else {
732
+ activityMonitor.logError(activityId, message);
733
+ }
734
+ throw err;
735
+ }
736
+ }
737
+ async function searchWithGeminiWeb(query, options = {}) {
738
+ const cookies = await isGeminiWebAvailable();
739
+ if (!cookies)
740
+ return null;
741
+ const prompt = buildSearchPrompt(query, options);
742
+ const activityId = activityMonitor.logStart({ type: "api", query });
743
+ try {
744
+ const text = await queryWithCookies(prompt, cookies, {
745
+ signal: options.signal,
746
+ timeoutMs: 120000,
747
+ });
748
+ activityMonitor.logComplete(activityId, 200);
749
+ const results = extractSourceUrls(text);
750
+ return { answer: text, results };
751
+ }
752
+ catch (err) {
753
+ const message = err instanceof Error ? err.message : String(err);
754
+ if (message.toLowerCase().includes("abort")) {
755
+ activityMonitor.logComplete(activityId, 0);
756
+ }
757
+ else {
758
+ activityMonitor.logError(activityId, message);
759
+ }
760
+ throw err;
761
+ }
762
+ }
763
+ function buildSearchPrompt(query, options) {
764
+ let prompt = `Search the web and answer the following question. Include source URLs for your claims.\nFormat your response as:\n1. A direct answer to the question\n2. Cited sources as markdown links\n\nQuestion: ${query}`;
765
+ if (options.recencyFilter) {
766
+ const labels = {
767
+ day: "past 24 hours",
768
+ week: "past week",
769
+ month: "past month",
770
+ year: "past year",
771
+ };
772
+ prompt += `\n\nOnly include results from the ${labels[options.recencyFilter]}.`;
773
+ }
774
+ if (options.domainFilter?.length) {
775
+ const includes = options.domainFilter.filter(d => !d.startsWith("-"));
776
+ const excludes = options.domainFilter.filter(d => d.startsWith("-")).map(d => d.slice(1));
777
+ if (includes.length)
778
+ prompt += `\n\nOnly cite sources from: ${includes.join(", ")}`;
779
+ if (excludes.length)
780
+ prompt += `\n\nDo not cite sources from: ${excludes.join(", ")}`;
781
+ }
782
+ return prompt;
783
+ }
784
+ function extractSourceUrls(markdown) {
785
+ const results = [];
786
+ const seen = new Set();
787
+ const linkRegex = /\[([^\]]+)\]\((https?:\/\/[^)]+)\)/g;
788
+ for (const match of markdown.matchAll(linkRegex)) {
789
+ const url = match[2];
790
+ if (seen.has(url))
791
+ continue;
792
+ seen.add(url);
793
+ results.push({ title: match[1], url, snippet: "" });
794
+ }
795
+ return results;
796
+ }
797
+ async function resolveGroundingChunks(chunks, signal) {
798
+ if (!chunks?.length)
799
+ return [];
800
+ const results = [];
801
+ for (const chunk of chunks) {
802
+ if (!chunk.web)
803
+ continue;
804
+ const title = chunk.web.title || "";
805
+ let url = chunk.web.uri || "";
806
+ if (url.includes("vertexaisearch.cloud.google.com/grounding-api-redirect")) {
807
+ const resolved = await resolveRedirect(url, signal);
808
+ if (resolved)
809
+ url = resolved;
810
+ }
811
+ if (url)
812
+ results.push({ title, url, snippet: "" });
813
+ }
814
+ return results;
815
+ }
816
+ async function resolveRedirect(proxyUrl, signal) {
817
+ try {
818
+ const res = await fetch(proxyUrl, {
819
+ method: "HEAD",
820
+ redirect: "manual",
821
+ signal: AbortSignal.any([
822
+ AbortSignal.timeout(5000),
823
+ ...(signal ? [signal] : []),
824
+ ]),
825
+ });
826
+ return res.headers.get("location") || null;
827
+ }
828
+ catch {
829
+ return null;
830
+ }
831
+ }
832
+ //# sourceMappingURL=gemini-search.js.map