@jini-ai/agent-runtime 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +43 -0
- package/dist/acp-model-probe.d.ts +48 -0
- package/dist/acp-model-probe.d.ts.map +1 -0
- package/dist/acp-model-probe.js +15 -0
- package/dist/acp-model-probe.js.map +1 -0
- package/dist/agent-protocol/acp/account-failure.d.ts +54 -0
- package/dist/agent-protocol/acp/account-failure.d.ts.map +1 -0
- package/dist/agent-protocol/acp/account-failure.js +37 -0
- package/dist/agent-protocol/acp/account-failure.js.map +1 -0
- package/dist/agent-protocol/acp/constants.d.ts +26 -0
- package/dist/agent-protocol/acp/constants.d.ts.map +1 -0
- package/dist/agent-protocol/acp/constants.js +39 -0
- package/dist/agent-protocol/acp/constants.js.map +1 -0
- package/dist/agent-protocol/acp/index.d.ts +14 -0
- package/dist/agent-protocol/acp/index.d.ts.map +1 -0
- package/dist/agent-protocol/acp/index.js +14 -0
- package/dist/agent-protocol/acp/index.js.map +1 -0
- package/dist/agent-protocol/acp/json.d.ts +82 -0
- package/dist/agent-protocol/acp/json.d.ts.map +1 -0
- package/dist/agent-protocol/acp/json.js +144 -0
- package/dist/agent-protocol/acp/json.js.map +1 -0
- package/dist/agent-protocol/acp/models.d.ts +112 -0
- package/dist/agent-protocol/acp/models.d.ts.map +1 -0
- package/dist/agent-protocol/acp/models.js +293 -0
- package/dist/agent-protocol/acp/models.js.map +1 -0
- package/dist/agent-protocol/acp/rpc.d.ts +107 -0
- package/dist/agent-protocol/acp/rpc.d.ts.map +1 -0
- package/dist/agent-protocol/acp/rpc.js +162 -0
- package/dist/agent-protocol/acp/rpc.js.map +1 -0
- package/dist/agent-protocol/acp/session-params.d.ts +55 -0
- package/dist/agent-protocol/acp/session-params.d.ts.map +1 -0
- package/dist/agent-protocol/acp/session-params.js +81 -0
- package/dist/agent-protocol/acp/session-params.js.map +1 -0
- package/dist/agent-protocol/acp/session.d.ts +101 -0
- package/dist/agent-protocol/acp/session.d.ts.map +1 -0
- package/dist/agent-protocol/acp/session.js +832 -0
- package/dist/agent-protocol/acp/session.js.map +1 -0
- package/dist/agent-protocol/acp/text-suppression.d.ts +73 -0
- package/dist/agent-protocol/acp/text-suppression.d.ts.map +1 -0
- package/dist/agent-protocol/acp/text-suppression.js +229 -0
- package/dist/agent-protocol/acp/text-suppression.js.map +1 -0
- package/dist/agent-protocol/acp/types.d.ts +27 -0
- package/dist/agent-protocol/acp/types.d.ts.map +1 -0
- package/dist/agent-protocol/acp/types.js +2 -0
- package/dist/agent-protocol/acp/types.js.map +1 -0
- package/dist/agent-protocol/acp/updates.d.ts +166 -0
- package/dist/agent-protocol/acp/updates.d.ts.map +1 -0
- package/dist/agent-protocol/acp/updates.js +268 -0
- package/dist/agent-protocol/acp/updates.js.map +1 -0
- package/dist/agent-protocol/core/index.d.ts +6 -0
- package/dist/agent-protocol/core/index.d.ts.map +1 -0
- package/dist/agent-protocol/core/index.js +6 -0
- package/dist/agent-protocol/core/index.js.map +1 -0
- package/dist/agent-protocol/core/json-line-stream.d.ts +42 -0
- package/dist/agent-protocol/core/json-line-stream.d.ts.map +1 -0
- package/dist/agent-protocol/core/json-line-stream.js +333 -0
- package/dist/agent-protocol/core/json-line-stream.js.map +1 -0
- package/dist/agent-protocol/index.d.ts +8 -0
- package/dist/agent-protocol/index.d.ts.map +1 -0
- package/dist/agent-protocol/index.js +8 -0
- package/dist/agent-protocol/index.js.map +1 -0
- package/dist/agent-protocol/pi-rpc/events.d.ts +26 -0
- package/dist/agent-protocol/pi-rpc/events.d.ts.map +1 -0
- package/dist/agent-protocol/pi-rpc/events.js +167 -0
- package/dist/agent-protocol/pi-rpc/events.js.map +1 -0
- package/dist/agent-protocol/pi-rpc/index.d.ts +11 -0
- package/dist/agent-protocol/pi-rpc/index.d.ts.map +1 -0
- package/dist/agent-protocol/pi-rpc/index.js +11 -0
- package/dist/agent-protocol/pi-rpc/index.js.map +1 -0
- package/dist/agent-protocol/pi-rpc/internal.d.ts +45 -0
- package/dist/agent-protocol/pi-rpc/internal.d.ts.map +1 -0
- package/dist/agent-protocol/pi-rpc/internal.js +41 -0
- package/dist/agent-protocol/pi-rpc/internal.js.map +1 -0
- package/dist/agent-protocol/pi-rpc/models.d.ts +21 -0
- package/dist/agent-protocol/pi-rpc/models.d.ts.map +1 -0
- package/dist/agent-protocol/pi-rpc/models.js +48 -0
- package/dist/agent-protocol/pi-rpc/models.js.map +1 -0
- package/dist/agent-protocol/pi-rpc/session.d.ts +106 -0
- package/dist/agent-protocol/pi-rpc/session.d.ts.map +1 -0
- package/dist/agent-protocol/pi-rpc/session.js +371 -0
- package/dist/agent-protocol/pi-rpc/session.js.map +1 -0
- package/dist/amr-model-cache.d.ts +40 -0
- package/dist/amr-model-cache.d.ts.map +1 -0
- package/dist/amr-model-cache.js +79 -0
- package/dist/amr-model-cache.js.map +1 -0
- package/dist/amr-profile-resolver.d.ts +21 -0
- package/dist/amr-profile-resolver.d.ts.map +1 -0
- package/dist/amr-profile-resolver.js +4 -0
- package/dist/amr-profile-resolver.js.map +1 -0
- package/dist/artifact-taxonomy.d.ts +27 -0
- package/dist/artifact-taxonomy.d.ts.map +1 -0
- package/dist/artifact-taxonomy.js +5 -0
- package/dist/artifact-taxonomy.js.map +1 -0
- package/dist/auth.d.ts +25 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +332 -0
- package/dist/auth.js.map +1 -0
- package/dist/capabilities.d.ts +9 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +2 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/claude-stream.d.ts +37 -0
- package/dist/claude-stream.d.ts.map +1 -0
- package/dist/claude-stream.js +660 -0
- package/dist/claude-stream.js.map +1 -0
- package/dist/copilot-stream.d.ts +37 -0
- package/dist/copilot-stream.d.ts.map +1 -0
- package/dist/copilot-stream.js +136 -0
- package/dist/copilot-stream.js.map +1 -0
- package/dist/defs/aider.d.ts +13 -0
- package/dist/defs/aider.d.ts.map +1 -0
- package/dist/defs/aider.js +63 -0
- package/dist/defs/aider.js.map +1 -0
- package/dist/defs/amp.d.ts +12 -0
- package/dist/defs/amp.d.ts.map +1 -0
- package/dist/defs/amp.js +56 -0
- package/dist/defs/amp.js.map +1 -0
- package/dist/defs/amr.d.ts +37 -0
- package/dist/defs/amr.d.ts.map +1 -0
- package/dist/defs/amr.js +303 -0
- package/dist/defs/amr.js.map +1 -0
- package/dist/defs/antigravity.d.ts +25 -0
- package/dist/defs/antigravity.d.ts.map +1 -0
- package/dist/defs/antigravity.js +213 -0
- package/dist/defs/antigravity.js.map +1 -0
- package/dist/defs/claude.d.ts +30 -0
- package/dist/defs/claude.d.ts.map +1 -0
- package/dist/defs/claude.js +130 -0
- package/dist/defs/claude.js.map +1 -0
- package/dist/defs/codebuddy.d.ts +26 -0
- package/dist/defs/codebuddy.d.ts.map +1 -0
- package/dist/defs/codebuddy.js +124 -0
- package/dist/defs/codebuddy.js.map +1 -0
- package/dist/defs/codex.d.ts +30 -0
- package/dist/defs/codex.d.ts.map +1 -0
- package/dist/defs/codex.js +196 -0
- package/dist/defs/codex.js.map +1 -0
- package/dist/defs/copilot.d.ts +12 -0
- package/dist/defs/copilot.d.ts.map +1 -0
- package/dist/defs/copilot.js +88 -0
- package/dist/defs/copilot.js.map +1 -0
- package/dist/defs/cursor-agent.d.ts +27 -0
- package/dist/defs/cursor-agent.d.ts.map +1 -0
- package/dist/defs/cursor-agent.js +93 -0
- package/dist/defs/cursor-agent.js.map +1 -0
- package/dist/defs/deepseek.d.ts +12 -0
- package/dist/defs/deepseek.d.ts.map +1 -0
- package/dist/defs/deepseek.js +53 -0
- package/dist/defs/deepseek.js.map +1 -0
- package/dist/defs/devin.d.ts +12 -0
- package/dist/defs/devin.d.ts.map +1 -0
- package/dist/defs/devin.js +45 -0
- package/dist/defs/devin.js.map +1 -0
- package/dist/defs/grok-build.d.ts +26 -0
- package/dist/defs/grok-build.d.ts.map +1 -0
- package/dist/defs/grok-build.js +105 -0
- package/dist/defs/grok-build.js.map +1 -0
- package/dist/defs/hermes.d.ts +13 -0
- package/dist/defs/hermes.d.ts.map +1 -0
- package/dist/defs/hermes.js +51 -0
- package/dist/defs/hermes.js.map +1 -0
- package/dist/defs/index.d.ts +33 -0
- package/dist/defs/index.d.ts.map +1 -0
- package/dist/defs/index.js +33 -0
- package/dist/defs/index.js.map +1 -0
- package/dist/defs/kilo.d.ts +12 -0
- package/dist/defs/kilo.d.ts.map +1 -0
- package/dist/defs/kilo.js +20 -0
- package/dist/defs/kilo.js.map +1 -0
- package/dist/defs/kimi.d.ts +13 -0
- package/dist/defs/kimi.d.ts.map +1 -0
- package/dist/defs/kimi.js +26 -0
- package/dist/defs/kimi.js.map +1 -0
- package/dist/defs/kiro.d.ts +12 -0
- package/dist/defs/kiro.d.ts.map +1 -0
- package/dist/defs/kiro.js +20 -0
- package/dist/defs/kiro.js.map +1 -0
- package/dist/defs/mimo.d.ts +13 -0
- package/dist/defs/mimo.d.ts.map +1 -0
- package/dist/defs/mimo.js +26 -0
- package/dist/defs/mimo.js.map +1 -0
- package/dist/defs/opencode.d.ts +27 -0
- package/dist/defs/opencode.d.ts.map +1 -0
- package/dist/defs/opencode.js +89 -0
- package/dist/defs/opencode.js.map +1 -0
- package/dist/defs/pi.d.ts +18 -0
- package/dist/defs/pi.d.ts.map +1 -0
- package/dist/defs/pi.js +94 -0
- package/dist/defs/pi.js.map +1 -0
- package/dist/defs/qoder.d.ts +11 -0
- package/dist/defs/qoder.d.ts.map +1 -0
- package/dist/defs/qoder.js +50 -0
- package/dist/defs/qoder.js.map +1 -0
- package/dist/defs/qwen.d.ts +11 -0
- package/dist/defs/qwen.d.ts.map +1 -0
- package/dist/defs/qwen.js +28 -0
- package/dist/defs/qwen.js.map +1 -0
- package/dist/defs/reasonix.d.ts +20 -0
- package/dist/defs/reasonix.d.ts.map +1 -0
- package/dist/defs/reasonix.js +60 -0
- package/dist/defs/reasonix.js.map +1 -0
- package/dist/defs/shared.d.ts +23 -0
- package/dist/defs/shared.d.ts.map +1 -0
- package/dist/defs/shared.js +58 -0
- package/dist/defs/shared.js.map +1 -0
- package/dist/defs/trae-cli.d.ts +14 -0
- package/dist/defs/trae-cli.d.ts.map +1 -0
- package/dist/defs/trae-cli.js +22 -0
- package/dist/defs/trae-cli.js.map +1 -0
- package/dist/defs/vibe.d.ts +12 -0
- package/dist/defs/vibe.d.ts.map +1 -0
- package/dist/defs/vibe.js +20 -0
- package/dist/defs/vibe.js.map +1 -0
- package/dist/detection.d.ts +14 -0
- package/dist/detection.d.ts.map +1 -0
- package/dist/detection.js +266 -0
- package/dist/detection.js.map +1 -0
- package/dist/diagnostics.d.ts +8 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +95 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/env.d.ts +19 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +95 -0
- package/dist/env.js.map +1 -0
- package/dist/executables.d.ts +24 -0
- package/dist/executables.d.ts.map +1 -0
- package/dist/executables.js +349 -0
- package/dist/executables.js.map +1 -0
- package/dist/index.d.ts +74 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +102 -0
- package/dist/index.js.map +1 -0
- package/dist/invocation.d.ts +6 -0
- package/dist/invocation.d.ts.map +1 -0
- package/dist/invocation.js +47 -0
- package/dist/invocation.js.map +1 -0
- package/dist/json-event-stream.d.ts +9 -0
- package/dist/json-event-stream.d.ts.map +1 -0
- package/dist/json-event-stream.js +856 -0
- package/dist/json-event-stream.js.map +1 -0
- package/dist/launch.d.ts +12 -0
- package/dist/launch.d.ts.map +1 -0
- package/dist/launch.js +221 -0
- package/dist/launch.js.map +1 -0
- package/dist/mcp.d.ts +44 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +12 -0
- package/dist/mcp.js.map +1 -0
- package/dist/metadata.d.ts +24 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +100 -0
- package/dist/metadata.js.map +1 -0
- package/dist/mmd-routes.d.ts +12 -0
- package/dist/mmd-routes.d.ts.map +1 -0
- package/dist/mmd-routes.js +146 -0
- package/dist/mmd-routes.js.map +1 -0
- package/dist/model-registry.d.ts +120 -0
- package/dist/model-registry.d.ts.map +1 -0
- package/dist/model-registry.js +77 -0
- package/dist/model-registry.js.map +1 -0
- package/dist/models.d.ts +16 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +93 -0
- package/dist/models.js.map +1 -0
- package/dist/opencode-log.d.ts +16 -0
- package/dist/opencode-log.d.ts.map +1 -0
- package/dist/opencode-log.js +163 -0
- package/dist/opencode-log.js.map +1 -0
- package/dist/paths.d.ts +3 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +29 -0
- package/dist/paths.js.map +1 -0
- package/dist/pi-models.d.ts +13 -0
- package/dist/pi-models.d.ts.map +1 -0
- package/dist/pi-models.js +36 -0
- package/dist/pi-models.js.map +1 -0
- package/dist/prompt-augmenter.d.ts +60 -0
- package/dist/prompt-augmenter.d.ts.map +1 -0
- package/dist/prompt-augmenter.js +26 -0
- package/dist/prompt-augmenter.js.map +1 -0
- package/dist/prompt-budget.d.ts +20 -0
- package/dist/prompt-budget.d.ts.map +1 -0
- package/dist/prompt-budget.js +226 -0
- package/dist/prompt-budget.js.map +1 -0
- package/dist/prompt-file.d.ts +7 -0
- package/dist/prompt-file.d.ts.map +1 -0
- package/dist/prompt-file.js +27 -0
- package/dist/prompt-file.js.map +1 -0
- package/dist/providers/aihubmix.d.ts +99 -0
- package/dist/providers/aihubmix.d.ts.map +1 -0
- package/dist/providers/aihubmix.js +239 -0
- package/dist/providers/aihubmix.js.map +1 -0
- package/dist/providers/anthropic-messages.d.ts +116 -0
- package/dist/providers/anthropic-messages.d.ts.map +1 -0
- package/dist/providers/anthropic-messages.js +313 -0
- package/dist/providers/anthropic-messages.js.map +1 -0
- package/dist/providers/azure-chat.d.ts +99 -0
- package/dist/providers/azure-chat.d.ts.map +1 -0
- package/dist/providers/azure-chat.js +164 -0
- package/dist/providers/azure-chat.js.map +1 -0
- package/dist/providers/connection-guard.d.ts +67 -0
- package/dist/providers/connection-guard.d.ts.map +1 -0
- package/dist/providers/connection-guard.js +211 -0
- package/dist/providers/connection-guard.js.map +1 -0
- package/dist/providers/elevenlabs.d.ts +28 -0
- package/dist/providers/elevenlabs.d.ts.map +1 -0
- package/dist/providers/elevenlabs.js +138 -0
- package/dist/providers/elevenlabs.js.map +1 -0
- package/dist/providers/google-messages.d.ts +108 -0
- package/dist/providers/google-messages.d.ts.map +1 -0
- package/dist/providers/google-messages.js +284 -0
- package/dist/providers/google-messages.js.map +1 -0
- package/dist/providers/google.d.ts +20 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +42 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +39 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +39 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/model-catalog.d.ts +32 -0
- package/dist/providers/model-catalog.d.ts.map +1 -0
- package/dist/providers/model-catalog.js +394 -0
- package/dist/providers/model-catalog.js.map +1 -0
- package/dist/providers/oauth-callback-server.d.ts +35 -0
- package/dist/providers/oauth-callback-server.d.ts.map +1 -0
- package/dist/providers/oauth-callback-server.js +217 -0
- package/dist/providers/oauth-callback-server.js.map +1 -0
- package/dist/providers/oauth-credentials.d.ts +29 -0
- package/dist/providers/oauth-credentials.d.ts.map +1 -0
- package/dist/providers/oauth-credentials.js +70 -0
- package/dist/providers/oauth-credentials.js.map +1 -0
- package/dist/providers/oauth-provider.d.ts +95 -0
- package/dist/providers/oauth-provider.d.ts.map +1 -0
- package/dist/providers/oauth-provider.js +130 -0
- package/dist/providers/oauth-provider.js.map +1 -0
- package/dist/providers/oauth-tokens.d.ts +35 -0
- package/dist/providers/oauth-tokens.d.ts.map +1 -0
- package/dist/providers/oauth-tokens.js +136 -0
- package/dist/providers/oauth-tokens.js.map +1 -0
- package/dist/providers/ollama-chat.d.ts +106 -0
- package/dist/providers/ollama-chat.d.ts.map +1 -0
- package/dist/providers/ollama-chat.js +292 -0
- package/dist/providers/ollama-chat.js.map +1 -0
- package/dist/providers/openai-chat.d.ts +147 -0
- package/dist/providers/openai-chat.d.ts.map +1 -0
- package/dist/providers/openai-chat.js +302 -0
- package/dist/providers/openai-chat.js.map +1 -0
- package/dist/providers/pkce.d.ts +81 -0
- package/dist/providers/pkce.d.ts.map +1 -0
- package/dist/providers/pkce.js +176 -0
- package/dist/providers/pkce.js.map +1 -0
- package/dist/providers/sse-decode.d.ts +47 -0
- package/dist/providers/sse-decode.d.ts.map +1 -0
- package/dist/providers/sse-decode.js +109 -0
- package/dist/providers/sse-decode.js.map +1 -0
- package/dist/providers/token-params.d.ts +29 -0
- package/dist/providers/token-params.d.ts.map +1 -0
- package/dist/providers/token-params.js +41 -0
- package/dist/providers/token-params.js.map +1 -0
- package/dist/providers/turn-end-guard.d.ts +37 -0
- package/dist/providers/turn-end-guard.d.ts.map +1 -0
- package/dist/providers/turn-end-guard.js +42 -0
- package/dist/providers/turn-end-guard.js.map +1 -0
- package/dist/providers/types.d.ts +36 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +13 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/qoder-stream.d.ts +19 -0
- package/dist/qoder-stream.d.ts.map +1 -0
- package/dist/qoder-stream.js +167 -0
- package/dist/qoder-stream.js.map +1 -0
- package/dist/registry.d.ts +5 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +58 -0
- package/dist/registry.js.map +1 -0
- package/dist/resolution.d.ts +2 -0
- package/dist/resolution.d.ts.map +1 -0
- package/dist/resolution.js +19 -0
- package/dist/resolution.js.map +1 -0
- package/dist/role-marker-guard.d.ts +53 -0
- package/dist/role-marker-guard.d.ts.map +1 -0
- package/dist/role-marker-guard.js +280 -0
- package/dist/role-marker-guard.js.map +1 -0
- package/dist/telemetry-sink.d.ts +35 -0
- package/dist/telemetry-sink.d.ts.map +1 -0
- package/dist/telemetry-sink.js +5 -0
- package/dist/telemetry-sink.js.map +1 -0
- package/dist/terminal-launch.d.ts +11 -0
- package/dist/terminal-launch.d.ts.map +1 -0
- package/dist/terminal-launch.js +123 -0
- package/dist/terminal-launch.js.map +1 -0
- package/dist/types.d.ts +185 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module providers/google-messages
|
|
3
|
+
*
|
|
4
|
+
* Google Generative Language (Gemini) `streamGenerateContent` wire adapter +
|
|
5
|
+
* tool-loop turn-runner. Sibling of `anthropic-messages.ts`/`openai-chat.ts`
|
|
6
|
+
* — see those modules' headers for the shared design rationale (package
|
|
7
|
+
* placement, `extraHeaders` never carrying a hardcoded product-identity
|
|
8
|
+
* string, the `turn-end-guard.ts` fix for a duplicate-`end`-event class of
|
|
9
|
+
* bug). Reuses this package's existing `providers/google.ts` URL helpers
|
|
10
|
+
* (`googleStreamGenerateContentUrl`) rather than rebuilding URL-building
|
|
11
|
+
* logic — see that module's own doc.
|
|
12
|
+
*
|
|
13
|
+
* **Verified against Google's real, current public API docs** (per this
|
|
14
|
+
* repo's "verify against real API docs, don't guess from memory"
|
|
15
|
+
* convention — see `anthropic-messages.ts`'s header for the precedent).
|
|
16
|
+
* Two things worth flagging for a future maintainer:
|
|
17
|
+
*
|
|
18
|
+
* 1. **Two REST APIs coexist as of this writing.** Google's docs now lead
|
|
19
|
+
* with a newer `interactions` API (`POST /v1beta/interactions`,
|
|
20
|
+
* `input`/`previous_interaction_id`/`function_result` shaped) alongside
|
|
21
|
+
* the classic `generateContent`/`streamGenerateContent` API
|
|
22
|
+
* (`contents: [{role, parts}]`, `functionCall`/`functionResponse`
|
|
23
|
+
* parts). This adapter deliberately targets the **classic** API — it is
|
|
24
|
+
* what `providers/google.ts#googleStreamGenerateContentUrl` already
|
|
25
|
+
* builds a URL for, and what this task's spec calls for. Confirmed via
|
|
26
|
+
* `ai.google.dev/api/generate-content` (Content/Part/GenerateContent
|
|
27
|
+
* Request/Response field names) and a live web search returning a
|
|
28
|
+
* real-world function-calling exchange showing the exact
|
|
29
|
+
* `{ functionResponse: { name, response, id } }` shape sent back with
|
|
30
|
+
* `role: 'user'` (not `role: 'function'` — there is no `function` role
|
|
31
|
+
* in the classic Content schema; `role` is `'user' | 'model' | 'system'`
|
|
32
|
+
* only).
|
|
33
|
+
* 2. **No `finishReason` value means "the model wants a tool call."**
|
|
34
|
+
* Unlike Anthropic (`stop_reason: 'tool_use'`) and OpenAI
|
|
35
|
+
* (`finish_reason: 'tool_calls'`), Gemini's documented `finishReason`
|
|
36
|
+
* enum (`STOP`, `MAX_TOKENS`, `SAFETY`, `RECITATION`, `LANGUAGE`,
|
|
37
|
+
* `OTHER`) has no tool-call-specific member — a function call is simply
|
|
38
|
+
* a `functionCall` part inside an otherwise normal (often
|
|
39
|
+
* `finishReason: 'STOP'`) candidate. `runGoogleToolTurn`'s tool-loop
|
|
40
|
+
* continuation predicate is therefore `toolCalls.length > 0`, not a
|
|
41
|
+
* `finishReason` comparison — the one structural place this adapter
|
|
42
|
+
* cannot mirror `anthropic-messages.ts`/`openai-chat.ts` byte-for-byte.
|
|
43
|
+
*
|
|
44
|
+
* **Scope for this pass:** text + function-call parts and the tool-
|
|
45
|
+
* execution loop only. `inlineData`/`fileData` parts (multimodal input/
|
|
46
|
+
* output) and `promptFeedback`'s per-category safety ratings are out of
|
|
47
|
+
* scope — a blocked prompt (`promptFeedback.blockReason` present, no
|
|
48
|
+
* candidates) is still surfaced as an `error` event rather than silently
|
|
49
|
+
* hanging, but the detailed safety-rating breakdown is not modeled.
|
|
50
|
+
*/
|
|
51
|
+
import { createRoleMarkerGuard } from '../role-marker-guard.js';
|
|
52
|
+
import { defaultDnsLookup, redactSecrets, validateBaseUrlResolved } from './connection-guard.js';
|
|
53
|
+
import { googleStreamGenerateContentUrl } from './google.js';
|
|
54
|
+
import { decodeSseStream } from './sse-decode.js';
|
|
55
|
+
import { createTurnEndGuard } from './turn-end-guard.js';
|
|
56
|
+
const DEFAULT_GOOGLE_BASE_URL = 'https://generativelanguage.googleapis.com';
|
|
57
|
+
const DEFAULT_MAX_TOOL_TURNS = 8;
|
|
58
|
+
function isRecord(value) {
|
|
59
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Builds the streaming request URL with no credential attached — auth travels via the
|
|
63
|
+
* `x-goog-api-key` header (see `googleHeaders`), not a `?key=` query param.
|
|
64
|
+
*
|
|
65
|
+
* **Corrected to match Open Design's real behavior**: an earlier version of this function
|
|
66
|
+
* attached `apiKey` as a `?key=` query-string parameter, modeled on `google.ts#googleProviderModelsUrl`'s
|
|
67
|
+
* model-*listing* endpoint (a different, read-only surface). A live side-by-side comparison
|
|
68
|
+
* against a running OD daemon found its actual `/api/proxy/google/stream` chat handler
|
|
69
|
+
* (`apps/daemon/src/routes/chat.ts:1251`) uses `headers: { 'x-goog-api-key': apiKey }` instead —
|
|
70
|
+
* query-string credentials are also worse practice generically (they land in server access logs,
|
|
71
|
+
* proxy logs, and browser history far more readily than headers do), so this fix is both a real
|
|
72
|
+
* parity correction and a real hardening.
|
|
73
|
+
*/
|
|
74
|
+
function googleRequestUrl(baseUrl, model) {
|
|
75
|
+
return googleStreamGenerateContentUrl(baseUrl ?? DEFAULT_GOOGLE_BASE_URL, model);
|
|
76
|
+
}
|
|
77
|
+
function googleHeaders(options) {
|
|
78
|
+
return {
|
|
79
|
+
'content-type': 'application/json',
|
|
80
|
+
'x-goog-api-key': options.apiKey,
|
|
81
|
+
...(options.extraHeaders ?? {}),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function googleRequestBody(options, contents) {
|
|
85
|
+
const generationConfig = {
|
|
86
|
+
...(options.temperature !== undefined ? { temperature: options.temperature } : {}),
|
|
87
|
+
...(options.maxOutputTokens !== undefined ? { maxOutputTokens: options.maxOutputTokens } : {}),
|
|
88
|
+
};
|
|
89
|
+
return {
|
|
90
|
+
contents,
|
|
91
|
+
...(options.system !== undefined ? { systemInstruction: { parts: [{ text: options.system }] } } : {}),
|
|
92
|
+
...(options.tools && options.tools.length > 0 ? { tools: options.tools } : {}),
|
|
93
|
+
...(Object.keys(generationConfig).length > 0 ? { generationConfig } : {}),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function extractGoogleErrorDetail(rawText) {
|
|
97
|
+
try {
|
|
98
|
+
const parsed = JSON.parse(rawText);
|
|
99
|
+
if (isRecord(parsed) && isRecord(parsed.error) && typeof parsed.error.message === 'string') {
|
|
100
|
+
return parsed.error.message;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Non-JSON error body — fall through to the raw text below.
|
|
105
|
+
}
|
|
106
|
+
return rawText.trim().slice(0, 500);
|
|
107
|
+
}
|
|
108
|
+
/** Runs exactly one Gemini `streamGenerateContent` request and reduces its SSE events into a single outcome. Mirrors `anthropic-messages.ts#runSingleAnthropicRequest`'s `emitEnd` contract — see that function's doc. */
|
|
109
|
+
async function runSingleGoogleRequest(options, contents, emitEnd) {
|
|
110
|
+
const { onEvent } = options;
|
|
111
|
+
const baseUrlCheck = await validateBaseUrlResolved(options.baseUrl ?? DEFAULT_GOOGLE_BASE_URL, defaultDnsLookup);
|
|
112
|
+
if (baseUrlCheck.error) {
|
|
113
|
+
onEvent({ type: 'error', message: baseUrlCheck.error });
|
|
114
|
+
emitEnd('error');
|
|
115
|
+
return { finishReason: null, toolCalls: [], text: '' };
|
|
116
|
+
}
|
|
117
|
+
let response;
|
|
118
|
+
try {
|
|
119
|
+
response = (await fetch(googleRequestUrl(options.baseUrl, options.model), {
|
|
120
|
+
method: 'POST',
|
|
121
|
+
headers: googleHeaders(options),
|
|
122
|
+
body: JSON.stringify(googleRequestBody(options, contents)),
|
|
123
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
128
|
+
onEvent({ type: 'error', message: redactSecrets(message, [options.apiKey]) });
|
|
129
|
+
emitEnd('error');
|
|
130
|
+
return { finishReason: null, toolCalls: [], text: '' };
|
|
131
|
+
}
|
|
132
|
+
if (!response.ok) {
|
|
133
|
+
const rawText = await response.text();
|
|
134
|
+
onEvent({
|
|
135
|
+
type: 'error',
|
|
136
|
+
message: redactSecrets(extractGoogleErrorDetail(rawText), [options.apiKey]),
|
|
137
|
+
code: String(response.status),
|
|
138
|
+
});
|
|
139
|
+
emitEnd('error');
|
|
140
|
+
return { finishReason: null, toolCalls: [], text: '' };
|
|
141
|
+
}
|
|
142
|
+
if (!response.body) {
|
|
143
|
+
onEvent({ type: 'error', message: 'Google response had no body' });
|
|
144
|
+
emitEnd('error');
|
|
145
|
+
return { finishReason: null, toolCalls: [], text: '' };
|
|
146
|
+
}
|
|
147
|
+
onEvent({ type: 'status', label: 'requesting' });
|
|
148
|
+
const guard = createRoleMarkerGuard('google-turn');
|
|
149
|
+
const toolCalls = [];
|
|
150
|
+
let fullText = '';
|
|
151
|
+
let finishReason = null;
|
|
152
|
+
let usage = null;
|
|
153
|
+
frameLoop: for await (const frame of decodeSseStream(response.body)) {
|
|
154
|
+
// No re-check of an "ended" flag at the top of this loop: every `emitEnd(...)` call site below
|
|
155
|
+
// (the promptFeedback block-reason branch and the contamination branch) is immediately followed
|
|
156
|
+
// by `break frameLoop` — same reachability proof as `anthropic-messages.ts#runSingleAnthropicRequest`.
|
|
157
|
+
let data;
|
|
158
|
+
try {
|
|
159
|
+
data = JSON.parse(frame.data);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
continue; // tolerate a malformed/empty keep-alive frame
|
|
163
|
+
}
|
|
164
|
+
if (!isRecord(data))
|
|
165
|
+
continue;
|
|
166
|
+
if (isRecord(data.usageMetadata)) {
|
|
167
|
+
usage = data.usageMetadata;
|
|
168
|
+
onEvent({ type: 'usage', usage });
|
|
169
|
+
}
|
|
170
|
+
const candidates = Array.isArray(data.candidates) ? data.candidates : [];
|
|
171
|
+
const candidate = candidates[0];
|
|
172
|
+
if (!candidate) {
|
|
173
|
+
if (isRecord(data.promptFeedback) && typeof data.promptFeedback.blockReason === 'string') {
|
|
174
|
+
onEvent({ type: 'error', message: `prompt blocked: ${data.promptFeedback.blockReason}`, code: data.promptFeedback.blockReason });
|
|
175
|
+
emitEnd('error');
|
|
176
|
+
break frameLoop;
|
|
177
|
+
}
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (!isRecord(candidate))
|
|
181
|
+
continue;
|
|
182
|
+
if (typeof candidate.finishReason === 'string') {
|
|
183
|
+
finishReason = candidate.finishReason;
|
|
184
|
+
}
|
|
185
|
+
const content = isRecord(candidate.content) ? candidate.content : null;
|
|
186
|
+
const parts = content && Array.isArray(content.parts) ? content.parts : [];
|
|
187
|
+
for (const rawPart of parts) {
|
|
188
|
+
if (!isRecord(rawPart))
|
|
189
|
+
continue;
|
|
190
|
+
if (typeof rawPart.text === 'string' && rawPart.text.length > 0) {
|
|
191
|
+
// No `guard.contaminated` pre-check here: the only way it becomes true is the
|
|
192
|
+
// `emitEnd('contaminated'); break frameLoop;` a few lines below, which exits the outer
|
|
193
|
+
// frame loop immediately — see `anthropic-messages.ts#runSingleAnthropicRequest`'s
|
|
194
|
+
// identical reachability proof.
|
|
195
|
+
const safe = guard.feedText(rawPart.text);
|
|
196
|
+
if (safe.length > 0) {
|
|
197
|
+
fullText += safe;
|
|
198
|
+
onEvent({ type: 'text_delta', delta: safe });
|
|
199
|
+
}
|
|
200
|
+
if (guard.contaminated) {
|
|
201
|
+
const warn = guard.warningEvent();
|
|
202
|
+
if (warn)
|
|
203
|
+
onEvent(warn);
|
|
204
|
+
emitEnd('contaminated');
|
|
205
|
+
break frameLoop;
|
|
206
|
+
}
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
if (isRecord(rawPart.functionCall)) {
|
|
210
|
+
const fc = rawPart.functionCall;
|
|
211
|
+
const name = typeof fc.name === 'string' ? fc.name : null;
|
|
212
|
+
if (name) {
|
|
213
|
+
const id = typeof fc.id === 'string' && fc.id.length > 0 ? fc.id : `call_${toolCalls.length}`;
|
|
214
|
+
const call = { id, name, input: fc.args ?? {} };
|
|
215
|
+
toolCalls.push(call);
|
|
216
|
+
onEvent({ type: 'tool_use', id: call.id, name: call.name, input: call.input });
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return { finishReason, toolCalls, text: fullText };
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Runs a full Gemini `streamGenerateContent` turn, including the
|
|
225
|
+
* tool-execution loop when `options.executeTool` is supplied and the model
|
|
226
|
+
* requests a function call. See `anthropic-messages.ts#runAnthropicToolTurn`'s
|
|
227
|
+
* doc for the shared event-stream/`ended`-flag contract this mirrors — with
|
|
228
|
+
* one deliberate structural difference: the loop-continuation predicate is
|
|
229
|
+
* `toolCalls.length > 0`, not a `finishReason` comparison (see module doc,
|
|
230
|
+
* point 2, for why Gemini's `finishReason` enum cannot be used here).
|
|
231
|
+
*/
|
|
232
|
+
export async function runGoogleToolTurn(options) {
|
|
233
|
+
const maxToolTurns = options.maxToolTurns ?? DEFAULT_MAX_TOOL_TURNS;
|
|
234
|
+
const endGuard = createTurnEndGuard(options.onEvent, (reason) => ({ type: 'end', reason }));
|
|
235
|
+
const emitEnd = endGuard.emitEnd;
|
|
236
|
+
let contents = options.contents.slice();
|
|
237
|
+
let toolTurns = 0;
|
|
238
|
+
let lastFinishReason = null;
|
|
239
|
+
while (true) {
|
|
240
|
+
const outcome = await runSingleGoogleRequest(options, contents, emitEnd);
|
|
241
|
+
lastFinishReason = outcome.finishReason;
|
|
242
|
+
if (endGuard.hasEnded())
|
|
243
|
+
break;
|
|
244
|
+
if (outcome.toolCalls.length === 0) {
|
|
245
|
+
emitEnd('stop');
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
if (!options.executeTool) {
|
|
249
|
+
// Pending tool calls were already emitted as `tool_use` events above;
|
|
250
|
+
// with no executor to run them, the turn ends here rather than
|
|
251
|
+
// silently retrying forever.
|
|
252
|
+
emitEnd('stop');
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
if (toolTurns >= maxToolTurns) {
|
|
256
|
+
emitEnd('max_tool_turns');
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
toolTurns += 1;
|
|
260
|
+
const modelParts = [
|
|
261
|
+
...(outcome.text ? [{ text: outcome.text }] : []),
|
|
262
|
+
...outcome.toolCalls.map((call) => ({ functionCall: { name: call.name, args: call.input, id: call.id } })),
|
|
263
|
+
];
|
|
264
|
+
const functionResponseParts = [];
|
|
265
|
+
for (const call of outcome.toolCalls) {
|
|
266
|
+
const result = await options.executeTool(call);
|
|
267
|
+
options.onEvent({ type: 'tool_result', toolUseId: call.id, content: result.content, isError: result.isError ?? false });
|
|
268
|
+
functionResponseParts.push({
|
|
269
|
+
functionResponse: {
|
|
270
|
+
name: call.name,
|
|
271
|
+
id: call.id,
|
|
272
|
+
response: { content: result.content, isError: result.isError ?? false },
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
contents = [
|
|
277
|
+
...contents,
|
|
278
|
+
{ role: 'model', parts: modelParts },
|
|
279
|
+
{ role: 'user', parts: functionResponseParts },
|
|
280
|
+
];
|
|
281
|
+
}
|
|
282
|
+
return { finishReason: lastFinishReason, toolTurns };
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=google-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-messages.js","sourceRoot":"","sources":["../../src/providers/google-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module providers/google
|
|
3
|
+
*
|
|
4
|
+
* URL-building helpers for the Google Generative Language (Gemini) REST
|
|
5
|
+
* API. Product-neutral as found in the origin — zero imports, ported
|
|
6
|
+
* verbatim.
|
|
7
|
+
*/
|
|
8
|
+
/** Strips any trailing `/v1`/`/v1beta` API-version segment and trailing slashes from a configured base URL. */
|
|
9
|
+
export declare function googleGenerativeLanguageBaseUrl(baseUrl: string): string;
|
|
10
|
+
/** Strips the `models/` prefix Google's API sometimes includes in a model id. */
|
|
11
|
+
export declare function normalizeGoogleModelId(model: string): string;
|
|
12
|
+
/** URL-encodes a normalized model id for use as a path segment. */
|
|
13
|
+
export declare function googleModelPathSegment(model: string): string;
|
|
14
|
+
/** Builds the non-streaming `generateContent` endpoint URL for a model. */
|
|
15
|
+
export declare function googleGenerateContentUrl(baseUrl: string, model: string): string;
|
|
16
|
+
/** Builds the SSE-streaming `streamGenerateContent` endpoint URL for a model. */
|
|
17
|
+
export declare function googleStreamGenerateContentUrl(baseUrl: string, model: string): string;
|
|
18
|
+
/** Builds the model-catalog listing endpoint URL, with the API key attached as a query param. */
|
|
19
|
+
export declare function googleProviderModelsUrl(baseUrl: string, apiKey: string): string;
|
|
20
|
+
//# sourceMappingURL=google.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+GAA+G;AAC/G,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASvE;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,mEAAmE;AACnE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,iFAAiF;AACjF,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAErF;AAED,iGAAiG;AACjG,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAI/E"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module providers/google
|
|
3
|
+
*
|
|
4
|
+
* URL-building helpers for the Google Generative Language (Gemini) REST
|
|
5
|
+
* API. Product-neutral as found in the origin — zero imports, ported
|
|
6
|
+
* verbatim.
|
|
7
|
+
*/
|
|
8
|
+
/** Strips any trailing `/v1`/`/v1beta` API-version segment and trailing slashes from a configured base URL. */
|
|
9
|
+
export function googleGenerativeLanguageBaseUrl(baseUrl) {
|
|
10
|
+
const url = new URL(baseUrl);
|
|
11
|
+
url.search = '';
|
|
12
|
+
url.hash = '';
|
|
13
|
+
const pathname = url.pathname
|
|
14
|
+
.replace(/\/+$/, '')
|
|
15
|
+
.replace(/\/v\d+(?:beta)?$/i, '');
|
|
16
|
+
url.pathname = pathname || '/';
|
|
17
|
+
return url.toString().replace(/\/+$/, '');
|
|
18
|
+
}
|
|
19
|
+
/** Strips the `models/` prefix Google's API sometimes includes in a model id. */
|
|
20
|
+
export function normalizeGoogleModelId(model) {
|
|
21
|
+
const trimmed = model.trim();
|
|
22
|
+
return trimmed.startsWith('models/') ? trimmed.slice('models/'.length) : trimmed;
|
|
23
|
+
}
|
|
24
|
+
/** URL-encodes a normalized model id for use as a path segment. */
|
|
25
|
+
export function googleModelPathSegment(model) {
|
|
26
|
+
return encodeURIComponent(normalizeGoogleModelId(model));
|
|
27
|
+
}
|
|
28
|
+
/** Builds the non-streaming `generateContent` endpoint URL for a model. */
|
|
29
|
+
export function googleGenerateContentUrl(baseUrl, model) {
|
|
30
|
+
return `${googleGenerativeLanguageBaseUrl(baseUrl)}/v1beta/models/${googleModelPathSegment(model)}:generateContent`;
|
|
31
|
+
}
|
|
32
|
+
/** Builds the SSE-streaming `streamGenerateContent` endpoint URL for a model. */
|
|
33
|
+
export function googleStreamGenerateContentUrl(baseUrl, model) {
|
|
34
|
+
return `${googleGenerativeLanguageBaseUrl(baseUrl)}/v1beta/models/${googleModelPathSegment(model)}:streamGenerateContent?alt=sse`;
|
|
35
|
+
}
|
|
36
|
+
/** Builds the model-catalog listing endpoint URL, with the API key attached as a query param. */
|
|
37
|
+
export function googleProviderModelsUrl(baseUrl, apiKey) {
|
|
38
|
+
const url = new URL(`${googleGenerativeLanguageBaseUrl(baseUrl)}/v1beta/models`);
|
|
39
|
+
url.searchParams.set('key', apiKey);
|
|
40
|
+
return url.toString();
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=google.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+GAA+G;AAC/G,MAAM,UAAU,+BAA+B,CAAC,OAAe;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAChB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACd,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ;SAC1B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IACpC,GAAG,CAAC,QAAQ,GAAG,QAAQ,IAAI,GAAG,CAAC;IAC/B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACnF,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,kBAAkB,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,KAAa;IACrE,OAAO,GAAG,+BAA+B,CAAC,OAAO,CAAC,kBAAkB,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,CAAC;AACtH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,8BAA8B,CAAC,OAAe,EAAE,KAAa;IAC3E,OAAO,GAAG,+BAA+B,CAAC,OAAO,CAAC,kBAAkB,sBAAsB,CAAC,KAAK,CAAC,gCAAgC,CAAC;AACpI,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,MAAc;IACrE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,+BAA+B,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module providers
|
|
3
|
+
*
|
|
4
|
+
* Generic LLM-provider integration material ported from OD's
|
|
5
|
+
* `apps/daemon/src/integrations/` (13 files). See `source-map.md` for the
|
|
6
|
+
* full per-file provenance and the MIXED-classification split: OD's own
|
|
7
|
+
* AMR/vela provider adapter (`vela*.ts`, 4 files) is a specific provider's
|
|
8
|
+
* own daemon-coupled implementation, not generic material, and was left
|
|
9
|
+
* unported.
|
|
10
|
+
*
|
|
11
|
+
* `sse-decode.ts` / `anthropic-messages.ts` / `openai-chat.ts` (2026-07-21),
|
|
12
|
+
* and `google-messages.ts` / `azure-chat.ts` / `ollama-chat.ts`
|
|
13
|
+
* (2026-07-22), are the one exception to "ported": built fresh against
|
|
14
|
+
* each provider's real public API docs rather than lifted from OD's
|
|
15
|
+
* `chat.ts` (this task did not have direct access to that file for the
|
|
16
|
+
* 2026-07-21 pass; the 2026-07-22 pass did read the real OD source for
|
|
17
|
+
* Azure's api-version default — see `azure-chat.ts`'s header) — see each
|
|
18
|
+
* module's own header and `source-map.md`'s dated sections for the full
|
|
19
|
+
* rationale.
|
|
20
|
+
*/
|
|
21
|
+
export * from './types.js';
|
|
22
|
+
export * from './token-params.js';
|
|
23
|
+
export * from './google.js';
|
|
24
|
+
export * from './aihubmix.js';
|
|
25
|
+
export * from './connection-guard.js';
|
|
26
|
+
export * from './model-catalog.js';
|
|
27
|
+
export * from './sse-decode.js';
|
|
28
|
+
export * from './anthropic-messages.js';
|
|
29
|
+
export * from './openai-chat.js';
|
|
30
|
+
export * from './google-messages.js';
|
|
31
|
+
export * from './azure-chat.js';
|
|
32
|
+
export * from './ollama-chat.js';
|
|
33
|
+
export * from './elevenlabs.js';
|
|
34
|
+
export * from './pkce.js';
|
|
35
|
+
export * from './oauth-provider.js';
|
|
36
|
+
export * from './oauth-callback-server.js';
|
|
37
|
+
export * from './oauth-tokens.js';
|
|
38
|
+
export * from './oauth-credentials.js';
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module providers
|
|
3
|
+
*
|
|
4
|
+
* Generic LLM-provider integration material ported from OD's
|
|
5
|
+
* `apps/daemon/src/integrations/` (13 files). See `source-map.md` for the
|
|
6
|
+
* full per-file provenance and the MIXED-classification split: OD's own
|
|
7
|
+
* AMR/vela provider adapter (`vela*.ts`, 4 files) is a specific provider's
|
|
8
|
+
* own daemon-coupled implementation, not generic material, and was left
|
|
9
|
+
* unported.
|
|
10
|
+
*
|
|
11
|
+
* `sse-decode.ts` / `anthropic-messages.ts` / `openai-chat.ts` (2026-07-21),
|
|
12
|
+
* and `google-messages.ts` / `azure-chat.ts` / `ollama-chat.ts`
|
|
13
|
+
* (2026-07-22), are the one exception to "ported": built fresh against
|
|
14
|
+
* each provider's real public API docs rather than lifted from OD's
|
|
15
|
+
* `chat.ts` (this task did not have direct access to that file for the
|
|
16
|
+
* 2026-07-21 pass; the 2026-07-22 pass did read the real OD source for
|
|
17
|
+
* Azure's api-version default — see `azure-chat.ts`'s header) — see each
|
|
18
|
+
* module's own header and `source-map.md`'s dated sections for the full
|
|
19
|
+
* rationale.
|
|
20
|
+
*/
|
|
21
|
+
export * from './types.js';
|
|
22
|
+
export * from './token-params.js';
|
|
23
|
+
export * from './google.js';
|
|
24
|
+
export * from './aihubmix.js';
|
|
25
|
+
export * from './connection-guard.js';
|
|
26
|
+
export * from './model-catalog.js';
|
|
27
|
+
export * from './sse-decode.js';
|
|
28
|
+
export * from './anthropic-messages.js';
|
|
29
|
+
export * from './openai-chat.js';
|
|
30
|
+
export * from './google-messages.js';
|
|
31
|
+
export * from './azure-chat.js';
|
|
32
|
+
export * from './ollama-chat.js';
|
|
33
|
+
export * from './elevenlabs.js';
|
|
34
|
+
export * from './pkce.js';
|
|
35
|
+
export * from './oauth-provider.js';
|
|
36
|
+
export * from './oauth-callback-server.js';
|
|
37
|
+
export * from './oauth-tokens.js';
|
|
38
|
+
export * from './oauth-credentials.js';
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module providers/model-catalog
|
|
3
|
+
*
|
|
4
|
+
* Live model-catalog discovery for BYOK providers (OpenAI-compatible,
|
|
5
|
+
* Anthropic, Google, AIHubMix, SenseAudio, plus static seeds for Bedrock and
|
|
6
|
+
* an explicit "unsupported" response for Azure). Ported from OD's
|
|
7
|
+
* `integrations/provider-models.ts` (`listProviderModels`) with its
|
|
8
|
+
* upstream contracts-package type imports repointed at this package's own
|
|
9
|
+
* vendored `types.ts`, and its `../connectionTest.js` SSRF-guard /
|
|
10
|
+
* secret-redaction imports repointed at this package's own vendored
|
|
11
|
+
* `connection-guard.ts` (see that module's doc comment for what was and
|
|
12
|
+
* wasn't pulled from the 2,600-line origin file). Logic is otherwise
|
|
13
|
+
* unchanged — product-neutral as found (a bare BYOK-protocol model lister,
|
|
14
|
+
* no OD-branded strings).
|
|
15
|
+
*/
|
|
16
|
+
import type { DnsLookupFn } from './connection-guard.js';
|
|
17
|
+
import type { ProviderModelsRequest, ProviderModelsResponse } from './types.js';
|
|
18
|
+
export type ProviderModelsInput = ProviderModelsRequest & {
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
requestInit?: Pick<RequestInit, 'dispatcher'>;
|
|
21
|
+
/** Injectable DNS resolver for the base-URL SSRF guard; defaults to `node:dns`. */
|
|
22
|
+
dnsLookup?: DnsLookupFn;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Fetches the live model catalog for a BYOK provider connection. Validates
|
|
26
|
+
* the base URL (sync + DNS-resolved SSRF guard) before issuing any request,
|
|
27
|
+
* dispatches per-protocol (a static seed for Bedrock, an explicit
|
|
28
|
+
* "unsupported" response for Azure), and normalizes every provider's
|
|
29
|
+
* response envelope into a de-duplicated, alphabetized `{ id, label }[]`.
|
|
30
|
+
*/
|
|
31
|
+
export declare function listProviderModels(input: ProviderModelsInput): Promise<ProviderModelsResponse>;
|
|
32
|
+
//# sourceMappingURL=model-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/providers/model-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,KAAK,EAIV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,GAAG;IACxD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC9C,mFAAmF;IACnF,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB,CAAC;AA+OF;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CA0JjC"}
|