@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,7 @@
|
|
|
1
|
+
import type { RuntimeAgentDef } from './types.js';
|
|
2
|
+
export type PreparedPromptFile = {
|
|
3
|
+
path: string;
|
|
4
|
+
cleanup: () => Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
export declare function preparePromptFileForAgent(def: RuntimeAgentDef | null | undefined, prompt: string, label: string): Promise<PreparedPromptFile | null>;
|
|
7
|
+
//# sourceMappingURL=prompt-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-file.d.ts","sourceRoot":"","sources":["../src/prompt-file.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAcpC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module prompt-file
|
|
3
|
+
*
|
|
4
|
+
* Stages a composed prompt to a temp file for adapters that declare
|
|
5
|
+
* `promptViaFile: true`. Ported from OD's
|
|
6
|
+
* `apps/daemon/src/runtimes/prompt/prompt-file.ts` with one de-branding
|
|
7
|
+
* change: the temp-dir prefix was `od-${def.id}-...`; now
|
|
8
|
+
* `agent-runtime-${def.id}-...`.
|
|
9
|
+
*/
|
|
10
|
+
import { promises as fs } from 'node:fs';
|
|
11
|
+
import os from 'node:os';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
export async function preparePromptFileForAgent(def, prompt, label) {
|
|
14
|
+
if (!def?.promptViaFile)
|
|
15
|
+
return null;
|
|
16
|
+
const safeLabel = label.replace(/[^a-zA-Z0-9_.-]/g, '-').slice(0, 80) || 'prompt';
|
|
17
|
+
const dir = await fs.mkdtemp(path.join(os.tmpdir(), `agent-runtime-${def.id}-${safeLabel}-`));
|
|
18
|
+
const filePath = path.join(dir, 'prompt.md');
|
|
19
|
+
await fs.writeFile(filePath, prompt, { encoding: 'utf8', mode: 0o600 });
|
|
20
|
+
return {
|
|
21
|
+
path: filePath,
|
|
22
|
+
cleanup: async () => {
|
|
23
|
+
await fs.rm(dir, { recursive: true, force: true });
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=prompt-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-file.js","sourceRoot":"","sources":["../src/prompt-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,GAAuC,EACvC,MAAc,EACd,KAAa;IAEb,IAAI,CAAC,GAAG,EAAE,aAAa;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC;IAClF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,GAAG,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExE,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module providers/aihubmix
|
|
3
|
+
*
|
|
4
|
+
* AIHubMix BYOK provider — shared identity + outbound header helper.
|
|
5
|
+
*
|
|
6
|
+
* AIHubMix (https://aihubmix.com) is an OpenAI-wire-compatible aggregator
|
|
7
|
+
* gateway: a single API key fronts OpenAI / Anthropic / Gemini models, routed
|
|
8
|
+
* by model name on the upstream side (`claude*` -> Anthropic, `gemini*` / `imagen*`
|
|
9
|
+
* -> Gemini, everything else -> OpenAI). Because the wire shape is identical to
|
|
10
|
+
* OpenAI's, chat proxies, connection tests, model discovery and media
|
|
11
|
+
* renderers all reuse the OpenAI call shape — the ONLY thing that differs is
|
|
12
|
+
* the outbound headers, which is why every outbound call point funnels through
|
|
13
|
+
* `aihubmixHeaders()` rather than hand-building `Authorization` inline.
|
|
14
|
+
*
|
|
15
|
+
* The distinctive AIHubMix detail is the `APP-Code` attribution header: a
|
|
16
|
+
* fixed per-integration code that grants a usage discount (the same mechanism
|
|
17
|
+
* cherry-studio and the dify plugin use). Injecting it in one helper keeps the
|
|
18
|
+
* invariant "every AIHubMix request carries the APP-Code" enforceable in one
|
|
19
|
+
* place instead of being re-derived at each call site.
|
|
20
|
+
*
|
|
21
|
+
* This is a third-party gateway's own wire protocol, not a product-owned
|
|
22
|
+
* integration — ported verbatim (zero imports, no product-identity strings
|
|
23
|
+
* in the origin).
|
|
24
|
+
*/
|
|
25
|
+
export declare const AIHUBMIX_APP_CODE = "DMCY9912";
|
|
26
|
+
export declare const AIHUBMIX_DEFAULT_BASE_URL = "https://aihubmix.com/v1";
|
|
27
|
+
/**
|
|
28
|
+
* Builds the outbound header set for an AIHubMix request: Bearer auth plus the
|
|
29
|
+
* fixed `APP-Code` attribution header. Callers spread the result into their
|
|
30
|
+
* `fetch` headers and may add `content-type` etc. on top.
|
|
31
|
+
*/
|
|
32
|
+
export declare function aihubmixHeaders(apiKey: string): Record<string, string>;
|
|
33
|
+
/**
|
|
34
|
+
* The APP-Code attribution header on its own (no auth). For the Anthropic /
|
|
35
|
+
* Gemini routes, which carry their own auth header (`x-api-key` /
|
|
36
|
+
* `x-goog-api-key`) — spread this alongside it so every AIHubMix request,
|
|
37
|
+
* whatever the wire protocol, still carries APP-Code.
|
|
38
|
+
*
|
|
39
|
+
* `AIHUBMIX_APP_CODE` is a fixed non-empty literal (not a runtime-configurable
|
|
40
|
+
* value), so this always returns the header — no conditional/empty-string
|
|
41
|
+
* branch to test.
|
|
42
|
+
*/
|
|
43
|
+
export declare function aihubmixAppCodeHeader(): Record<string, string>;
|
|
44
|
+
export type AIHubMixProtocol = 'openai' | 'anthropic' | 'gemini';
|
|
45
|
+
export declare function classifyAIHubMixModel(model: string): AIHubMixProtocol;
|
|
46
|
+
/**
|
|
47
|
+
* Origin of the configured AIHubMix base URL — the three protocol clients all
|
|
48
|
+
* derive their endpoint from it:
|
|
49
|
+
* openai -> `${origin}/v1`
|
|
50
|
+
* anthropic -> `${origin}` (+ /v1/messages)
|
|
51
|
+
* gemini -> `${origin}/gemini` (+ /v1beta/models/{model}:...)
|
|
52
|
+
*/
|
|
53
|
+
export declare function aihubmixOriginFromBase(baseUrl: string): string;
|
|
54
|
+
/** Gemini-native generateContent endpoint for an AIHubMix image model. */
|
|
55
|
+
export declare function aihubmixGeminiImageUrl(baseUrl: string, wireModel: string): string;
|
|
56
|
+
export interface AIHubMixGeminiImageRequest {
|
|
57
|
+
baseUrl: string;
|
|
58
|
+
apiKey: string;
|
|
59
|
+
wireModel: string;
|
|
60
|
+
prompt: string;
|
|
61
|
+
/** Gemini aspectRatio string, e.g. "1:1" / "16:9". */
|
|
62
|
+
aspect: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Generates an image through AIHubMix's Gemini-native `generateContent` wire and
|
|
66
|
+
* returns the decoded image bytes.
|
|
67
|
+
*
|
|
68
|
+
* gemini/imagen-family image models reject the OpenAI `/images/generations`
|
|
69
|
+
* shape ("Unknown name prompt/n/size"), so any caller driving an in-chat tool
|
|
70
|
+
* or a media renderer for those models should route here. This helper owns the
|
|
71
|
+
* single source of truth for the request body and the inline-image response
|
|
72
|
+
* parse; `doFetch` lets each caller apply its own request-init wrapper (proxy
|
|
73
|
+
* dispatcher, abort signal, redirect policy). Throws on a non-OK status or a
|
|
74
|
+
* response without inline image data.
|
|
75
|
+
*/
|
|
76
|
+
export declare function aihubmixGeminiImageBytes(req: AIHubMixGeminiImageRequest, doFetch: (url: string, init: RequestInit) => Promise<Response>): Promise<Buffer>;
|
|
77
|
+
export declare function aihubmixWireModel(catalogId: string): string;
|
|
78
|
+
export declare function aihubmixVideoSeconds(wireModel: string, requested: number): string;
|
|
79
|
+
export type AIHubMixCatalogType = 'llm' | 'image_generation' | 'tts' | 'video';
|
|
80
|
+
export declare function aihubmixCatalogUrl(baseUrl: string, type: AIHubMixCatalogType): string;
|
|
81
|
+
export interface AIHubMixCatalogModel {
|
|
82
|
+
id: string;
|
|
83
|
+
label: string;
|
|
84
|
+
}
|
|
85
|
+
export interface ParseAIHubMixCatalogOptions {
|
|
86
|
+
/** Keep only genuine chat models, dropping media-generation rows. AIHubMix's
|
|
87
|
+
* `?type=llm` query matches any model whose `types` merely CONTAINS `llm`, so
|
|
88
|
+
* dual-tagged image models (e.g. `gpt-image-2` -> "image_generation,llm") leak
|
|
89
|
+
* into the chat catalogue. A chat model picker should pass this; media
|
|
90
|
+
* pickers (which query `?type=image_generation` / `video` / `tts`) leave it
|
|
91
|
+
* off so their own catalogues stay intact. Rows with no `types` are kept —
|
|
92
|
+
* absent metadata shouldn't hide an otherwise-valid chat model. */
|
|
93
|
+
chatOnly?: boolean;
|
|
94
|
+
}
|
|
95
|
+
/** Parses the AIHubMix catalogue envelope into { id, label } options. Reads
|
|
96
|
+
* `model_id` (the wire name sent as `model`) and `model_name` (display). */
|
|
97
|
+
export declare function parseAIHubMixCatalog(data: unknown, options?: ParseAIHubMixCatalogOptions): AIHubMixCatalogModel[];
|
|
98
|
+
export declare const AIHUBMIX_IMAGE_ASPECT_TO_SIZE: Record<string, string>;
|
|
99
|
+
//# sourceMappingURL=aihubmix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aihubmix.d.ts","sourceRoot":"","sources":["../../src/providers/aihubmix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAK5C,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9D;AAQD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEjE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAarE;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKjF;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,0BAA0B,EAC/B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,GAC7D,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAcD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAYD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAiBjF;AAUD,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,kBAAkB,GAAG,KAAK,GAAG,OAAO,CAAC;AAE/E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAQrF;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAiBD,MAAM,WAAW,2BAA2B;IAC1C;;;;;;wEAMoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;6EAC6E;AAC7E,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,2BAA2B,GACpC,oBAAoB,EAAE,CAuBxB;AAOD,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMhE,CAAC"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module providers/aihubmix
|
|
3
|
+
*
|
|
4
|
+
* AIHubMix BYOK provider — shared identity + outbound header helper.
|
|
5
|
+
*
|
|
6
|
+
* AIHubMix (https://aihubmix.com) is an OpenAI-wire-compatible aggregator
|
|
7
|
+
* gateway: a single API key fronts OpenAI / Anthropic / Gemini models, routed
|
|
8
|
+
* by model name on the upstream side (`claude*` -> Anthropic, `gemini*` / `imagen*`
|
|
9
|
+
* -> Gemini, everything else -> OpenAI). Because the wire shape is identical to
|
|
10
|
+
* OpenAI's, chat proxies, connection tests, model discovery and media
|
|
11
|
+
* renderers all reuse the OpenAI call shape — the ONLY thing that differs is
|
|
12
|
+
* the outbound headers, which is why every outbound call point funnels through
|
|
13
|
+
* `aihubmixHeaders()` rather than hand-building `Authorization` inline.
|
|
14
|
+
*
|
|
15
|
+
* The distinctive AIHubMix detail is the `APP-Code` attribution header: a
|
|
16
|
+
* fixed per-integration code that grants a usage discount (the same mechanism
|
|
17
|
+
* cherry-studio and the dify plugin use). Injecting it in one helper keeps the
|
|
18
|
+
* invariant "every AIHubMix request carries the APP-Code" enforceable in one
|
|
19
|
+
* place instead of being re-derived at each call site.
|
|
20
|
+
*
|
|
21
|
+
* This is a third-party gateway's own wire protocol, not a product-owned
|
|
22
|
+
* integration — ported verbatim (zero imports, no product-identity strings
|
|
23
|
+
* in the origin).
|
|
24
|
+
*/
|
|
25
|
+
// Fixed App Code for this integration (from https://aihubmix.com/appstore).
|
|
26
|
+
// Sent as the APP-Code attribution header on every AIHubMix request to grant
|
|
27
|
+
// the integration's usage discount. When empty, the header is omitted and the
|
|
28
|
+
// integration still works (just without the discount).
|
|
29
|
+
export const AIHUBMIX_APP_CODE = 'DMCY9912';
|
|
30
|
+
// Default base URL a caller can assume when its BYOK form leaves the field
|
|
31
|
+
// blank. Kept here as the single source of truth so a chat proxy, media
|
|
32
|
+
// renderer and connection test can all default to the same origin.
|
|
33
|
+
export const AIHUBMIX_DEFAULT_BASE_URL = 'https://aihubmix.com/v1';
|
|
34
|
+
/**
|
|
35
|
+
* Builds the outbound header set for an AIHubMix request: Bearer auth plus the
|
|
36
|
+
* fixed `APP-Code` attribution header. Callers spread the result into their
|
|
37
|
+
* `fetch` headers and may add `content-type` etc. on top.
|
|
38
|
+
*/
|
|
39
|
+
export function aihubmixHeaders(apiKey) {
|
|
40
|
+
return {
|
|
41
|
+
authorization: `Bearer ${apiKey}`,
|
|
42
|
+
...aihubmixAppCodeHeader(),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The APP-Code attribution header on its own (no auth). For the Anthropic /
|
|
47
|
+
* Gemini routes, which carry their own auth header (`x-api-key` /
|
|
48
|
+
* `x-goog-api-key`) — spread this alongside it so every AIHubMix request,
|
|
49
|
+
* whatever the wire protocol, still carries APP-Code.
|
|
50
|
+
*
|
|
51
|
+
* `AIHUBMIX_APP_CODE` is a fixed non-empty literal (not a runtime-configurable
|
|
52
|
+
* value), so this always returns the header — no conditional/empty-string
|
|
53
|
+
* branch to test.
|
|
54
|
+
*/
|
|
55
|
+
export function aihubmixAppCodeHeader() {
|
|
56
|
+
return { 'APP-Code': AIHUBMIX_APP_CODE };
|
|
57
|
+
}
|
|
58
|
+
export function classifyAIHubMixModel(model) {
|
|
59
|
+
const m = (model || '').trim().toLowerCase();
|
|
60
|
+
// Gemini: gemini*/imagen*, excluding the `-nothink`/`-search` suffixes and
|
|
61
|
+
// any embedding model (those stay on the OpenAI-compatible path per §4.1).
|
|
62
|
+
if ((m.startsWith('gemini') || m.startsWith('imagen'))
|
|
63
|
+
&& !/-(nothink|search)$/.test(m)
|
|
64
|
+
&& !m.includes('embedding')) {
|
|
65
|
+
return 'gemini';
|
|
66
|
+
}
|
|
67
|
+
if (m.startsWith('claude'))
|
|
68
|
+
return 'anthropic';
|
|
69
|
+
return 'openai';
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Origin of the configured AIHubMix base URL — the three protocol clients all
|
|
73
|
+
* derive their endpoint from it:
|
|
74
|
+
* openai -> `${origin}/v1`
|
|
75
|
+
* anthropic -> `${origin}` (+ /v1/messages)
|
|
76
|
+
* gemini -> `${origin}/gemini` (+ /v1beta/models/{model}:...)
|
|
77
|
+
*/
|
|
78
|
+
export function aihubmixOriginFromBase(baseUrl) {
|
|
79
|
+
try {
|
|
80
|
+
return new URL(baseUrl || AIHUBMIX_DEFAULT_BASE_URL).origin;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return 'https://aihubmix.com';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Gemini-native generateContent endpoint for an AIHubMix image model. */
|
|
87
|
+
export function aihubmixGeminiImageUrl(baseUrl, wireModel) {
|
|
88
|
+
return (`${aihubmixOriginFromBase(baseUrl)}/gemini/v1beta/models/`
|
|
89
|
+
+ `${encodeURIComponent(wireModel)}:generateContent`);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Generates an image through AIHubMix's Gemini-native `generateContent` wire and
|
|
93
|
+
* returns the decoded image bytes.
|
|
94
|
+
*
|
|
95
|
+
* gemini/imagen-family image models reject the OpenAI `/images/generations`
|
|
96
|
+
* shape ("Unknown name prompt/n/size"), so any caller driving an in-chat tool
|
|
97
|
+
* or a media renderer for those models should route here. This helper owns the
|
|
98
|
+
* single source of truth for the request body and the inline-image response
|
|
99
|
+
* parse; `doFetch` lets each caller apply its own request-init wrapper (proxy
|
|
100
|
+
* dispatcher, abort signal, redirect policy). Throws on a non-OK status or a
|
|
101
|
+
* response without inline image data.
|
|
102
|
+
*/
|
|
103
|
+
export async function aihubmixGeminiImageBytes(req, doFetch) {
|
|
104
|
+
const url = aihubmixGeminiImageUrl(req.baseUrl, req.wireModel);
|
|
105
|
+
const resp = await doFetch(url, {
|
|
106
|
+
method: 'POST',
|
|
107
|
+
redirect: 'error',
|
|
108
|
+
headers: {
|
|
109
|
+
'content-type': 'application/json',
|
|
110
|
+
'x-goog-api-key': req.apiKey,
|
|
111
|
+
...aihubmixAppCodeHeader(),
|
|
112
|
+
},
|
|
113
|
+
body: JSON.stringify({
|
|
114
|
+
contents: [{ role: 'user', parts: [{ text: req.prompt }] }],
|
|
115
|
+
generationConfig: {
|
|
116
|
+
responseModalities: ['TEXT', 'IMAGE'],
|
|
117
|
+
imageConfig: { aspectRatio: req.aspect },
|
|
118
|
+
},
|
|
119
|
+
}),
|
|
120
|
+
});
|
|
121
|
+
if (!resp.ok) {
|
|
122
|
+
const text = await resp.text().catch(() => '');
|
|
123
|
+
throw new Error(`aihubmix image (gemini) ${resp.status}: ${text.slice(0, 240)}`);
|
|
124
|
+
}
|
|
125
|
+
const data = (await resp.json());
|
|
126
|
+
const parts = data?.candidates?.[0]?.content?.parts ?? [];
|
|
127
|
+
const b64 = parts
|
|
128
|
+
.map((p) => p?.inlineData?.data || p?.inline_data?.data)
|
|
129
|
+
.find((d) => typeof d === 'string' && d.length > 0);
|
|
130
|
+
if (!b64) {
|
|
131
|
+
throw new Error(`aihubmix gemini image response had no inline image data: ${JSON.stringify(data).slice(0, 200)}`);
|
|
132
|
+
}
|
|
133
|
+
return Buffer.from(b64, 'base64');
|
|
134
|
+
}
|
|
135
|
+
// Catalogue ids vs wire names. A media registry may require globally-unique
|
|
136
|
+
// model ids across providers, but `gpt-image-1` / `dall-e-3` / `tts-1` are
|
|
137
|
+
// already owned by the `openai` provider in such a registry. So AIHubMix's
|
|
138
|
+
// models are registered with an `aihubmix-` prefix and mapped back to the
|
|
139
|
+
// real upstream name here. A plain prefix strip is the fallback so adding a
|
|
140
|
+
// new `aihubmix-<wire>` entry needs no edit here.
|
|
141
|
+
const AIHUBMIX_WIRE_MODELS = {
|
|
142
|
+
'aihubmix-gpt-image-1': 'gpt-image-1',
|
|
143
|
+
'aihubmix-dall-e-3': 'dall-e-3',
|
|
144
|
+
'aihubmix-tts-1': 'tts-1',
|
|
145
|
+
};
|
|
146
|
+
export function aihubmixWireModel(catalogId) {
|
|
147
|
+
return AIHUBMIX_WIRE_MODELS[catalogId] ?? catalogId.replace(/^aihubmix-/, '');
|
|
148
|
+
}
|
|
149
|
+
// AIHubMix's unified /videos API uses a single `seconds` (string) field for
|
|
150
|
+
// every model family, but the *valid values* differ per family — an
|
|
151
|
+
// out-of-set duration 400s (e.g. Veo rejects 5; only 4/6/8 are allowed, which
|
|
152
|
+
// AIHubMix forwards to Google's native `durationSeconds`). Snap the requested
|
|
153
|
+
// duration to the family's nearest allowed value (ties prefer the shorter one).
|
|
154
|
+
// veo: 4, 6, 8 (default 8)
|
|
155
|
+
// sora: 4, 8, 12 (default 4)
|
|
156
|
+
// wan: 5, 10 (default 5)
|
|
157
|
+
// seedance/doubao + unknown: accepts a range — clamp to 3-12.
|
|
158
|
+
// `wireModel` is the upstream name (prefix already stripped).
|
|
159
|
+
export function aihubmixVideoSeconds(wireModel, requested) {
|
|
160
|
+
const m = (wireModel || '').toLowerCase();
|
|
161
|
+
const req = Number.isFinite(requested) ? requested : 5;
|
|
162
|
+
let allowed = null;
|
|
163
|
+
if (m.startsWith('veo'))
|
|
164
|
+
allowed = [4, 6, 8];
|
|
165
|
+
else if (m.startsWith('sora'))
|
|
166
|
+
allowed = [4, 8, 12];
|
|
167
|
+
else if (m.startsWith('wan'))
|
|
168
|
+
allowed = [5, 10];
|
|
169
|
+
if (!allowed) {
|
|
170
|
+
// Seedance/doubao and unknown families take a continuous range.
|
|
171
|
+
return String(Math.min(12, Math.max(3, Math.round(req))));
|
|
172
|
+
}
|
|
173
|
+
// Nearest allowed value; strict `<` keeps the first (smaller) on a tie.
|
|
174
|
+
const snapped = allowed.reduce((best, v) => (Math.abs(v - req) < Math.abs(best - req) ? v : best), allowed[0]);
|
|
175
|
+
return String(snapped);
|
|
176
|
+
}
|
|
177
|
+
export function aihubmixCatalogUrl(baseUrl, type) {
|
|
178
|
+
let origin;
|
|
179
|
+
try {
|
|
180
|
+
origin = new URL(baseUrl || AIHUBMIX_DEFAULT_BASE_URL).origin;
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
origin = 'https://aihubmix.com';
|
|
184
|
+
}
|
|
185
|
+
return `${origin}/api/v1/models?type=${type}`;
|
|
186
|
+
}
|
|
187
|
+
// AIHubMix tags every catalogue row with a comma-separated `types` field
|
|
188
|
+
// (e.g. "llm", "llm,search", "image_generation,llm"). These are the
|
|
189
|
+
// media-generation capabilities that belong to dedicated image/video/audio
|
|
190
|
+
// pickers — NOT the chat model picker.
|
|
191
|
+
const AIHUBMIX_MEDIA_GENERATION_TYPES = new Set(['image_generation', 'video', 'tts']);
|
|
192
|
+
function aihubmixRowTypes(row) {
|
|
193
|
+
const raw = row?.types;
|
|
194
|
+
if (typeof raw !== 'string')
|
|
195
|
+
return [];
|
|
196
|
+
return raw
|
|
197
|
+
.split(',')
|
|
198
|
+
.map((t) => t.trim().toLowerCase())
|
|
199
|
+
.filter(Boolean);
|
|
200
|
+
}
|
|
201
|
+
/** Parses the AIHubMix catalogue envelope into { id, label } options. Reads
|
|
202
|
+
* `model_id` (the wire name sent as `model`) and `model_name` (display). */
|
|
203
|
+
export function parseAIHubMixCatalog(data, options) {
|
|
204
|
+
const rows = data?.data;
|
|
205
|
+
if (!Array.isArray(rows))
|
|
206
|
+
return [];
|
|
207
|
+
const seen = new Set();
|
|
208
|
+
const out = [];
|
|
209
|
+
for (const row of rows) {
|
|
210
|
+
const id = typeof row?.model_id === 'string'
|
|
211
|
+
? row.model_id
|
|
212
|
+
: '';
|
|
213
|
+
if (!id || seen.has(id))
|
|
214
|
+
continue;
|
|
215
|
+
if (options?.chatOnly &&
|
|
216
|
+
aihubmixRowTypes(row).some((t) => AIHUBMIX_MEDIA_GENERATION_TYPES.has(t))) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
seen.add(id);
|
|
220
|
+
const name = typeof row?.model_name === 'string'
|
|
221
|
+
? row.model_name
|
|
222
|
+
: '';
|
|
223
|
+
out.push({ id, label: name || id });
|
|
224
|
+
}
|
|
225
|
+
return out;
|
|
226
|
+
}
|
|
227
|
+
// Aspect -> pixel size for a chat `generate_image` tool. Tuned for the
|
|
228
|
+
// default model (gpt-image-1, which accepts 1024x1024 / 1536x1024 /
|
|
229
|
+
// 1024x1536). A CLI/media renderer path may use a model-aware size resolver
|
|
230
|
+
// instead; this conservative table keeps a tool call from 400-ing on an
|
|
231
|
+
// unsupported size.
|
|
232
|
+
export const AIHUBMIX_IMAGE_ASPECT_TO_SIZE = {
|
|
233
|
+
'1:1': '1024x1024',
|
|
234
|
+
'16:9': '1536x1024',
|
|
235
|
+
'9:16': '1024x1536',
|
|
236
|
+
'4:3': '1536x1024',
|
|
237
|
+
'3:4': '1024x1536',
|
|
238
|
+
};
|
|
239
|
+
//# sourceMappingURL=aihubmix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aihubmix.js","sourceRoot":"","sources":["../../src/providers/aihubmix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { type TurnEndReason } from './turn-end-guard.js';
|
|
2
|
+
export interface AnthropicTextBlockParam {
|
|
3
|
+
readonly type: 'text';
|
|
4
|
+
readonly text: string;
|
|
5
|
+
}
|
|
6
|
+
export interface AnthropicToolUseBlockParam {
|
|
7
|
+
readonly type: 'tool_use';
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly input: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface AnthropicToolResultBlockParam {
|
|
13
|
+
readonly type: 'tool_result';
|
|
14
|
+
readonly tool_use_id: string;
|
|
15
|
+
readonly content: string;
|
|
16
|
+
readonly is_error?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export type AnthropicContentBlockParam = AnthropicTextBlockParam | AnthropicToolUseBlockParam | AnthropicToolResultBlockParam;
|
|
19
|
+
export interface AnthropicMessageParam {
|
|
20
|
+
readonly role: 'user' | 'assistant';
|
|
21
|
+
readonly content: string | readonly AnthropicContentBlockParam[];
|
|
22
|
+
}
|
|
23
|
+
export interface AnthropicToolDef {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
readonly description?: string;
|
|
26
|
+
readonly input_schema: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
export interface AnthropicToolCall {
|
|
29
|
+
readonly id: string;
|
|
30
|
+
readonly name: string;
|
|
31
|
+
readonly input: unknown;
|
|
32
|
+
}
|
|
33
|
+
export interface AnthropicToolResult {
|
|
34
|
+
readonly content: string;
|
|
35
|
+
readonly isError?: boolean;
|
|
36
|
+
}
|
|
37
|
+
/** Host-owned tool execution. This module only knows how to run the wire-protocol loop — what a tool actually *does* is always the caller's business (matching `@jini-ai/http`'s `RunHttpDeps.onStarted`/`db-ops.ts`'s injected `DaemonDbOperations` "the collaborator is always supplied" convention). */
|
|
38
|
+
export type AnthropicToolExecutor = (call: AnthropicToolCall) => Promise<AnthropicToolResult>;
|
|
39
|
+
/** Why a `runAnthropicToolTurn` call ended its event stream. */
|
|
40
|
+
export type AnthropicTurnEndReason = TurnEndReason;
|
|
41
|
+
export type AnthropicTurnEvent = {
|
|
42
|
+
readonly type: 'status';
|
|
43
|
+
readonly label: string;
|
|
44
|
+
} | {
|
|
45
|
+
readonly type: 'text_delta';
|
|
46
|
+
readonly delta: string;
|
|
47
|
+
} | {
|
|
48
|
+
readonly type: 'tool_use';
|
|
49
|
+
readonly id: string;
|
|
50
|
+
readonly name: string;
|
|
51
|
+
readonly input: unknown;
|
|
52
|
+
} | {
|
|
53
|
+
readonly type: 'tool_result';
|
|
54
|
+
readonly toolUseId: string;
|
|
55
|
+
readonly content: string;
|
|
56
|
+
readonly isError: boolean;
|
|
57
|
+
} | {
|
|
58
|
+
readonly type: 'usage';
|
|
59
|
+
readonly usage: Record<string, unknown> | null;
|
|
60
|
+
} | {
|
|
61
|
+
readonly type: 'fabricated_role_marker';
|
|
62
|
+
readonly marker: string;
|
|
63
|
+
readonly messageId: string;
|
|
64
|
+
} | {
|
|
65
|
+
readonly type: 'error';
|
|
66
|
+
readonly message: string;
|
|
67
|
+
readonly code?: string;
|
|
68
|
+
} | {
|
|
69
|
+
readonly type: 'end';
|
|
70
|
+
readonly reason: AnthropicTurnEndReason;
|
|
71
|
+
};
|
|
72
|
+
export interface AnthropicTurnOptions {
|
|
73
|
+
readonly apiKey: string;
|
|
74
|
+
/** Defaults to `https://api.anthropic.com`. Overridable for BYOK-compatible gateways. */
|
|
75
|
+
readonly baseUrl?: string;
|
|
76
|
+
/** Defaults to `2023-06-01`, Anthropic's current stable Messages API version. */
|
|
77
|
+
readonly apiVersion?: string;
|
|
78
|
+
readonly model: string;
|
|
79
|
+
readonly system?: string;
|
|
80
|
+
readonly messages: readonly AnthropicMessageParam[];
|
|
81
|
+
readonly tools?: readonly AnthropicToolDef[];
|
|
82
|
+
readonly maxTokens: number;
|
|
83
|
+
readonly temperature?: number;
|
|
84
|
+
/** Tool-loop iteration ceiling (a single request counts as one iteration once it returns `stop_reason: 'tool_use'`). Defaults to 8 — generous for a real agentic turn, bounded so a misbehaving tool/model pair cannot loop forever. */
|
|
85
|
+
readonly maxToolTurns?: number;
|
|
86
|
+
/** Omit to run a single request with no tool-result feedback loop (pending tool calls are still emitted as `tool_use` events; the turn simply ends after the first response). */
|
|
87
|
+
readonly executeTool?: AnthropicToolExecutor;
|
|
88
|
+
readonly onEvent: (event: AnthropicTurnEvent) => void;
|
|
89
|
+
readonly signal?: AbortSignal;
|
|
90
|
+
/**
|
|
91
|
+
* Caller-supplied extra headers merged onto every request (e.g. an
|
|
92
|
+
* OpenRouter-shaped gateway's `HTTP-Referer`/`X-Title` pair, or a proxy's
|
|
93
|
+
* own routing header). Never hardcode a caller/product identity string
|
|
94
|
+
* here — this is the generalized fix for the confirmed OD product-identity
|
|
95
|
+
* leak documented in this module's header comment.
|
|
96
|
+
*/
|
|
97
|
+
readonly extraHeaders?: Record<string, string>;
|
|
98
|
+
}
|
|
99
|
+
export interface AnthropicTurnResult {
|
|
100
|
+
readonly stopReason: string | null;
|
|
101
|
+
readonly toolTurns: number;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Runs a full Anthropic Messages API turn, including the tool-execution
|
|
105
|
+
* loop when `options.executeTool` is supplied and the model requests tool
|
|
106
|
+
* use. Emits a generic event stream via `options.onEvent` — a caller (e.g.
|
|
107
|
+
* `@jini-ai/http`'s `model-proxy.ts`) adapts those events onto an outbound SSE
|
|
108
|
+
* channel; this module has no knowledge of HTTP/Express.
|
|
109
|
+
*
|
|
110
|
+
* Guarantees exactly one `{type: 'end'}` event per call, regardless of which
|
|
111
|
+
* of the four exit paths (contamination, normal stop, max-tool-turns,
|
|
112
|
+
* request/stream error) triggers it — the fix for OD's confirmed duplicate-
|
|
113
|
+
* `end`-event bug (see module doc).
|
|
114
|
+
*/
|
|
115
|
+
export declare function runAnthropicToolTurn(options: AnthropicTurnOptions): Promise<AnthropicTurnResult>;
|
|
116
|
+
//# sourceMappingURL=anthropic-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-messages.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic-messages.ts"],"names":[],"mappings":"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"}
|