@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
@@ -25,6 +25,7 @@ export interface McpProxyToolCallInput {
25
25
 
26
26
  interface McpToolRenderState {
27
27
  compactTitle?: string;
28
+ compactInputPreview?: string;
28
29
  }
29
30
 
30
31
  interface McpToolRenderContext {
@@ -52,6 +53,7 @@ export interface McpToolResultDisplay {
52
53
  }
53
54
 
54
55
  const DEFAULT_MAX_CALL_INPUT_CHARS = 1500;
56
+ const DEFAULT_MAX_COMPACT_INPUT_CHARS = 240;
55
57
  const DEFAULT_BOXED_COLLAPSED_LINES = 3;
56
58
  const DEFAULT_COMPACT_COLLAPSED_LINES = 1;
57
59
  const DEFAULT_MAX_COLLAPSED_CHARS = 8000;
@@ -70,6 +72,7 @@ class CompactMcpToolResult implements Component {
70
72
 
71
73
  constructor(
72
74
  private readonly title: string,
75
+ private readonly inputPreview: string,
73
76
  private readonly display: McpToolResultDisplay,
74
77
  private readonly theme: RenderTheme,
75
78
  ) {}
@@ -83,7 +86,7 @@ class CompactMcpToolResult implements Component {
83
86
  });
84
87
  const lines = resultLines.length > 0 ? resultLines : [""];
85
88
  const bodies = lines.map((line, index) => {
86
- const prefix = index === 0 && this.title ? `${this.theme.fg("toolTitle", this.title)} → ` : "";
89
+ const prefix = index === 0 ? this.renderPrefix(safeWidth) : "";
87
90
  return `${prefix}${this.theme.fg("toolOutput", line)}`;
88
91
  });
89
92
  const hiddenText = this.display.truncated || bodies.some((body) => visibleWidth(body) > safeWidth);
@@ -106,6 +109,22 @@ class CompactMcpToolResult implements Component {
106
109
  invalidate(): void {
107
110
  this.rendered = null;
108
111
  }
112
+
113
+ private renderPrefix(width: number): string {
114
+ if (!this.title) return "";
115
+ const arrow = " → ";
116
+ if (!this.inputPreview) return `${this.theme.fg("toolTitle", this.title)}${arrow}`;
117
+
118
+ const maxPrefixWidth = Math.max(12, Math.floor(width * 0.55));
119
+ const titleWidth = visibleWidth(this.title);
120
+ const inputWidth = Math.max(0, maxPrefixWidth - titleWidth - 1);
121
+ if (inputWidth <= 3) {
122
+ return `${this.theme.fg("toolTitle", truncateToWidth(this.title, maxPrefixWidth, "…"))}${arrow}`;
123
+ }
124
+
125
+ const input = truncateToWidth(this.inputPreview, inputWidth, "…");
126
+ return `${this.theme.fg("toolTitle", this.title)} ${this.theme.fg("muted", input)}${arrow}`;
127
+ }
109
128
  }
110
129
 
111
130
  class CollapsibleText implements Component {
@@ -239,6 +258,10 @@ function renderToolCallLines(lines: string[], theme?: RenderTheme) {
239
258
  return new Text([styledTitle, ...styledRest].join("\n"), 0, 0);
240
259
  }
241
260
 
261
+ function formatCompactInputPreview(lines: string[], maxChars = DEFAULT_MAX_COMPACT_INPUT_CHARS): string {
262
+ return truncateText(lines.slice(1).join(" ").replace(/\s+/g, " ").trim(), maxChars);
263
+ }
264
+
242
265
  export function resolveMcpToolRenderOptions(settings?: McpToolRenderSettings): McpToolRenderOptions {
243
266
  const resultRendering = settings?.toolResultRendering === "boxed" ? "boxed" : "compact";
244
267
  const collapsedLines = settings?.collapsedResultLines;
@@ -263,7 +286,10 @@ function renderToolCall(
263
286
  context: McpToolRenderContext | undefined,
264
287
  options: McpToolRenderOptions,
265
288
  ) {
266
- if (context?.state) context.state.compactTitle = lines[0] ?? "mcp";
289
+ if (context?.state) {
290
+ context.state.compactTitle = lines[0] ?? "mcp";
291
+ context.state.compactInputPreview = formatCompactInputPreview(lines);
292
+ }
267
293
  if (shouldUseCompactFinalRender(options, context)) return new EmptyComponent();
268
294
  return renderToolCallLines(lines, theme);
269
295
  }
@@ -307,6 +333,19 @@ function collectCollapsedResultLines(
307
333
  let truncated = false;
308
334
 
309
335
  const appendLine = (line: string) => {
336
+ if (lines.length === 0) {
337
+ const previewWidth = Math.min(line.length, remainingChars);
338
+ if (line.slice(0, previewWidth).trim() === "") {
339
+ if (line.length >= remainingChars) {
340
+ truncated = true;
341
+ remainingChars = 0;
342
+ return false;
343
+ }
344
+ remainingChars -= line.length + 1;
345
+ return true;
346
+ }
347
+ }
348
+
310
349
  if (lines.length >= maxLines || remainingChars <= 0) {
311
350
  truncated = true;
312
351
  return false;
@@ -342,7 +381,7 @@ function collectCollapsedResultLines(
342
381
  if (truncated) break;
343
382
  }
344
383
 
345
- if (lines.length === 0) lines.push("");
384
+ if (lines.length === 0) lines.push(truncated ? "(leading blank output omitted)" : "");
346
385
  if (truncated && lines.length >= maxLines) lines.push("…");
347
386
  return { lines, truncated };
348
387
  }
@@ -393,7 +432,8 @@ export function renderMcpToolResult(
393
432
  if (!expanded && renderOptions.resultRendering === "compact") {
394
433
  const display = formatMcpToolResultLines(result, false, renderOptions.collapsedResultLines);
395
434
  const title = context?.state?.compactTitle ?? formatMcpToolResultIdentity(result.details) ?? "";
396
- return new CompactMcpToolResult(title, display, activeTheme);
435
+ const inputPreview = context?.state?.compactInputPreview ?? "";
436
+ return new CompactMcpToolResult(title, inputPreview, display, activeTheme);
397
437
  }
398
438
 
399
439
  const display = formatMcpToolResultLines(result, expanded, renderOptions.collapsedResultLines);
@@ -392,6 +392,8 @@ export interface ServerEntry {
392
392
  auth?: "oauth" | "bearer" | false;
393
393
  bearerToken?: string;
394
394
  bearerTokenEnv?: string;
395
+ /** Read a static bearer token from the adapter-owned OS credential store. */
396
+ bearerTokenStore?: true;
395
397
  /**
396
398
  * OAuth configuration (optional).
397
399
  * If not provided, the SDK will attempt dynamic client registration.
@@ -10,7 +10,7 @@ import {
10
10
  import { ContentBlockSchema } from "@modelcontextprotocol/core";
11
11
  import type { ConsentManager } from "./consent-manager.ts";
12
12
  import { ServerError, wrapError } from "./errors.ts";
13
- import { formatAuthRequiredMessage } from "./utils.ts";
13
+ import { formatAuthRequiredMessage, normalizeToolArguments } from "./utils.ts";
14
14
  import { buildHostHtmlTemplate, buildCspMetaContent } from "./host-html-template.ts";
15
15
  import { logger } from "./logger.ts";
16
16
  import type { McpServerManager } from "./server-manager.ts";
@@ -113,6 +113,7 @@ export async function startUiServer(options: UiServerOptions): Promise<UiServerH
113
113
  let currentDisplayMode: UiDisplayMode = options.hostContext?.displayMode ?? "inline";
114
114
  let nextEventId = 1;
115
115
  const eventLog: Array<{ id: number; name: string; payload: unknown }> = [];
116
+ let latestCheckpointEventId: number | undefined;
116
117
  let streamSummary: UiStreamSummary | undefined;
117
118
 
118
119
  // Track messages from UI for retrieval
@@ -185,9 +186,12 @@ export async function startUiServer(options: UiServerOptions): Promise<UiServerH
185
186
  lastHeartbeatAt = Date.now();
186
187
  };
187
188
 
188
- const updateStreamSummary = (payload: unknown) => {
189
+ const updateStreamSummary = (eventId: number, payload: unknown) => {
189
190
  const envelope = getVisualizationStreamEnvelope((payload as { structuredContent?: unknown } | null)?.structuredContent);
190
191
  if (!envelope) return;
192
+ if (envelope.frameType === "checkpoint" || envelope.frameType === "final") {
193
+ latestCheckpointEventId = eventId;
194
+ }
191
195
  if (!streamSummary) {
192
196
  streamSummary = {
193
197
  streamId: envelope.streamId,
@@ -210,15 +214,9 @@ export async function startUiServer(options: UiServerOptions): Promise<UiServerH
210
214
  };
211
215
 
212
216
  const getLatestCheckpointIndex = () => {
213
- for (let index = eventLog.length - 1; index >= 0; index -= 1) {
214
- const entry = eventLog[index];
215
- if (!entry) continue;
216
- const envelope = getVisualizationStreamEnvelope((entry.payload as { structuredContent?: unknown } | null)?.structuredContent);
217
- if (envelope?.frameType === "checkpoint" || envelope?.frameType === "final") {
218
- return index;
219
- }
220
- }
221
- return -1;
217
+ const firstEventId = eventLog[0]?.id;
218
+ if (latestCheckpointEventId === undefined || firstEventId === undefined || latestCheckpointEventId < firstEventId) return -1;
219
+ return latestCheckpointEventId - firstEventId;
222
220
  };
223
221
 
224
222
  const pruneEventLog = () => {
@@ -238,7 +236,7 @@ export async function startUiServer(options: UiServerOptions): Promise<UiServerH
238
236
  if (completed) return;
239
237
  const eventId = nextEventId++;
240
238
  eventLog.push({ id: eventId, name, payload });
241
- updateStreamSummary(payload);
239
+ updateStreamSummary(eventId, payload);
242
240
  pruneEventLog();
243
241
  const chunk = serializeEvent(eventId, name, payload);
244
242
  for (const client of sseClients) {
@@ -438,12 +436,16 @@ export async function startUiServer(options: UiServerOptions): Promise<UiServerH
438
436
  return;
439
437
  }
440
438
 
439
+ let normalizedArguments: Record<string, unknown>;
440
+ try {
441
+ normalizedArguments = normalizeToolArguments(callParams.arguments, `tool "${callParams.name}" arguments`);
442
+ } catch (error) {
443
+ sendJson(res, 400, { ok: false, error: error instanceof Error ? error.message : String(error) });
444
+ return;
445
+ }
441
446
  const callArgs = {
442
447
  name: callParams.name,
443
- arguments:
444
- callParams.arguments && typeof callParams.arguments === "object" && !Array.isArray(callParams.arguments)
445
- ? callParams.arguments
446
- : {},
448
+ arguments: normalizedArguments,
447
449
  };
448
450
  const toolMeta = {
449
451
  name: callParams.name,
@@ -282,6 +282,76 @@ export function normalizeDirectToolInputSchema(schema: unknown): Record<string,
282
282
  return normalized;
283
283
  }
284
284
 
285
+ export function normalizeToolArguments(
286
+ value: unknown,
287
+ context = "tool arguments",
288
+ ): Record<string, unknown> {
289
+ if (value === undefined || value === null || value === "") return {};
290
+
291
+ if (typeof value === "string") {
292
+ const trimmed = value.trim();
293
+ if (trimmed === "") return {};
294
+ let parsed: unknown;
295
+ try {
296
+ parsed = JSON.parse(trimmed);
297
+ } catch (error) {
298
+ throw new Error(
299
+ `${context}: invalid args JSON (${error instanceof SyntaxError ? error.message : String(error)}); ` +
300
+ `pass args as a JSON object, or as a valid JSON string encoding one`,
301
+ { cause: error },
302
+ );
303
+ }
304
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
305
+ throw new Error(
306
+ `${context}: expected a JSON object, got ${Array.isArray(parsed) ? "array" : typeof parsed}`,
307
+ );
308
+ }
309
+ return parsed as Record<string, unknown>;
310
+ }
311
+
312
+ if (typeof value !== "object" || Array.isArray(value)) {
313
+ throw new Error(
314
+ `${context}: expected a JSON object, got ${Array.isArray(value) ? "array" : typeof value}`,
315
+ );
316
+ }
317
+
318
+ assertJsonSerializable(value, context);
319
+ try {
320
+ return JSON.parse(JSON.stringify(value)) as Record<string, unknown>;
321
+ } catch (error) {
322
+ throw new Error(
323
+ `${context}: value is not JSON-serializable: ${error instanceof Error ? error.message : String(error)}`,
324
+ { cause: error },
325
+ );
326
+ }
327
+ }
328
+
329
+ function assertJsonSerializable(value: unknown, context: string, path = ""): void {
330
+ if (value === null) return;
331
+ if (typeof value === "string" || typeof value === "boolean") return;
332
+ if (typeof value === "number") {
333
+ if (!Number.isFinite(value)) throw new Error(`${context}: value at ${path || "root"} is not a finite number`);
334
+ return;
335
+ }
336
+ if (Array.isArray(value)) {
337
+ for (const [index, item] of value.entries()) assertJsonSerializable(item, context, `${path}[${index}]`);
338
+ return;
339
+ }
340
+ if (typeof value === "object") {
341
+ if (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {
342
+ throw new Error(`${context}: value at ${path || "root"} is not a plain JSON object`);
343
+ }
344
+ if (Object.getOwnPropertySymbols(value).length > 0) {
345
+ throw new Error(`${context}: value at ${path || "root"} has symbol keys`);
346
+ }
347
+ for (const [key, item] of Object.entries(value)) {
348
+ assertJsonSerializable(item, context, path ? `${path}.${key}` : key);
349
+ }
350
+ return;
351
+ }
352
+ throw new Error(`${context}: value at ${path || "root"} is not JSON-serializable`);
353
+ }
354
+
285
355
  export function formatAuthRequiredMessage(
286
356
  config: Pick<McpConfig, "settings">,
287
357
  serverName: string,
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../src/humain/mcp-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,wBAAgB,sCAAsC,IAAI,gBAAgB,CAEzE","sourcesContent":["import type { ExtensionFactory } from \"../core/extensions/types.ts\";\nimport mcpAdapter from \"./mcp-adapter/vendor/index.bundle.mjs\";\n\nexport function createHumainMcpAdapterExtensionFactory(): ExtensionFactory {\n\treturn mcpAdapter;\n}\n"]}
1
+ {"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../src/humain/mcp-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,wBAAgB,sCAAsC,IAAI,gBAAgB,CAEzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../src/humain/mcp-adapter.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,uCAAuC,CAAC;AAE/D,MAAM,UAAU,sCAAsC,GAAqB;IAC1E,OAAO,UAAU,CAAC;AAAA,CAClB","sourcesContent":["import type { ExtensionFactory } from \"../core/extensions/types.ts\";\nimport mcpAdapter from \"./mcp-adapter/vendor/index.bundle.mjs\";\n\nexport function createHumainMcpAdapterExtensionFactory(): ExtensionFactory {\n\treturn mcpAdapter;\n}\n"]}
1
+ {"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../src/humain/mcp-adapter.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,uCAAuC,CAAC;AAE/D,MAAM,UAAU,sCAAsC;IACrD,OAAO,UAAU,CAAC;AACnB,CAAC","sourcesContent":["import type { ExtensionFactory } from \"../core/extensions/types.ts\";\nimport mcpAdapter from \"./mcp-adapter/vendor/index.bundle.mjs\";\n\nexport function createHumainMcpAdapterExtensionFactory(): ExtensionFactory {\n\treturn mcpAdapter;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pi-agent-execution-host.d.ts","sourceRoot":"","sources":["../../src/humain/pi-agent-execution-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAGhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAEX,wBAAwB,EAExB,MAAM,8BAA8B,CAAC;AAItC,KAAK,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE,OAAO,GAAG,eAAe,CAAC,CAAC;AAC1E,UAAU,kBAAkB;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC;IAChB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,qBAAqB,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AACD,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAAC;AAEvG,MAAM,WAAW,iCAAiC;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,IAAI,CACxB,yBAAyB,EACzB,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,gBAAgB,GAAG,eAAe,CACjE,CAAC;IACF,YAAY,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,GAAG,SAAS,CAAC;IACjE,aAAa,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,MAAM,yCAAyC,GAAG,IAAI,CAAC,iCAAiC,EAAE,cAAc,CAAC,GAC9G,OAAO,CAAC;AAET,wBAAgB,kCAAkC,CACjD,OAAO,EAAE,yCAAyC,GAChD,wBAAwB,CAM1B;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iCAAiC,GAAG,wBAAwB,CA8D/G","sourcesContent":["import type { CreateAgentSessionOptions } from \"../core/sdk.ts\";\nimport { createAgentSession } from \"../core/sdk.ts\";\nimport { SessionManager } from \"../core/session-manager.ts\";\nimport type { HumainAgentRouteRef } from \"./agent-execution-protocol.ts\";\nimport type {\n\tHumainAgentExecutionHandle,\n\tHumainAgentExecutionHost,\n\tHumainAgentHostCompletion,\n} from \"./agent-execution-runtime.ts\";\n\nconst UNKNOWN_USAGE = { status: \"unknown\" } as const;\n\ntype PiRoute = Pick<CreateAgentSessionOptions, \"model\" | \"thinkingLevel\">;\ninterface PiAgentSessionPort {\n\tabort(): Promise<void>;\n\tdispose(): void;\n\tgetLastAssistantText(): string | undefined;\n\treadonly isIdle: boolean;\n\treadonly messages: ReadonlyArray<{ role: string; stopReason?: string }>;\n\tprompt(text: string, options: { expandPromptTemplates: false; source: \"rpc\" }): Promise<void>;\n\twaitForIdle(): Promise<void>;\n}\ntype SessionFactory = (options: CreateAgentSessionOptions) => Promise<{ session: PiAgentSessionPort }>;\n\nexport interface CreatePiAgentExecutionHostOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tbaseSessionOptions?: Omit<\n\t\tCreateAgentSessionOptions,\n\t\t\"agentDir\" | \"cwd\" | \"model\" | \"sessionManager\" | \"thinkingLevel\"\n\t>;\n\tresolveRoute(routeRef: HumainAgentRouteRef): PiRoute | undefined;\n\tcreateSession?: SessionFactory;\n}\n\nexport type CreateAdmittedPiAgentExecutionHostOptions = Omit<CreatePiAgentExecutionHostOptions, \"resolveRoute\"> &\n\tPiRoute;\n\nexport function createAdmittedPiAgentExecutionHost(\n\toptions: CreateAdmittedPiAgentExecutionHostOptions,\n): HumainAgentExecutionHost {\n\tconst { model, thinkingLevel, ...hostOptions } = options;\n\treturn createPiAgentExecutionHost({\n\t\t...hostOptions,\n\t\tresolveRoute: () => (model ? { model, thinkingLevel } : undefined),\n\t});\n}\n\nexport function createPiAgentExecutionHost(options: CreatePiAgentExecutionHostOptions): HumainAgentExecutionHost {\n\tconst sessionFactory = options.createSession ?? createAgentSession;\n\treturn {\n\t\tasync launch(request) {\n\t\t\tconst route = options.resolveRoute(request.routeRef);\n\t\t\tif (!route?.model) return null;\n\t\t\tconst { session } = await sessionFactory({\n\t\t\t\t...options.baseSessionOptions,\n\t\t\t\tcwd: options.cwd,\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tmodel: route.model,\n\t\t\t\tthinkingLevel: route.thinkingLevel,\n\t\t\t\tsessionManager: SessionManager.inMemory(options.cwd),\n\t\t\t});\n\t\t\tlet cancellationRequested = false;\n\t\t\tconst completion = (async (): Promise<HumainAgentHostCompletion> => {\n\t\t\t\ttry {\n\t\t\t\t\tawait session.prompt(request.task, { expandPromptTemplates: false, source: \"rpc\" });\n\t\t\t\t\tconst usage = UNKNOWN_USAGE;\n\t\t\t\t\tconst lastAssistant = session.messages\n\t\t\t\t\t\t.slice()\n\t\t\t\t\t\t.reverse()\n\t\t\t\t\t\t.find((message) => message.role === \"assistant\");\n\t\t\t\t\tconst stopReason = lastAssistant && \"stopReason\" in lastAssistant ? lastAssistant.stopReason : undefined;\n\t\t\t\t\tif (stopReason === \"aborted\" || cancellationRequested) {\n\t\t\t\t\t\treturn { kind: \"cancelled\", terminationConfirmed: session.isIdle, usage };\n\t\t\t\t\t}\n\t\t\t\t\tif (stopReason === \"error\") {\n\t\t\t\t\t\treturn { kind: \"failed\", failureCode: \"adapter_execution_failed\", usage };\n\t\t\t\t\t}\n\t\t\t\t\tconst summary = session.getLastAssistantText()?.trim();\n\t\t\t\t\tif (!summary) return { kind: \"failed\", failureCode: \"invalid_adapter_result\", usage };\n\t\t\t\t\treturn { kind: \"succeeded\", output: { summary, artifacts: [] }, usage };\n\t\t\t\t} catch {\n\t\t\t\t\treturn cancellationRequested\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tkind: \"cancelled\",\n\t\t\t\t\t\t\t\tterminationConfirmed: session.isIdle,\n\t\t\t\t\t\t\t\tusage: UNKNOWN_USAGE,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tkind: \"failed\",\n\t\t\t\t\t\t\t\tfailureCode: \"adapter_execution_failed\",\n\t\t\t\t\t\t\t\tusage: UNKNOWN_USAGE,\n\t\t\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})();\n\t\t\tconst handle: HumainAgentExecutionHandle = {\n\t\t\t\tcompletion,\n\t\t\t\tasync cancel() {\n\t\t\t\t\tcancellationRequested = true;\n\t\t\t\t\tawait session.abort();\n\t\t\t\t\tawait session.waitForIdle();\n\t\t\t\t\treturn { terminationConfirmed: session.isIdle };\n\t\t\t\t},\n\t\t\t\tdispose() {\n\t\t\t\t\tsession.dispose();\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn handle;\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"pi-agent-execution-host.d.ts","sourceRoot":"","sources":["../../src/humain/pi-agent-execution-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAGhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAEX,wBAAwB,EAExB,MAAM,8BAA8B,CAAC;AAItC,KAAK,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE,OAAO,GAAG,eAAe,CAAC,CAAC;AAC1E,UAAU,kBAAkB;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC;IAChB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,qBAAqB,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AACD,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAAC;AAEvG,MAAM,WAAW,iCAAiC;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,IAAI,CACxB,yBAAyB,EACzB,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,gBAAgB,GAAG,eAAe,CACjE,CAAC;IACF,YAAY,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,GAAG,SAAS,CAAC;IACjE,aAAa,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,MAAM,yCAAyC,GAAG,IAAI,CAAC,iCAAiC,EAAE,cAAc,CAAC,GAC9G,OAAO,CAAC;AAET,wBAAgB,kCAAkC,CACjD,OAAO,EAAE,yCAAyC,GAChD,wBAAwB,CAM1B;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iCAAiC,GAAG,wBAAwB,CA8D/G"}
@@ -1 +1 @@
1
- {"version":3,"file":"pi-agent-execution-host.js","sourceRoot":"","sources":["../../src/humain/pi-agent-execution-host.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CreateAgentSessionOptions } from \"../core/sdk.ts\";\nimport { createAgentSession } from \"../core/sdk.ts\";\nimport { SessionManager } from \"../core/session-manager.ts\";\nimport type { HumainAgentRouteRef } from \"./agent-execution-protocol.ts\";\nimport type {\n\tHumainAgentExecutionHandle,\n\tHumainAgentExecutionHost,\n\tHumainAgentHostCompletion,\n} from \"./agent-execution-runtime.ts\";\n\nconst UNKNOWN_USAGE = { status: \"unknown\" } as const;\n\ntype PiRoute = Pick<CreateAgentSessionOptions, \"model\" | \"thinkingLevel\">;\ninterface PiAgentSessionPort {\n\tabort(): Promise<void>;\n\tdispose(): void;\n\tgetLastAssistantText(): string | undefined;\n\treadonly isIdle: boolean;\n\treadonly messages: ReadonlyArray<{ role: string; stopReason?: string }>;\n\tprompt(text: string, options: { expandPromptTemplates: false; source: \"rpc\" }): Promise<void>;\n\twaitForIdle(): Promise<void>;\n}\ntype SessionFactory = (options: CreateAgentSessionOptions) => Promise<{ session: PiAgentSessionPort }>;\n\nexport interface CreatePiAgentExecutionHostOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tbaseSessionOptions?: Omit<\n\t\tCreateAgentSessionOptions,\n\t\t\"agentDir\" | \"cwd\" | \"model\" | \"sessionManager\" | \"thinkingLevel\"\n\t>;\n\tresolveRoute(routeRef: HumainAgentRouteRef): PiRoute | undefined;\n\tcreateSession?: SessionFactory;\n}\n\nexport type CreateAdmittedPiAgentExecutionHostOptions = Omit<CreatePiAgentExecutionHostOptions, \"resolveRoute\"> &\n\tPiRoute;\n\nexport function createAdmittedPiAgentExecutionHost(\n\toptions: CreateAdmittedPiAgentExecutionHostOptions,\n): HumainAgentExecutionHost {\n\tconst { model, thinkingLevel, ...hostOptions } = options;\n\treturn createPiAgentExecutionHost({\n\t\t...hostOptions,\n\t\tresolveRoute: () => (model ? { model, thinkingLevel } : undefined),\n\t});\n}\n\nexport function createPiAgentExecutionHost(options: CreatePiAgentExecutionHostOptions): HumainAgentExecutionHost {\n\tconst sessionFactory = options.createSession ?? createAgentSession;\n\treturn {\n\t\tasync launch(request) {\n\t\t\tconst route = options.resolveRoute(request.routeRef);\n\t\t\tif (!route?.model) return null;\n\t\t\tconst { session } = await sessionFactory({\n\t\t\t\t...options.baseSessionOptions,\n\t\t\t\tcwd: options.cwd,\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tmodel: route.model,\n\t\t\t\tthinkingLevel: route.thinkingLevel,\n\t\t\t\tsessionManager: SessionManager.inMemory(options.cwd),\n\t\t\t});\n\t\t\tlet cancellationRequested = false;\n\t\t\tconst completion = (async (): Promise<HumainAgentHostCompletion> => {\n\t\t\t\ttry {\n\t\t\t\t\tawait session.prompt(request.task, { expandPromptTemplates: false, source: \"rpc\" });\n\t\t\t\t\tconst usage = UNKNOWN_USAGE;\n\t\t\t\t\tconst lastAssistant = session.messages\n\t\t\t\t\t\t.slice()\n\t\t\t\t\t\t.reverse()\n\t\t\t\t\t\t.find((message) => message.role === \"assistant\");\n\t\t\t\t\tconst stopReason = lastAssistant && \"stopReason\" in lastAssistant ? lastAssistant.stopReason : undefined;\n\t\t\t\t\tif (stopReason === \"aborted\" || cancellationRequested) {\n\t\t\t\t\t\treturn { kind: \"cancelled\", terminationConfirmed: session.isIdle, usage };\n\t\t\t\t\t}\n\t\t\t\t\tif (stopReason === \"error\") {\n\t\t\t\t\t\treturn { kind: \"failed\", failureCode: \"adapter_execution_failed\", usage };\n\t\t\t\t\t}\n\t\t\t\t\tconst summary = session.getLastAssistantText()?.trim();\n\t\t\t\t\tif (!summary) return { kind: \"failed\", failureCode: \"invalid_adapter_result\", usage };\n\t\t\t\t\treturn { kind: \"succeeded\", output: { summary, artifacts: [] }, usage };\n\t\t\t\t} catch {\n\t\t\t\t\treturn cancellationRequested\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tkind: \"cancelled\",\n\t\t\t\t\t\t\t\tterminationConfirmed: session.isIdle,\n\t\t\t\t\t\t\t\tusage: UNKNOWN_USAGE,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tkind: \"failed\",\n\t\t\t\t\t\t\t\tfailureCode: \"adapter_execution_failed\",\n\t\t\t\t\t\t\t\tusage: UNKNOWN_USAGE,\n\t\t\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})();\n\t\t\tconst handle: HumainAgentExecutionHandle = {\n\t\t\t\tcompletion,\n\t\t\t\tasync cancel() {\n\t\t\t\t\tcancellationRequested = true;\n\t\t\t\t\tawait session.abort();\n\t\t\t\t\tawait session.waitForIdle();\n\t\t\t\t\treturn { terminationConfirmed: session.isIdle };\n\t\t\t\t},\n\t\t\t\tdispose() {\n\t\t\t\t\tsession.dispose();\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn handle;\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"pi-agent-execution-host.js","sourceRoot":"","sources":["../../src/humain/pi-agent-execution-host.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CreateAgentSessionOptions } from \"../core/sdk.ts\";\nimport { createAgentSession } from \"../core/sdk.ts\";\nimport { SessionManager } from \"../core/session-manager.ts\";\nimport type { HumainAgentRouteRef } from \"./agent-execution-protocol.ts\";\nimport type {\n\tHumainAgentExecutionHandle,\n\tHumainAgentExecutionHost,\n\tHumainAgentHostCompletion,\n} from \"./agent-execution-runtime.ts\";\n\nconst UNKNOWN_USAGE = { status: \"unknown\" } as const;\n\ntype PiRoute = Pick<CreateAgentSessionOptions, \"model\" | \"thinkingLevel\">;\ninterface PiAgentSessionPort {\n\tabort(): Promise<void>;\n\tdispose(): void;\n\tgetLastAssistantText(): string | undefined;\n\treadonly isIdle: boolean;\n\treadonly messages: ReadonlyArray<{ role: string; stopReason?: string }>;\n\tprompt(text: string, options: { expandPromptTemplates: false; source: \"rpc\" }): Promise<void>;\n\twaitForIdle(): Promise<void>;\n}\ntype SessionFactory = (options: CreateAgentSessionOptions) => Promise<{ session: PiAgentSessionPort }>;\n\nexport interface CreatePiAgentExecutionHostOptions {\n\tcwd: string;\n\tagentDir?: string;\n\tbaseSessionOptions?: Omit<\n\t\tCreateAgentSessionOptions,\n\t\t\"agentDir\" | \"cwd\" | \"model\" | \"sessionManager\" | \"thinkingLevel\"\n\t>;\n\tresolveRoute(routeRef: HumainAgentRouteRef): PiRoute | undefined;\n\tcreateSession?: SessionFactory;\n}\n\nexport type CreateAdmittedPiAgentExecutionHostOptions = Omit<CreatePiAgentExecutionHostOptions, \"resolveRoute\"> &\n\tPiRoute;\n\nexport function createAdmittedPiAgentExecutionHost(\n\toptions: CreateAdmittedPiAgentExecutionHostOptions,\n): HumainAgentExecutionHost {\n\tconst { model, thinkingLevel, ...hostOptions } = options;\n\treturn createPiAgentExecutionHost({\n\t\t...hostOptions,\n\t\tresolveRoute: () => (model ? { model, thinkingLevel } : undefined),\n\t});\n}\n\nexport function createPiAgentExecutionHost(options: CreatePiAgentExecutionHostOptions): HumainAgentExecutionHost {\n\tconst sessionFactory = options.createSession ?? createAgentSession;\n\treturn {\n\t\tasync launch(request) {\n\t\t\tconst route = options.resolveRoute(request.routeRef);\n\t\t\tif (!route?.model) return null;\n\t\t\tconst { session } = await sessionFactory({\n\t\t\t\t...options.baseSessionOptions,\n\t\t\t\tcwd: options.cwd,\n\t\t\t\tagentDir: options.agentDir,\n\t\t\t\tmodel: route.model,\n\t\t\t\tthinkingLevel: route.thinkingLevel,\n\t\t\t\tsessionManager: SessionManager.inMemory(options.cwd),\n\t\t\t});\n\t\t\tlet cancellationRequested = false;\n\t\t\tconst completion = (async (): Promise<HumainAgentHostCompletion> => {\n\t\t\t\ttry {\n\t\t\t\t\tawait session.prompt(request.task, { expandPromptTemplates: false, source: \"rpc\" });\n\t\t\t\t\tconst usage = UNKNOWN_USAGE;\n\t\t\t\t\tconst lastAssistant = session.messages\n\t\t\t\t\t\t.slice()\n\t\t\t\t\t\t.reverse()\n\t\t\t\t\t\t.find((message) => message.role === \"assistant\");\n\t\t\t\t\tconst stopReason = lastAssistant && \"stopReason\" in lastAssistant ? lastAssistant.stopReason : undefined;\n\t\t\t\t\tif (stopReason === \"aborted\" || cancellationRequested) {\n\t\t\t\t\t\treturn { kind: \"cancelled\", terminationConfirmed: session.isIdle, usage };\n\t\t\t\t\t}\n\t\t\t\t\tif (stopReason === \"error\") {\n\t\t\t\t\t\treturn { kind: \"failed\", failureCode: \"adapter_execution_failed\", usage };\n\t\t\t\t\t}\n\t\t\t\t\tconst summary = session.getLastAssistantText()?.trim();\n\t\t\t\t\tif (!summary) return { kind: \"failed\", failureCode: \"invalid_adapter_result\", usage };\n\t\t\t\t\treturn { kind: \"succeeded\", output: { summary, artifacts: [] }, usage };\n\t\t\t\t} catch {\n\t\t\t\t\treturn cancellationRequested\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tkind: \"cancelled\",\n\t\t\t\t\t\t\t\tterminationConfirmed: session.isIdle,\n\t\t\t\t\t\t\t\tusage: UNKNOWN_USAGE,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tkind: \"failed\",\n\t\t\t\t\t\t\t\tfailureCode: \"adapter_execution_failed\",\n\t\t\t\t\t\t\t\tusage: UNKNOWN_USAGE,\n\t\t\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})();\n\t\t\tconst handle: HumainAgentExecutionHandle = {\n\t\t\t\tcompletion,\n\t\t\t\tasync cancel() {\n\t\t\t\t\tcancellationRequested = true;\n\t\t\t\t\tawait session.abort();\n\t\t\t\t\tawait session.waitForIdle();\n\t\t\t\t\treturn { terminationConfirmed: session.isIdle };\n\t\t\t\t},\n\t\t\t\tdispose() {\n\t\t\t\t\tsession.dispose();\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn handle;\n\t\t},\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/humain/web-access/host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC","sourcesContent":["export { getAgentDir } from \"../../config.ts\";\nexport type { AgentToolResult, ExtensionAPI, ExtensionContext } from \"../../core/extensions/types.ts\";\nexport { resizeImage } from \"../../utils/image-resize.ts\";\n"]}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/humain/web-access/host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/humain/web-access/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAGvE,wBAAgB,qCAAqC,IAAI,gBAAgB,CAExE","sourcesContent":["import type { ExtensionFactory } from \"../../core/extensions/types.ts\";\nimport webAccessExtension from \"./vendor/index.ts\";\n\nexport function createHumainWebAccessExtensionFactory(): ExtensionFactory {\n\treturn webAccessExtension;\n}\n"]}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/humain/web-access/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAGvE,wBAAgB,qCAAqC,IAAI,gBAAgB,CAExE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/humain/web-access/index.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,mBAAmB,CAAC;AAEnD,MAAM,UAAU,qCAAqC,GAAqB;IACzE,OAAO,kBAAkB,CAAC;AAAA,CAC1B","sourcesContent":["import type { ExtensionFactory } from \"../../core/extensions/types.ts\";\nimport webAccessExtension from \"./vendor/index.ts\";\n\nexport function createHumainWebAccessExtensionFactory(): ExtensionFactory {\n\treturn webAccessExtension;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/humain/web-access/index.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,mBAAmB,CAAC;AAEnD,MAAM,UAAU,qCAAqC;IACpD,OAAO,kBAAkB,CAAC;AAC3B,CAAC","sourcesContent":["import type { ExtensionFactory } from \"../../core/extensions/types.ts\";\nimport webAccessExtension from \"./vendor/index.ts\";\n\nexport function createHumainWebAccessExtensionFactory(): ExtensionFactory {\n\treturn webAccessExtension;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/activity.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAe;IAC3B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,aAAa,CAA+E;IACpG,OAAO,CAAC,MAAM,CAAK;IAEnB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,GAAG,QAAQ,CAAC,GAAG,MAAM,CAc5E;IAED,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAO5C;IAED,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOxC;IAED,UAAU,IAAI,SAAS,aAAa,EAAE,CAErC;IAED,gBAAgB,IAAI,aAAa,CAEhC;IAED,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAGzC;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAGzC;IAED,KAAK,IAAI,IAAI,CAIZ;IAED,OAAO,CAAC,MAAM;CAQd;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC","sourcesContent":["// Types\nexport interface ActivityEntry {\n\tid: string;\n\ttype: \"api\" | \"fetch\";\n\tstartTime: number;\n\tendTime?: number;\n\n\t// For API calls\n\tquery?: string;\n\n\t// For URL fetches\n\turl?: string;\n\n\t// Result - status is number (HTTP code) or null (pending/network error)\n\tstatus: number | null;\n\terror?: string;\n}\n\nexport interface RateLimitInfo {\n\tused: number;\n\tmax: number;\n\toldestTimestamp: number | null;\n\twindowMs: number;\n}\n\nexport class ActivityMonitor {\n\tprivate entries: ActivityEntry[] = [];\n\tprivate readonly maxEntries = 10;\n\tprivate listeners = new Set<() => void>();\n\tprivate rateLimitInfo: RateLimitInfo = { used: 0, max: 10, oldestTimestamp: null, windowMs: 60000 };\n\tprivate nextId = 1;\n\n\tlogStart(partial: Omit<ActivityEntry, \"id\" | \"startTime\" | \"status\">): string {\n\t\tconst id = `act-${this.nextId++}`;\n\t\tconst entry: ActivityEntry = {\n\t\t\t...partial,\n\t\t\tid,\n\t\t\tstartTime: Date.now(),\n\t\t\tstatus: null,\n\t\t};\n\t\tthis.entries.push(entry);\n\t\tif (this.entries.length > this.maxEntries) {\n\t\t\tthis.entries.shift();\n\t\t}\n\t\tthis.notify();\n\t\treturn id;\n\t}\n\n\tlogComplete(id: string, status: number): void {\n\t\tconst entry = this.entries.find((e) => e.id === id);\n\t\tif (entry) {\n\t\t\tentry.endTime = Date.now();\n\t\t\tentry.status = status;\n\t\t\tthis.notify();\n\t\t}\n\t}\n\n\tlogError(id: string, error: string): void {\n\t\tconst entry = this.entries.find((e) => e.id === id);\n\t\tif (entry) {\n\t\t\tentry.endTime = Date.now();\n\t\t\tentry.error = error;\n\t\t\tthis.notify();\n\t\t}\n\t}\n\n\tgetEntries(): readonly ActivityEntry[] {\n\t\treturn this.entries;\n\t}\n\n\tgetRateLimitInfo(): RateLimitInfo {\n\t\treturn this.rateLimitInfo;\n\t}\n\n\tupdateRateLimit(info: RateLimitInfo): void {\n\t\tthis.rateLimitInfo = info;\n\t\tthis.notify();\n\t}\n\n\tonUpdate(callback: () => void): () => void {\n\t\tthis.listeners.add(callback);\n\t\treturn () => this.listeners.delete(callback);\n\t}\n\n\tclear(): void {\n\t\tthis.entries = [];\n\t\tthis.rateLimitInfo = { used: 0, max: 10, oldestTimestamp: null, windowMs: 60000 };\n\t\tthis.notify();\n\t}\n\n\tprivate notify(): void {\n\t\tfor (const cb of this.listeners) {\n\t\t\ttry {\n\t\t\t\tcb();\n\t\t\t} catch {\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const activityMonitor = new ActivityMonitor();\n"]}
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/activity.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAe;IAC3B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,aAAa,CAA+E;IACpG,OAAO,CAAC,MAAM,CAAK;IAEnB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,GAAG,QAAQ,CAAC,GAAG,MAAM,CAc5E;IAED,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAO5C;IAED,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOxC;IAED,UAAU,IAAI,SAAS,aAAa,EAAE,CAErC;IAED,gBAAgB,IAAI,aAAa,CAEhC;IAED,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAGzC;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAGzC;IAED,KAAK,IAAI,IAAI,CAIZ;IAED,OAAO,CAAC,MAAM;CAQd;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -1,9 +1,11 @@
1
1
  export class ActivityMonitor {
2
- entries = [];
3
- maxEntries = 10;
4
- listeners = new Set();
5
- rateLimitInfo = { used: 0, max: 10, oldestTimestamp: null, windowMs: 60000 };
6
- nextId = 1;
2
+ constructor() {
3
+ this.entries = [];
4
+ this.maxEntries = 10;
5
+ this.listeners = new Set();
6
+ this.rateLimitInfo = { used: 0, max: 10, oldestTimestamp: null, windowMs: 60000 };
7
+ this.nextId = 1;
8
+ }
7
9
  logStart(partial) {
8
10
  const id = `act-${this.nextId++}`;
9
11
  const entry = {
@@ -1 +1 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/activity.ts"],"names":[],"mappings":"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","sourcesContent":["// Types\nexport interface ActivityEntry {\n\tid: string;\n\ttype: \"api\" | \"fetch\";\n\tstartTime: number;\n\tendTime?: number;\n\n\t// For API calls\n\tquery?: string;\n\n\t// For URL fetches\n\turl?: string;\n\n\t// Result - status is number (HTTP code) or null (pending/network error)\n\tstatus: number | null;\n\terror?: string;\n}\n\nexport interface RateLimitInfo {\n\tused: number;\n\tmax: number;\n\toldestTimestamp: number | null;\n\twindowMs: number;\n}\n\nexport class ActivityMonitor {\n\tprivate entries: ActivityEntry[] = [];\n\tprivate readonly maxEntries = 10;\n\tprivate listeners = new Set<() => void>();\n\tprivate rateLimitInfo: RateLimitInfo = { used: 0, max: 10, oldestTimestamp: null, windowMs: 60000 };\n\tprivate nextId = 1;\n\n\tlogStart(partial: Omit<ActivityEntry, \"id\" | \"startTime\" | \"status\">): string {\n\t\tconst id = `act-${this.nextId++}`;\n\t\tconst entry: ActivityEntry = {\n\t\t\t...partial,\n\t\t\tid,\n\t\t\tstartTime: Date.now(),\n\t\t\tstatus: null,\n\t\t};\n\t\tthis.entries.push(entry);\n\t\tif (this.entries.length > this.maxEntries) {\n\t\t\tthis.entries.shift();\n\t\t}\n\t\tthis.notify();\n\t\treturn id;\n\t}\n\n\tlogComplete(id: string, status: number): void {\n\t\tconst entry = this.entries.find((e) => e.id === id);\n\t\tif (entry) {\n\t\t\tentry.endTime = Date.now();\n\t\t\tentry.status = status;\n\t\t\tthis.notify();\n\t\t}\n\t}\n\n\tlogError(id: string, error: string): void {\n\t\tconst entry = this.entries.find((e) => e.id === id);\n\t\tif (entry) {\n\t\t\tentry.endTime = Date.now();\n\t\t\tentry.error = error;\n\t\t\tthis.notify();\n\t\t}\n\t}\n\n\tgetEntries(): readonly ActivityEntry[] {\n\t\treturn this.entries;\n\t}\n\n\tgetRateLimitInfo(): RateLimitInfo {\n\t\treturn this.rateLimitInfo;\n\t}\n\n\tupdateRateLimit(info: RateLimitInfo): void {\n\t\tthis.rateLimitInfo = info;\n\t\tthis.notify();\n\t}\n\n\tonUpdate(callback: () => void): () => void {\n\t\tthis.listeners.add(callback);\n\t\treturn () => this.listeners.delete(callback);\n\t}\n\n\tclear(): void {\n\t\tthis.entries = [];\n\t\tthis.rateLimitInfo = { used: 0, max: 10, oldestTimestamp: null, windowMs: 60000 };\n\t\tthis.notify();\n\t}\n\n\tprivate notify(): void {\n\t\tfor (const cb of this.listeners) {\n\t\t\ttry {\n\t\t\t\tcb();\n\t\t\t} catch {\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const activityMonitor = new ActivityMonitor();\n"]}
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/activity.ts"],"names":[],"mappings":"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","sourcesContent":["// Types\nexport interface ActivityEntry {\n\tid: string;\n\ttype: \"api\" | \"fetch\";\n\tstartTime: number;\n\tendTime?: number;\n\n\t// For API calls\n\tquery?: string;\n\n\t// For URL fetches\n\turl?: string;\n\n\t// Result - status is number (HTTP code) or null (pending/network error)\n\tstatus: number | null;\n\terror?: string;\n}\n\nexport interface RateLimitInfo {\n\tused: number;\n\tmax: number;\n\toldestTimestamp: number | null;\n\twindowMs: number;\n}\n\nexport class ActivityMonitor {\n\tprivate entries: ActivityEntry[] = [];\n\tprivate readonly maxEntries = 10;\n\tprivate listeners = new Set<() => void>();\n\tprivate rateLimitInfo: RateLimitInfo = { used: 0, max: 10, oldestTimestamp: null, windowMs: 60000 };\n\tprivate nextId = 1;\n\n\tlogStart(partial: Omit<ActivityEntry, \"id\" | \"startTime\" | \"status\">): string {\n\t\tconst id = `act-${this.nextId++}`;\n\t\tconst entry: ActivityEntry = {\n\t\t\t...partial,\n\t\t\tid,\n\t\t\tstartTime: Date.now(),\n\t\t\tstatus: null,\n\t\t};\n\t\tthis.entries.push(entry);\n\t\tif (this.entries.length > this.maxEntries) {\n\t\t\tthis.entries.shift();\n\t\t}\n\t\tthis.notify();\n\t\treturn id;\n\t}\n\n\tlogComplete(id: string, status: number): void {\n\t\tconst entry = this.entries.find((e) => e.id === id);\n\t\tif (entry) {\n\t\t\tentry.endTime = Date.now();\n\t\t\tentry.status = status;\n\t\t\tthis.notify();\n\t\t}\n\t}\n\n\tlogError(id: string, error: string): void {\n\t\tconst entry = this.entries.find((e) => e.id === id);\n\t\tif (entry) {\n\t\t\tentry.endTime = Date.now();\n\t\t\tentry.error = error;\n\t\t\tthis.notify();\n\t\t}\n\t}\n\n\tgetEntries(): readonly ActivityEntry[] {\n\t\treturn this.entries;\n\t}\n\n\tgetRateLimitInfo(): RateLimitInfo {\n\t\treturn this.rateLimitInfo;\n\t}\n\n\tupdateRateLimit(info: RateLimitInfo): void {\n\t\tthis.rateLimitInfo = info;\n\t\tthis.notify();\n\t}\n\n\tonUpdate(callback: () => void): () => void {\n\t\tthis.listeners.add(callback);\n\t\treturn () => this.listeners.delete(callback);\n\t}\n\n\tclear(): void {\n\t\tthis.entries = [];\n\t\tthis.rateLimitInfo = { used: 0, max: 10, oldestTimestamp: null, windowMs: 60000 };\n\t\tthis.notify();\n\t}\n\n\tprivate notify(): void {\n\t\tfor (const cb of this.listeners) {\n\t\t\ttry {\n\t\t\t\tcb();\n\t\t\t} catch {\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const activityMonitor = new ActivityMonitor();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"anysearch.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/anysearch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAmBrE,UAAU,sBAAuB,SAAQ,aAAa;IACrD,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAiGD,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,cAAc,CAAC,CAkEtH","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { activityMonitor } from \"./activity.ts\";\nimport type { ExtractedContent } from \"./extract.ts\";\nimport type { SearchOptions, SearchResponse } from \"./perplexity.ts\";\nimport { redactCredential, resolveCredential } from \"./credential-source.ts\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nconst ANYSEARCH_API_URL = \"https://api.anysearch.com/v1/search\";\nconst CONFIG_PATH = getWebSearchConfigPath();\nconst SEARCH_TIMEOUT_MS = 30_000;\n\ninterface WebSearchConfig {\n\tanysearchApiKey?: unknown;\n}\n\ninterface AnySearchResult {\n\ttitle: string;\n\turl: string;\n\tsnippet: string;\n\tcontent: string;\n}\n\ninterface AnySearchSearchOptions extends SearchOptions {\n\tincludeContent?: boolean;\n}\n\ninterface AnySearchResponse {\n\tcode: 0;\n\tdata: {\n\t\tresults: AnySearchResult[];\n\t\tmetadata: Record<string, unknown>;\n\t};\n}\n\nlet cachedConfig: WebSearchConfig | null = null;\n\nfunction loadConfig(): WebSearchConfig {\n\tif (cachedConfig) return cachedConfig;\n\tif (!existsSync(CONFIG_PATH)) {\n\t\tcachedConfig = {};\n\t\treturn cachedConfig;\n\t}\n\n\tconst raw = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(raw);\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(`Invalid config in ${CONFIG_PATH}: expected a JSON object`);\n\t}\n\tcachedConfig = parsed as WebSearchConfig;\n\treturn cachedConfig;\n}\n\nasync function getApiKey(signal?: AbortSignal): Promise<string | null> {\n\treturn resolveCredential({\n\t\tprovider: \"AnySearch\",\n\t\tconfiguredValue: loadConfig().anysearchApiKey,\n\t\tenvironmentValue: process.env.ANYSEARCH_API_KEY,\n\t\tsignal,\n\t});\n}\n\nfunction normalizeCount(value: number | undefined): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) return 5;\n\treturn Math.max(1, Math.min(Math.floor(value), 20));\n}\n\nfunction errorMessage(err: unknown): string {\n\treturn err instanceof Error ? err.message : String(err);\n}\n\nfunction invalidResponse(message: string): Error {\n\treturn new Error(`AnySearch API returned invalid response: ${message}`);\n}\n\nfunction parseResponse(value: unknown): AnySearchResponse {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow invalidResponse(\"expected an object envelope\");\n\t}\n\tconst envelope = value as Record<string, unknown>;\n\tif (envelope.code !== 0) throw invalidResponse(\"expected code 0\");\n\tif (!envelope.data || typeof envelope.data !== \"object\" || Array.isArray(envelope.data)) {\n\t\tthrow invalidResponse(\"expected data object\");\n\t}\n\tconst data = envelope.data as Record<string, unknown>;\n\tif (!Array.isArray(data.results)) throw invalidResponse(\"expected data.results array\");\n\tif (!data.metadata || typeof data.metadata !== \"object\" || Array.isArray(data.metadata)) {\n\t\tthrow invalidResponse(\"expected data.metadata object\");\n\t}\n\n\tconst results: AnySearchResult[] = [];\n\tfor (const [index, value] of data.results.entries()) {\n\t\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\t\tthrow invalidResponse(`expected data.results[${index}] object`);\n\t\t}\n\t\tconst result = value as Record<string, unknown>;\n\t\tconst { title, url, snippet, content } = result;\n\t\tif (typeof title !== \"string\") throw invalidResponse(`expected data.results[${index}].title string`);\n\t\tif (typeof url !== \"string\") throw invalidResponse(`expected data.results[${index}].url string`);\n\t\tif (typeof snippet !== \"string\") throw invalidResponse(`expected data.results[${index}].snippet string`);\n\t\tif (typeof content !== \"string\") throw invalidResponse(`expected data.results[${index}].content string`);\n\t\tif (!url) throw invalidResponse(`expected data.results[${index}].url to be non-empty`);\n\t\tresults.push({ title, url, snippet, content });\n\t}\n\n\treturn { code: 0, data: { results, metadata: data.metadata as Record<string, unknown> } };\n}\n\nfunction buildAnswer(results: SearchResponse[\"results\"]): string {\n\treturn results\n\t\t.map((result) => result.snippet\n\t\t\t? `${result.snippet}\\nSource: ${result.title} (${result.url})`\n\t\t\t: `Source: ${result.title} (${result.url})`)\n\t\t.join(\"\\n\\n\");\n}\n\nexport function isAnySearchAvailable(): boolean {\n\treturn true;\n}\n\nexport async function searchWithAnySearch(query: string, options: AnySearchSearchOptions = {}): Promise<SearchResponse> {\n\tconst apiKey = await getApiKey(options.signal);\n\tconst numResults = normalizeCount(options.numResults);\n\tconst body = { query, max_results: numResults };\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\tlet response: Response;\n\n\ttry {\n\t\tresponse = await fetch(ANYSEARCH_API_URL, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.signal\n\t\t\t\t? AbortSignal.any([AbortSignal.timeout(SEARCH_TIMEOUT_MS), options.signal])\n\t\t\t\t: AbortSignal.timeout(SEARCH_TIMEOUT_MS),\n\t\t});\n\t} catch (err) {\n\t\tconst message = errorMessage(err);\n\t\tconst redactedMessage = redactCredential(message, apiKey);\n\t\tif (redactedMessage.toLowerCase().includes(\"abort\")) activityMonitor.logComplete(activityId, 0);\n\t\telse activityMonitor.logError(activityId, redactedMessage);\n\t\tif (redactedMessage === message) throw err;\n\t\tconst redactedError = new Error(redactedMessage);\n\t\tif (err instanceof Error) redactedError.name = err.name;\n\t\tthrow redactedError;\n\t}\n\n\tif (!response.ok) {\n\t\tactivityMonitor.logComplete(activityId, response.status);\n\t\tconst errorText = redactCredential(await response.text(), apiKey);\n\t\tthrow new Error(`AnySearch API error ${response.status}: ${errorText.slice(0, 300)}`);\n\t}\n\n\tlet rawData: unknown;\n\ttry {\n\t\trawData = await response.json();\n\t} catch (err) {\n\t\tactivityMonitor.logComplete(activityId, response.status);\n\t\tthrow new Error(`AnySearch API returned invalid JSON: ${errorMessage(err)}`);\n\t}\n\n\tlet data: AnySearchResponse;\n\ttry {\n\t\tdata = parseResponse(rawData);\n\t} catch (err) {\n\t\tactivityMonitor.logComplete(activityId, response.status);\n\t\tthrow err;\n\t}\n\n\tactivityMonitor.logComplete(activityId, response.status);\n\tconst results = data.data.results.slice(0, numResults).map((result) => ({\n\t\ttitle: result.title,\n\t\turl: result.url,\n\t\tsnippet: result.snippet,\n\t}));\n\tconst mapped: SearchResponse = { answer: buildAnswer(results), results };\n\tif (options.includeContent) {\n\t\tconst inlineContent: ExtractedContent[] = data.data.results.slice(0, numResults)\n\t\t\t.filter(result => result.content.length > 0)\n\t\t\t.map(result => ({ url: result.url, title: result.title, content: result.content, error: null }));\n\t\tif (inlineContent.length > 0) mapped.inlineContent = inlineContent;\n\t}\n\treturn mapped;\n}\n"]}
1
+ {"version":3,"file":"anysearch.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/anysearch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAmBrE,UAAU,sBAAuB,SAAQ,aAAa;IACrD,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAmGD,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,cAAc,CAAC,CAkEtH"}
@@ -76,11 +76,12 @@ function parseResponse(value) {
76
76
  throw invalidResponse(`expected data.results[${index}].url string`);
77
77
  if (typeof snippet !== "string")
78
78
  throw invalidResponse(`expected data.results[${index}].snippet string`);
79
- if (typeof content !== "string")
79
+ if (content !== undefined && content !== null && typeof content !== "string") {
80
80
  throw invalidResponse(`expected data.results[${index}].content string`);
81
+ }
81
82
  if (!url)
82
83
  throw invalidResponse(`expected data.results[${index}].url to be non-empty`);
83
- results.push({ title, url, snippet, content });
84
+ results.push({ title, url, snippet, content: typeof content === "string" ? content : "" });
84
85
  }
85
86
  return { code: 0, data: { results, metadata: data.metadata } };
86
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"anysearch.js","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/anysearch.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { activityMonitor } from \"./activity.ts\";\nimport type { ExtractedContent } from \"./extract.ts\";\nimport type { SearchOptions, SearchResponse } from \"./perplexity.ts\";\nimport { redactCredential, resolveCredential } from \"./credential-source.ts\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nconst ANYSEARCH_API_URL = \"https://api.anysearch.com/v1/search\";\nconst CONFIG_PATH = getWebSearchConfigPath();\nconst SEARCH_TIMEOUT_MS = 30_000;\n\ninterface WebSearchConfig {\n\tanysearchApiKey?: unknown;\n}\n\ninterface AnySearchResult {\n\ttitle: string;\n\turl: string;\n\tsnippet: string;\n\tcontent: string;\n}\n\ninterface AnySearchSearchOptions extends SearchOptions {\n\tincludeContent?: boolean;\n}\n\ninterface AnySearchResponse {\n\tcode: 0;\n\tdata: {\n\t\tresults: AnySearchResult[];\n\t\tmetadata: Record<string, unknown>;\n\t};\n}\n\nlet cachedConfig: WebSearchConfig | null = null;\n\nfunction loadConfig(): WebSearchConfig {\n\tif (cachedConfig) return cachedConfig;\n\tif (!existsSync(CONFIG_PATH)) {\n\t\tcachedConfig = {};\n\t\treturn cachedConfig;\n\t}\n\n\tconst raw = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(raw);\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(`Invalid config in ${CONFIG_PATH}: expected a JSON object`);\n\t}\n\tcachedConfig = parsed as WebSearchConfig;\n\treturn cachedConfig;\n}\n\nasync function getApiKey(signal?: AbortSignal): Promise<string | null> {\n\treturn resolveCredential({\n\t\tprovider: \"AnySearch\",\n\t\tconfiguredValue: loadConfig().anysearchApiKey,\n\t\tenvironmentValue: process.env.ANYSEARCH_API_KEY,\n\t\tsignal,\n\t});\n}\n\nfunction normalizeCount(value: number | undefined): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) return 5;\n\treturn Math.max(1, Math.min(Math.floor(value), 20));\n}\n\nfunction errorMessage(err: unknown): string {\n\treturn err instanceof Error ? err.message : String(err);\n}\n\nfunction invalidResponse(message: string): Error {\n\treturn new Error(`AnySearch API returned invalid response: ${message}`);\n}\n\nfunction parseResponse(value: unknown): AnySearchResponse {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow invalidResponse(\"expected an object envelope\");\n\t}\n\tconst envelope = value as Record<string, unknown>;\n\tif (envelope.code !== 0) throw invalidResponse(\"expected code 0\");\n\tif (!envelope.data || typeof envelope.data !== \"object\" || Array.isArray(envelope.data)) {\n\t\tthrow invalidResponse(\"expected data object\");\n\t}\n\tconst data = envelope.data as Record<string, unknown>;\n\tif (!Array.isArray(data.results)) throw invalidResponse(\"expected data.results array\");\n\tif (!data.metadata || typeof data.metadata !== \"object\" || Array.isArray(data.metadata)) {\n\t\tthrow invalidResponse(\"expected data.metadata object\");\n\t}\n\n\tconst results: AnySearchResult[] = [];\n\tfor (const [index, value] of data.results.entries()) {\n\t\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\t\tthrow invalidResponse(`expected data.results[${index}] object`);\n\t\t}\n\t\tconst result = value as Record<string, unknown>;\n\t\tconst { title, url, snippet, content } = result;\n\t\tif (typeof title !== \"string\") throw invalidResponse(`expected data.results[${index}].title string`);\n\t\tif (typeof url !== \"string\") throw invalidResponse(`expected data.results[${index}].url string`);\n\t\tif (typeof snippet !== \"string\") throw invalidResponse(`expected data.results[${index}].snippet string`);\n\t\tif (typeof content !== \"string\") throw invalidResponse(`expected data.results[${index}].content string`);\n\t\tif (!url) throw invalidResponse(`expected data.results[${index}].url to be non-empty`);\n\t\tresults.push({ title, url, snippet, content });\n\t}\n\n\treturn { code: 0, data: { results, metadata: data.metadata as Record<string, unknown> } };\n}\n\nfunction buildAnswer(results: SearchResponse[\"results\"]): string {\n\treturn results\n\t\t.map((result) => result.snippet\n\t\t\t? `${result.snippet}\\nSource: ${result.title} (${result.url})`\n\t\t\t: `Source: ${result.title} (${result.url})`)\n\t\t.join(\"\\n\\n\");\n}\n\nexport function isAnySearchAvailable(): boolean {\n\treturn true;\n}\n\nexport async function searchWithAnySearch(query: string, options: AnySearchSearchOptions = {}): Promise<SearchResponse> {\n\tconst apiKey = await getApiKey(options.signal);\n\tconst numResults = normalizeCount(options.numResults);\n\tconst body = { query, max_results: numResults };\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\tlet response: Response;\n\n\ttry {\n\t\tresponse = await fetch(ANYSEARCH_API_URL, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.signal\n\t\t\t\t? AbortSignal.any([AbortSignal.timeout(SEARCH_TIMEOUT_MS), options.signal])\n\t\t\t\t: AbortSignal.timeout(SEARCH_TIMEOUT_MS),\n\t\t});\n\t} catch (err) {\n\t\tconst message = errorMessage(err);\n\t\tconst redactedMessage = redactCredential(message, apiKey);\n\t\tif (redactedMessage.toLowerCase().includes(\"abort\")) activityMonitor.logComplete(activityId, 0);\n\t\telse activityMonitor.logError(activityId, redactedMessage);\n\t\tif (redactedMessage === message) throw err;\n\t\tconst redactedError = new Error(redactedMessage);\n\t\tif (err instanceof Error) redactedError.name = err.name;\n\t\tthrow redactedError;\n\t}\n\n\tif (!response.ok) {\n\t\tactivityMonitor.logComplete(activityId, response.status);\n\t\tconst errorText = redactCredential(await response.text(), apiKey);\n\t\tthrow new Error(`AnySearch API error ${response.status}: ${errorText.slice(0, 300)}`);\n\t}\n\n\tlet rawData: unknown;\n\ttry {\n\t\trawData = await response.json();\n\t} catch (err) {\n\t\tactivityMonitor.logComplete(activityId, response.status);\n\t\tthrow new Error(`AnySearch API returned invalid JSON: ${errorMessage(err)}`);\n\t}\n\n\tlet data: AnySearchResponse;\n\ttry {\n\t\tdata = parseResponse(rawData);\n\t} catch (err) {\n\t\tactivityMonitor.logComplete(activityId, response.status);\n\t\tthrow err;\n\t}\n\n\tactivityMonitor.logComplete(activityId, response.status);\n\tconst results = data.data.results.slice(0, numResults).map((result) => ({\n\t\ttitle: result.title,\n\t\turl: result.url,\n\t\tsnippet: result.snippet,\n\t}));\n\tconst mapped: SearchResponse = { answer: buildAnswer(results), results };\n\tif (options.includeContent) {\n\t\tconst inlineContent: ExtractedContent[] = data.data.results.slice(0, numResults)\n\t\t\t.filter(result => result.content.length > 0)\n\t\t\t.map(result => ({ url: result.url, title: result.title, content: result.content, error: null }));\n\t\tif (inlineContent.length > 0) mapped.inlineContent = inlineContent;\n\t}\n\treturn mapped;\n}\n"]}
1
+ {"version":3,"file":"anysearch.js","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/anysearch.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { activityMonitor } from \"./activity.ts\";\nimport type { ExtractedContent } from \"./extract.ts\";\nimport type { SearchOptions, SearchResponse } from \"./perplexity.ts\";\nimport { redactCredential, resolveCredential } from \"./credential-source.ts\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nconst ANYSEARCH_API_URL = \"https://api.anysearch.com/v1/search\";\nconst CONFIG_PATH = getWebSearchConfigPath();\nconst SEARCH_TIMEOUT_MS = 30_000;\n\ninterface WebSearchConfig {\n\tanysearchApiKey?: unknown;\n}\n\ninterface AnySearchResult {\n\ttitle: string;\n\turl: string;\n\tsnippet: string;\n\tcontent: string;\n}\n\ninterface AnySearchSearchOptions extends SearchOptions {\n\tincludeContent?: boolean;\n}\n\ninterface AnySearchResponse {\n\tcode: 0;\n\tdata: {\n\t\tresults: AnySearchResult[];\n\t\tmetadata: Record<string, unknown>;\n\t};\n}\n\nlet cachedConfig: WebSearchConfig | null = null;\n\nfunction loadConfig(): WebSearchConfig {\n\tif (cachedConfig) return cachedConfig;\n\tif (!existsSync(CONFIG_PATH)) {\n\t\tcachedConfig = {};\n\t\treturn cachedConfig;\n\t}\n\n\tconst raw = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(raw);\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);\n\t}\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(`Invalid config in ${CONFIG_PATH}: expected a JSON object`);\n\t}\n\tcachedConfig = parsed as WebSearchConfig;\n\treturn cachedConfig;\n}\n\nasync function getApiKey(signal?: AbortSignal): Promise<string | null> {\n\treturn resolveCredential({\n\t\tprovider: \"AnySearch\",\n\t\tconfiguredValue: loadConfig().anysearchApiKey,\n\t\tenvironmentValue: process.env.ANYSEARCH_API_KEY,\n\t\tsignal,\n\t});\n}\n\nfunction normalizeCount(value: number | undefined): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) return 5;\n\treturn Math.max(1, Math.min(Math.floor(value), 20));\n}\n\nfunction errorMessage(err: unknown): string {\n\treturn err instanceof Error ? err.message : String(err);\n}\n\nfunction invalidResponse(message: string): Error {\n\treturn new Error(`AnySearch API returned invalid response: ${message}`);\n}\n\nfunction parseResponse(value: unknown): AnySearchResponse {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow invalidResponse(\"expected an object envelope\");\n\t}\n\tconst envelope = value as Record<string, unknown>;\n\tif (envelope.code !== 0) throw invalidResponse(\"expected code 0\");\n\tif (!envelope.data || typeof envelope.data !== \"object\" || Array.isArray(envelope.data)) {\n\t\tthrow invalidResponse(\"expected data object\");\n\t}\n\tconst data = envelope.data as Record<string, unknown>;\n\tif (!Array.isArray(data.results)) throw invalidResponse(\"expected data.results array\");\n\tif (!data.metadata || typeof data.metadata !== \"object\" || Array.isArray(data.metadata)) {\n\t\tthrow invalidResponse(\"expected data.metadata object\");\n\t}\n\n\tconst results: AnySearchResult[] = [];\n\tfor (const [index, value] of data.results.entries()) {\n\t\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\t\tthrow invalidResponse(`expected data.results[${index}] object`);\n\t\t}\n\t\tconst result = value as Record<string, unknown>;\n\t\tconst { title, url, snippet, content } = result;\n\t\tif (typeof title !== \"string\") throw invalidResponse(`expected data.results[${index}].title string`);\n\t\tif (typeof url !== \"string\") throw invalidResponse(`expected data.results[${index}].url string`);\n\t\tif (typeof snippet !== \"string\") throw invalidResponse(`expected data.results[${index}].snippet string`);\n\t\tif (content !== undefined && content !== null && typeof content !== \"string\") {\n\t\t\tthrow invalidResponse(`expected data.results[${index}].content string`);\n\t\t}\n\t\tif (!url) throw invalidResponse(`expected data.results[${index}].url to be non-empty`);\n\t\tresults.push({ title, url, snippet, content: typeof content === \"string\" ? content : \"\" });\n\t}\n\n\treturn { code: 0, data: { results, metadata: data.metadata as Record<string, unknown> } };\n}\n\nfunction buildAnswer(results: SearchResponse[\"results\"]): string {\n\treturn results\n\t\t.map((result) => result.snippet\n\t\t\t? `${result.snippet}\\nSource: ${result.title} (${result.url})`\n\t\t\t: `Source: ${result.title} (${result.url})`)\n\t\t.join(\"\\n\\n\");\n}\n\nexport function isAnySearchAvailable(): boolean {\n\treturn true;\n}\n\nexport async function searchWithAnySearch(query: string, options: AnySearchSearchOptions = {}): Promise<SearchResponse> {\n\tconst apiKey = await getApiKey(options.signal);\n\tconst numResults = normalizeCount(options.numResults);\n\tconst body = { query, max_results: numResults };\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\tlet response: Response;\n\n\ttry {\n\t\tresponse = await fetch(ANYSEARCH_API_URL, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.signal\n\t\t\t\t? AbortSignal.any([AbortSignal.timeout(SEARCH_TIMEOUT_MS), options.signal])\n\t\t\t\t: AbortSignal.timeout(SEARCH_TIMEOUT_MS),\n\t\t});\n\t} catch (err) {\n\t\tconst message = errorMessage(err);\n\t\tconst redactedMessage = redactCredential(message, apiKey);\n\t\tif (redactedMessage.toLowerCase().includes(\"abort\")) activityMonitor.logComplete(activityId, 0);\n\t\telse activityMonitor.logError(activityId, redactedMessage);\n\t\tif (redactedMessage === message) throw err;\n\t\tconst redactedError = new Error(redactedMessage);\n\t\tif (err instanceof Error) redactedError.name = err.name;\n\t\tthrow redactedError;\n\t}\n\n\tif (!response.ok) {\n\t\tactivityMonitor.logComplete(activityId, response.status);\n\t\tconst errorText = redactCredential(await response.text(), apiKey);\n\t\tthrow new Error(`AnySearch API error ${response.status}: ${errorText.slice(0, 300)}`);\n\t}\n\n\tlet rawData: unknown;\n\ttry {\n\t\trawData = await response.json();\n\t} catch (err) {\n\t\tactivityMonitor.logComplete(activityId, response.status);\n\t\tthrow new Error(`AnySearch API returned invalid JSON: ${errorMessage(err)}`);\n\t}\n\n\tlet data: AnySearchResponse;\n\ttry {\n\t\tdata = parseResponse(rawData);\n\t} catch (err) {\n\t\tactivityMonitor.logComplete(activityId, response.status);\n\t\tthrow err;\n\t}\n\n\tactivityMonitor.logComplete(activityId, response.status);\n\tconst results = data.data.results.slice(0, numResults).map((result) => ({\n\t\ttitle: result.title,\n\t\turl: result.url,\n\t\tsnippet: result.snippet,\n\t}));\n\tconst mapped: SearchResponse = { answer: buildAnswer(results), results };\n\tif (options.includeContent) {\n\t\tconst inlineContent: ExtractedContent[] = data.data.results.slice(0, numResults)\n\t\t\t.filter(result => result.content.length > 0)\n\t\t\t.map(result => ({ url: result.url, title: result.title, content: result.content, error: null }));\n\t\tif (inlineContent.length > 0) mapped.inlineContent = inlineContent;\n\t}\n\treturn mapped;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-fetch.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/auth-fetch.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,MAAM,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,KAAK,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,cAAc,CAAC;CACtB;AAMD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAenF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAcjF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,CAI1F","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nconst WEB_SEARCH_CONFIG_PATH = getWebSearchConfigPath();\nconst AUTH_PROFILE_NAME_PATTERN = /^[A-Za-z][A-Za-z0-9_-]{0,63}$/;\n\nexport type AuthFetchRequest = true | string;\nexport type AuthFetchCache = \"session\" | \"off\";\n\nexport interface AuthFetchProfile {\n\tname: string;\n\thosts: string[];\n\tchromeProfile?: string;\n\tredirects: \"same-origin\";\n\tcache: AuthFetchCache;\n}\n\ninterface AuthFetchConfigRoot {\n\tauthFetch?: unknown;\n}\n\nexport function resolveAuthFetchProfile(request: AuthFetchRequest): AuthFetchProfile {\n\tconst profiles = loadAuthFetchProfiles();\n\tif (profiles.length === 0) {\n\t\tthrow new Error(`auth requires at least one authFetch profile in ${WEB_SEARCH_CONFIG_PATH}`);\n\t}\n\tif (request === true) {\n\t\tif (profiles.length !== 1) {\n\t\t\tthrow new Error(\"auth: true requires exactly one authFetch profile; use a profile name instead\");\n\t\t}\n\t\treturn profiles[0];\n\t}\n\tconst name = request.trim();\n\tconst profile = profiles.find(candidate => candidate.name === name);\n\tif (!profile) throw new Error(`Unknown authFetch profile: ${name}`);\n\treturn profile;\n}\n\nexport function assertAuthFetchUrl(profile: AuthFetchProfile, rawUrl: string): URL {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(rawUrl);\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new Error(`Authenticated fetch requires an HTTPS URL: ${message}`);\n\t}\n\tif (url.protocol !== \"https:\") throw new Error(\"Authenticated fetch requires an HTTPS URL\");\n\tconst hostname = normalizeHostname(url.hostname);\n\tif (!profile.hosts.some(host => hostMatches(hostname, host))) {\n\t\tthrow new Error(`URL host ${hostname} is not allowed by authFetch profile ${profile.name}`);\n\t}\n\treturn url;\n}\n\nexport function authFetchRedirectGuard(profile: AuthFetchProfile, from: URL, to: URL): void {\n\tif (profile.redirects === \"same-origin\" && to.origin !== from.origin) {\n\t\tthrow new Error(`Authenticated fetch refused cross-origin redirect: ${from.origin} -> ${to.origin}`);\n\t}\n}\n\nfunction loadAuthFetchProfiles(): AuthFetchProfile[] {\n\tif (!existsSync(WEB_SEARCH_CONFIG_PATH)) return [];\n\tconst raw = readFileSync(WEB_SEARCH_CONFIG_PATH, \"utf-8\");\n\tlet parsed: AuthFetchConfigRoot;\n\ttry {\n\t\tconst value: unknown = JSON.parse(raw);\n\t\tif (!value || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"expected a JSON object\");\n\t\tparsed = value as AuthFetchConfigRoot;\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new Error(`Failed to parse ${WEB_SEARCH_CONFIG_PATH}: ${message}`);\n\t}\n\tif (parsed.authFetch === undefined || parsed.authFetch === null) return [];\n\tif (typeof parsed.authFetch !== \"object\" || Array.isArray(parsed.authFetch)) {\n\t\tthrow new Error(`authFetch in ${WEB_SEARCH_CONFIG_PATH} must be an object`);\n\t}\n\treturn Object.entries(parsed.authFetch as Record<string, unknown>).map(([name, value]) => parseProfile(name, value));\n}\n\nfunction parseProfile(name: string, value: unknown): AuthFetchProfile {\n\tif (!AUTH_PROFILE_NAME_PATTERN.test(name)) {\n\t\tthrow new Error(`authFetch profile name ${JSON.stringify(name)} must start with a letter and contain only letters, numbers, underscores, or hyphens`);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn { name, hosts: parseHosts(value, `authFetch.${name}`), redirects: \"same-origin\", cache: \"session\" };\n\t}\n\tif (!value || typeof value !== \"object\") {\n\t\tthrow new Error(`authFetch.${name} in ${WEB_SEARCH_CONFIG_PATH} must be an array of hosts or an object`);\n\t}\n\tconst config = value as Record<string, unknown>;\n\tif (!Array.isArray(config.hosts)) {\n\t\tthrow new Error(`authFetch.${name}.hosts in ${WEB_SEARCH_CONFIG_PATH} must be a non-empty array of hostnames`);\n\t}\n\tconst redirects = config.redirects ?? \"same-origin\";\n\tif (redirects !== \"same-origin\") {\n\t\tthrow new Error(`authFetch.${name}.redirects in ${WEB_SEARCH_CONFIG_PATH} must be \"same-origin\"`);\n\t}\n\tconst cache = config.cache ?? \"session\";\n\tif (cache !== \"session\" && cache !== \"off\") {\n\t\tthrow new Error(`authFetch.${name}.cache in ${WEB_SEARCH_CONFIG_PATH} must be \"session\" or \"off\"`);\n\t}\n\tconst chromeProfile = parseChromeProfile(config.chromeProfile, `authFetch.${name}.chromeProfile`);\n\treturn {\n\t\tname,\n\t\thosts: parseHosts(config.hosts, `authFetch.${name}.hosts`),\n\t\t...(chromeProfile ? { chromeProfile } : {}),\n\t\tredirects,\n\t\tcache,\n\t};\n}\n\nfunction parseHosts(value: unknown[], label: string): string[] {\n\tif (value.length === 0) throw new Error(`${label} in ${WEB_SEARCH_CONFIG_PATH} must be a non-empty array of hostnames`);\n\tconst hosts = value.map((entry) => {\n\t\tif (typeof entry !== \"string\") throw new Error(`${label} in ${WEB_SEARCH_CONFIG_PATH} must contain only hostnames`);\n\t\treturn parseHost(entry, label);\n\t});\n\treturn [...new Set(hosts)];\n}\n\nfunction parseHost(value: string, label: string): string {\n\tconst host = normalizeHostname(value.trim());\n\tif (!host || host.startsWith(\".\") || host.endsWith(\".\") || /\\s|[\\\\/?:#@*]/.test(host)) {\n\t\tthrow new Error(`${label} in ${WEB_SEARCH_CONFIG_PATH} contains an invalid hostname: ${JSON.stringify(value)}`);\n\t}\n\tif (host.length > 253 || !/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i.test(host)) {\n\t\tthrow new Error(`${label} in ${WEB_SEARCH_CONFIG_PATH} contains an invalid hostname: ${JSON.stringify(value)}`);\n\t}\n\treturn host;\n}\n\nfunction parseChromeProfile(value: unknown, label: string): string | undefined {\n\tif (value === undefined || value === null) return undefined;\n\tif (typeof value !== \"string\") throw new Error(`${label} in ${WEB_SEARCH_CONFIG_PATH} must be a string`);\n\tconst normalized = value.trim();\n\tif (!normalized || normalized === \".\" || normalized === \"..\" || normalized.includes(\"/\") || normalized.includes(\"\\\\\")) {\n\t\tthrow new Error(`${label} in ${WEB_SEARCH_CONFIG_PATH} must be a profile directory name, not a path`);\n\t}\n\treturn normalized;\n}\n\nfunction normalizeHostname(hostname: string): string {\n\treturn hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\").replace(/\\.$/, \"\");\n}\n\nfunction hostMatches(hostname: string, allowedHost: string): boolean {\n\treturn hostname === allowedHost || hostname.endsWith(`.${allowedHost}`);\n}\n"]}
1
+ {"version":3,"file":"auth-fetch.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/auth-fetch.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,MAAM,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,KAAK,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,cAAc,CAAC;CACtB;AAMD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAenF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAcjF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,CAI1F"}