@esankhan3/anvil-agent-core 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/README.md +142 -0
- package/dist/__tests__/adapter-enrichment.test.d.ts +12 -0
- package/dist/__tests__/adapter-enrichment.test.d.ts.map +1 -0
- package/dist/__tests__/adapter-enrichment.test.js +199 -0
- package/dist/__tests__/adapter-enrichment.test.js.map +1 -0
- package/dist/__tests__/adk-anthropic-llm.test.d.ts +18 -0
- package/dist/__tests__/adk-anthropic-llm.test.d.ts.map +1 -0
- package/dist/__tests__/adk-anthropic-llm.test.js +124 -0
- package/dist/__tests__/adk-anthropic-llm.test.js.map +1 -0
- package/dist/__tests__/cost-breakdown.test.d.ts +11 -0
- package/dist/__tests__/cost-breakdown.test.d.ts.map +1 -0
- package/dist/__tests__/cost-breakdown.test.js +163 -0
- package/dist/__tests__/cost-breakdown.test.js.map +1 -0
- package/dist/__tests__/mcp.test.d.ts +13 -0
- package/dist/__tests__/mcp.test.d.ts.map +1 -0
- package/dist/__tests__/mcp.test.js +413 -0
- package/dist/__tests__/mcp.test.js.map +1 -0
- package/dist/__tests__/ollama-adapter-agentic.test.d.ts +15 -0
- package/dist/__tests__/ollama-adapter-agentic.test.d.ts.map +1 -0
- package/dist/__tests__/ollama-adapter-agentic.test.js +268 -0
- package/dist/__tests__/ollama-adapter-agentic.test.js.map +1 -0
- package/dist/__tests__/ollama-adapter-executor.test.d.ts +10 -0
- package/dist/__tests__/ollama-adapter-executor.test.d.ts.map +1 -0
- package/dist/__tests__/ollama-adapter-executor.test.js +95 -0
- package/dist/__tests__/ollama-adapter-executor.test.js.map +1 -0
- package/dist/__tests__/openai-adapter-output.test.d.ts +17 -0
- package/dist/__tests__/openai-adapter-output.test.d.ts.map +1 -0
- package/dist/__tests__/openai-adapter-output.test.js +127 -0
- package/dist/__tests__/openai-adapter-output.test.js.map +1 -0
- package/dist/__tests__/opencode-adapter.test.d.ts +7 -0
- package/dist/__tests__/opencode-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/opencode-adapter.test.js +141 -0
- package/dist/__tests__/opencode-adapter.test.js.map +1 -0
- package/dist/__tests__/openrouter-adapter-agentic.test.d.ts +11 -0
- package/dist/__tests__/openrouter-adapter-agentic.test.d.ts.map +1 -0
- package/dist/__tests__/openrouter-adapter-agentic.test.js +297 -0
- package/dist/__tests__/openrouter-adapter-agentic.test.js.map +1 -0
- package/dist/__tests__/router-circuit-breaker.test.d.ts +6 -0
- package/dist/__tests__/router-circuit-breaker.test.d.ts.map +1 -0
- package/dist/__tests__/router-circuit-breaker.test.js +253 -0
- package/dist/__tests__/router-circuit-breaker.test.js.map +1 -0
- package/dist/__tests__/router-config-loader.test.d.ts +8 -0
- package/dist/__tests__/router-config-loader.test.d.ts.map +1 -0
- package/dist/__tests__/router-config-loader.test.js +172 -0
- package/dist/__tests__/router-config-loader.test.js.map +1 -0
- package/dist/__tests__/router-discovery.test.d.ts +5 -0
- package/dist/__tests__/router-discovery.test.d.ts.map +1 -0
- package/dist/__tests__/router-discovery.test.js +129 -0
- package/dist/__tests__/router-discovery.test.js.map +1 -0
- package/dist/__tests__/router-fallback.test.d.ts +9 -0
- package/dist/__tests__/router-fallback.test.d.ts.map +1 -0
- package/dist/__tests__/router-fallback.test.js +283 -0
- package/dist/__tests__/router-fallback.test.js.map +1 -0
- package/dist/__tests__/router-local-executor.test.d.ts +6 -0
- package/dist/__tests__/router-local-executor.test.d.ts.map +1 -0
- package/dist/__tests__/router-local-executor.test.js +193 -0
- package/dist/__tests__/router-local-executor.test.js.map +1 -0
- package/dist/__tests__/router-model-registry.test.d.ts +8 -0
- package/dist/__tests__/router-model-registry.test.d.ts.map +1 -0
- package/dist/__tests__/router-model-registry.test.js +389 -0
- package/dist/__tests__/router-model-registry.test.js.map +1 -0
- package/dist/__tests__/router-rate-limiter.test.d.ts +8 -0
- package/dist/__tests__/router-rate-limiter.test.d.ts.map +1 -0
- package/dist/__tests__/router-rate-limiter.test.js +128 -0
- package/dist/__tests__/router-rate-limiter.test.js.map +1 -0
- package/dist/__tests__/router-resolver.test.d.ts +7 -0
- package/dist/__tests__/router-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/router-resolver.test.js +110 -0
- package/dist/__tests__/router-resolver.test.js.map +1 -0
- package/dist/__tests__/router-retry.test.d.ts +7 -0
- package/dist/__tests__/router-retry.test.d.ts.map +1 -0
- package/dist/__tests__/router-retry.test.js +302 -0
- package/dist/__tests__/router-retry.test.js.map +1 -0
- package/dist/__tests__/router-scaffold.test.d.ts +11 -0
- package/dist/__tests__/router-scaffold.test.d.ts.map +1 -0
- package/dist/__tests__/router-scaffold.test.js +103 -0
- package/dist/__tests__/router-scaffold.test.js.map +1 -0
- package/dist/__tests__/router-spend-ledger.test.d.ts +8 -0
- package/dist/__tests__/router-spend-ledger.test.d.ts.map +1 -0
- package/dist/__tests__/router-spend-ledger.test.js +227 -0
- package/dist/__tests__/router-spend-ledger.test.js.map +1 -0
- package/dist/__tests__/router-telemetry.test.d.ts +11 -0
- package/dist/__tests__/router-telemetry.test.d.ts.map +1 -0
- package/dist/__tests__/router-telemetry.test.js +173 -0
- package/dist/__tests__/router-telemetry.test.js.map +1 -0
- package/dist/__tests__/single-shot.test.d.ts +12 -0
- package/dist/__tests__/single-shot.test.d.ts.map +1 -0
- package/dist/__tests__/single-shot.test.js +204 -0
- package/dist/__tests__/single-shot.test.js.map +1 -0
- package/dist/__tests__/skills-prompt.test.d.ts +11 -0
- package/dist/__tests__/skills-prompt.test.d.ts.map +1 -0
- package/dist/__tests__/skills-prompt.test.js +208 -0
- package/dist/__tests__/skills-prompt.test.js.map +1 -0
- package/dist/__tests__/skills.test.d.ts +11 -0
- package/dist/__tests__/skills.test.d.ts.map +1 -0
- package/dist/__tests__/skills.test.js +161 -0
- package/dist/__tests__/skills.test.js.map +1 -0
- package/dist/__tests__/telemetry-integration.test.d.ts +12 -0
- package/dist/__tests__/telemetry-integration.test.d.ts.map +1 -0
- package/dist/__tests__/telemetry-integration.test.js +153 -0
- package/dist/__tests__/telemetry-integration.test.js.map +1 -0
- package/dist/__tests__/telemetry.test.d.ts +13 -0
- package/dist/__tests__/telemetry.test.d.ts.map +1 -0
- package/dist/__tests__/telemetry.test.js +161 -0
- package/dist/__tests__/telemetry.test.js.map +1 -0
- package/dist/__tests__/upstream-error.test.d.ts +8 -0
- package/dist/__tests__/upstream-error.test.d.ts.map +1 -0
- package/dist/__tests__/upstream-error.test.js +186 -0
- package/dist/__tests__/upstream-error.test.js.map +1 -0
- package/dist/adk-adapter.d.ts +45 -0
- package/dist/adk-adapter.d.ts.map +1 -0
- package/dist/adk-adapter.js +403 -0
- package/dist/adk-adapter.js.map +1 -0
- package/dist/adk-anthropic-llm.d.ts +59 -0
- package/dist/adk-anthropic-llm.d.ts.map +1 -0
- package/dist/adk-anthropic-llm.js +397 -0
- package/dist/adk-anthropic-llm.js.map +1 -0
- package/dist/agent/index.d.ts +14 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +14 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/session/__tests__/bridge-tool-executor.test.d.ts +10 -0
- package/dist/agent/session/__tests__/bridge-tool-executor.test.d.ts.map +1 -0
- package/dist/agent/session/__tests__/bridge-tool-executor.test.js +152 -0
- package/dist/agent/session/__tests__/bridge-tool-executor.test.js.map +1 -0
- package/dist/agent/session/__tests__/collect-trajectory.test.d.ts +18 -0
- package/dist/agent/session/__tests__/collect-trajectory.test.d.ts.map +1 -0
- package/dist/agent/session/__tests__/collect-trajectory.test.js +208 -0
- package/dist/agent/session/__tests__/collect-trajectory.test.js.map +1 -0
- package/dist/agent/session/__tests__/run-with-agent.test.d.ts +8 -0
- package/dist/agent/session/__tests__/run-with-agent.test.d.ts.map +1 -0
- package/dist/agent/session/__tests__/run-with-agent.test.js +98 -0
- package/dist/agent/session/__tests__/run-with-agent.test.js.map +1 -0
- package/dist/agent/session/__tests__/runtime.test.d.ts +7 -0
- package/dist/agent/session/__tests__/runtime.test.d.ts.map +1 -0
- package/dist/agent/session/__tests__/runtime.test.js +361 -0
- package/dist/agent/session/__tests__/runtime.test.js.map +1 -0
- package/dist/agent/session/__tests__/skills-mcp-spawn.test.d.ts +15 -0
- package/dist/agent/session/__tests__/skills-mcp-spawn.test.d.ts.map +1 -0
- package/dist/agent/session/__tests__/skills-mcp-spawn.test.js +160 -0
- package/dist/agent/session/__tests__/skills-mcp-spawn.test.js.map +1 -0
- package/dist/agent/session/__tests__/spawn-telemetry.test.d.ts +13 -0
- package/dist/agent/session/__tests__/spawn-telemetry.test.d.ts.map +1 -0
- package/dist/agent/session/__tests__/spawn-telemetry.test.js +135 -0
- package/dist/agent/session/__tests__/spawn-telemetry.test.js.map +1 -0
- package/dist/agent/session/__tests__/types.test.d.ts +9 -0
- package/dist/agent/session/__tests__/types.test.d.ts.map +1 -0
- package/dist/agent/session/__tests__/types.test.js +220 -0
- package/dist/agent/session/__tests__/types.test.js.map +1 -0
- package/dist/agent/session/adapter.d.ts +108 -0
- package/dist/agent/session/adapter.d.ts.map +1 -0
- package/dist/agent/session/adapter.js +39 -0
- package/dist/agent/session/adapter.js.map +1 -0
- package/dist/agent/session/collect-trajectory.d.ts +36 -0
- package/dist/agent/session/collect-trajectory.d.ts.map +1 -0
- package/dist/agent/session/collect-trajectory.js +193 -0
- package/dist/agent/session/collect-trajectory.js.map +1 -0
- package/dist/agent/session/default-adapter-factory.d.ts +48 -0
- package/dist/agent/session/default-adapter-factory.d.ts.map +1 -0
- package/dist/agent/session/default-adapter-factory.js +227 -0
- package/dist/agent/session/default-adapter-factory.js.map +1 -0
- package/dist/agent/session/headless-types.d.ts +85 -0
- package/dist/agent/session/headless-types.d.ts.map +1 -0
- package/dist/agent/session/headless-types.js +16 -0
- package/dist/agent/session/headless-types.js.map +1 -0
- package/dist/agent/session/index.d.ts +18 -0
- package/dist/agent/session/index.d.ts.map +1 -0
- package/dist/agent/session/index.js +20 -0
- package/dist/agent/session/index.js.map +1 -0
- package/dist/agent/session/language-model-bridge.d.ts +84 -0
- package/dist/agent/session/language-model-bridge.d.ts.map +1 -0
- package/dist/agent/session/language-model-bridge.js +454 -0
- package/dist/agent/session/language-model-bridge.js.map +1 -0
- package/dist/agent/session/legacy-adapter-types.d.ts +63 -0
- package/dist/agent/session/legacy-adapter-types.d.ts.map +1 -0
- package/dist/agent/session/legacy-adapter-types.js +11 -0
- package/dist/agent/session/legacy-adapter-types.js.map +1 -0
- package/dist/agent/session/run-with-agent.d.ts +36 -0
- package/dist/agent/session/run-with-agent.d.ts.map +1 -0
- package/dist/agent/session/run-with-agent.js +81 -0
- package/dist/agent/session/run-with-agent.js.map +1 -0
- package/dist/agent/session/session-registry.d.ts +71 -0
- package/dist/agent/session/session-registry.d.ts.map +1 -0
- package/dist/agent/session/session-registry.js +209 -0
- package/dist/agent/session/session-registry.js.map +1 -0
- package/dist/agent/session/session.d.ts +76 -0
- package/dist/agent/session/session.d.ts.map +1 -0
- package/dist/agent/session/session.js +327 -0
- package/dist/agent/session/session.js.map +1 -0
- package/dist/agent/session/types.d.ts +230 -0
- package/dist/agent/session/types.d.ts.map +1 -0
- package/dist/agent/session/types.js +44 -0
- package/dist/agent/session/types.js.map +1 -0
- package/dist/checkpoint/__tests__/blob-store.test.d.ts +5 -0
- package/dist/checkpoint/__tests__/blob-store.test.d.ts.map +1 -0
- package/dist/checkpoint/__tests__/blob-store.test.js +82 -0
- package/dist/checkpoint/__tests__/blob-store.test.js.map +1 -0
- package/dist/checkpoint/__tests__/key.test.d.ts +7 -0
- package/dist/checkpoint/__tests__/key.test.d.ts.map +1 -0
- package/dist/checkpoint/__tests__/key.test.js +130 -0
- package/dist/checkpoint/__tests__/key.test.js.map +1 -0
- package/dist/checkpoint/__tests__/runner.test.d.ts +12 -0
- package/dist/checkpoint/__tests__/runner.test.d.ts.map +1 -0
- package/dist/checkpoint/__tests__/runner.test.js +201 -0
- package/dist/checkpoint/__tests__/runner.test.js.map +1 -0
- package/dist/checkpoint/__tests__/store.test.d.ts +6 -0
- package/dist/checkpoint/__tests__/store.test.d.ts.map +1 -0
- package/dist/checkpoint/__tests__/store.test.js +150 -0
- package/dist/checkpoint/__tests__/store.test.js.map +1 -0
- package/dist/checkpoint/blob-store.d.ts +41 -0
- package/dist/checkpoint/blob-store.d.ts.map +1 -0
- package/dist/checkpoint/blob-store.js +119 -0
- package/dist/checkpoint/blob-store.js.map +1 -0
- package/dist/checkpoint/index.d.ts +15 -0
- package/dist/checkpoint/index.d.ts.map +1 -0
- package/dist/checkpoint/index.js +14 -0
- package/dist/checkpoint/index.js.map +1 -0
- package/dist/checkpoint/key.d.ts +39 -0
- package/dist/checkpoint/key.d.ts.map +1 -0
- package/dist/checkpoint/key.js +112 -0
- package/dist/checkpoint/key.js.map +1 -0
- package/dist/checkpoint/runner.d.ts +83 -0
- package/dist/checkpoint/runner.d.ts.map +1 -0
- package/dist/checkpoint/runner.js +146 -0
- package/dist/checkpoint/runner.js.map +1 -0
- package/dist/checkpoint/store.d.ts +91 -0
- package/dist/checkpoint/store.d.ts.map +1 -0
- package/dist/checkpoint/store.js +292 -0
- package/dist/checkpoint/store.js.map +1 -0
- package/dist/checkpoint/types.d.ts +74 -0
- package/dist/checkpoint/types.d.ts.map +1 -0
- package/dist/checkpoint/types.js +16 -0
- package/dist/checkpoint/types.js.map +1 -0
- package/dist/claude-adapter.d.ts +23 -0
- package/dist/claude-adapter.d.ts.map +1 -0
- package/dist/claude-adapter.js +233 -0
- package/dist/claude-adapter.js.map +1 -0
- package/dist/cost.d.ts +67 -0
- package/dist/cost.d.ts.map +1 -0
- package/dist/cost.js +148 -0
- package/dist/cost.js.map +1 -0
- package/dist/data/model-prices.json +39681 -0
- package/dist/fallback-adapter.d.ts +51 -0
- package/dist/fallback-adapter.d.ts.map +1 -0
- package/dist/fallback-adapter.js +116 -0
- package/dist/fallback-adapter.js.map +1 -0
- package/dist/gemini-adapter.d.ts +22 -0
- package/dist/gemini-adapter.d.ts.map +1 -0
- package/dist/gemini-adapter.js +185 -0
- package/dist/gemini-adapter.js.map +1 -0
- package/dist/gemini-cli-adapter.d.ts +24 -0
- package/dist/gemini-cli-adapter.d.ts.map +1 -0
- package/dist/gemini-cli-adapter.js +169 -0
- package/dist/gemini-cli-adapter.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +32 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +92 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config-loader.d.ts +36 -0
- package/dist/mcp/config-loader.d.ts.map +1 -0
- package/dist/mcp/config-loader.js +129 -0
- package/dist/mcp/config-loader.js.map +1 -0
- package/dist/mcp/index.d.ts +12 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tool-merger.d.ts +18 -0
- package/dist/mcp/tool-merger.d.ts.map +1 -0
- package/dist/mcp/tool-merger.js +34 -0
- package/dist/mcp/tool-merger.js.map +1 -0
- package/dist/mcp/types.d.ts +35 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +10 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/ollama-adapter.d.ts +95 -0
- package/dist/ollama-adapter.d.ts.map +1 -0
- package/dist/ollama-adapter.js +404 -0
- package/dist/ollama-adapter.js.map +1 -0
- package/dist/openai-adapter.d.ts +40 -0
- package/dist/openai-adapter.d.ts.map +1 -0
- package/dist/openai-adapter.js +81 -0
- package/dist/openai-adapter.js.map +1 -0
- package/dist/opencode-adapter.d.ts +39 -0
- package/dist/opencode-adapter.d.ts.map +1 -0
- package/dist/opencode-adapter.js +105 -0
- package/dist/opencode-adapter.js.map +1 -0
- package/dist/openrouter-adapter.d.ts +69 -0
- package/dist/openrouter-adapter.d.ts.map +1 -0
- package/dist/openrouter-adapter.js +481 -0
- package/dist/openrouter-adapter.js.map +1 -0
- package/dist/registry.d.ts +55 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +191 -0
- package/dist/registry.js.map +1 -0
- package/dist/router/circuit-breaker.d.ts +57 -0
- package/dist/router/circuit-breaker.d.ts.map +1 -0
- package/dist/router/circuit-breaker.js +110 -0
- package/dist/router/circuit-breaker.js.map +1 -0
- package/dist/router/config-loader.d.ts +43 -0
- package/dist/router/config-loader.d.ts.map +1 -0
- package/dist/router/config-loader.js +155 -0
- package/dist/router/config-loader.js.map +1 -0
- package/dist/router/discovery.d.ts +37 -0
- package/dist/router/discovery.d.ts.map +1 -0
- package/dist/router/discovery.js +54 -0
- package/dist/router/discovery.js.map +1 -0
- package/dist/router/errors.d.ts +39 -0
- package/dist/router/errors.d.ts.map +1 -0
- package/dist/router/errors.js +103 -0
- package/dist/router/errors.js.map +1 -0
- package/dist/router/index.d.ts +31 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +20 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/local-executor.d.ts +62 -0
- package/dist/router/local-executor.d.ts.map +1 -0
- package/dist/router/local-executor.js +161 -0
- package/dist/router/local-executor.js.map +1 -0
- package/dist/router/model-registry.d.ts +90 -0
- package/dist/router/model-registry.d.ts.map +1 -0
- package/dist/router/model-registry.js +242 -0
- package/dist/router/model-registry.js.map +1 -0
- package/dist/router/rate-limiter.d.ts +63 -0
- package/dist/router/rate-limiter.d.ts.map +1 -0
- package/dist/router/rate-limiter.js +136 -0
- package/dist/router/rate-limiter.js.map +1 -0
- package/dist/router/resolver.d.ts +45 -0
- package/dist/router/resolver.d.ts.map +1 -0
- package/dist/router/resolver.js +71 -0
- package/dist/router/resolver.js.map +1 -0
- package/dist/router/retry.d.ts +58 -0
- package/dist/router/retry.d.ts.map +1 -0
- package/dist/router/retry.js +119 -0
- package/dist/router/retry.js.map +1 -0
- package/dist/router/router.d.ts +100 -0
- package/dist/router/router.d.ts.map +1 -0
- package/dist/router/router.js +306 -0
- package/dist/router/router.js.map +1 -0
- package/dist/router/spend-ledger.d.ts +69 -0
- package/dist/router/spend-ledger.d.ts.map +1 -0
- package/dist/router/spend-ledger.js +191 -0
- package/dist/router/spend-ledger.js.map +1 -0
- package/dist/router/telemetry.d.ts +48 -0
- package/dist/router/telemetry.d.ts.map +1 -0
- package/dist/router/telemetry.js +112 -0
- package/dist/router/telemetry.js.map +1 -0
- package/dist/router/types.d.ts +95 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +16 -0
- package/dist/router/types.js.map +1 -0
- package/dist/single-shot.d.ts +60 -0
- package/dist/single-shot.d.ts.map +1 -0
- package/dist/single-shot.js +385 -0
- package/dist/single-shot.js.map +1 -0
- package/dist/skills/activator.d.ts +17 -0
- package/dist/skills/activator.d.ts.map +1 -0
- package/dist/skills/activator.js +24 -0
- package/dist/skills/activator.js.map +1 -0
- package/dist/skills/compose.d.ts +43 -0
- package/dist/skills/compose.d.ts.map +1 -0
- package/dist/skills/compose.js +53 -0
- package/dist/skills/compose.js.map +1 -0
- package/dist/skills/index.d.ts +17 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +16 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +9 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +49 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/parser.d.ts +13 -0
- package/dist/skills/parser.d.ts.map +1 -0
- package/dist/skills/parser.js +60 -0
- package/dist/skills/parser.js.map +1 -0
- package/dist/skills/render.d.ts +11 -0
- package/dist/skills/render.d.ts.map +1 -0
- package/dist/skills/render.js +21 -0
- package/dist/skills/render.js.map +1 -0
- package/dist/skills/resolve-dir.d.ts +20 -0
- package/dist/skills/resolve-dir.d.ts.map +1 -0
- package/dist/skills/resolve-dir.js +30 -0
- package/dist/skills/resolve-dir.js.map +1 -0
- package/dist/skills/tool-policy.d.ts +26 -0
- package/dist/skills/tool-policy.d.ts.map +1 -0
- package/dist/skills/tool-policy.js +33 -0
- package/dist/skills/tool-policy.js.map +1 -0
- package/dist/skills/types.d.ts +42 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +8 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/stream-format.d.ts +100 -0
- package/dist/stream-format.d.ts.map +1 -0
- package/dist/stream-format.js +90 -0
- package/dist/stream-format.js.map +1 -0
- package/dist/telemetry/attributes.d.ts +38 -0
- package/dist/telemetry/attributes.d.ts.map +1 -0
- package/dist/telemetry/attributes.js +39 -0
- package/dist/telemetry/attributes.js.map +1 -0
- package/dist/telemetry/config.d.ts +30 -0
- package/dist/telemetry/config.d.ts.map +1 -0
- package/dist/telemetry/config.js +54 -0
- package/dist/telemetry/config.js.map +1 -0
- package/dist/telemetry/exporters.d.ts +10 -0
- package/dist/telemetry/exporters.d.ts.map +1 -0
- package/dist/telemetry/exporters.js +46 -0
- package/dist/telemetry/exporters.js.map +1 -0
- package/dist/telemetry/index.d.ts +15 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +12 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/instrument.d.ts +36 -0
- package/dist/telemetry/instrument.d.ts.map +1 -0
- package/dist/telemetry/instrument.js +215 -0
- package/dist/telemetry/instrument.js.map +1 -0
- package/dist/telemetry/metrics.d.ts +45 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +186 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/tracer.d.ts +33 -0
- package/dist/telemetry/tracer.d.ts.map +1 -0
- package/dist/telemetry/tracer.js +162 -0
- package/dist/telemetry/tracer.js.map +1 -0
- package/dist/tools/__tests__/builtin.test.d.ts +7 -0
- package/dist/tools/__tests__/builtin.test.d.ts.map +1 -0
- package/dist/tools/__tests__/builtin.test.js +242 -0
- package/dist/tools/__tests__/builtin.test.js.map +1 -0
- package/dist/tools/builtin.d.ts +29 -0
- package/dist/tools/builtin.d.ts.map +1 -0
- package/dist/tools/builtin.js +367 -0
- package/dist/tools/builtin.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/path-guard.d.ts +23 -0
- package/dist/tools/path-guard.d.ts.map +1 -0
- package/dist/tools/path-guard.js +66 -0
- package/dist/tools/path-guard.js.map +1 -0
- package/dist/tools/types.d.ts +45 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +11 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/types.d.ts +249 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/dist/upstream-error.d.ts +64 -0
- package/dist/upstream-error.d.ts.map +1 -0
- package/dist/upstream-error.js +105 -0
- package/dist/upstream-error.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback (chain) ModelAdapter — @deprecated.
|
|
3
|
+
*
|
|
4
|
+
* @deprecated Use `LlmRouter` from `./router/index.js` instead. The router
|
|
5
|
+
* supplies per-error retry policies, rate limits, spend ledger, circuit
|
|
6
|
+
* breakers, and OTel routing spans; this `ModelAdapter`-shaped chain
|
|
7
|
+
* predates all of that.
|
|
8
|
+
*
|
|
9
|
+
* Kept as a no-op shim for backwards compat: it preserves the original
|
|
10
|
+
* behavior (single `maxRetries` knob + fixed delay) while flagging the
|
|
11
|
+
* call site for migration. New callers should construct an `LlmRouter`
|
|
12
|
+
* with a `RouteConfig` instead. Migration recipe:
|
|
13
|
+
*
|
|
14
|
+
* // before:
|
|
15
|
+
* const adapter = new FallbackAdapter([sonnet, haiku], 2, 1000);
|
|
16
|
+
*
|
|
17
|
+
* // after:
|
|
18
|
+
* const router = new LlmRouter({
|
|
19
|
+
* config: {
|
|
20
|
+
* routes: [{
|
|
21
|
+
* tag: 'planner',
|
|
22
|
+
* primary: 'claude-sonnet-4-6',
|
|
23
|
+
* fallbacks: [{ model: 'claude-haiku-4-5-20251001' }],
|
|
24
|
+
* }],
|
|
25
|
+
* retryPolicy: DEFAULT_RETRY_POLICY,
|
|
26
|
+
* },
|
|
27
|
+
* resolver: { resolve: (modelId) => registry.resolveFromModelId(modelId) },
|
|
28
|
+
* });
|
|
29
|
+
* const out = await router.invoke({ tag: 'planner', prompt: '...' });
|
|
30
|
+
*/
|
|
31
|
+
import type { ModelAdapter, ModelAdapterConfig, ModelAdapterResult, ProviderCapabilities, ProviderName } from './types.js';
|
|
32
|
+
/** @deprecated Use {@link LlmRouter} instead. */
|
|
33
|
+
export declare class FallbackAdapter implements ModelAdapter {
|
|
34
|
+
private chain;
|
|
35
|
+
private maxRetries;
|
|
36
|
+
private retryDelayMs;
|
|
37
|
+
/** @deprecated Use {@link LlmRouter} instead. */
|
|
38
|
+
constructor(chain: ModelAdapter[], maxRetries?: number, retryDelayMs?: number);
|
|
39
|
+
get provider(): ProviderName;
|
|
40
|
+
get capabilities(): ProviderCapabilities;
|
|
41
|
+
supportsModel(modelId: string): boolean;
|
|
42
|
+
getModelPricing(modelId: string): [number, number] | null;
|
|
43
|
+
checkAvailability(): Promise<{
|
|
44
|
+
available: boolean;
|
|
45
|
+
version?: string;
|
|
46
|
+
error?: string;
|
|
47
|
+
}>;
|
|
48
|
+
run(config: ModelAdapterConfig, output: NodeJS.WritableStream): Promise<ModelAdapterResult>;
|
|
49
|
+
kill(): void;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=fallback-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallback-adapter.d.ts","sourceRoot":"","sources":["../src/fallback-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACb,MAAM,YAAY,CAAC;AAepB,iDAAiD;AACjD,qBAAa,eAAgB,YAAW,YAAY;IAClD,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAE7B,iDAAiD;gBAE/C,KAAK,EAAE,YAAY,EAAE,EACrB,UAAU,GAAE,MAAU,EACtB,YAAY,GAAE,MAAa;IAU7B,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,IAAI,YAAY,IAAI,oBAAoB,CAEvC;IAED,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIvC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQnD,iBAAiB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAUtF,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkCjG,IAAI,IAAI,IAAI;CAOb"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback (chain) ModelAdapter — @deprecated.
|
|
3
|
+
*
|
|
4
|
+
* @deprecated Use `LlmRouter` from `./router/index.js` instead. The router
|
|
5
|
+
* supplies per-error retry policies, rate limits, spend ledger, circuit
|
|
6
|
+
* breakers, and OTel routing spans; this `ModelAdapter`-shaped chain
|
|
7
|
+
* predates all of that.
|
|
8
|
+
*
|
|
9
|
+
* Kept as a no-op shim for backwards compat: it preserves the original
|
|
10
|
+
* behavior (single `maxRetries` knob + fixed delay) while flagging the
|
|
11
|
+
* call site for migration. New callers should construct an `LlmRouter`
|
|
12
|
+
* with a `RouteConfig` instead. Migration recipe:
|
|
13
|
+
*
|
|
14
|
+
* // before:
|
|
15
|
+
* const adapter = new FallbackAdapter([sonnet, haiku], 2, 1000);
|
|
16
|
+
*
|
|
17
|
+
* // after:
|
|
18
|
+
* const router = new LlmRouter({
|
|
19
|
+
* config: {
|
|
20
|
+
* routes: [{
|
|
21
|
+
* tag: 'planner',
|
|
22
|
+
* primary: 'claude-sonnet-4-6',
|
|
23
|
+
* fallbacks: [{ model: 'claude-haiku-4-5-20251001' }],
|
|
24
|
+
* }],
|
|
25
|
+
* retryPolicy: DEFAULT_RETRY_POLICY,
|
|
26
|
+
* },
|
|
27
|
+
* resolver: { resolve: (modelId) => registry.resolveFromModelId(modelId) },
|
|
28
|
+
* });
|
|
29
|
+
* const out = await router.invoke({ tag: 'planner', prompt: '...' });
|
|
30
|
+
*/
|
|
31
|
+
import { emitContent } from './stream-format.js';
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Helpers
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
function delay(ms) {
|
|
36
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
37
|
+
}
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Adapter
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/** @deprecated Use {@link LlmRouter} instead. */
|
|
42
|
+
export class FallbackAdapter {
|
|
43
|
+
chain;
|
|
44
|
+
maxRetries;
|
|
45
|
+
retryDelayMs;
|
|
46
|
+
/** @deprecated Use {@link LlmRouter} instead. */
|
|
47
|
+
constructor(chain, maxRetries = 1, retryDelayMs = 2000) {
|
|
48
|
+
if (chain.length === 0) {
|
|
49
|
+
throw new Error('FallbackAdapter requires at least one adapter in the chain');
|
|
50
|
+
}
|
|
51
|
+
this.chain = chain;
|
|
52
|
+
this.maxRetries = maxRetries;
|
|
53
|
+
this.retryDelayMs = retryDelayMs;
|
|
54
|
+
}
|
|
55
|
+
get provider() {
|
|
56
|
+
return this.chain[0].provider;
|
|
57
|
+
}
|
|
58
|
+
get capabilities() {
|
|
59
|
+
return this.chain[0].capabilities;
|
|
60
|
+
}
|
|
61
|
+
supportsModel(modelId) {
|
|
62
|
+
return this.chain.some((adapter) => adapter.supportsModel(modelId));
|
|
63
|
+
}
|
|
64
|
+
getModelPricing(modelId) {
|
|
65
|
+
for (const adapter of this.chain) {
|
|
66
|
+
const pricing = adapter.getModelPricing(modelId);
|
|
67
|
+
if (pricing !== null)
|
|
68
|
+
return pricing;
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
async checkAvailability() {
|
|
73
|
+
const errors = [];
|
|
74
|
+
for (const adapter of this.chain) {
|
|
75
|
+
const result = await adapter.checkAvailability();
|
|
76
|
+
if (result.available)
|
|
77
|
+
return result;
|
|
78
|
+
if (result.error)
|
|
79
|
+
errors.push(`${adapter.provider}: ${result.error}`);
|
|
80
|
+
}
|
|
81
|
+
return { available: false, error: errors.join('; ') };
|
|
82
|
+
}
|
|
83
|
+
async run(config, output) {
|
|
84
|
+
const errors = [];
|
|
85
|
+
for (const adapter of this.chain) {
|
|
86
|
+
const maxAttempts = this.maxRetries + 1;
|
|
87
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
88
|
+
try {
|
|
89
|
+
return await adapter.run(config, output);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
93
|
+
errors.push(`${adapter.provider}[attempt ${attempt + 1}]: ${message}`);
|
|
94
|
+
const isLastAttemptForAdapter = attempt === maxAttempts - 1;
|
|
95
|
+
const isLastAdapter = adapter === this.chain[this.chain.length - 1];
|
|
96
|
+
if (isLastAttemptForAdapter && !isLastAdapter) {
|
|
97
|
+
emitContent(output, `[Anvil] Provider ${adapter.provider} failed (${message}), trying next...`);
|
|
98
|
+
}
|
|
99
|
+
else if (!isLastAttemptForAdapter) {
|
|
100
|
+
// Retry the same adapter after a delay
|
|
101
|
+
await delay(this.retryDelayMs);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
throw new Error(`All providers in the fallback chain failed:\n${errors.map((e) => ` - ${e}`).join('\n')}`);
|
|
107
|
+
}
|
|
108
|
+
kill() {
|
|
109
|
+
for (const adapter of this.chain) {
|
|
110
|
+
if (adapter.kill) {
|
|
111
|
+
adapter.kill();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=fallback-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallback-adapter.js","sourceRoot":"","sources":["../src/fallback-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AASH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,iDAAiD;AACjD,MAAM,OAAO,eAAe;IAClB,KAAK,CAAiB;IACtB,UAAU,CAAS;IACnB,YAAY,CAAS;IAE7B,iDAAiD;IACjD,YACE,KAAqB,EACrB,aAAqB,CAAC,EACtB,eAAuB,IAAI;QAE3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,eAAe,CAAC,OAAe;QAC7B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO,OAAO,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACjD,IAAI,MAAM,CAAC,SAAS;gBAAE,OAAO,MAAM,CAAC;YACpC,IAAI,MAAM,CAAC,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAA0B,EAAE,MAA6B;QACjE,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YAExC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;gBACvD,IAAI,CAAC;oBACH,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC3C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACjE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,YAAY,OAAO,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;oBAEvE,MAAM,uBAAuB,GAAG,OAAO,KAAK,WAAW,GAAG,CAAC,CAAC;oBAC5D,MAAM,aAAa,GAAG,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAEpE,IAAI,uBAAuB,IAAI,CAAC,aAAa,EAAE,CAAC;wBAC9C,WAAW,CACT,MAAM,EACN,oBAAoB,OAAO,CAAC,QAAQ,YAAY,OAAO,mBAAmB,CAC3E,CAAC;oBACJ,CAAC;yBAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;wBACpC,uCAAuC;wBACvC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CACb,gDAAgD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3F,CAAC;IACJ,CAAC;IAED,IAAI;QACF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Gemini adapter — HTTP API via native fetch(), no npm dependencies.
|
|
3
|
+
*
|
|
4
|
+
* Auth: GOOGLE_API_KEY or GEMINI_API_KEY env var.
|
|
5
|
+
* Streaming: SSE (alt=sse) with GenerateContentResponse JSON payloads.
|
|
6
|
+
*/
|
|
7
|
+
import type { ModelAdapter, ModelAdapterConfig, ModelAdapterResult, ProviderCapabilities } from './types.js';
|
|
8
|
+
export declare class GeminiAdapter implements ModelAdapter {
|
|
9
|
+
readonly provider: "gemini";
|
|
10
|
+
readonly capabilities: ProviderCapabilities;
|
|
11
|
+
private abortController;
|
|
12
|
+
supportsModel(modelId: string): boolean;
|
|
13
|
+
getModelPricing(modelId: string): [number, number] | null;
|
|
14
|
+
checkAvailability(): Promise<{
|
|
15
|
+
available: boolean;
|
|
16
|
+
version?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
}>;
|
|
19
|
+
kill(): void;
|
|
20
|
+
run(config: ModelAdapterConfig, output: NodeJS.WritableStream): Promise<ModelAdapterResult>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=gemini-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-adapter.d.ts","sourceRoot":"","sources":["../src/gemini-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AA4BpB,qBAAa,aAAc,YAAW,YAAY;IAChD,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IAEtC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAczC;IAEF,OAAO,CAAC,eAAe,CAAgC;IAEvD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIvC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAInD,iBAAiB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAQ5F,IAAI,IAAI,IAAI;IAON,GAAG,CACP,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,OAAO,CAAC,kBAAkB,CAAC;CAyI/B"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Gemini adapter — HTTP API via native fetch(), no npm dependencies.
|
|
3
|
+
*
|
|
4
|
+
* Auth: GOOGLE_API_KEY or GEMINI_API_KEY env var.
|
|
5
|
+
* Streaming: SSE (alt=sse) with GenerateContentResponse JSON payloads.
|
|
6
|
+
*/
|
|
7
|
+
import { emitContent, emitThinking, emitResult } from './stream-format.js';
|
|
8
|
+
import { UpstreamError } from './upstream-error.js';
|
|
9
|
+
const API_BASE = 'https://generativelanguage.googleapis.com/v1beta/models';
|
|
10
|
+
const PRICING = {
|
|
11
|
+
'gemini-2.5-pro': [1.25, 10.0],
|
|
12
|
+
'gemini-2.5-flash': [0.30, 2.50],
|
|
13
|
+
'gemini-2.5-flash-lite': [0.10, 0.40],
|
|
14
|
+
'gemini-2.0-flash': [0.10, 0.40],
|
|
15
|
+
};
|
|
16
|
+
function getApiKey() {
|
|
17
|
+
return process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY;
|
|
18
|
+
}
|
|
19
|
+
function computeCost(modelId, inputTokens, outputTokens) {
|
|
20
|
+
const pricing = PRICING[modelId];
|
|
21
|
+
if (!pricing)
|
|
22
|
+
return 0;
|
|
23
|
+
const [inputPer1M, outputPer1M] = pricing;
|
|
24
|
+
return (inputTokens / 1_000_000) * inputPer1M + (outputTokens / 1_000_000) * outputPer1M;
|
|
25
|
+
}
|
|
26
|
+
export class GeminiAdapter {
|
|
27
|
+
provider = 'gemini';
|
|
28
|
+
capabilities = {
|
|
29
|
+
tier: 'function-calling',
|
|
30
|
+
streaming: true,
|
|
31
|
+
toolUse: true,
|
|
32
|
+
fileSystem: false,
|
|
33
|
+
shellExecution: false,
|
|
34
|
+
sessionResume: false,
|
|
35
|
+
promptCaching: true,
|
|
36
|
+
cache: 'auto',
|
|
37
|
+
cacheTtlSeconds: 600,
|
|
38
|
+
structuredOutput: 'strict',
|
|
39
|
+
// The Gemini HTTP API supports generationConfig.maxOutputTokens; today's
|
|
40
|
+
// adapter does not forward it. Flip to true once the adapter wires it up.
|
|
41
|
+
maxOutputTokens: false,
|
|
42
|
+
};
|
|
43
|
+
abortController = null;
|
|
44
|
+
supportsModel(modelId) {
|
|
45
|
+
return modelId.startsWith('gemini-');
|
|
46
|
+
}
|
|
47
|
+
getModelPricing(modelId) {
|
|
48
|
+
return PRICING[modelId] ?? null;
|
|
49
|
+
}
|
|
50
|
+
async checkAvailability() {
|
|
51
|
+
const key = getApiKey();
|
|
52
|
+
if (!key) {
|
|
53
|
+
return { available: false, error: 'GOOGLE_API_KEY or GEMINI_API_KEY not set' };
|
|
54
|
+
}
|
|
55
|
+
return { available: true };
|
|
56
|
+
}
|
|
57
|
+
kill() {
|
|
58
|
+
if (this.abortController) {
|
|
59
|
+
this.abortController.abort();
|
|
60
|
+
this.abortController = null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async run(config, output) {
|
|
64
|
+
const key = getApiKey();
|
|
65
|
+
if (!key) {
|
|
66
|
+
throw new Error('Gemini API key not found. Set GOOGLE_API_KEY or GEMINI_API_KEY.');
|
|
67
|
+
}
|
|
68
|
+
const { model, userPrompt, projectPrompt } = config;
|
|
69
|
+
const url = `${API_BASE}/${model}:streamGenerateContent?alt=sse&key=${key}`;
|
|
70
|
+
const body = {
|
|
71
|
+
contents: [
|
|
72
|
+
{
|
|
73
|
+
parts: [{ text: userPrompt }],
|
|
74
|
+
role: 'user',
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
if (projectPrompt) {
|
|
79
|
+
body.systemInstruction = { parts: [{ text: projectPrompt }] };
|
|
80
|
+
}
|
|
81
|
+
this.abortController = new AbortController();
|
|
82
|
+
const startMs = Date.now();
|
|
83
|
+
let fullText = '';
|
|
84
|
+
let inputTokens = 0;
|
|
85
|
+
let outputTokens = 0;
|
|
86
|
+
let thinkingTokens = 0;
|
|
87
|
+
let cacheReadTokens = 0;
|
|
88
|
+
const response = await fetch(url, {
|
|
89
|
+
method: 'POST',
|
|
90
|
+
headers: { 'Content-Type': 'application/json' },
|
|
91
|
+
body: JSON.stringify(body),
|
|
92
|
+
signal: this.abortController.signal,
|
|
93
|
+
});
|
|
94
|
+
if (!response.ok) {
|
|
95
|
+
const errBody = await response.text();
|
|
96
|
+
throw new UpstreamError(response.status, errBody, { provider: 'gemini' });
|
|
97
|
+
}
|
|
98
|
+
if (!response.body) {
|
|
99
|
+
throw new UpstreamError(0, 'Gemini API returned no response body', { provider: 'gemini' });
|
|
100
|
+
}
|
|
101
|
+
// Read the SSE stream
|
|
102
|
+
const reader = response.body.getReader();
|
|
103
|
+
const decoder = new TextDecoder();
|
|
104
|
+
let buffer = '';
|
|
105
|
+
while (true) {
|
|
106
|
+
const { done, value } = await reader.read();
|
|
107
|
+
if (done)
|
|
108
|
+
break;
|
|
109
|
+
buffer += decoder.decode(value, { stream: true });
|
|
110
|
+
// Process complete lines
|
|
111
|
+
const lines = buffer.split('\n');
|
|
112
|
+
// Keep the last (potentially incomplete) line in the buffer
|
|
113
|
+
buffer = lines.pop() ?? '';
|
|
114
|
+
for (const line of lines) {
|
|
115
|
+
const trimmed = line.trim();
|
|
116
|
+
if (!trimmed || !trimmed.startsWith('data: '))
|
|
117
|
+
continue;
|
|
118
|
+
const jsonStr = trimmed.slice(6); // strip "data: "
|
|
119
|
+
if (!jsonStr)
|
|
120
|
+
continue;
|
|
121
|
+
let chunk;
|
|
122
|
+
try {
|
|
123
|
+
chunk = JSON.parse(jsonStr);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
continue; // skip malformed lines
|
|
127
|
+
}
|
|
128
|
+
// Extract text content
|
|
129
|
+
const candidates = chunk.candidates;
|
|
130
|
+
if (candidates && candidates.length > 0) {
|
|
131
|
+
const content = candidates[0].content;
|
|
132
|
+
if (content) {
|
|
133
|
+
const parts = content.parts;
|
|
134
|
+
if (parts && parts.length > 0 && typeof parts[0].text === 'string') {
|
|
135
|
+
const text = parts[0].text;
|
|
136
|
+
fullText += text;
|
|
137
|
+
emitContent(output, text);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Track usage (cumulative — last chunk has final counts)
|
|
142
|
+
const usage = chunk.usageMetadata;
|
|
143
|
+
if (usage) {
|
|
144
|
+
if (typeof usage.promptTokenCount === 'number') {
|
|
145
|
+
inputTokens = usage.promptTokenCount;
|
|
146
|
+
}
|
|
147
|
+
if (typeof usage.candidatesTokenCount === 'number') {
|
|
148
|
+
outputTokens = usage.candidatesTokenCount;
|
|
149
|
+
}
|
|
150
|
+
if (typeof usage.thoughtsTokenCount === 'number' && usage.thoughtsTokenCount > 0) {
|
|
151
|
+
if (usage.thoughtsTokenCount > thinkingTokens) {
|
|
152
|
+
emitThinking(output, `[thinking: ${usage.thoughtsTokenCount} tokens]`);
|
|
153
|
+
thinkingTokens = usage.thoughtsTokenCount;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (typeof usage.cachedContentTokenCount === 'number') {
|
|
157
|
+
cacheReadTokens = usage.cachedContentTokenCount;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const durationMs = Date.now() - startMs;
|
|
163
|
+
const costUsd = computeCost(model, inputTokens, outputTokens);
|
|
164
|
+
emitResult(output, {
|
|
165
|
+
text: fullText,
|
|
166
|
+
costUsd,
|
|
167
|
+
inputTokens,
|
|
168
|
+
outputTokens,
|
|
169
|
+
durationMs,
|
|
170
|
+
});
|
|
171
|
+
this.abortController = null;
|
|
172
|
+
return {
|
|
173
|
+
output: fullText,
|
|
174
|
+
inputTokens,
|
|
175
|
+
outputTokens,
|
|
176
|
+
costUsd,
|
|
177
|
+
durationMs,
|
|
178
|
+
provider: 'gemini',
|
|
179
|
+
model,
|
|
180
|
+
cacheReadTokens,
|
|
181
|
+
reasoningTokens: thinkingTokens,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=gemini-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-adapter.js","sourceRoot":"","sources":["../src/gemini-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini CLI ModelAdapter.
|
|
3
|
+
*
|
|
4
|
+
* Spawns the `gemini` CLI binary (from `@google/gemini-cli`).
|
|
5
|
+
* The Gemini CLI does not support `--output-format stream-json`, so we
|
|
6
|
+
* accumulate all stdout text and then emit Anvil Stream Format on completion
|
|
7
|
+
* using the stream-format helpers.
|
|
8
|
+
*/
|
|
9
|
+
import type { ModelAdapter, ModelAdapterConfig, ModelAdapterResult, ProviderCapabilities, ProviderName } from './types.js';
|
|
10
|
+
export declare class GeminiCliAdapter implements ModelAdapter {
|
|
11
|
+
readonly provider: ProviderName;
|
|
12
|
+
readonly capabilities: ProviderCapabilities;
|
|
13
|
+
private child;
|
|
14
|
+
supportsModel(_modelId: string): boolean;
|
|
15
|
+
getModelPricing(modelId: string): [number, number] | null;
|
|
16
|
+
checkAvailability(): Promise<{
|
|
17
|
+
available: boolean;
|
|
18
|
+
version?: string;
|
|
19
|
+
error?: string;
|
|
20
|
+
}>;
|
|
21
|
+
run(config: ModelAdapterConfig, output: NodeJS.WritableStream): Promise<ModelAdapterResult>;
|
|
22
|
+
kill(): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=gemini-cli-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-cli-adapter.d.ts","sourceRoot":"","sources":["../src/gemini-cli-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACb,MAAM,YAAY,CAAC;AA4CpB,qBAAa,gBAAiB,YAAW,YAAY;IACnD,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAgB;IAE/C,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAYzC;IAEF,OAAO,CAAC,KAAK,CAA6B;IAE1C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMxC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAInD,iBAAiB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAUtF,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkGjG,IAAI,IAAI,IAAI;CAMb"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini CLI ModelAdapter.
|
|
3
|
+
*
|
|
4
|
+
* Spawns the `gemini` CLI binary (from `@google/gemini-cli`).
|
|
5
|
+
* The Gemini CLI does not support `--output-format stream-json`, so we
|
|
6
|
+
* accumulate all stdout text and then emit Anvil Stream Format on completion
|
|
7
|
+
* using the stream-format helpers.
|
|
8
|
+
*/
|
|
9
|
+
import { spawn, execSync } from 'node:child_process';
|
|
10
|
+
import { emitContent, emitResult } from './stream-format.js';
|
|
11
|
+
import { UpstreamError, synthesizeStatusFromCli } from './upstream-error.js';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Pricing table — [inputPer1M, outputPer1M]
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
const PRICING = {
|
|
16
|
+
'gemini-2.5-pro': [1.25, 10.0],
|
|
17
|
+
'gemini-2.5-flash': [0.30, 2.50],
|
|
18
|
+
'gemini-2.5-flash-lite': [0.10, 0.40],
|
|
19
|
+
};
|
|
20
|
+
function pricingForModel(modelId) {
|
|
21
|
+
const lower = modelId.toLowerCase();
|
|
22
|
+
for (const [key, pricing] of Object.entries(PRICING)) {
|
|
23
|
+
if (lower.includes(key))
|
|
24
|
+
return pricing;
|
|
25
|
+
}
|
|
26
|
+
// Default to flash pricing
|
|
27
|
+
return PRICING['gemini-2.5-flash'];
|
|
28
|
+
}
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Binary resolution
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
function resolveBinary() {
|
|
33
|
+
return process.env.GEMINI_CLI_BIN ?? 'gemini';
|
|
34
|
+
}
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Token estimation — Gemini CLI doesn't report token counts, so we estimate
|
|
37
|
+
// from character count (roughly 4 chars per token for English text).
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
function estimateTokens(text) {
|
|
40
|
+
return Math.ceil(text.length / 4);
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Adapter
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
export class GeminiCliAdapter {
|
|
46
|
+
provider = 'gemini-cli';
|
|
47
|
+
capabilities = {
|
|
48
|
+
tier: 'agentic',
|
|
49
|
+
streaming: true,
|
|
50
|
+
toolUse: true,
|
|
51
|
+
fileSystem: true,
|
|
52
|
+
shellExecution: true,
|
|
53
|
+
sessionResume: false,
|
|
54
|
+
cache: 'auto',
|
|
55
|
+
cacheTtlSeconds: 300,
|
|
56
|
+
structuredOutput: 'strict',
|
|
57
|
+
// Gemini CLI doesn't expose a max-tokens flag today.
|
|
58
|
+
maxOutputTokens: false,
|
|
59
|
+
};
|
|
60
|
+
child = null;
|
|
61
|
+
supportsModel(_modelId) {
|
|
62
|
+
// Gemini CLI adapter is only used when explicitly configured as provider,
|
|
63
|
+
// not for auto-detection by model name.
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
getModelPricing(modelId) {
|
|
67
|
+
return pricingForModel(modelId);
|
|
68
|
+
}
|
|
69
|
+
async checkAvailability() {
|
|
70
|
+
try {
|
|
71
|
+
const bin = resolveBinary();
|
|
72
|
+
const version = execSync(`${bin} --version`, { encoding: 'utf-8', timeout: 10_000 }).trim();
|
|
73
|
+
return { available: true, version };
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
return { available: false, error: err.message };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async run(config, output) {
|
|
80
|
+
const bin = resolveBinary();
|
|
81
|
+
const startTime = Date.now();
|
|
82
|
+
// ---- Build the prompt --------------------------------------------------
|
|
83
|
+
// Project prompt is prepended to the user prompt since Gemini CLI doesn't
|
|
84
|
+
// have a separate --project-prompt flag.
|
|
85
|
+
const fullPrompt = config.projectPrompt
|
|
86
|
+
? `${config.projectPrompt}\n\n${config.userPrompt}`
|
|
87
|
+
: config.userPrompt;
|
|
88
|
+
// ---- Build args --------------------------------------------------------
|
|
89
|
+
const args = [fullPrompt];
|
|
90
|
+
// ---- Spawn -------------------------------------------------------------
|
|
91
|
+
const child = spawn(bin, args, {
|
|
92
|
+
cwd: config.workingDir,
|
|
93
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
94
|
+
});
|
|
95
|
+
this.child = child;
|
|
96
|
+
// End stdin immediately — prompt is passed via args
|
|
97
|
+
child.stdin.end();
|
|
98
|
+
// Forward stderr to process.stderr while ALSO buffering it so we
|
|
99
|
+
// can scan for retryable upstream conditions (RESOURCE_EXHAUSTED,
|
|
100
|
+
// quota exceeded, rate limit) on a non-zero exit. Capped to 16 KB.
|
|
101
|
+
let stderrBuf = '';
|
|
102
|
+
const STDERR_CAP = 16 * 1024;
|
|
103
|
+
child.stderr.on('data', (chunk) => {
|
|
104
|
+
process.stderr.write(chunk);
|
|
105
|
+
if (stderrBuf.length < STDERR_CAP) {
|
|
106
|
+
stderrBuf += chunk.toString('utf8').slice(0, STDERR_CAP - stderrBuf.length);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
// ---- Accumulate stdout -------------------------------------------------
|
|
110
|
+
const chunks = [];
|
|
111
|
+
child.stdout.on('data', (chunk) => {
|
|
112
|
+
chunks.push(chunk);
|
|
113
|
+
});
|
|
114
|
+
// ---- Wait for exit -----------------------------------------------------
|
|
115
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
116
|
+
child.on('close', (code) => resolve(code ?? 0));
|
|
117
|
+
child.on('error', reject);
|
|
118
|
+
});
|
|
119
|
+
this.child = null;
|
|
120
|
+
const durationMs = Date.now() - startTime;
|
|
121
|
+
const fullText = Buffer.concat(chunks).toString('utf-8');
|
|
122
|
+
if (exitCode !== 0 && !fullText.trim()) {
|
|
123
|
+
// Classify from stderr so the dashboard's chain-fallback can hop
|
|
124
|
+
// to another provider on quota / rate-limit / outage. Gemini CLI
|
|
125
|
+
// surfaces these as "RESOURCE_EXHAUSTED", "Quota exceeded",
|
|
126
|
+
// "rate limit exceeded", "429" in the stderr body.
|
|
127
|
+
const synth = synthesizeStatusFromCli(stderrBuf);
|
|
128
|
+
if (synth) {
|
|
129
|
+
throw new UpstreamError(synth.status, stderrBuf || `Gemini CLI exited with code ${exitCode}`, {
|
|
130
|
+
provider: 'gemini-cli',
|
|
131
|
+
retryable: synth.retryable,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
throw new Error(`Gemini CLI exited with code ${exitCode}${stderrBuf ? `\n${stderrBuf.slice(0, 400)}` : ''}`);
|
|
135
|
+
}
|
|
136
|
+
// ---- Emit Anvil Stream Format ------------------------------------------
|
|
137
|
+
const outputText = fullText.trim();
|
|
138
|
+
// Estimate tokens from character count
|
|
139
|
+
const inputTokens = estimateTokens(fullPrompt);
|
|
140
|
+
const outputTokens = estimateTokens(outputText);
|
|
141
|
+
const pricing = pricingForModel(config.model);
|
|
142
|
+
const costUsd = (inputTokens * pricing[0] + outputTokens * pricing[1]) / 1_000_000;
|
|
143
|
+
emitContent(output, outputText);
|
|
144
|
+
emitResult(output, {
|
|
145
|
+
text: outputText,
|
|
146
|
+
costUsd,
|
|
147
|
+
inputTokens,
|
|
148
|
+
outputTokens,
|
|
149
|
+
durationMs,
|
|
150
|
+
});
|
|
151
|
+
// ---- Build result ------------------------------------------------------
|
|
152
|
+
return {
|
|
153
|
+
output: outputText,
|
|
154
|
+
inputTokens,
|
|
155
|
+
outputTokens,
|
|
156
|
+
costUsd,
|
|
157
|
+
durationMs,
|
|
158
|
+
provider: 'gemini-cli',
|
|
159
|
+
model: config.model,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
kill() {
|
|
163
|
+
if (this.child && !this.child.killed) {
|
|
164
|
+
this.child.kill('SIGTERM');
|
|
165
|
+
this.child = null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=gemini-cli-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-cli-adapter.js","sourceRoot":"","sources":["../src/gemini-cli-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @esankhan3/anvil-agent-core — public barrel.
|
|
3
|
+
*
|
|
4
|
+
* What lives here today (Phase 1):
|
|
5
|
+
* - Shared LLM types: `LanguageModel`, `ModelAdapter`, `ProviderName`,
|
|
6
|
+
* `ProviderTier`, `StreamEvent`, `InvokeResult`, etc.
|
|
7
|
+
* - VERSION constant.
|
|
8
|
+
*
|
|
9
|
+
* What will land in subsequent phases:
|
|
10
|
+
* - Phase 2: stream-format types (NDJSON event shapes)
|
|
11
|
+
* - Phase 3: ProviderRegistry singleton
|
|
12
|
+
* - Phase 4: 7 provider adapters
|
|
13
|
+
* - Phase 5: single-shot wrapper (runLLM / runClaude / runGemini)
|
|
14
|
+
* - Phase 6: agent subprocess machinery (AgentManager, spawn, etc.)
|
|
15
|
+
* - Phase 7: cost table loader
|
|
16
|
+
*/
|
|
17
|
+
export * from './types.js';
|
|
18
|
+
export * from './stream-format.js';
|
|
19
|
+
export * from './registry.js';
|
|
20
|
+
export { ClaudeAdapter } from './claude-adapter.js';
|
|
21
|
+
export { OpenAIAdapter } from './openai-adapter.js';
|
|
22
|
+
export { GeminiAdapter } from './gemini-adapter.js';
|
|
23
|
+
export { OpenRouterAdapter } from './openrouter-adapter.js';
|
|
24
|
+
export { OllamaAdapter } from './ollama-adapter.js';
|
|
25
|
+
export { GeminiCliAdapter } from './gemini-cli-adapter.js';
|
|
26
|
+
export { AdkAdapter } from './adk-adapter.js';
|
|
27
|
+
export { OpenCodeAdapter } from './opencode-adapter.js';
|
|
28
|
+
export { FallbackAdapter } from './fallback-adapter.js';
|
|
29
|
+
export * from './single-shot.js';
|
|
30
|
+
export * from './agent/index.js';
|
|
31
|
+
export * from './checkpoint/index.js';
|
|
32
|
+
export * from './cost.js';
|
|
33
|
+
export * from './telemetry/index.js';
|
|
34
|
+
export * from './skills/index.js';
|
|
35
|
+
export * from './mcp/index.js';
|
|
36
|
+
export * from './router/index.js';
|
|
37
|
+
export * from './tools/index.js';
|
|
38
|
+
export { VERSION } from './version.js';
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|