@humain/terminal 0.0.6 → 0.0.7
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.
- package/CHANGELOG.md +52 -0
- package/README.md +10 -4
- package/dist/bundle/chunks/anthropic-messages-GDMGYAZB.js +6 -0
- package/dist/bundle/chunks/anthropic.js +75 -0
- package/dist/bundle/chunks/azure-openai-responses-ZN52D6YC.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +77 -0
- package/dist/bundle/chunks/chunk-3D3G2X5U.js +6 -0
- package/dist/bundle/chunks/chunk-3VI4HD7D.js +31 -0
- package/dist/bundle/chunks/chunk-6R7UI4IY.js +2 -0
- package/dist/bundle/chunks/chunk-72KO4OMP.js +2 -0
- package/dist/bundle/chunks/chunk-7DDKXS2Q.js +2 -0
- package/dist/bundle/chunks/chunk-ARF4OE6X.js +105 -0
- package/dist/bundle/chunks/chunk-BOW22LW6.js +42 -0
- package/dist/bundle/chunks/chunk-BZQ53VGE.js +70 -0
- package/dist/bundle/chunks/chunk-CBHC6EL7.js +133 -0
- package/dist/bundle/chunks/chunk-D7XAASZM.js +4 -0
- package/dist/bundle/chunks/chunk-ECWELYBH.js +17 -0
- package/dist/bundle/chunks/chunk-GMWCTUPB.js +2 -0
- package/dist/bundle/chunks/chunk-H2O6VOXT.js +11 -0
- package/dist/bundle/chunks/chunk-HNVPY4LZ.js +5995 -0
- package/dist/bundle/chunks/chunk-JUUC5AZY.js +2 -0
- package/dist/bundle/chunks/chunk-JXWJOIH4.js +2 -0
- package/dist/bundle/chunks/chunk-L2ZPNLYD.js +2 -0
- package/dist/bundle/chunks/chunk-LVVZS2NO.js +12 -0
- package/dist/bundle/chunks/chunk-M2GYSCCG.js +44 -0
- package/dist/bundle/chunks/chunk-MA4UUCYX.js +18 -0
- package/dist/bundle/chunks/chunk-PGXDEOVV.js +2 -0
- package/dist/bundle/chunks/chunk-PJACZCIR.js +2 -0
- package/dist/bundle/chunks/chunk-PRRNXB7S.js +2 -0
- package/dist/bundle/chunks/chunk-SGTGQNNP.js +4 -0
- package/dist/bundle/chunks/chunk-TEPMHNKQ.js +2 -0
- package/dist/bundle/chunks/chunk-TXBQIIIO.js +2 -0
- package/dist/bundle/chunks/chunk-WJZ4KLGL.js +2 -0
- package/dist/bundle/chunks/chunk-XNGRGP62.js +2 -0
- package/dist/bundle/chunks/dist-7DSXV2TY.js +9 -0
- package/dist/bundle/chunks/dist-BXEVYJIO.js +7 -0
- package/dist/bundle/chunks/es-P2KNSZYR.js +9 -0
- package/dist/bundle/chunks/es5-FGTJ7ZFW.js +2 -0
- package/dist/bundle/chunks/event-streams-JOSQQSII.js +2 -0
- package/dist/bundle/chunks/extract-2L7ZVN7F.js +106 -0
- package/dist/bundle/chunks/github-copilot.js +2 -0
- package/dist/bundle/chunks/google-generative-ai-XT7NQJ2E.js +2 -0
- package/dist/bundle/chunks/google-vertex-IDQ6Z53W.js +2 -0
- package/dist/bundle/chunks/image-resize-worker.js +2 -0
- package/dist/bundle/chunks/kimi-coding.js +2 -0
- package/dist/bundle/chunks/mistral-conversations-HHDZ4FHR.js +5 -0
- package/dist/bundle/chunks/multipart-parser-FMGQ7342.js +3 -0
- package/dist/bundle/chunks/node-XY3CBY3C.js +294 -0
- package/dist/bundle/chunks/node-ZHY4LHC7.js +15 -0
- package/dist/bundle/chunks/openai-codex-responses-HRVCDY54.js +8 -0
- package/dist/bundle/chunks/openai-codex.js +75 -0
- package/dist/bundle/chunks/openai-completions-6QBYTBXY.js +7 -0
- package/dist/bundle/chunks/openai-responses-4MWLJHIK.js +2 -0
- package/dist/bundle/chunks/openrouter-images-Y2PCWAQH.js +2 -0
- package/dist/bundle/chunks/openrouter.js +75 -0
- package/dist/bundle/chunks/pdfjs-UKQT3OWY.js +107 -0
- package/dist/bundle/chunks/pi-messages-57K43J6J.js +8 -0
- package/dist/bundle/chunks/promise-J5TGSM32.js +2 -0
- package/dist/bundle/chunks/radius.js +75 -0
- package/dist/bundle/chunks/src-QKGKDFSU.js +4 -0
- package/dist/bundle/chunks/undici-D6ABF53Q.js +2 -0
- package/dist/bundle/chunks/webapi-AFS5FDJJ.js +5 -0
- package/dist/bundle/chunks/xai.js +2 -0
- package/dist/bundle/cli.js +3 -0
- package/dist/bundle/client.js +2 -0
- package/dist/bundle/index.js +2 -0
- package/dist/bundle/rpc-entry.js +3 -0
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +29 -9
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +2 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +19 -11
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +50 -14
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +163 -95
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +6 -7
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +3 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +4 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +41 -32
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/defaults.d.ts +1 -0
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js +9 -0
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +115 -48
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +38 -9
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +3 -0
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +1 -1
- package/dist/core/footer-data-provider.js +1 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/keybindings.d.ts +20 -19
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +26 -5
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-config.d.ts +5 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +3 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +14 -8
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +2 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +22 -14
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-manifest.d.ts.map +1 -1
- package/dist/core/pi-manifest.js +2 -1
- package/dist/core/pi-manifest.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +2 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +3 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +2 -2
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +10 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-export.d.ts +4 -0
- package/dist/core/session-export.d.ts.map +1 -0
- package/dist/core/session-export.js +32 -0
- package/dist/core/session-export.js.map +1 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +2 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-diagnostics.d.ts +9 -0
- package/dist/core/settings-diagnostics.d.ts.map +1 -0
- package/dist/core/settings-diagnostics.js +21 -0
- package/dist/core/settings-diagnostics.js.map +1 -0
- package/dist/core/settings-manager.d.ts +9 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +51 -10
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +51 -33
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +11 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +16 -3
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +62 -29
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +0 -5
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +2 -5
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +20 -4
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/index.d.ts +4 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +19 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/powershell.d.ts +16 -0
- package/dist/core/tools/powershell.d.ts.map +1 -0
- package/dist/core/tools/powershell.js +39 -0
- package/dist/core/tools/powershell.js.map +1 -0
- package/dist/core/tools/subagent.d.ts.map +1 -1
- package/dist/core/tools/subagent.js +4 -1
- package/dist/core/tools/subagent.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +2 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/extensions/llama/index.d.ts.map +1 -1
- package/dist/extensions/llama/index.js +2 -0
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +6 -2
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/humain/agent-execution-protocol.d.ts +1 -217
- package/dist/humain/agent-execution-protocol.d.ts.map +1 -1
- package/dist/humain/agent-execution-protocol.js +1 -203
- package/dist/humain/agent-execution-protocol.js.map +1 -1
- package/dist/humain/bedrock-provider/vendor/index.bundle.mjs +107 -16
- package/dist/humain/mcp-adapter/vendor/CHANGELOG.md +82 -0
- package/dist/humain/mcp-adapter/vendor/README.md +47 -15
- package/dist/humain/mcp-adapter/vendor/cli.js +4 -4
- package/dist/humain/mcp-adapter/vendor/commands.ts +5 -3
- package/dist/humain/mcp-adapter/vendor/config.ts +46 -5
- package/dist/humain/mcp-adapter/vendor/direct-tools.ts +103 -92
- package/dist/humain/mcp-adapter/vendor/dist/agent-dir.d.ts +10 -0
- package/dist/humain/mcp-adapter/vendor/dist/agent-dir.js +63 -0
- package/dist/humain/mcp-adapter/vendor/dist/agent-dir.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-loader.d.ts +8 -0
- package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-loader.js +356 -0
- package/dist/humain/mcp-adapter/vendor/dist/agent-plugin-loader.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/config.d.ts +123 -0
- package/dist/humain/mcp-adapter/vendor/dist/config.js +1088 -0
- package/dist/humain/mcp-adapter/vendor/dist/config.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/mcp-bearer-store.d.ts +24 -0
- package/dist/humain/mcp-adapter/vendor/dist/mcp-bearer-store.js +336 -0
- package/dist/humain/mcp-adapter/vendor/dist/mcp-bearer-store.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/metadata-cache.d.ts +19 -0
- package/dist/humain/mcp-adapter/vendor/dist/metadata-cache.js +319 -0
- package/dist/humain/mcp-adapter/vendor/dist/metadata-cache.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/package-mcp-loader.d.ts +2 -0
- package/dist/humain/mcp-adapter/vendor/dist/package-mcp-loader.js +156 -0
- package/dist/humain/mcp-adapter/vendor/dist/package-mcp-loader.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/resource-tools.d.ts +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/resource-tools.js +15 -0
- package/dist/humain/mcp-adapter/vendor/dist/resource-tools.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/types.d.ts +566 -0
- package/dist/humain/mcp-adapter/vendor/dist/types.js +287 -0
- package/dist/humain/mcp-adapter/vendor/dist/types.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/ui-app-bridge-helpers.d.ts +6 -0
- package/dist/humain/mcp-adapter/vendor/dist/ui-app-bridge-helpers.js +37 -0
- package/dist/humain/mcp-adapter/vendor/dist/ui-app-bridge-helpers.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/ui-stream-types.d.ts +104 -0
- package/dist/humain/mcp-adapter/vendor/dist/ui-stream-types.js +59 -0
- package/dist/humain/mcp-adapter/vendor/dist/ui-stream-types.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/ui-tool-visibility.d.ts +4 -0
- package/dist/humain/mcp-adapter/vendor/dist/ui-tool-visibility.js +27 -0
- package/dist/humain/mcp-adapter/vendor/dist/ui-tool-visibility.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/dist/utils.d.ts +32 -0
- package/dist/humain/mcp-adapter/vendor/dist/utils.js +338 -0
- package/dist/humain/mcp-adapter/vendor/dist/utils.js.map +1 -0
- package/dist/humain/mcp-adapter/vendor/failure-backoff.ts +23 -0
- package/dist/humain/mcp-adapter/vendor/index.bundle.mjs +4870 -3878
- package/dist/humain/mcp-adapter/vendor/index.ts +294 -88
- package/dist/humain/mcp-adapter/vendor/init.ts +41 -30
- package/dist/humain/mcp-adapter/vendor/lifecycle.ts +16 -8
- package/dist/humain/mcp-adapter/vendor/mcp-auth-flow.ts +124 -32
- package/dist/humain/mcp-adapter/vendor/mcp-bearer-store.ts +0 -2
- package/dist/humain/mcp-adapter/vendor/mcp-code.ts +2 -0
- package/dist/humain/mcp-adapter/vendor/mcp-oauth-provider.ts +155 -16
- package/dist/humain/mcp-adapter/vendor/mcp-output-guard.ts +95 -7
- package/dist/humain/mcp-adapter/vendor/mcp-probe.ts +18 -4
- package/dist/humain/mcp-adapter/vendor/mcp-references.ts +376 -0
- package/dist/humain/mcp-adapter/vendor/mcp-status.ts +8 -19
- package/dist/humain/mcp-adapter/vendor/metadata-cache.ts +20 -12
- package/dist/humain/mcp-adapter/vendor/namespace-tools.ts +276 -0
- package/dist/humain/mcp-adapter/vendor/package.json +26 -8
- package/dist/humain/mcp-adapter/vendor/proxy-modes.ts +128 -32
- package/dist/humain/mcp-adapter/vendor/request-headers-command.ts +1 -1
- package/dist/humain/mcp-adapter/vendor/search-ranking.ts +2 -0
- package/dist/humain/mcp-adapter/vendor/server-manager.ts +69 -12
- package/dist/humain/mcp-adapter/vendor/state.ts +1 -3
- package/dist/humain/mcp-adapter/vendor/tool-result-renderer.ts +16 -2
- package/dist/humain/mcp-adapter/vendor/types.ts +51 -2
- package/dist/humain/mcp-adapter/vendor/ui-server.ts +3 -19
- package/dist/humain/mcp-adapter/vendor/ui-session.ts +2 -1
- package/dist/humain/mcp-adapter/vendor/utils.ts +21 -19
- package/dist/humain/mcp-adapter.d.ts.map +1 -1
- package/dist/humain/mcp-adapter.js +4 -0
- package/dist/humain/mcp-adapter.js.map +1 -1
- package/dist/humain/web-access/vendor/chrome-cookies.d.ts +14 -0
- package/dist/humain/web-access/vendor/chrome-cookies.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/chrome-cookies.js +85 -33
- package/dist/humain/web-access/vendor/chrome-cookies.js.map +1 -1
- package/dist/humain/web-access/vendor/credential-source.d.ts +1 -1
- package/dist/humain/web-access/vendor/credential-source.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/credential-source.js +3 -1
- package/dist/humain/web-access/vendor/credential-source.js.map +1 -1
- package/dist/humain/web-access/vendor/curator-page.d.ts +2 -29
- package/dist/humain/web-access/vendor/curator-page.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/curator-page.js +10 -1
- package/dist/humain/web-access/vendor/curator-page.js.map +1 -1
- package/dist/humain/web-access/vendor/curator-server.d.ts +2 -29
- package/dist/humain/web-access/vendor/curator-server.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/curator-server.js +4 -0
- package/dist/humain/web-access/vendor/curator-server.js.map +1 -1
- package/dist/humain/web-access/vendor/extract.d.ts +11 -0
- package/dist/humain/web-access/vendor/extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/extract.js +163 -20
- package/dist/humain/web-access/vendor/extract.js.map +1 -1
- package/dist/humain/web-access/vendor/fetch-params.d.ts +2 -0
- package/dist/humain/web-access/vendor/fetch-params.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/fetch-params.js +11 -0
- package/dist/humain/web-access/vendor/fetch-params.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-adc.d.ts +10 -0
- package/dist/humain/web-access/vendor/gemini-adc.d.ts.map +1 -0
- package/dist/humain/web-access/vendor/gemini-adc.js +268 -0
- package/dist/humain/web-access/vendor/gemini-adc.js.map +1 -0
- package/dist/humain/web-access/vendor/gemini-api.d.ts +7 -1
- package/dist/humain/web-access/vendor/gemini-api.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-api.js +51 -15
- package/dist/humain/web-access/vendor/gemini-api.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-search.d.ts +9 -4
- package/dist/humain/web-access/vendor/gemini-search.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-search.js +63 -21
- package/dist/humain/web-access/vendor/gemini-search.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-url-context.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-url-context.js +3 -2
- package/dist/humain/web-access/vendor/gemini-url-context.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-web-config.d.ts +8 -1
- package/dist/humain/web-access/vendor/gemini-web-config.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-web-config.js +49 -4
- package/dist/humain/web-access/vendor/gemini-web-config.js.map +1 -1
- package/dist/humain/web-access/vendor/gemini-web.d.ts +2 -1
- package/dist/humain/web-access/vendor/gemini-web.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/gemini-web.js +8 -3
- package/dist/humain/web-access/vendor/gemini-web.js.map +1 -1
- package/dist/humain/web-access/vendor/github-api.d.ts +1 -1
- package/dist/humain/web-access/vendor/github-api.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/github-api.js +6 -4
- package/dist/humain/web-access/vendor/github-api.js.map +1 -1
- package/dist/humain/web-access/vendor/github-extract.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/github-extract.js +50 -3
- package/dist/humain/web-access/vendor/github-extract.js.map +1 -1
- package/dist/humain/web-access/vendor/github-issue-pr.d.ts +27 -0
- package/dist/humain/web-access/vendor/github-issue-pr.d.ts.map +1 -0
- package/dist/humain/web-access/vendor/github-issue-pr.js +701 -0
- package/dist/humain/web-access/vendor/github-issue-pr.js.map +1 -0
- package/dist/humain/web-access/vendor/index.d.ts +3 -31
- package/dist/humain/web-access/vendor/index.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/index.js +643 -530
- package/dist/humain/web-access/vendor/index.js.map +1 -1
- package/dist/humain/web-access/vendor/kimi-search.d.ts +5 -0
- package/dist/humain/web-access/vendor/kimi-search.d.ts.map +1 -0
- package/dist/humain/web-access/vendor/kimi-search.js +228 -0
- package/dist/humain/web-access/vendor/kimi-search.js.map +1 -0
- package/dist/humain/web-access/vendor/openai-search.d.ts +3 -0
- package/dist/humain/web-access/vendor/openai-search.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/openai-search.js +89 -16
- package/dist/humain/web-access/vendor/openai-search.js.map +1 -1
- package/dist/humain/web-access/vendor/page-query.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/page-query.js +56 -8
- package/dist/humain/web-access/vendor/page-query.js.map +1 -1
- package/dist/humain/web-access/vendor/ssrf-protection.js +6 -1
- package/dist/humain/web-access/vendor/ssrf-protection.js.map +1 -1
- package/dist/humain/web-access/vendor/utils.d.ts +12 -0
- package/dist/humain/web-access/vendor/utils.d.ts.map +1 -1
- package/dist/humain/web-access/vendor/utils.js +343 -1
- package/dist/humain/web-access/vendor/utils.js.map +1 -1
- package/dist/humain/web-access/vendor/xcrawl.d.ts +4 -0
- package/dist/humain/web-access/vendor/xcrawl.d.ts.map +1 -0
- package/dist/humain/web-access/vendor/xcrawl.js +251 -0
- package/dist/humain/web-access/vendor/xcrawl.js.map +1 -0
- package/dist/humain/web-access/vendor/youtube-extract.js +2 -2
- package/dist/humain/web-access/vendor/youtube-extract.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +17 -14
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +4 -3
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +9 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +53 -10
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +7 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +118 -55
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-submenu.js +151 -0
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +68 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +11 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +176 -106
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/session-share.d.ts +16 -0
- package/dist/modes/interactive/session-share.d.ts.map +1 -0
- package/dist/modes/interactive/session-share.js +188 -0
- package/dist/modes/interactive/session-share.js.map +1 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +6 -5
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +16 -13
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +20 -6
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +3 -2
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +2 -7
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts +1 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +189 -3
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/changelog.d.ts +1 -1
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js +12 -2
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +2 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/management-http.d.ts +5 -3
- package/dist/utils/management-http.d.ts.map +1 -1
- package/dist/utils/management-http.js +14 -10
- package/dist/utils/management-http.js.map +1 -1
- package/dist/utils/shell.d.ts +3 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +17 -5
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts +1 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +64 -1
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/text.d.ts +8 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +9 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/version-check.js +4 -4
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +15 -0
- package/docs/custom-provider.md +5 -2
- package/docs/environment-variables.md +7 -7
- package/docs/extensions.md +17 -7
- package/docs/json.md +7 -2
- package/docs/keybindings.md +8 -8
- package/docs/llama-cpp.md +2 -0
- package/docs/models.md +8 -2
- package/docs/packages.md +2 -2
- package/docs/rpc.md +9 -3
- package/docs/sdk.md +7 -2
- package/docs/settings.md +11 -3
- package/docs/skills.md +3 -2
- package/docs/terminal-setup.md +8 -0
- package/docs/usage.md +10 -7
- package/docs/windows.md +15 -1
- package/examples/extensions/border-status-editor.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +70 -8
- package/examples/extensions/custom-provider-anthropic/package.json +2 -2
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/git-checkpoint.ts +2 -2
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/notify.ts +3 -1
- package/examples/extensions/sandbox/package-lock.json +14 -40
- package/examples/extensions/sandbox/package.json +2 -2
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/extensions/with-deps/package-lock.json +4 -4
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/06-extensions.ts +1 -1
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +293 -221
- package/package.json +21 -18
- package/src/humain/mcp-adapter/UPSTREAM.md +15 -5
- package/src/humain/mcp-adapter/upstream.json +4 -3
- package/src/humain/mcp-adapter/vendor/CHANGELOG.md +82 -0
- package/src/humain/web-access/UPSTREAM.md +1 -1
- package/src/humain/web-access/upstream.json +6 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-search.js","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-search.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport type { ExtensionContext } from \"../host.ts\";\nimport { activityMonitor } from \"./activity.ts\";\nimport { CredentialResolutionError } from \"./credential-source.ts\";\nimport { getApiKey, getVersionedApiBase, fetchGeminiApi, isGatewayConfigured, isGeminiApiAvailable, redactGeminiApiResponse } from \"./gemini-api.ts\";\nimport { getGeminiWebAvailabilityDiagnostic, isGeminiWebAvailable, queryWithCookies } from \"./gemini-web.ts\";\nimport { isPerplexityAvailable, searchWithPerplexity, type SearchResult, type SearchResponse, type SearchOptions } from \"./perplexity.ts\";\nimport { isExaAvailable, searchWithExa } from \"./exa.ts\";\nimport { isBraveAvailable, searchWithBrave } from \"./brave.ts\";\nimport { isOpenAISearchAvailable, searchWithOpenAI } from \"./openai-search.ts\";\nimport { isParallelAvailable, searchWithParallel } from \"./parallel.ts\";\nimport { isParallelMcpAvailable, searchWithParallelMcp } from \"./parallel-mcp.ts\";\nimport { isTinyFishAvailable, searchWithTinyFish } from \"./tinyfish.ts\";\nimport { isSearch1APIAvailable, searchWithSearch1API } from \"./search1api.ts\";\nimport { isSearchinfinityAvailable, searchWithSearchinfinity } from \"./searchinfinity.ts\";\nimport { isQueritAvailable, searchWithQuerit } from \"./querit.ts\";\nimport { isTavilyAvailable, searchWithTavily } from \"./tavily.ts\";\nimport { isFirecrawlAvailable, searchWithFirecrawl } from \"./firecrawl.ts\";\nimport { isJinaSearchAvailable, searchWithJina } from \"./jina-search.ts\";\nimport { isSerpdiveAvailable, searchWithSerpdive } from \"./serpdive.ts\";\nimport { isKagiAvailable, searchWithKagi } from \"./kagi.ts\";\nimport { isBochaAvailable, searchWithBocha } from \"./bocha.ts\";\nimport { isOllamaAvailable, searchWithOllama } from \"./ollama.ts\";\nimport { isSearXNGAvailable, searchWithSearXNG } from \"./searxng.ts\";\nimport { isDuckDuckGoAvailable, searchWithDuckDuckGo } from \"./duckduckgo.ts\";\nimport { isAnySearchAvailable, searchWithAnySearch } from \"./anysearch.ts\";\nimport { isXaiSearchAvailable, searchWithXai } from \"./xai-search.ts\";\nimport { isBrightDataAvailable, searchWithBrightData } from \"./brightdata.ts\";\nimport { isSerpBaseAvailable, searchWithSerpBase } from \"./serpbase.ts\";\nimport { isSerperAvailable, searchWithSerper } from \"./serper.ts\";\nimport { isValyuAvailable, searchWithValyu } from \"./valyu.ts\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nexport const RESOLVED_SEARCH_PROVIDERS = [\"openai\", \"brave\", \"parallel\", \"parallel-mcp\", \"tinyfish\", \"search1api\", \"searchinfinity\", \"querit\", \"tavily\", \"firecrawl\", \"jina\", \"searxng\", \"duckduckgo\", \"perplexity\", \"gemini\", \"exa\", \"serpdive\", \"kagi\", \"ollama\", \"anysearch\", \"xai\", \"brightdata\", \"serpbase\", \"serper\", \"valyu\", \"bocha\"] as const;\nexport const SEARCH_PROVIDERS = [\"auto\", \"all\", ...RESOLVED_SEARCH_PROVIDERS] as const;\n\nexport type ResolvedSearchProvider = typeof RESOLVED_SEARCH_PROVIDERS[number];\nexport type SearchProvider = typeof SEARCH_PROVIDERS[number];\nexport type SearchProviderSelection = SearchProvider | ResolvedSearchProvider[];\nexport type SearchProviderErrorKind =\n\t| \"transient\"\n\t| \"quota\"\n\t| \"network\"\n\t| \"credential\"\n\t| \"config\"\n\t| \"auth\"\n\t| \"invalid-request\"\n\t| \"invalid-response\"\n\t| \"aborted\"\n\t| \"unknown\";\n\nexport interface SearchRoutingConfig {\n\tproviders: ResolvedSearchProvider[];\n\tfallbackOn: Array<Extract<SearchProviderErrorKind, \"transient\" | \"quota\" | \"network\" | \"invalid-response\">>;\n}\n\nexport class SearchProviderError extends Error {\n\treadonly provider: ResolvedSearchProvider;\n\treadonly kind: SearchProviderErrorKind;\n\treadonly status?: number;\n\treadonly causeError: unknown;\n\n\tconstructor(\n\t\tprovider: ResolvedSearchProvider,\n\t\tkind: SearchProviderErrorKind,\n\t\tmessage: string,\n\t\tstatus: number | undefined,\n\t\tcause: unknown,\n\t) {\n\t\tsuper(`${provider} search failed (${kind}): ${message}`);\n\t\tthis.name = \"SearchProviderError\";\n\t\tthis.provider = provider;\n\t\tthis.kind = kind;\n\t\tthis.status = status;\n\t\tthis.causeError = cause;\n\t}\n}\n\nexport interface ProviderSearchResponse extends SearchResponse {\n\tprovider: ResolvedSearchProvider;\n}\n\nexport interface ProviderSearchFailure {\n\tprovider: ResolvedSearchProvider;\n\terror: string;\n}\n\nexport interface AttributedSearchResponse extends SearchResponse {\n\tprovider: ResolvedSearchProvider | \"all\";\n\tproviderResponses?: ProviderSearchResponse[];\n\tproviderErrors?: ProviderSearchFailure[];\n}\n\nconst CONFIG_PATH = getWebSearchConfigPath();\nconst DEFAULT_SEARCH_MODEL = \"gemini-3.6-flash\";\n// Explicit-only providers (Parallel MCP, DuckDuckGo, AnySearch, xAI, Bright Data, SerpBase, Serper, Valyu) are deliberately absent:\n// `all` must never fan out to an opt-in or paid provider without the user asking for it.\nconst ALL_SEARCH_PROVIDERS: ResolvedSearchProvider[] = [\"searxng\", \"openai\", \"exa\", \"brave\", \"parallel\", \"tinyfish\", \"search1api\", \"searchinfinity\", \"querit\", \"tavily\", \"firecrawl\", \"jina\", \"serpdive\", \"kagi\", \"ollama\", \"perplexity\", \"gemini\", \"bocha\"];\nconst VALID_ROUTING_KINDS = [\"transient\", \"quota\", \"network\", \"invalid-response\"] as const;\n\ntype SearchConfig = {\n\tsearchProvider: SearchProviderSelection;\n\tsearchProviderConfigured: boolean;\n\tsearchRouting?: SearchRoutingConfig;\n\tsearchModel?: string;\n};\n\nlet cachedSearchConfig: SearchConfig | null = null;\n\nfunction getSearchConfig(): SearchConfig {\n\tif (cachedSearchConfig) return cachedSearchConfig;\n\tif (!existsSync(CONFIG_PATH)) {\n\t\tcachedSearchConfig = { searchProvider: \"auto\", searchProviderConfigured: false };\n\t\treturn cachedSearchConfig;\n\t}\n\n\tconst rawText = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet raw: Record<string, unknown>;\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(rawText);\n\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\tthrow new Error(\"expected a JSON object\");\n\t\t}\n\t\traw = parsed as Record<string, unknown>;\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\n\tconst searchModel = normalizeSearchModel(raw.searchModel);\n\tconst searchProviderConfigured = Object.hasOwn(raw, \"searchProvider\") || Object.hasOwn(raw, \"provider\");\n\tcachedSearchConfig = {\n\t\tsearchProvider: normalizeSearchProviderSelection(raw.searchProvider ?? raw.provider, `provider in ${CONFIG_PATH}`),\n\t\tsearchProviderConfigured,\n\t\t...(Object.hasOwn(raw, \"searchRouting\") ? { searchRouting: normalizeSearchRouting(raw.searchRouting) } : {}),\n\t\t...(searchModel ? { searchModel } : {}),\n\t};\n\treturn cachedSearchConfig;\n}\n\nfunction normalizeSearchRouting(value: unknown): SearchRoutingConfig {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow new Error(`searchRouting in ${CONFIG_PATH} must be an object`);\n\t}\n\tconst raw = value as Record<string, unknown>;\n\tconst providers = normalizeResolvedProviderList(raw.providers, `searchRouting.providers in ${CONFIG_PATH}`);\n\tif (!Array.isArray(raw.fallbackOn) || raw.fallbackOn.length === 0) {\n\t\tthrow new Error(`searchRouting.fallbackOn in ${CONFIG_PATH} must be a non-empty array`);\n\t}\n\tconst fallbackOn: SearchRoutingConfig[\"fallbackOn\"] = [];\n\tfor (const kind of raw.fallbackOn) {\n\t\tif (typeof kind !== \"string\" || !VALID_ROUTING_KINDS.includes(kind as typeof VALID_ROUTING_KINDS[number])) {\n\t\t\tthrow new Error(`searchRouting.fallbackOn in ${CONFIG_PATH} may only contain transient, quota, network, or invalid-response`);\n\t\t}\n\t\tif (!fallbackOn.includes(kind as SearchRoutingConfig[\"fallbackOn\"][number])) {\n\t\t\tfallbackOn.push(kind as SearchRoutingConfig[\"fallbackOn\"][number]);\n\t\t}\n\t}\n\treturn { providers, fallbackOn };\n}\n\nexport function getConfiguredSearchRouting(): SearchRoutingConfig | undefined {\n\tconst config = getSearchConfig();\n\treturn config.searchProviderConfigured ? undefined : config.searchRouting;\n}\n\nfunction normalizeSearchModel(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeResolvedProviderList(value: unknown, label: string): ResolvedSearchProvider[] {\n\tif (!Array.isArray(value) || value.length === 0) {\n\t\tthrow new Error(`${label} must be a non-empty array`);\n\t}\n\tconst providers: ResolvedSearchProvider[] = [];\n\tfor (const provider of value) {\n\t\tconst normalized = typeof provider === \"string\" ? provider.trim().toLowerCase() : \"\";\n\t\tif (!RESOLVED_SEARCH_PROVIDERS.includes(normalized as ResolvedSearchProvider)) {\n\t\t\tthrow new Error(`${label} contains an invalid provider: ${String(provider)}`);\n\t\t}\n\t\tif (providers.includes(normalized as ResolvedSearchProvider)) {\n\t\t\tthrow new Error(`${label} must not contain duplicates: ${normalized}`);\n\t\t}\n\t\tproviders.push(normalized as ResolvedSearchProvider);\n\t}\n\treturn providers;\n}\n\nexport function normalizeSearchProviderSelection(value: unknown, label = \"provider\"): SearchProviderSelection {\n\tif (Array.isArray(value)) return normalizeResolvedProviderList(value, label);\n\tconst normalized = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n\treturn SEARCH_PROVIDERS.includes(normalized as SearchProvider) ? normalized as SearchProvider : \"auto\";\n}\n\nexport interface FullSearchOptions extends SearchOptions {\n\tprovider?: SearchProviderSelection;\n\tincludeContent?: boolean;\n\textensionContext?: ExtensionContext;\n}\n\nfunction errorMessage(err: unknown): string {\n\treturn err instanceof Error ? err.message : String(err);\n}\n\nfunction isAbortError(err: unknown): boolean {\n\treturn errorMessage(err).toLowerCase().includes(\"abort\");\n}\n\nfunction shouldTryOpenAIInAuto(options: SearchOptions): boolean {\n\tif (options.recencyFilter) return false;\n\tif (typeof options.numResults === \"number\" && Number.isFinite(options.numResults) && Math.floor(options.numResults) !== 5) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isOpenAICodexSelected(ctx?: ExtensionContext): boolean {\n\treturn ctx?.model?.provider === \"openai-codex\";\n}\n\nasync function tryOpenAIInAuto(query: string, options: FullSearchOptions, fallbackErrors: string[]): Promise<AttributedSearchResponse | null> {\n\tif (!shouldTryOpenAIInAuto(options)) return null;\n\ttry {\n\t\tif (await isOpenAISearchAvailable(options.extensionContext)) {\n\t\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\t\treturn { ...result, provider: \"openai\" };\n\t\t}\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\tfallbackErrors.push(`OpenAI: ${errorMessage(err)}`);\n\t}\n\treturn null;\n}\n\nasync function searchWithGemini(\n\tquery: string,\n\toptions: SearchOptions,\n\tstrictErrors: boolean,\n): Promise<SearchResponse | null> {\n\tconst errors: string[] = [];\n\n\ttry {\n\t\tconst apiResult = await searchWithGeminiApi(query, options);\n\t\tif (apiResult) return apiResult;\n\t} catch (err) {\n\t\tif (err instanceof CredentialResolutionError || isAbortError(err)) throw err;\n\t\terrors.push(`Gemini API: ${errorMessage(err)}`);\n\t}\n\n\ttry {\n\t\tconst webResult = await searchWithGeminiWeb(query, options);\n\t\tif (webResult) return webResult;\n\t\tconst diagnostic = getGeminiWebAvailabilityDiagnostic();\n\t\tif (diagnostic) errors.push(`Gemini Web: ${diagnostic}`);\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\terrors.push(`Gemini Web: ${errorMessage(err)}`);\n\t}\n\n\tif (strictErrors && errors.length > 0) {\n\t\tthrow new Error(`Gemini search failed:\\n - ${errors.join(\"\\n - \")}`);\n\t}\n\n\treturn null;\n}\n\nfunction providerErrorStatus(message: string): number | undefined {\n\tconst match = message.match(/\\b(?:error|status|http)\\s+(\\d{3})\\b/i);\n\tif (!match) return undefined;\n\treturn Number(match[1]);\n}\n\nfunction classifyProviderError(provider: ResolvedSearchProvider, err: unknown): SearchProviderError {\n\tif (err instanceof SearchProviderError) return err;\n\tconst message = errorMessage(err);\n\tconst lower = message.toLowerCase();\n\tconst status = providerErrorStatus(message);\n\tlet kind: SearchProviderErrorKind = \"unknown\";\n\tif (err instanceof CredentialResolutionError || /(?:api )?key (?:not found|missing)|credential resolution/.test(lower)) {\n\t\tkind = \"credential\";\n\t} else if (isAbortError(err)) {\n\t\tkind = \"aborted\";\n\t} else if (provider === \"xai\" && status === 403 && /spending[- ]limit|(?:no|out of) credits?|insufficient quota|quota (?:exceeded|exhausted)|credits? (?:exhausted|depleted|used up)/.test(lower)) {\n\t\tkind = \"quota\";\n\t} else if (status === 401 || status === 403) {\n\t\tkind = \"auth\";\n\t} else if (status === 400 || status === 422) {\n\t\tkind = \"invalid-request\";\n\t} else if (status === 402 || status === 429) {\n\t\tkind = \"quota\";\n\t} else if (status !== undefined && (status === 408 || status === 425 || status >= 500)) {\n\t\tkind = \"transient\";\n\t} else if (/rate limit|quota|too many requests/.test(lower)) {\n\t\tkind = \"quota\";\n\t} else if (/unauthorized|forbidden|permission denied/.test(lower)) {\n\t\tkind = \"auth\";\n\t} else if (/bad request|invalid request/.test(lower)) {\n\t\tkind = \"invalid-request\";\n\t} else if (/invalid json|no parseable response|no parseable results|invalid response|returned empty response/.test(lower)) {\n\t\tkind = \"invalid-response\";\n\t} else if (/temporar|service unavailable|server error/.test(lower)) {\n\t\tkind = \"transient\";\n\t} else if (err instanceof TypeError || /fetch failed|network|econnreset|econnrefused|enotfound|etimedout|timed out|socket/.test(lower)) {\n\t\tkind = \"network\";\n\t} else if (/invalid or missing|invalid config|failed to parse|must be an? |configuration/.test(lower)) {\n\t\tkind = \"config\";\n\t}\n\treturn new SearchProviderError(provider, kind, message, status, err);\n}\n\nasync function searchWithResolvedProvider(\n\tprovider: ResolvedSearchProvider,\n\tquery: string,\n\toptions: FullSearchOptions,\n): Promise<AttributedSearchResponse> {\n\tif (provider === \"openai\") {\n\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\treturn { ...result, provider };\n\t}\n\tif (provider === \"brave\") return { ...(await searchWithBrave(query, options)), provider };\n\tif (provider === \"parallel\") return { ...(await searchWithParallel(query, options)), provider };\n\tif (provider === \"parallel-mcp\") return { ...(await searchWithParallelMcp(query, options)), provider };\n\tif (provider === \"tinyfish\") return { ...(await searchWithTinyFish(query, options)), provider };\n\tif (provider === \"search1api\") return { ...(await searchWithSearch1API(query, options)), provider };\n\tif (provider === \"searchinfinity\") return { ...(await searchWithSearchinfinity(query, options)), provider };\n\tif (provider === \"querit\") return { ...(await searchWithQuerit(query, options)), provider };\n\tif (provider === \"tavily\") return { ...(await searchWithTavily(query, options)), provider };\n\tif (provider === \"firecrawl\") return { ...(await searchWithFirecrawl(query, options)), provider };\n\tif (provider === \"jina\") return { ...(await searchWithJina(query, options)), provider };\n\tif (provider === \"serpdive\") return { ...(await searchWithSerpdive(query, options)), provider };\n\tif (provider === \"kagi\") return { ...(await searchWithKagi(query, options)), provider };\n\tif (provider === \"bocha\") return { ...(await searchWithBocha(query, options)), provider };\n\tif (provider === \"ollama\") return { ...(await searchWithOllama(query, options)), provider };\n\tif (provider === \"anysearch\") return { ...(await searchWithAnySearch(query, options)), provider };\n\tif (provider === \"xai\") return { ...(await searchWithXai(query, options, options.extensionContext)), provider };\n\tif (provider === \"brightdata\") return { ...(await searchWithBrightData(query, options)), provider };\n\tif (provider === \"serpbase\") return { ...(await searchWithSerpBase(query, options)), provider };\n\tif (provider === \"serper\") return { ...(await searchWithSerper(query, options)), provider };\n\tif (provider === \"valyu\") return { ...(await searchWithValyu(query, options)), provider };\n\tif (provider === \"perplexity\") return { ...(await searchWithPerplexity(query, options)), provider };\n\tif (provider === \"searxng\") return { ...(await searchWithSearXNG(query, options)), provider };\n\tif (provider === \"duckduckgo\") return { ...(await searchWithDuckDuckGo(query, options)), provider };\n\tif (provider === \"gemini\") {\n\t\tconst result = await searchWithGemini(query, options, true);\n\t\tif (result) return { ...result, provider };\n\t\tthrow new Error(\n\t\t\t\"Gemini search unavailable. Either:\\n\" +\n\t\t\t` 1. Configure geminiApiKey in ${CONFIG_PATH} or set GEMINI_API_KEY\\n` +\n\t\t\t\" 2. Set GOOGLE_GEMINI_BASE_URL + CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\t\" 3. Sign into gemini.google.com in a supported Chromium-based browser\",\n\t\t);\n\t}\n\tconst result = await searchWithExa(query, options);\n\tif (result) return { ...result, provider };\n\tthrow new Error(\"Exa search returned no results.\");\n}\n\nasync function isResolvedProviderAvailable(provider: ResolvedSearchProvider, options: FullSearchOptions): Promise<boolean> {\n\tif (provider === \"openai\") return isOpenAISearchAvailable(options.extensionContext);\n\tif (provider === \"brave\") return isBraveAvailable();\n\tif (provider === \"parallel\") return isParallelAvailable();\n\tif (provider === \"parallel-mcp\") return isParallelMcpAvailable();\n\tif (provider === \"tinyfish\") return isTinyFishAvailable();\n\tif (provider === \"search1api\") return isSearch1APIAvailable();\n\tif (provider === \"searchinfinity\") return isSearchinfinityAvailable();\n\tif (provider === \"querit\") return isQueritAvailable();\n\tif (provider === \"tavily\") return isTavilyAvailable();\n\tif (provider === \"firecrawl\") return isFirecrawlAvailable();\n\tif (provider === \"jina\") return isJinaSearchAvailable();\n\tif (provider === \"serpdive\") return isSerpdiveAvailable();\n\tif (provider === \"kagi\") return isKagiAvailable();\n\tif (provider === \"bocha\") return isBochaAvailable();\n\tif (provider === \"ollama\") return isOllamaAvailable();\n\tif (provider === \"anysearch\") return isAnySearchAvailable();\n\tif (provider === \"xai\") return isXaiSearchAvailable(options.extensionContext);\n\tif (provider === \"brightdata\") return isBrightDataAvailable();\n\tif (provider === \"serpbase\") return isSerpBaseAvailable();\n\tif (provider === \"serper\") return isSerperAvailable();\n\tif (provider === \"valyu\") return isValyuAvailable();\n\tif (provider === \"perplexity\") return isPerplexityAvailable();\n\tif (provider === \"searxng\") return isSearXNGAvailable();\n\tif (provider === \"duckduckgo\") return isDuckDuckGoAvailable();\n\tif (provider === \"gemini\") return isGeminiApiAvailable() || !!(await isGeminiWebAvailable());\n\treturn isExaAvailable();\n}\n\nfunction providerLabel(provider: ResolvedSearchProvider): string {\n\tif (provider === \"openai\") return \"OpenAI\";\n\tif (provider === \"parallel-mcp\") return \"Parallel MCP\";\n\tif (provider === \"tinyfish\") return \"TinyFish\";\n\tif (provider === \"search1api\") return \"Search1API\";\n\tif (provider === \"searchinfinity\") return \"Searchinfinity\";\n\tif (provider === \"querit\") return \"Querit\";\n\tif (provider === \"firecrawl\") return \"Firecrawl\";\n\tif (provider === \"serpdive\") return \"SERPdive\";\n\tif (provider === \"searxng\") return \"SearXNG\";\n\tif (provider === \"duckduckgo\") return \"DuckDuckGo\";\n\tif (provider === \"kagi\") return \"Kagi\";\n\tif (provider === \"bocha\") return \"Bocha\";\n\tif (provider === \"ollama\") return \"Ollama\";\n\tif (provider === \"xai\") return \"xAI\";\n\tif (provider === \"brightdata\") return \"Bright Data\";\n\tif (provider === \"serpbase\") return \"SerpBase\";\n\tif (provider === \"serper\") return \"Serper\";\n\tif (provider === \"valyu\") return \"Valyu\";\n\treturn provider.charAt(0).toUpperCase() + provider.slice(1);\n}\n\nasync function searchWithAllProvider(\n\tprovider: ResolvedSearchProvider,\n\tquery: string,\n\toptions: FullSearchOptions,\n): Promise<AttributedSearchResponse> {\n\tif (provider !== \"gemini\") return searchWithResolvedProvider(provider, query, options);\n\tconst result = await searchWithGeminiApi(query, options);\n\tif (result) return { ...result, provider };\n\tthrow new Error(\"Gemini API search returned no results.\");\n}\n\nasync function searchWithProviders(\n\tquery: string,\n\toptions: FullSearchOptions,\n\tselectedProviders?: ResolvedSearchProvider[],\n): Promise<AttributedSearchResponse> {\n\tconst providers = selectedProviders ?? (await Promise.all(ALL_SEARCH_PROVIDERS.map(async (provider) => ({\n\t\tprovider,\n\t\tavailable: provider === \"gemini\"\n\t\t\t? isGeminiApiAvailable()\n\t\t\t: await isResolvedProviderAvailable(provider, options),\n\t})))).filter((entry) => entry.available).map((entry) => entry.provider);\n\tif (providers.length === 0) {\n\t\tthrow new Error(\"No configured search provider available for provider \\\"all\\\". Parallel MCP, AnySearch, xAI, Bright Data, SerpBase, Serper, and Valyu are excluded.\");\n\t}\n\n\tconst settled = await Promise.allSettled(\n\t\tproviders.map((provider) => selectedProviders\n\t\t\t? searchWithResolvedProvider(provider, query, options)\n\t\t\t: searchWithAllProvider(provider, query, options)),\n\t);\n\tif (options.signal?.aborted) throw new Error(\"Aborted\");\n\n\tconst successes: AttributedSearchResponse[] = [];\n\tconst failures: Array<{ provider: ResolvedSearchProvider; error: string }> = [];\n\tfor (let index = 0; index < settled.length; index++) {\n\t\tconst outcome = settled[index];\n\t\tif (outcome.status === \"fulfilled\") {\n\t\t\tsuccesses.push(outcome.value);\n\t\t} else {\n\t\t\tfailures.push({ provider: providers[index], error: errorMessage(outcome.reason) });\n\t\t}\n\t}\n\tif (successes.length === 0) {\n\t\tconst label = selectedProviders ? \"Selected-provider\" : \"All-provider\";\n\t\tthrow new Error(`${label} search failed:\\n - ${failures.map(({ provider, error }) => `${providerLabel(provider)}: ${error}`).join(\"\\n - \")}`);\n\t}\n\n\tconst results: SearchResult[] = [];\n\tconst seenResultUrls = new Set<string>();\n\tconst inlineContent: NonNullable<SearchResponse[\"inlineContent\"]> = [];\n\tconst seenInlineUrls = new Set<string>();\n\tfor (const response of successes) {\n\t\tfor (const result of response.results) {\n\t\t\tif (seenResultUrls.has(result.url)) continue;\n\t\t\tseenResultUrls.add(result.url);\n\t\t\tresults.push(result);\n\t\t}\n\t\tfor (const content of response.inlineContent ?? []) {\n\t\t\tif (seenInlineUrls.has(content.url)) continue;\n\t\t\tseenInlineUrls.add(content.url);\n\t\t\tinlineContent.push(content);\n\t\t}\n\t}\n\n\tconst answerSections = successes.map((response) =>\n\t\t`## ${providerLabel(response.provider as ResolvedSearchProvider)}\\n\\n${response.answer || \"(No answer text returned.)\"}`\n\t);\n\tif (failures.length > 0) {\n\t\tanswerSections.push(\n\t\t\t`## Provider errors\\n\\n${failures.map(({ provider, error }) => `- **${providerLabel(provider)}:** ${error}`).join(\"\\n\")}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tprovider: \"all\",\n\t\tanswer: answerSections.join(\"\\n\\n\"),\n\t\tresults,\n\t\tproviderResponses: successes as ProviderSearchResponse[],\n\t\t...(failures.length > 0 ? { providerErrors: failures } : {}),\n\t\t...(inlineContent.length > 0 ? { inlineContent } : {}),\n\t};\n}\n\nasync function searchWithConfiguredRouting(\n\tquery: string,\n\toptions: FullSearchOptions,\n\trouting: SearchRoutingConfig,\n): Promise<AttributedSearchResponse> {\n\tconst diagnostics: string[] = [];\n\tfor (const provider of routing.providers) {\n\t\tif (!(await isResolvedProviderAvailable(provider, options))) {\n\t\t\tdiagnostics.push(`${provider}: unavailable`);\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\treturn await searchWithResolvedProvider(provider, query, options);\n\t\t} catch (err) {\n\t\t\tconst classified = classifyProviderError(provider, err);\n\t\t\tdiagnostics.push(`${provider} [${classified.kind}]: ${errorMessage(err)}`);\n\t\t\tif (!routing.fallbackOn.includes(classified.kind as SearchRoutingConfig[\"fallbackOn\"][number])) {\n\t\t\t\tthrow classified;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new Error(`Configured search routing exhausted:\\n - ${diagnostics.join(\"\\n - \")}`);\n}\n\nexport async function search(query: string, options: FullSearchOptions = {}): Promise<AttributedSearchResponse> {\n\tconst config = getSearchConfig();\n\tconst provider = options.provider === undefined || options.provider === \"auto\"\n\t\t? config.searchProvider\n\t\t: options.provider;\n\tif (Array.isArray(provider)) {\n\t\treturn searchWithProviders(query, options, normalizeResolvedProviderList(provider, \"provider\"));\n\t}\n\tif (provider === \"all\") return searchWithProviders(query, options);\n\tif (provider !== \"auto\") return searchWithResolvedProvider(provider, query, options);\n\tif (!config.searchProviderConfigured && config.searchRouting) {\n\t\treturn searchWithConfiguredRouting(query, options, config.searchRouting);\n\t}\n\n\tconst fallbackErrors: string[] = [];\n\n\tif (isSearXNGAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithSearXNG(query, options);\n\t\t\treturn { ...result, provider: \"searxng\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`SearXNG: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tlet triedOpenAI = false;\n\tif (!options.extensionContext || isOpenAICodexSelected(options.extensionContext)) {\n\t\ttriedOpenAI = true;\n\t\tconst result = await tryOpenAIInAuto(query, options, fallbackErrors);\n\t\tif (result) return result;\n\t}\n\n\tif (isExaAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithExa(query, options);\n\t\t\tif (result) return { ...result, provider: \"exa\" };\n\t\t} catch (err) {\n\t\t\tif (err instanceof CredentialResolutionError || isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Exa: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (!triedOpenAI) {\n\t\tconst result = await tryOpenAIInAuto(query, options, fallbackErrors);\n\t\tif (result) return result;\n\t}\n\n\tif (isBraveAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithBrave(query, options);\n\t\t\treturn { ...result, provider: \"brave\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Brave: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isParallelAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithParallel(query, options);\n\t\t\treturn { ...result, provider: \"parallel\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Parallel: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isTinyFishAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithTinyFish(query, options);\n\t\t\treturn { ...result, provider: \"tinyfish\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`TinyFish: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isSearch1APIAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithSearch1API(query, options);\n\t\t\treturn { ...result, provider: \"search1api\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Search1API: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isSearchinfinityAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithSearchinfinity(query, options);\n\t\t\treturn { ...result, provider: \"searchinfinity\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Searchinfinity: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isQueritAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithQuerit(query, options);\n\t\t\treturn { ...result, provider: \"querit\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Querit: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isTavilyAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithTavily(query, options);\n\t\t\treturn { ...result, provider: \"tavily\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Tavily: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isFirecrawlAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithFirecrawl(query, options);\n\t\t\treturn { ...result, provider: \"firecrawl\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Firecrawl: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isJinaSearchAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithJina(query, options);\n\t\t\treturn { ...result, provider: \"jina\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Jina: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isSerpdiveAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithSerpdive(query, options);\n\t\t\treturn { ...result, provider: \"serpdive\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`SERPdive: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isKagiAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithKagi(query, options);\n\t\t\treturn { ...result, provider: \"kagi\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Kagi: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isBochaAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithBocha(query, options);\n\t\t\treturn { ...result, provider: \"bocha\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Bocha: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isOllamaAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithOllama(query, options);\n\t\t\treturn { ...result, provider: \"ollama\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Ollama: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isPerplexityAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithPerplexity(query, options);\n\t\t\treturn { ...result, provider: \"perplexity\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Perplexity: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\ttry {\n\t\tconst geminiResult = await searchWithGemini(query, options, false);\n\t\tif (geminiResult) return { ...geminiResult, provider: \"gemini\" };\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\tfallbackErrors.push(`Gemini: ${errorMessage(err)}`);\n\t}\n\n\tif (fallbackErrors.length > 0) {\n\t\tthrow new Error(`Auto provider search failed:\\n - ${fallbackErrors.join(\"\\n - \")}`);\n\t}\n\n\tthrow new Error(\n\t\t\"No search provider available. Either:\\n\" +\n\t\t\" 1. Use /login to sign in with a Codex subscription for OpenAI web search\\n\" +\n\t\t` 2. Set openaiApiKey, braveApiKey, parallelApiKey, tinyfishApiKey, search1apiApiKey, searchinfinityApiKey, queritApiKey, tavilyApiKey, firecrawlBaseUrl, jinaApiKey, serpdiveApiKey, kagiApiKey, ollamaApiKey, searxngBaseUrl, perplexityApiKey, exaApiKey, geminiApiKey, bochaApiKey, or cloudflareApiKey in ${CONFIG_PATH}\\n` +\n\t\t\" 3. Set OPENAI_API_KEY, BRAVE_API_KEY, PARALLEL_API_KEY, TINYFISH_API_KEY, SEARCH1API_KEY, SEARCHINFINITY_API_KEY, QUERIT_API_KEY, TAVILY_API_KEY, FIRECRAWL_BASE_URL, JINA_API_KEY, SERPDIVE_API_KEY, KAGI_API_KEY, BOCHA_API_KEY, OLLAMA_API_KEY, SEARXNG_BASE_URL, EXA_API_KEY, PERPLEXITY_API_KEY, GEMINI_API_KEY, or CLOUDFLARE_API_KEY env vars\\n\" +\n\t\t\" 4. Set GOOGLE_GEMINI_BASE_URL with CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\" 5. Sign into gemini.google.com in a supported Chromium-based browser\\n\" +\n\t\t\" 6. Explicitly select provider: \\\"anysearch\\\" for anonymous AnySearch, \\\"xai\\\" for Grok, \\\"brightdata\\\" with brightdataSerpZone for paid Bright Data SERP, \\\"serpbase\\\" or \\\"serper\\\" for Google SERP, or \\\"valyu\\\" for research search\"\n\t);\n}\n\nasync function searchWithGeminiApi(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst requestSignal = AbortSignal.any([\n\t\tAbortSignal.timeout(120000),\n\t\t...(options.signal ? [options.signal] : []),\n\t]);\n\tconst apiKey = await getApiKey(requestSignal);\n\tif (!apiKey && !isGatewayConfigured()) return null;\n\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst model = getSearchConfig().searchModel ?? DEFAULT_SEARCH_MODEL;\n\t\tconst body = {\n\t\t\tcontents: [{ role: \"user\", parts: [{ text: query }] }],\n\t\t\ttools: [{ google_search: {} }],\n\t\t};\n\n\t\tconst res = await fetchGeminiApi(`${getVersionedApiBase()}/models/${model}:generateContent`, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: requestSignal,\n\t\t}, apiKey);\n\n\t\tif (!res.ok) {\n\t\t\tconst errorText = redactGeminiApiResponse(res, await res.text(), apiKey);\n\t\t\tthrow new Error(`Gemini API error ${res.status}: ${errorText.slice(0, 300)}`);\n\t\t}\n\n\t\tconst data = await res.json() as GeminiSearchResponse;\n\t\tactivityMonitor.logComplete(activityId, res.status);\n\n\t\tconst answer = data.candidates?.[0]?.content?.parts\n\t\t\t?.map(p => p.text).filter(Boolean).join(\"\\n\") ?? \"\";\n\n\t\tconst metadata = data.candidates?.[0]?.groundingMetadata;\n\t\tconst results = await resolveGroundingChunks(metadata?.groundingChunks, options.signal);\n\n\t\tif (!answer && results.length === 0) return null;\n\t\treturn { answer, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nasync function searchWithGeminiWeb(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst cookies = await isGeminiWebAvailable();\n\tif (!cookies) return null;\n\n\tconst prompt = buildSearchPrompt(query, options);\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst text = await queryWithCookies(prompt, cookies, {\n\t\t\tsignal: options.signal,\n\t\t\ttimeoutMs: 120000,\n\t\t});\n\n\t\tactivityMonitor.logComplete(activityId, 200);\n\n\t\tconst results = extractSourceUrls(text);\n\t\treturn { answer: text, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nfunction buildSearchPrompt(query: string, options: SearchOptions): string {\n\tlet prompt = `Search the web and answer the following question. Include source URLs for your claims.\\nFormat your response as:\\n1. A direct answer to the question\\n2. Cited sources as markdown links\\n\\nQuestion: ${query}`;\n\n\tif (options.recencyFilter) {\n\t\tconst labels: Record<string, string> = {\n\t\t\tday: \"past 24 hours\",\n\t\t\tweek: \"past week\",\n\t\t\tmonth: \"past month\",\n\t\t\tyear: \"past year\",\n\t\t};\n\t\tprompt += `\\n\\nOnly include results from the ${labels[options.recencyFilter]}.`;\n\t}\n\n\tif (options.domainFilter?.length) {\n\t\tconst includes = options.domainFilter.filter(d => !d.startsWith(\"-\"));\n\t\tconst excludes = options.domainFilter.filter(d => d.startsWith(\"-\")).map(d => d.slice(1));\n\t\tif (includes.length) prompt += `\\n\\nOnly cite sources from: ${includes.join(\", \")}`;\n\t\tif (excludes.length) prompt += `\\n\\nDo not cite sources from: ${excludes.join(\", \")}`;\n\t}\n\n\treturn prompt;\n}\n\nfunction extractSourceUrls(markdown: string): SearchResult[] {\n\tconst results: SearchResult[] = [];\n\tconst seen = new Set<string>();\n\tconst linkRegex = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)]+)\\)/g;\n\tfor (const match of markdown.matchAll(linkRegex)) {\n\t\tconst url = match[2];\n\t\tif (seen.has(url)) continue;\n\t\tseen.add(url);\n\t\tresults.push({ title: match[1], url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveGroundingChunks(\n\tchunks: GroundingChunk[] | undefined,\n\tsignal?: AbortSignal,\n): Promise<SearchResult[]> {\n\tif (!chunks?.length) return [];\n\n\tconst results: SearchResult[] = [];\n\tfor (const chunk of chunks) {\n\t\tif (!chunk.web) continue;\n\t\tconst title = chunk.web.title || \"\";\n\t\tlet url = chunk.web.uri || \"\";\n\n\t\tif (url.includes(\"vertexaisearch.cloud.google.com/grounding-api-redirect\")) {\n\t\t\tconst resolved = await resolveRedirect(url, signal);\n\t\t\tif (resolved) url = resolved;\n\t\t}\n\n\t\tif (url) results.push({ title, url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveRedirect(proxyUrl: string, signal?: AbortSignal): Promise<string | null> {\n\ttry {\n\t\tconst res = await fetch(proxyUrl, {\n\t\t\tmethod: \"HEAD\",\n\t\t\tredirect: \"manual\",\n\t\t\tsignal: AbortSignal.any([\n\t\t\t\tAbortSignal.timeout(5000),\n\t\t\t\t...(signal ? [signal] : []),\n\t\t\t]),\n\t\t});\n\t\treturn res.headers.get(\"location\") || null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface GeminiSearchResponse {\n\tcandidates?: Array<{\n\t\tcontent?: { parts?: Array<{ text?: string }> };\n\t\tgroundingMetadata?: {\n\t\t\twebSearchQueries?: string[];\n\t\t\tgroundingChunks?: GroundingChunk[];\n\t\t\tgroundingSupports?: Array<{\n\t\t\t\tsegment?: { startIndex?: number; endIndex?: number; text?: string };\n\t\t\t\tgroundingChunkIndices?: number[];\n\t\t\t}>;\n\t\t};\n\t}>;\n}\n\ninterface GroundingChunk {\n\tweb?: { uri?: string; title?: string };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"gemini-search.js","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-search.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport type { ExtensionContext } from \"../host.ts\";\nimport { activityMonitor } from \"./activity.ts\";\nimport { CredentialResolutionError } from \"./credential-source.ts\";\nimport { getApiKey, getVersionedApiBase, fetchGeminiApi, isGatewayConfigured, isGeminiApiAvailable, redactGeminiApiResponse } from \"./gemini-api.ts\";\nimport { isGeminiAdcAvailable } from \"./gemini-adc.ts\";\nimport { getGeminiWebAvailabilityDiagnostic, isGeminiWebAvailable, queryWithCookies } from \"./gemini-web.ts\";\nimport { isPerplexityAvailable, searchWithPerplexity, type SearchResult, type SearchResponse, type SearchOptions } from \"./perplexity.ts\";\nimport { isExaAvailable, searchWithExa } from \"./exa.ts\";\nimport { isBraveAvailable, searchWithBrave } from \"./brave.ts\";\nimport {\n\tisCurrentModelHostedSearchEligible,\n\tisOpenAISearchAvailable,\n\tsearchWithCurrentModelOpenAI,\n\tsearchWithOpenAI,\n} from \"./openai-search.ts\";\nimport { isParallelAvailable, searchWithParallel } from \"./parallel.ts\";\nimport { isParallelMcpAvailable, searchWithParallelMcp } from \"./parallel-mcp.ts\";\nimport { isTinyFishAvailable, searchWithTinyFish } from \"./tinyfish.ts\";\nimport { isSearch1APIAvailable, searchWithSearch1API } from \"./search1api.ts\";\nimport { isSearchinfinityAvailable, searchWithSearchinfinity } from \"./searchinfinity.ts\";\nimport { isQueritAvailable, searchWithQuerit } from \"./querit.ts\";\nimport { isTavilyAvailable, searchWithTavily } from \"./tavily.ts\";\nimport { isFirecrawlAvailable, searchWithFirecrawl } from \"./firecrawl.ts\";\nimport { isJinaSearchAvailable, searchWithJina } from \"./jina-search.ts\";\nimport { isSerpdiveAvailable, searchWithSerpdive } from \"./serpdive.ts\";\nimport { isKagiAvailable, searchWithKagi } from \"./kagi.ts\";\nimport { isBochaAvailable, searchWithBocha } from \"./bocha.ts\";\nimport { isOllamaAvailable, searchWithOllama } from \"./ollama.ts\";\nimport { isSearXNGAvailable, searchWithSearXNG } from \"./searxng.ts\";\nimport { isDuckDuckGoAvailable, searchWithDuckDuckGo } from \"./duckduckgo.ts\";\nimport { isAnySearchAvailable, searchWithAnySearch } from \"./anysearch.ts\";\nimport { isXcrawlAvailable, searchWithXCrawl } from \"./xcrawl.ts\";\nimport { isXaiSearchAvailable, searchWithXai } from \"./xai-search.ts\";\nimport { isBrightDataAvailable, searchWithBrightData } from \"./brightdata.ts\";\nimport { isSerpBaseAvailable, searchWithSerpBase } from \"./serpbase.ts\";\nimport { isSerperAvailable, searchWithSerper } from \"./serper.ts\";\nimport { isValyuAvailable, searchWithValyu } from \"./valyu.ts\";\nimport { isKimiSearchAvailable, searchWithKimi } from \"./kimi-search.ts\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nexport const RESOLVED_SEARCH_PROVIDERS = [\"openai\", \"brave\", \"parallel\", \"parallel-mcp\", \"tinyfish\", \"search1api\", \"searchinfinity\", \"querit\", \"tavily\", \"firecrawl\", \"jina\", \"searxng\", \"duckduckgo\", \"perplexity\", \"gemini\", \"kimi\", \"exa\", \"serpdive\", \"kagi\", \"ollama\", \"anysearch\", \"xai\", \"brightdata\", \"serpbase\", \"serper\", \"valyu\", \"bocha\", \"xcrawl\"] as const;\nexport const SEARCH_PROVIDERS = [\"auto\", \"all\", ...RESOLVED_SEARCH_PROVIDERS] as const;\n\nexport type ResolvedSearchProvider = typeof RESOLVED_SEARCH_PROVIDERS[number];\nexport type SearchProvider = typeof SEARCH_PROVIDERS[number];\nexport type SearchProviderSelection = SearchProvider | ResolvedSearchProvider[];\nexport type ProviderAvailability = { all: boolean } & Record<ResolvedSearchProvider, boolean>;\nexport type SearchProviderErrorKind =\n\t| \"transient\"\n\t| \"quota\"\n\t| \"network\"\n\t| \"credential\"\n\t| \"config\"\n\t| \"auth\"\n\t| \"invalid-request\"\n\t| \"invalid-response\"\n\t| \"unsupported\"\n\t| \"aborted\"\n\t| \"unknown\";\n\nexport interface SearchRoutingConfig {\n\tproviders: ResolvedSearchProvider[];\n\tuseCurrentModel?: boolean;\n\tfallbackOn: Array<Extract<SearchProviderErrorKind, \"transient\" | \"quota\" | \"network\" | \"invalid-response\" | \"unsupported\">>;\n}\n\nexport class SearchProviderError extends Error {\n\treadonly provider: ResolvedSearchProvider;\n\treadonly kind: SearchProviderErrorKind;\n\treadonly status?: number;\n\treadonly causeError: unknown;\n\n\tconstructor(\n\t\tprovider: ResolvedSearchProvider,\n\t\tkind: SearchProviderErrorKind,\n\t\tmessage: string,\n\t\tstatus: number | undefined,\n\t\tcause: unknown,\n\t) {\n\t\tsuper(`${provider} search failed (${kind}): ${message}`);\n\t\tthis.name = \"SearchProviderError\";\n\t\tthis.provider = provider;\n\t\tthis.kind = kind;\n\t\tthis.status = status;\n\t\tthis.causeError = cause;\n\t}\n}\n\nexport interface ProviderSearchResponse extends SearchResponse {\n\tprovider: ResolvedSearchProvider;\n}\n\nexport interface ProviderSearchFailure {\n\tprovider: ResolvedSearchProvider;\n\terror: string;\n}\n\nexport interface AttributedSearchResponse extends SearchResponse {\n\tprovider: ResolvedSearchProvider | \"all\";\n\tproviderResponses?: ProviderSearchResponse[];\n\tproviderErrors?: ProviderSearchFailure[];\n}\n\nconst CONFIG_PATH = getWebSearchConfigPath();\nconst DEFAULT_SEARCH_MODEL = \"gemini-3.6-flash\";\n// Explicit-only providers (Parallel MCP, DuckDuckGo, Kimi, AnySearch, XCrawl, xAI, Bright Data, SerpBase, Serper, Valyu) are deliberately absent:\n// `all` must never fan out to an opt-in or paid provider without the user asking for it.\nexport const ALL_SEARCH_PROVIDERS: ResolvedSearchProvider[] = [\"searxng\", \"openai\", \"exa\", \"brave\", \"parallel\", \"tinyfish\", \"search1api\", \"searchinfinity\", \"querit\", \"tavily\", \"firecrawl\", \"jina\", \"serpdive\", \"kagi\", \"ollama\", \"perplexity\", \"gemini\", \"bocha\"];\nconst VALID_ROUTING_KINDS = [\"transient\", \"quota\", \"network\", \"invalid-response\", \"unsupported\"] as const;\n\ntype SearchConfig = {\n\tsearchProvider: SearchProviderSelection;\n\tsearchProviderConfigured: boolean;\n\tsearchRouting?: SearchRoutingConfig;\n\tsearchModel?: string;\n};\n\nlet cachedSearchConfig: SearchConfig | null = null;\n\nfunction getSearchConfig(): SearchConfig {\n\tif (cachedSearchConfig) return cachedSearchConfig;\n\tif (!existsSync(CONFIG_PATH)) {\n\t\tcachedSearchConfig = { searchProvider: \"auto\", searchProviderConfigured: false };\n\t\treturn cachedSearchConfig;\n\t}\n\n\tconst rawText = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet raw: Record<string, unknown>;\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(rawText);\n\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\tthrow new Error(\"expected a JSON object\");\n\t\t}\n\t\traw = parsed as Record<string, unknown>;\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\n\tconst searchModel = normalizeSearchModel(raw.searchModel);\n\tconst searchProviderConfigured = Object.hasOwn(raw, \"searchProvider\") || Object.hasOwn(raw, \"provider\");\n\tcachedSearchConfig = {\n\t\tsearchProvider: normalizeSearchProviderSelection(raw.searchProvider ?? raw.provider, `provider in ${CONFIG_PATH}`),\n\t\tsearchProviderConfigured,\n\t\t...(Object.hasOwn(raw, \"searchRouting\") ? { searchRouting: normalizeSearchRouting(raw.searchRouting) } : {}),\n\t\t...(searchModel ? { searchModel } : {}),\n\t};\n\treturn cachedSearchConfig;\n}\n\nfunction normalizeSearchRouting(value: unknown): SearchRoutingConfig {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow new Error(`searchRouting in ${CONFIG_PATH} must be an object`);\n\t}\n\tconst raw = value as Record<string, unknown>;\n\tconst providers = normalizeResolvedProviderList(raw.providers, `searchRouting.providers in ${CONFIG_PATH}`);\n\tconst useCurrentModel = raw.useCurrentModel;\n\tif (useCurrentModel !== undefined && typeof useCurrentModel !== \"boolean\") {\n\t\tthrow new Error(`searchRouting.useCurrentModel in ${CONFIG_PATH} must be a boolean`);\n\t}\n\tif (!Array.isArray(raw.fallbackOn) || raw.fallbackOn.length === 0) {\n\t\tthrow new Error(`searchRouting.fallbackOn in ${CONFIG_PATH} must be a non-empty array`);\n\t}\n\tconst fallbackOn: SearchRoutingConfig[\"fallbackOn\"] = [];\n\tfor (const kind of raw.fallbackOn) {\n\t\tif (typeof kind !== \"string\" || !VALID_ROUTING_KINDS.includes(kind as typeof VALID_ROUTING_KINDS[number])) {\n\t\t\tthrow new Error(`searchRouting.fallbackOn in ${CONFIG_PATH} may only contain transient, quota, network, invalid-response, or unsupported`);\n\t\t}\n\t\tif (!fallbackOn.includes(kind as SearchRoutingConfig[\"fallbackOn\"][number])) {\n\t\t\tfallbackOn.push(kind as SearchRoutingConfig[\"fallbackOn\"][number]);\n\t\t}\n\t}\n\treturn {\n\t\tproviders,\n\t\t...(useCurrentModel !== undefined ? { useCurrentModel: useCurrentModel as boolean } : {}),\n\t\tfallbackOn,\n\t};\n}\n\nexport function getConfiguredSearchRouting(): SearchRoutingConfig | undefined {\n\tconst config = getSearchConfig();\n\treturn config.searchProviderConfigured ? undefined : config.searchRouting;\n}\n\nfunction normalizeSearchModel(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeResolvedProviderList(value: unknown, label: string): ResolvedSearchProvider[] {\n\tif (!Array.isArray(value) || value.length === 0) {\n\t\tthrow new Error(`${label} must be a non-empty array`);\n\t}\n\tconst providers: ResolvedSearchProvider[] = [];\n\tfor (const provider of value) {\n\t\tconst normalized = typeof provider === \"string\" ? provider.trim().toLowerCase() : \"\";\n\t\tif (!RESOLVED_SEARCH_PROVIDERS.includes(normalized as ResolvedSearchProvider)) {\n\t\t\tthrow new Error(`${label} contains an invalid provider: ${String(provider)}`);\n\t\t}\n\t\tif (providers.includes(normalized as ResolvedSearchProvider)) {\n\t\t\tthrow new Error(`${label} must not contain duplicates: ${normalized}`);\n\t\t}\n\t\tproviders.push(normalized as ResolvedSearchProvider);\n\t}\n\treturn providers;\n}\n\nexport function normalizeSearchProviderSelection(value: unknown, label = \"provider\"): SearchProviderSelection {\n\tif (Array.isArray(value)) return normalizeResolvedProviderList(value, label);\n\tconst normalized = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n\treturn SEARCH_PROVIDERS.includes(normalized as SearchProvider) ? normalized as SearchProvider : \"auto\";\n}\n\nexport interface FullSearchOptions extends SearchOptions {\n\tprovider?: SearchProviderSelection;\n\tincludeContent?: boolean;\n\textensionContext?: ExtensionContext;\n}\n\nfunction errorMessage(err: unknown): string {\n\treturn err instanceof Error ? err.message : String(err);\n}\n\nfunction isAbortError(err: unknown): boolean {\n\treturn errorMessage(err).toLowerCase().includes(\"abort\");\n}\n\nfunction shouldTryOpenAIInAuto(options: SearchOptions): boolean {\n\tif (options.recencyFilter) return false;\n\tif (typeof options.numResults === \"number\" && Number.isFinite(options.numResults) && Math.floor(options.numResults) !== 5) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isOpenAICodexSelected(ctx?: ExtensionContext): boolean {\n\treturn ctx?.model?.provider === \"openai-codex\";\n}\n\nasync function tryOpenAIInAuto(query: string, options: FullSearchOptions, fallbackErrors: string[]): Promise<AttributedSearchResponse | null> {\n\tif (!shouldTryOpenAIInAuto(options)) return null;\n\ttry {\n\t\tif (await isOpenAISearchAvailable(options.extensionContext)) {\n\t\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\t\treturn { ...result, provider: \"openai\" };\n\t\t}\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\tfallbackErrors.push(`OpenAI: ${errorMessage(err)}`);\n\t}\n\treturn null;\n}\n\nasync function searchWithGemini(\n\tquery: string,\n\toptions: SearchOptions,\n\tstrictErrors: boolean,\n): Promise<SearchResponse | null> {\n\tconst errors: string[] = [];\n\n\ttry {\n\t\tconst apiResult = await searchWithGeminiApi(query, options);\n\t\tif (apiResult) return apiResult;\n\t} catch (err) {\n\t\tif (err instanceof CredentialResolutionError || isAbortError(err)) throw err;\n\t\terrors.push(`Gemini API: ${errorMessage(err)}`);\n\t}\n\n\ttry {\n\t\tconst webResult = await searchWithGeminiWeb(query, options);\n\t\tif (webResult) return webResult;\n\t\tconst diagnostic = getGeminiWebAvailabilityDiagnostic();\n\t\tif (diagnostic) errors.push(`Gemini Web: ${diagnostic}`);\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\terrors.push(`Gemini Web: ${errorMessage(err)}`);\n\t}\n\n\tif (strictErrors && errors.length > 0) {\n\t\tthrow new Error(`Gemini search failed:\\n - ${errors.join(\"\\n - \")}`);\n\t}\n\n\treturn null;\n}\n\nfunction providerErrorStatus(message: string): number | undefined {\n\tconst match = message.match(/\\b(?:error|status|http)\\s+(\\d{3})\\b/i);\n\tif (!match) return undefined;\n\treturn Number(match[1]);\n}\n\nfunction classifyProviderError(provider: ResolvedSearchProvider, err: unknown): SearchProviderError {\n\tif (err instanceof SearchProviderError) return err;\n\tconst message = errorMessage(err);\n\tconst lower = message.toLowerCase();\n\tconst status = providerErrorStatus(message);\n\tlet kind: SearchProviderErrorKind = \"unknown\";\n\tconst mentionsUnsupportedWebSearch = /(?:web[_ -]?search|web[_ -]?search_preview|(?:the )?tool)\\b.*\\b(?:unsupported|not supported|does not support|doesn't support|unknown|unrecognized|unavailable|not found)|\\b(?:unsupported|not supported|does not support|doesn't support|unknown|unrecognized|unavailable|not found)\\b.*\\b(?:web[_ -]?search|web[_ -]?search_preview|(?:the )?tool)/i.test(lower);\n\tif (err instanceof CredentialResolutionError || /(?:api )?key (?:not found|missing)|credential resolution/.test(lower)) {\n\t\tkind = \"credential\";\n\t} else if (isAbortError(err)) {\n\t\tkind = \"aborted\";\n\t} else if (provider === \"xai\" && status === 403 && /spending[- ]limit|(?:no|out of) credits?|insufficient quota|quota (?:exceeded|exhausted)|credits? (?:exhausted|depleted|used up)/.test(lower)) {\n\t\tkind = \"quota\";\n\t} else if (status === 401 || status === 403) {\n\t\tkind = \"auth\";\n\t} else if (provider === \"openai\" && (status === 400 || status === 422) && mentionsUnsupportedWebSearch) {\n\t\tkind = \"unsupported\";\n\t} else if (status === 400 || status === 422) {\n\t\tkind = \"invalid-request\";\n\t} else if (status === 402 || status === 429) {\n\t\tkind = \"quota\";\n\t} else if (status !== undefined && (status === 408 || status === 425 || status >= 500)) {\n\t\tkind = \"transient\";\n\t} else if (/rate limit|quota|too many requests/.test(lower)) {\n\t\tkind = \"quota\";\n\t} else if (/unauthorized|forbidden|permission denied/.test(lower)) {\n\t\tkind = \"auth\";\n\t} else if (/bad request|invalid request/.test(lower)) {\n\t\tkind = \"invalid-request\";\n\t} else if (/invalid json|no parseable response|no parseable results|invalid response|returned empty response|no web_search_call/.test(lower)) {\n\t\tkind = \"invalid-response\";\n\t} else if (/temporar|service unavailable|server error/.test(lower)) {\n\t\tkind = \"transient\";\n\t} else if (err instanceof TypeError || /fetch failed|network|econnreset|econnrefused|enotfound|etimedout|timed out|socket/.test(lower)) {\n\t\tkind = \"network\";\n\t} else if (/invalid or missing|invalid config|failed to parse|must be an? |configuration/.test(lower)) {\n\t\tkind = \"config\";\n\t}\n\treturn new SearchProviderError(provider, kind, message, status, err);\n}\n\nasync function searchWithResolvedProvider(\n\tprovider: ResolvedSearchProvider,\n\tquery: string,\n\toptions: FullSearchOptions,\n\tuseCurrentModel = false,\n): Promise<AttributedSearchResponse> {\n\tif (provider === \"openai\") {\n\t\tconst result = useCurrentModel\n\t\t\t? await searchWithCurrentModelOpenAI(query, options, options.extensionContext)\n\t\t\t: await searchWithOpenAI(query, options, options.extensionContext);\n\t\treturn { ...result, provider };\n\t}\n\tif (provider === \"brave\") return { ...(await searchWithBrave(query, options)), provider };\n\tif (provider === \"parallel\") return { ...(await searchWithParallel(query, options)), provider };\n\tif (provider === \"parallel-mcp\") return { ...(await searchWithParallelMcp(query, options)), provider };\n\tif (provider === \"tinyfish\") return { ...(await searchWithTinyFish(query, options)), provider };\n\tif (provider === \"search1api\") return { ...(await searchWithSearch1API(query, options)), provider };\n\tif (provider === \"searchinfinity\") return { ...(await searchWithSearchinfinity(query, options)), provider };\n\tif (provider === \"querit\") return { ...(await searchWithQuerit(query, options)), provider };\n\tif (provider === \"tavily\") return { ...(await searchWithTavily(query, options)), provider };\n\tif (provider === \"firecrawl\") return { ...(await searchWithFirecrawl(query, options)), provider };\n\tif (provider === \"jina\") return { ...(await searchWithJina(query, options)), provider };\n\tif (provider === \"serpdive\") return { ...(await searchWithSerpdive(query, options)), provider };\n\tif (provider === \"kagi\") return { ...(await searchWithKagi(query, options)), provider };\n\tif (provider === \"bocha\") return { ...(await searchWithBocha(query, options)), provider };\n\tif (provider === \"ollama\") return { ...(await searchWithOllama(query, options)), provider };\n\tif (provider === \"anysearch\") return { ...(await searchWithAnySearch(query, options)), provider };\n\tif (provider === \"xai\") return { ...(await searchWithXai(query, options, options.extensionContext)), provider };\n\tif (provider === \"brightdata\") return { ...(await searchWithBrightData(query, options)), provider };\n\tif (provider === \"serpbase\") return { ...(await searchWithSerpBase(query, options)), provider };\n\tif (provider === \"serper\") return { ...(await searchWithSerper(query, options)), provider };\n\tif (provider === \"valyu\") return { ...(await searchWithValyu(query, options)), provider };\n\tif (provider === \"xcrawl\") return { ...(await searchWithXCrawl(query, options)), provider };\n\tif (provider === \"perplexity\") return { ...(await searchWithPerplexity(query, options)), provider };\n\tif (provider === \"searxng\") return { ...(await searchWithSearXNG(query, options)), provider };\n\tif (provider === \"duckduckgo\") return { ...(await searchWithDuckDuckGo(query, options)), provider };\n\tif (provider === \"kimi\") return { ...(await searchWithKimi(query, options, options.extensionContext)), provider };\n\tif (provider === \"gemini\") {\n\t\tconst result = await searchWithGemini(query, options, true);\n\t\tif (result) return { ...result, provider };\n\t\tthrow new Error(\n\t\t\t\"Gemini search unavailable. Either:\\n\" +\n\t\t\t` 1. Configure geminiApiKey in ${CONFIG_PATH} or set GEMINI_API_KEY\\n` +\n\t\t\t\" 2. Set GOOGLE_GEMINI_BASE_URL + CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\t\" 3. Set geminiAuth to \\\"adc\\\" in web-search.json with a Google Cloud ADC + project/location\\n\" +\n\t\t\t\" 4. Sign into gemini.google.com in a supported Chromium-based browser\",\n\t\t);\n\t}\n\tconst result = await searchWithExa(query, options);\n\tif (result) return { ...result, provider };\n\tthrow new Error(\"Exa search returned no results.\");\n}\n\nasync function isResolvedProviderAvailable(provider: ResolvedSearchProvider, options: FullSearchOptions, useCurrentModel = false): Promise<boolean> {\n\tif (provider === \"openai\") {\n\t\treturn useCurrentModel\n\t\t\t? isCurrentModelHostedSearchEligible(options.extensionContext)\n\t\t\t: isOpenAISearchAvailable(options.extensionContext);\n\t}\n\tif (provider === \"brave\") return isBraveAvailable();\n\tif (provider === \"parallel\") return isParallelAvailable();\n\tif (provider === \"parallel-mcp\") return isParallelMcpAvailable();\n\tif (provider === \"tinyfish\") return isTinyFishAvailable();\n\tif (provider === \"search1api\") return isSearch1APIAvailable();\n\tif (provider === \"searchinfinity\") return isSearchinfinityAvailable();\n\tif (provider === \"querit\") return isQueritAvailable();\n\tif (provider === \"tavily\") return isTavilyAvailable();\n\tif (provider === \"firecrawl\") return isFirecrawlAvailable();\n\tif (provider === \"jina\") return isJinaSearchAvailable();\n\tif (provider === \"serpdive\") return isSerpdiveAvailable();\n\tif (provider === \"kagi\") return isKagiAvailable();\n\tif (provider === \"bocha\") return isBochaAvailable();\n\tif (provider === \"ollama\") return isOllamaAvailable();\n\tif (provider === \"anysearch\") return isAnySearchAvailable();\n\tif (provider === \"xai\") return isXaiSearchAvailable(options.extensionContext);\n\tif (provider === \"brightdata\") return isBrightDataAvailable();\n\tif (provider === \"serpbase\") return isSerpBaseAvailable();\n\tif (provider === \"serper\") return isSerperAvailable();\n\tif (provider === \"valyu\") return isValyuAvailable();\n\tif (provider === \"xcrawl\") return isXcrawlAvailable();\n\tif (provider === \"perplexity\") return isPerplexityAvailable();\n\tif (provider === \"searxng\") return isSearXNGAvailable();\n\tif (provider === \"duckduckgo\") return isDuckDuckGoAvailable();\n\tif (provider === \"gemini\") return isGeminiApiAvailable() || await isGeminiWebOptionallyAvailable();\n\tif (provider === \"kimi\") return isKimiSearchAvailable(options.extensionContext);\n\treturn isExaAvailable();\n}\n\nasync function isGeminiWebOptionallyAvailable(): Promise<boolean> {\n\ttry {\n\t\treturn !!(await isGeminiWebAvailable());\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction providerLabel(provider: ResolvedSearchProvider): string {\n\tif (provider === \"openai\") return \"OpenAI\";\n\tif (provider === \"parallel-mcp\") return \"Parallel MCP\";\n\tif (provider === \"tinyfish\") return \"TinyFish\";\n\tif (provider === \"search1api\") return \"Search1API\";\n\tif (provider === \"searchinfinity\") return \"Searchinfinity\";\n\tif (provider === \"querit\") return \"Querit\";\n\tif (provider === \"firecrawl\") return \"Firecrawl\";\n\tif (provider === \"serpdive\") return \"SERPdive\";\n\tif (provider === \"searxng\") return \"SearXNG\";\n\tif (provider === \"duckduckgo\") return \"DuckDuckGo\";\n\tif (provider === \"kagi\") return \"Kagi\";\n\tif (provider === \"bocha\") return \"Bocha\";\n\tif (provider === \"xcrawl\") return \"XCrawl\";\n\tif (provider === \"kimi\") return \"Kimi\";\n\tif (provider === \"ollama\") return \"Ollama\";\n\tif (provider === \"xai\") return \"xAI\";\n\tif (provider === \"brightdata\") return \"Bright Data\";\n\tif (provider === \"serpbase\") return \"SerpBase\";\n\tif (provider === \"serper\") return \"Serper\";\n\tif (provider === \"valyu\") return \"Valyu\";\n\treturn provider.charAt(0).toUpperCase() + provider.slice(1);\n}\n\nasync function searchWithAllProvider(\n\tprovider: ResolvedSearchProvider,\n\tquery: string,\n\toptions: FullSearchOptions,\n): Promise<AttributedSearchResponse> {\n\tif (provider !== \"gemini\") return searchWithResolvedProvider(provider, query, options);\n\tconst result = await searchWithGeminiApi(query, options);\n\tif (result) return { ...result, provider };\n\tthrow new Error(\"Gemini API search returned no results.\");\n}\n\nasync function searchWithProviders(\n\tquery: string,\n\toptions: FullSearchOptions,\n\tselectedProviders?: ResolvedSearchProvider[],\n): Promise<AttributedSearchResponse> {\n\tconst providers = selectedProviders ?? (await Promise.all(ALL_SEARCH_PROVIDERS.map(async (provider) => ({\n\t\tprovider,\n\t\tavailable: provider === \"gemini\"\n\t\t\t? isGeminiApiAvailable()\n\t\t\t: await isResolvedProviderAvailable(provider, options),\n\t})))).filter((entry) => entry.available).map((entry) => entry.provider);\n\tif (providers.length === 0) {\n\t\tthrow new Error(\"No configured search provider available for provider \\\"all\\\". Parallel MCP, DuckDuckGo, Kimi, AnySearch, xAI, Bright Data, SerpBase, Serper, Valyu, and XCrawl are excluded.\");\n\t}\n\n\tconst settled = await Promise.allSettled(\n\t\tproviders.map((provider) => selectedProviders\n\t\t\t? searchWithResolvedProvider(provider, query, options)\n\t\t\t: searchWithAllProvider(provider, query, options)),\n\t);\n\tif (options.signal?.aborted) throw new Error(\"Aborted\");\n\n\tconst successes: AttributedSearchResponse[] = [];\n\tconst failures: Array<{ provider: ResolvedSearchProvider; error: string }> = [];\n\tfor (let index = 0; index < settled.length; index++) {\n\t\tconst outcome = settled[index];\n\t\tif (outcome.status === \"fulfilled\") {\n\t\t\tsuccesses.push(outcome.value);\n\t\t} else {\n\t\t\tfailures.push({ provider: providers[index], error: errorMessage(outcome.reason) });\n\t\t}\n\t}\n\tif (successes.length === 0) {\n\t\tconst label = selectedProviders ? \"Selected-provider\" : \"All-provider\";\n\t\tthrow new Error(`${label} search failed:\\n - ${failures.map(({ provider, error }) => `${providerLabel(provider)}: ${error}`).join(\"\\n - \")}`);\n\t}\n\n\tconst results: SearchResult[] = [];\n\tconst seenResultUrls = new Set<string>();\n\tconst inlineContent: NonNullable<SearchResponse[\"inlineContent\"]> = [];\n\tconst seenInlineUrls = new Set<string>();\n\tfor (const response of successes) {\n\t\tfor (const result of response.results) {\n\t\t\tif (seenResultUrls.has(result.url)) continue;\n\t\t\tseenResultUrls.add(result.url);\n\t\t\tresults.push(result);\n\t\t}\n\t\tfor (const content of response.inlineContent ?? []) {\n\t\t\tif (seenInlineUrls.has(content.url)) continue;\n\t\t\tseenInlineUrls.add(content.url);\n\t\t\tinlineContent.push(content);\n\t\t}\n\t}\n\n\tconst answerSections = successes.map((response) =>\n\t\t`## ${providerLabel(response.provider as ResolvedSearchProvider)}\\n\\n${response.answer || \"(No answer text returned.)\"}`\n\t);\n\tif (failures.length > 0) {\n\t\tanswerSections.push(\n\t\t\t`## Provider errors\\n\\n${failures.map(({ provider, error }) => `- **${providerLabel(provider)}:** ${error}`).join(\"\\n\")}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tprovider: \"all\",\n\t\tanswer: answerSections.join(\"\\n\\n\"),\n\t\tresults,\n\t\tproviderResponses: successes as ProviderSearchResponse[],\n\t\t...(failures.length > 0 ? { providerErrors: failures } : {}),\n\t\t...(inlineContent.length > 0 ? { inlineContent } : {}),\n\t};\n}\n\nasync function searchWithConfiguredRouting(\n\tquery: string,\n\toptions: FullSearchOptions,\n\trouting: SearchRoutingConfig,\n): Promise<AttributedSearchResponse> {\n\tconst diagnostics: string[] = [];\n\tfor (const provider of routing.providers) {\n\t\tconst useCurrentModel = provider === \"openai\" && routing.useCurrentModel === true;\n\t\tif (!(await isResolvedProviderAvailable(provider, options, useCurrentModel))) {\n\t\t\tdiagnostics.push(`${provider}: unavailable`);\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\treturn await searchWithResolvedProvider(provider, query, options, useCurrentModel);\n\t\t} catch (err) {\n\t\t\tconst classified = classifyProviderError(provider, err);\n\t\t\tdiagnostics.push(`${provider} [${classified.kind}]: ${errorMessage(err)}`);\n\t\t\tif (!routing.fallbackOn.includes(classified.kind as SearchRoutingConfig[\"fallbackOn\"][number])) {\n\t\t\t\tthrow classified;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new Error(`Configured search routing exhausted:\\n - ${diagnostics.join(\"\\n - \")}`);\n}\n\nexport async function search(query: string, options: FullSearchOptions = {}): Promise<AttributedSearchResponse> {\n\tconst config = getSearchConfig();\n\tconst provider = options.provider === undefined || options.provider === \"auto\"\n\t\t? config.searchProvider\n\t\t: options.provider;\n\tif (Array.isArray(provider)) {\n\t\treturn searchWithProviders(query, options, normalizeResolvedProviderList(provider, \"provider\"));\n\t}\n\tif (provider === \"all\") return searchWithProviders(query, options);\n\tif (provider !== \"auto\") return searchWithResolvedProvider(provider, query, options);\n\tif (!config.searchProviderConfigured && config.searchRouting) {\n\t\treturn searchWithConfiguredRouting(query, options, config.searchRouting);\n\t}\n\n\tconst fallbackErrors: string[] = [];\n\n\tif (isSearXNGAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithSearXNG(query, options);\n\t\t\treturn { ...result, provider: \"searxng\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`SearXNG: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tlet triedOpenAI = false;\n\tif (!options.extensionContext || isOpenAICodexSelected(options.extensionContext)) {\n\t\ttriedOpenAI = true;\n\t\tconst result = await tryOpenAIInAuto(query, options, fallbackErrors);\n\t\tif (result) return result;\n\t}\n\n\tif (isExaAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithExa(query, options);\n\t\t\tif (result) return { ...result, provider: \"exa\" };\n\t\t} catch (err) {\n\t\t\tif (err instanceof CredentialResolutionError || isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Exa: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (!triedOpenAI) {\n\t\tconst result = await tryOpenAIInAuto(query, options, fallbackErrors);\n\t\tif (result) return result;\n\t}\n\n\tif (isBraveAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithBrave(query, options);\n\t\t\treturn { ...result, provider: \"brave\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Brave: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isParallelAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithParallel(query, options);\n\t\t\treturn { ...result, provider: \"parallel\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Parallel: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isTinyFishAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithTinyFish(query, options);\n\t\t\treturn { ...result, provider: \"tinyfish\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`TinyFish: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isSearch1APIAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithSearch1API(query, options);\n\t\t\treturn { ...result, provider: \"search1api\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Search1API: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isSearchinfinityAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithSearchinfinity(query, options);\n\t\t\treturn { ...result, provider: \"searchinfinity\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Searchinfinity: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isQueritAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithQuerit(query, options);\n\t\t\treturn { ...result, provider: \"querit\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Querit: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isTavilyAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithTavily(query, options);\n\t\t\treturn { ...result, provider: \"tavily\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Tavily: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isFirecrawlAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithFirecrawl(query, options);\n\t\t\treturn { ...result, provider: \"firecrawl\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Firecrawl: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isJinaSearchAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithJina(query, options);\n\t\t\treturn { ...result, provider: \"jina\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Jina: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isSerpdiveAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithSerpdive(query, options);\n\t\t\treturn { ...result, provider: \"serpdive\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`SERPdive: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isKagiAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithKagi(query, options);\n\t\t\treturn { ...result, provider: \"kagi\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Kagi: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isBochaAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithBocha(query, options);\n\t\t\treturn { ...result, provider: \"bocha\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Bocha: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isOllamaAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithOllama(query, options);\n\t\t\treturn { ...result, provider: \"ollama\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Ollama: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isPerplexityAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithPerplexity(query, options);\n\t\t\treturn { ...result, provider: \"perplexity\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Perplexity: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\ttry {\n\t\tconst geminiResult = await searchWithGemini(query, options, false);\n\t\tif (geminiResult) return { ...geminiResult, provider: \"gemini\" };\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\tfallbackErrors.push(`Gemini: ${errorMessage(err)}`);\n\t}\n\n\tif (fallbackErrors.length > 0) {\n\t\tthrow new Error(`Auto provider search failed:\\n - ${fallbackErrors.join(\"\\n - \")}`);\n\t}\n\n\tthrow new Error(\n\t\t\"No search provider available. Either:\\n\" +\n\t\t\" 1. Use /login to sign in with a Codex subscription for OpenAI web search\\n\" +\n\t\t` 2. Set openaiApiKey, braveApiKey, parallelApiKey, tinyfishApiKey, search1apiApiKey, searchinfinityApiKey, queritApiKey, tavilyApiKey, firecrawlBaseUrl, jinaApiKey, serpdiveApiKey, kagiApiKey, ollamaApiKey, searxngBaseUrl, perplexityApiKey, exaApiKey, geminiApiKey, bochaApiKey, or cloudflareApiKey in ${CONFIG_PATH}\\n` +\n\t\t\" 3. Set OPENAI_API_KEY, BRAVE_API_KEY, PARALLEL_API_KEY, TINYFISH_API_KEY, SEARCH1API_KEY, SEARCHINFINITY_API_KEY, QUERIT_API_KEY, TAVILY_API_KEY, FIRECRAWL_BASE_URL, JINA_API_KEY, SERPDIVE_API_KEY, KAGI_API_KEY, BOCHA_API_KEY, OLLAMA_API_KEY, SEARXNG_BASE_URL, EXA_API_KEY, PERPLEXITY_API_KEY, GEMINI_API_KEY, or CLOUDFLARE_API_KEY env vars\\n\" +\n\t\t\" 4. Set GOOGLE_GEMINI_BASE_URL with CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\" 5. Sign into gemini.google.com in a supported Chromium-based browser\\n\" +\n\t\t\" 6. Explicitly select provider: \\\"anysearch\\\" for anonymous AnySearch, \\\"xcrawl\\\" for XCrawl, \\\"xai\\\" for Grok, \\\"brightdata\\\" with brightdataSerpZone for paid Bright Data SERP, \\\"serpbase\\\" or \\\"serper\\\" for Google SERP, or \\\"valyu\\\" for research search\"\n\t);\n}\n\nasync function searchWithGeminiApi(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst requestSignal = AbortSignal.any([\n\t\tAbortSignal.timeout(120000),\n\t\t...(options.signal ? [options.signal] : []),\n\t]);\n\tconst apiKey = isGeminiAdcAvailable() ? null : await getApiKey(requestSignal);\n\tif (!apiKey && !isGatewayConfigured() && !isGeminiAdcAvailable()) return null;\n\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst model = getSearchConfig().searchModel ?? DEFAULT_SEARCH_MODEL;\n\t\tconst body = {\n\t\t\tcontents: [{ role: \"user\", parts: [{ text: query }] }],\n\t\t\ttools: [{ google_search: {} }],\n\t\t};\n\n\t\tconst res = await fetchGeminiApi(`${getVersionedApiBase()}/models/${model}:generateContent`, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: requestSignal,\n\t\t}, apiKey);\n\n\t\tif (!res.ok) {\n\t\t\tconst errorText = redactGeminiApiResponse(res, await res.text(), apiKey);\n\t\t\tthrow new Error(`Gemini API error ${res.status}: ${errorText.slice(0, 300)}`);\n\t\t}\n\n\t\tconst data = await res.json() as GeminiSearchResponse;\n\t\tactivityMonitor.logComplete(activityId, res.status);\n\n\t\tconst answer = data.candidates?.[0]?.content?.parts\n\t\t\t?.map(p => p.text).filter(Boolean).join(\"\\n\") ?? \"\";\n\n\t\tconst metadata = data.candidates?.[0]?.groundingMetadata;\n\t\tconst results = await resolveGroundingChunks(metadata?.groundingChunks, options.signal);\n\n\t\tif (!answer && results.length === 0) return null;\n\t\treturn { answer, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nasync function searchWithGeminiWeb(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst cookies = await isGeminiWebAvailable();\n\tif (!cookies) return null;\n\n\tconst prompt = buildSearchPrompt(query, options);\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst text = await queryWithCookies(prompt, cookies, {\n\t\t\tsignal: options.signal,\n\t\t\ttimeoutMs: 120000,\n\t\t});\n\n\t\tactivityMonitor.logComplete(activityId, 200);\n\n\t\tconst results = extractSourceUrls(text);\n\t\treturn { answer: text, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nfunction buildSearchPrompt(query: string, options: SearchOptions): string {\n\tlet prompt = `Search the web and answer the following question. Include source URLs for your claims.\\nFormat your response as:\\n1. A direct answer to the question\\n2. Cited sources as markdown links\\n\\nQuestion: ${query}`;\n\n\tif (options.recencyFilter) {\n\t\tconst labels: Record<string, string> = {\n\t\t\tday: \"past 24 hours\",\n\t\t\tweek: \"past week\",\n\t\t\tmonth: \"past month\",\n\t\t\tyear: \"past year\",\n\t\t};\n\t\tprompt += `\\n\\nOnly include results from the ${labels[options.recencyFilter]}.`;\n\t}\n\n\tif (options.domainFilter?.length) {\n\t\tconst includes = options.domainFilter.filter(d => !d.startsWith(\"-\"));\n\t\tconst excludes = options.domainFilter.filter(d => d.startsWith(\"-\")).map(d => d.slice(1));\n\t\tif (includes.length) prompt += `\\n\\nOnly cite sources from: ${includes.join(\", \")}`;\n\t\tif (excludes.length) prompt += `\\n\\nDo not cite sources from: ${excludes.join(\", \")}`;\n\t}\n\n\treturn prompt;\n}\n\nfunction extractSourceUrls(markdown: string): SearchResult[] {\n\tconst results: SearchResult[] = [];\n\tconst seen = new Set<string>();\n\tconst linkRegex = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)]+)\\)/g;\n\tfor (const match of markdown.matchAll(linkRegex)) {\n\t\tconst url = match[2];\n\t\tif (seen.has(url)) continue;\n\t\tseen.add(url);\n\t\tresults.push({ title: match[1], url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveGroundingChunks(\n\tchunks: GroundingChunk[] | undefined,\n\tsignal?: AbortSignal,\n): Promise<SearchResult[]> {\n\tif (!chunks?.length) return [];\n\n\tconst results: SearchResult[] = [];\n\tfor (const chunk of chunks) {\n\t\tif (!chunk.web) continue;\n\t\tconst title = chunk.web.title || \"\";\n\t\tlet url = chunk.web.uri || \"\";\n\n\t\tif (url.includes(\"vertexaisearch.cloud.google.com/grounding-api-redirect\")) {\n\t\t\tconst resolved = await resolveRedirect(url, signal);\n\t\t\tif (resolved) url = resolved;\n\t\t}\n\n\t\tif (url) results.push({ title, url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveRedirect(proxyUrl: string, signal?: AbortSignal): Promise<string | null> {\n\ttry {\n\t\tconst res = await fetch(proxyUrl, {\n\t\t\tmethod: \"HEAD\",\n\t\t\tredirect: \"manual\",\n\t\t\tsignal: AbortSignal.any([\n\t\t\t\tAbortSignal.timeout(5000),\n\t\t\t\t...(signal ? [signal] : []),\n\t\t\t]),\n\t\t});\n\t\treturn res.headers.get(\"location\") || null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface GeminiSearchResponse {\n\tcandidates?: Array<{\n\t\tcontent?: { parts?: Array<{ text?: string }> };\n\t\tgroundingMetadata?: {\n\t\t\twebSearchQueries?: string[];\n\t\t\tgroundingChunks?: GroundingChunk[];\n\t\t\tgroundingSupports?: Array<{\n\t\t\t\tsegment?: { startIndex?: number; endIndex?: number; text?: string };\n\t\t\t\tgroundingChunkIndices?: number[];\n\t\t\t}>;\n\t\t};\n\t}>;\n}\n\ninterface GroundingChunk {\n\tweb?: { uri?: string; title?: string };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-url-context.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-url-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gemini-url-context.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-url-context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAa1E,wBAAsB,qBAAqB,CAC1C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAyDlC;AAED,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA4BlC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { activityMonitor } from "./activity.js";
|
|
2
2
|
import { CredentialResolutionError } from "./credential-source.js";
|
|
3
3
|
import { getApiKey, getVersionedApiBase, fetchGeminiApi, isGatewayConfigured, DEFAULT_MODEL } from "./gemini-api.js";
|
|
4
|
+
import { isGeminiAdcAvailable } from "./gemini-adc.js";
|
|
4
5
|
import { isGeminiWebAvailable, queryWithCookies } from "./gemini-web.js";
|
|
5
6
|
import { extractHeadingTitle } from "./extract.js";
|
|
6
7
|
const EXTRACTION_PROMPT = `Extract the complete readable content from this URL as clean markdown.
|
|
@@ -17,8 +18,8 @@ export async function extractWithUrlContext(url, signal) {
|
|
|
17
18
|
AbortSignal.timeout(60000),
|
|
18
19
|
...(signal ? [signal] : []),
|
|
19
20
|
]);
|
|
20
|
-
const apiKey = await getApiKey(requestSignal);
|
|
21
|
-
if (!apiKey && !isGatewayConfigured())
|
|
21
|
+
const apiKey = isGeminiAdcAvailable() ? null : await getApiKey(requestSignal);
|
|
22
|
+
if (!apiKey && !isGatewayConfigured() && !isGeminiAdcAvailable())
|
|
22
23
|
return null;
|
|
23
24
|
const activityId = activityMonitor.logStart({ type: "api", query: `url_context: ${url}` });
|
|
24
25
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-url-context.js","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-url-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrH,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAyB,MAAM,cAAc,CAAC;AAE1E,MAAM,iBAAiB,GAAG;;;;MAIpB,CAAC;AAEP,SAAS,aAAa,CAAC,GAAY;IAClC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,GAAG,YAAY,yBAAyB,IAAI,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,GAAW,EACX,MAAoB;IAEpB,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC;QACrC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;QAC1B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini-url-context.js","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-url-context.ts"],"names":[],"mappings":"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","sourcesContent":["import { activityMonitor } from \"./activity.ts\";\nimport { CredentialResolutionError } from \"./credential-source.ts\";\nimport { getApiKey, getVersionedApiBase, fetchGeminiApi, isGatewayConfigured, DEFAULT_MODEL } from \"./gemini-api.ts\";\nimport { isGeminiAdcAvailable } from \"./gemini-adc.ts\";\nimport { isGeminiWebAvailable, queryWithCookies } from \"./gemini-web.ts\";\nimport { extractHeadingTitle, type ExtractedContent } from \"./extract.ts\";\n\nconst EXTRACTION_PROMPT = `Extract the complete readable content from this URL as clean markdown.\nInclude the page title, all text content, code blocks, and tables.\nDo not summarize — extract the full content.\n\nURL: `;\n\nfunction shouldRethrow(err: unknown): boolean {\n\tconst message = err instanceof Error ? err.message : String(err);\n\treturn err instanceof CredentialResolutionError || message.startsWith(\"Failed to parse \");\n}\n\nexport async function extractWithUrlContext(\n\turl: string,\n\tsignal?: AbortSignal,\n): Promise<ExtractedContent | null> {\n\tconst requestSignal = AbortSignal.any([\n\t\tAbortSignal.timeout(60000),\n\t\t...(signal ? [signal] : []),\n\t]);\n\tconst apiKey = isGeminiAdcAvailable() ? null : await getApiKey(requestSignal);\n\tif (!apiKey && !isGatewayConfigured() && !isGeminiAdcAvailable()) return null;\n\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query: `url_context: ${url}` });\n\n\ttry {\n\t\tconst model = DEFAULT_MODEL;\n\t\tconst body = {\n\t\t\tcontents: [{ role: \"user\", parts: [{ text: EXTRACTION_PROMPT + url }] }],\n\t\t\ttools: [{ url_context: {} }],\n\t\t};\n\n\t\tconst res = await fetchGeminiApi(`${getVersionedApiBase()}/models/${model}:generateContent`, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: requestSignal,\n\t\t}, apiKey);\n\n\t\tif (!res.ok) {\n\t\t\tactivityMonitor.logComplete(activityId, res.status);\n\t\t\treturn null;\n\t\t}\n\n\t\tconst data = await res.json() as UrlContextResponse;\n\t\tactivityMonitor.logComplete(activityId, res.status);\n\n\t\tconst metadata = data.candidates?.[0]?.url_context_metadata;\n\t\tif (metadata?.url_metadata?.length) {\n\t\t\tconst status = metadata.url_metadata[0].url_retrieval_status;\n\t\t\tif (status === \"URL_RETRIEVAL_STATUS_UNSAFE\" || status === \"URL_RETRIEVAL_STATUS_ERROR\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst content = data.candidates?.[0]?.content?.parts\n\t\t\t?.map(p => p.text).filter(Boolean).join(\"\\n\") ?? \"\";\n\n\t\tif (!content || content.length < 50) return null;\n\n\t\tconst title = extractTitleFromContent(content, url);\n\t\treturn { url, title, content, error: null };\n\t} catch (err) {\n\t\tif (shouldRethrow(err)) throw err;\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport async function extractWithGeminiWeb(\n\turl: string,\n\tsignal?: AbortSignal,\n): Promise<ExtractedContent | null> {\n\tconst cookies = await isGeminiWebAvailable();\n\tif (!cookies) return null;\n\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query: `gemini_web: ${url}` });\n\n\ttry {\n\t\tconst text = await queryWithCookies(EXTRACTION_PROMPT + url, cookies, {\n\t\t\tsignal,\n\t\t\ttimeoutMs: 60000,\n\t\t});\n\n\t\tactivityMonitor.logComplete(activityId, 200);\n\n\t\tif (!text || text.length < 50) return null;\n\n\t\tconst title = extractTitleFromContent(text, url);\n\t\treturn { url, title, content: text, error: null };\n\t} catch (err) {\n\t\tif (shouldRethrow(err)) throw err;\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\treturn null;\n\t}\n}\n\nfunction extractTitleFromContent(text: string, url: string): string {\n\treturn extractHeadingTitle(text) ?? (new URL(url).pathname.split(\"/\").pop() || url);\n}\n\ninterface UrlContextResponse {\n\tcandidates?: Array<{\n\t\tcontent?: { parts?: Array<{ text?: string }> };\n\t\turl_context_metadata?: {\n\t\t\turl_metadata?: Array<{\n\t\t\t\tretrieved_url?: string;\n\t\t\t\turl_retrieval_status?: string;\n\t\t\t}>;\n\t\t};\n\t}>;\n}\n"]}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
declare const BROWSER_COOKIE_PRESETS: readonly ["helium", "chrome", "brave", "arc", "chromium", "edge"];
|
|
2
|
+
export type BrowserCookiePreset = typeof BROWSER_COOKIE_PRESETS[number];
|
|
3
|
+
export interface BrowserCookieSelection {
|
|
4
|
+
browser?: BrowserCookiePreset;
|
|
5
|
+
profile?: string;
|
|
6
|
+
}
|
|
1
7
|
export declare function normalizeChromeProfile(value: unknown): string | undefined;
|
|
2
|
-
export declare function
|
|
8
|
+
export declare function getBrowserCookieSelectionFromConfig(): BrowserCookieSelection;
|
|
3
9
|
export declare function isBrowserCookieAccessAllowed(): boolean;
|
|
10
|
+
export {};
|
|
4
11
|
//# sourceMappingURL=gemini-web-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-web-config.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-web-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gemini-web-config.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-web-config.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,sBAAsB,YAAI,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAU,CAAC;AACjG,MAAM,MAAM,mBAAmB,GAAG,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,sBAAsB;IACtC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIzE;AAyDD,wBAAgB,mCAAmC,IAAI,sBAAsB,CAE5E;AAED,wBAAgB,4BAA4B,IAAI,OAAO,CAetD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from "node:fs";
|
|
2
2
|
import { getWebSearchConfigPath } from "./utils.js";
|
|
3
3
|
const CONFIG_PATH = getWebSearchConfigPath();
|
|
4
|
+
const BROWSER_COOKIE_PRESETS = ["helium", "chrome", "brave", "arc", "chromium", "edge"];
|
|
4
5
|
let cachedConfig = null;
|
|
5
6
|
export function normalizeChromeProfile(value) {
|
|
6
7
|
if (typeof value !== "string")
|
|
@@ -8,6 +9,36 @@ export function normalizeChromeProfile(value) {
|
|
|
8
9
|
const normalized = value.trim();
|
|
9
10
|
return normalized.length > 0 ? normalized : undefined;
|
|
10
11
|
}
|
|
12
|
+
function parseBrowserCookies(value) {
|
|
13
|
+
if (value === undefined)
|
|
14
|
+
return undefined;
|
|
15
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
16
|
+
throw new Error(`browserCookies in ${CONFIG_PATH} must be an object`);
|
|
17
|
+
}
|
|
18
|
+
const raw = value;
|
|
19
|
+
if ("profilePath" in raw) {
|
|
20
|
+
throw new Error(`browserCookies.profilePath is not supported; use a browser preset and profile directory name in ${CONFIG_PATH}`);
|
|
21
|
+
}
|
|
22
|
+
let browser;
|
|
23
|
+
if (raw.browser !== undefined) {
|
|
24
|
+
if (typeof raw.browser !== "string")
|
|
25
|
+
throw new Error(`browserCookies.browser in ${CONFIG_PATH} must be a supported browser name`);
|
|
26
|
+
const normalized = raw.browser.trim().toLowerCase();
|
|
27
|
+
const preset = BROWSER_COOKIE_PRESETS.find((candidate) => candidate === normalized);
|
|
28
|
+
if (!preset) {
|
|
29
|
+
throw new Error(`Unsupported browserCookies.browser ${JSON.stringify(raw.browser)} in ${CONFIG_PATH}`);
|
|
30
|
+
}
|
|
31
|
+
browser = preset;
|
|
32
|
+
}
|
|
33
|
+
if (raw.profile !== undefined && typeof raw.profile !== "string") {
|
|
34
|
+
throw new Error(`browserCookies.profile in ${CONFIG_PATH} must be a profile directory name`);
|
|
35
|
+
}
|
|
36
|
+
const profile = normalizeChromeProfile(raw.profile);
|
|
37
|
+
if (profile && (profile === "." || profile === ".." || profile.includes("/") || profile.includes("\\"))) {
|
|
38
|
+
throw new Error(`browserCookies.profile in ${CONFIG_PATH} must be a profile directory name, not a path`);
|
|
39
|
+
}
|
|
40
|
+
return { ...(browser ? { browser } : {}), ...(profile ? { profile } : {}) };
|
|
41
|
+
}
|
|
11
42
|
function loadConfig() {
|
|
12
43
|
if (cachedConfig)
|
|
13
44
|
return cachedConfig;
|
|
@@ -24,19 +55,33 @@ function loadConfig() {
|
|
|
24
55
|
const message = err instanceof Error ? err.message : String(err);
|
|
25
56
|
throw new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);
|
|
26
57
|
}
|
|
58
|
+
if (raw.chromeProfile !== undefined) {
|
|
59
|
+
throw new Error(`chromeProfile in ${CONFIG_PATH} is no longer supported; use browserCookies.profile`);
|
|
60
|
+
}
|
|
27
61
|
cachedConfig = {
|
|
28
|
-
|
|
62
|
+
browserCookies: parseBrowserCookies(raw.browserCookies),
|
|
29
63
|
allowBrowserCookies: raw.allowBrowserCookies === true,
|
|
30
64
|
};
|
|
31
65
|
return cachedConfig;
|
|
32
66
|
}
|
|
33
|
-
export function
|
|
34
|
-
return loadConfig().
|
|
67
|
+
export function getBrowserCookieSelectionFromConfig() {
|
|
68
|
+
return { ...loadConfig().browserCookies };
|
|
35
69
|
}
|
|
36
70
|
export function isBrowserCookieAccessAllowed() {
|
|
37
71
|
if (process.env.PI_ALLOW_BROWSER_COOKIES === "1" || process.env.FEYNMAN_ALLOW_BROWSER_COOKIES === "1") {
|
|
38
72
|
return true;
|
|
39
73
|
}
|
|
40
|
-
|
|
74
|
+
if (!existsSync(CONFIG_PATH))
|
|
75
|
+
return false;
|
|
76
|
+
const rawText = readFileSync(CONFIG_PATH, "utf-8");
|
|
77
|
+
let raw;
|
|
78
|
+
try {
|
|
79
|
+
raw = JSON.parse(rawText);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
83
|
+
throw new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);
|
|
84
|
+
}
|
|
85
|
+
return raw.allowBrowserCookies === true;
|
|
41
86
|
}
|
|
42
87
|
//# sourceMappingURL=gemini-web-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-web-config.js","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-web-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,GAAG,sBAAsB,EAAE,CAAC;AAO7C,IAAI,YAAY,GAA2B,IAAI,CAAC;AAEhD,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,UAAU;IAClB,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,YAAY,GAAG,EAAE,CAAC;QAClB,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,
|
|
1
|
+
{"version":3,"file":"gemini-web-config.js","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-web-config.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nconst CONFIG_PATH = getWebSearchConfigPath();\n\ninterface GeminiWebConfig {\n\tbrowserCookies?: BrowserCookieSelection;\n\tallowBrowserCookies?: boolean;\n}\n\nconst BROWSER_COOKIE_PRESETS = [\"helium\", \"chrome\", \"brave\", \"arc\", \"chromium\", \"edge\"] as const;\nexport type BrowserCookiePreset = typeof BROWSER_COOKIE_PRESETS[number];\n\nexport interface BrowserCookieSelection {\n\tbrowser?: BrowserCookiePreset;\n\tprofile?: string;\n}\n\nlet cachedConfig: GeminiWebConfig | null = null;\n\nexport function normalizeChromeProfile(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction parseBrowserCookies(value: unknown): BrowserCookieSelection | undefined {\n\tif (value === undefined) return undefined;\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow new Error(`browserCookies in ${CONFIG_PATH} must be an object`);\n\t}\n\tconst raw = value as Record<string, unknown>;\n\tif (\"profilePath\" in raw) {\n\t\tthrow new Error(`browserCookies.profilePath is not supported; use a browser preset and profile directory name in ${CONFIG_PATH}`);\n\t}\n\tlet browser: BrowserCookiePreset | undefined;\n\tif (raw.browser !== undefined) {\n\t\tif (typeof raw.browser !== \"string\") throw new Error(`browserCookies.browser in ${CONFIG_PATH} must be a supported browser name`);\n\t\tconst normalized = raw.browser.trim().toLowerCase();\n\t\tconst preset = BROWSER_COOKIE_PRESETS.find((candidate) => candidate === normalized);\n\t\tif (!preset) {\n\t\t\tthrow new Error(`Unsupported browserCookies.browser ${JSON.stringify(raw.browser)} in ${CONFIG_PATH}`);\n\t\t}\n\t\tbrowser = preset;\n\t}\n\tif (raw.profile !== undefined && typeof raw.profile !== \"string\") {\n\t\tthrow new Error(`browserCookies.profile in ${CONFIG_PATH} must be a profile directory name`);\n\t}\n\tconst profile = normalizeChromeProfile(raw.profile);\n\tif (profile && (profile === \".\" || profile === \"..\" || profile.includes(\"/\") || profile.includes(\"\\\\\"))) {\n\t\tthrow new Error(`browserCookies.profile in ${CONFIG_PATH} must be a profile directory name, not a path`);\n\t}\n\treturn { ...(browser ? { browser } : {}), ...(profile ? { profile } : {}) };\n}\n\nfunction loadConfig(): GeminiWebConfig {\n\tif (cachedConfig) return cachedConfig;\n\tif (!existsSync(CONFIG_PATH)) {\n\t\tcachedConfig = {};\n\t\treturn cachedConfig;\n\t}\n\n\tconst rawText = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet raw: { chromeProfile?: unknown; browserCookies?: unknown; allowBrowserCookies?: unknown };\n\ttry {\n\t\traw = JSON.parse(rawText) as { chromeProfile?: unknown; browserCookies?: unknown; allowBrowserCookies?: unknown };\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\n\tif (raw.chromeProfile !== undefined) {\n\t\tthrow new Error(`chromeProfile in ${CONFIG_PATH} is no longer supported; use browserCookies.profile`);\n\t}\n\tcachedConfig = {\n\t\tbrowserCookies: parseBrowserCookies(raw.browserCookies),\n\t\tallowBrowserCookies: raw.allowBrowserCookies === true,\n\t};\n\treturn cachedConfig;\n}\n\nexport function getBrowserCookieSelectionFromConfig(): BrowserCookieSelection {\n\treturn { ...loadConfig().browserCookies };\n}\n\nexport function isBrowserCookieAccessAllowed(): boolean {\n\tif (process.env.PI_ALLOW_BROWSER_COOKIES === \"1\" || process.env.FEYNMAN_ALLOW_BROWSER_COOKIES === \"1\") {\n\t\treturn true;\n\t}\n\tif (!existsSync(CONFIG_PATH)) return false;\n\n\tconst rawText = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet raw: { allowBrowserCookies?: unknown };\n\ttry {\n\t\traw = JSON.parse(rawText) as { allowBrowserCookies?: unknown };\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\treturn raw.allowBrowserCookies === true;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CookieMap } from "./chrome-cookies.ts";
|
|
1
|
+
import { type BrowserCookieDiagnosticDetails, type CookieMap } from "./chrome-cookies.ts";
|
|
2
2
|
export declare const DEFAULT_GEMINI_WEB_MODEL = "gemini-3.1-pro";
|
|
3
3
|
export declare function setGeminiFetchOverrideForTests(fetchImpl: typeof fetch | null): void;
|
|
4
4
|
export declare const GEMINI_MAX_HEADER_SIZE: number;
|
|
@@ -13,6 +13,7 @@ export interface GeminiWebOptions {
|
|
|
13
13
|
}
|
|
14
14
|
export declare function isGeminiWebAvailable(chromeProfile?: string): Promise<CookieMap | null>;
|
|
15
15
|
export declare function getGeminiWebAvailabilityDiagnostic(): string | null;
|
|
16
|
+
export declare function getGeminiWebAvailabilityDiagnosticDetails(): BrowserCookieDiagnosticDetails | null;
|
|
16
17
|
export declare function getActiveGoogleEmail(cookies: CookieMap): Promise<string | null>;
|
|
17
18
|
export declare function queryWithCookies(prompt: string, cookieMap: CookieMap, options?: GeminiWebOptions): Promise<string>;
|
|
18
19
|
//# sourceMappingURL=gemini-web.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-web.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-web.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"gemini-web.d.ts","sourceRoot":"","sources":["../../../../src/humain/web-access/vendor/gemini-web.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuE,KAAK,8BAA8B,EAAE,KAAK,SAAS,EAAoB,MAAM,qBAAqB,CAAC;AAejL,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AAyBzD,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,OAAO,KAAK,GAAG,IAAI,GAAG,IAAI,CAEnF;AAOD,eAAO,MAAM,sBAAsB,QAAkB,CAAC;AAKtD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,QAAQ,CAAC,GAAG,OAAO,KAAK,CAiBnF;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,CAchE;AAED,MAAM,WAAW,gBAAgB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,oBAAoB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAW5F;AAED,wBAAgB,kCAAkC,IAAI,MAAM,GAAG,IAAI,CAElE;AAED,wBAAgB,yCAAyC,IAAI,8BAA8B,GAAG,IAAI,CAEjG;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BrF;AAED,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,gBAAqB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
|