@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,403 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google ADK adapter — agentic, provider-agnostic.
|
|
3
|
+
*
|
|
4
|
+
* Drives `@google/adk` (≥ 1.1.0) end-to-end:
|
|
5
|
+
* 1. Builds an `LlmAgent` with the requested model.
|
|
6
|
+
* 2. Wraps `BuiltinToolExecutor`'s schemas as ADK `FunctionTool`s.
|
|
7
|
+
* 3. Runs the agent through ADK's `Runner` + `InMemorySessionService`.
|
|
8
|
+
* 4. Translates each emitted ADK `Event` into Anvil Stream Format
|
|
9
|
+
* lines (text → emitContent, FunctionCall → emitToolUse,
|
|
10
|
+
* FunctionResponse → emitToolResult).
|
|
11
|
+
*
|
|
12
|
+
* Provider routing:
|
|
13
|
+
* - Model ids prefixed `adk:` (e.g. `adk:claude-sonnet-4-6`,
|
|
14
|
+
* `adk:gemini-2.5-flash`) route to this adapter via the
|
|
15
|
+
* `default-adapter-factory` resolver. Claude models go through the
|
|
16
|
+
* custom `AnthropicLlm` (registered idempotently here); Gemini
|
|
17
|
+
* models flow through ADK's built-in `Gemini` Llm.
|
|
18
|
+
* - The prefix is stripped before being handed to ADK's
|
|
19
|
+
* `LLMRegistry`, which matches against the model id directly
|
|
20
|
+
* (e.g. `^claude-/`).
|
|
21
|
+
*
|
|
22
|
+
* Capabilities are `tier: 'agentic'` because the Runner drives a real
|
|
23
|
+
* tool loop. Per-call `AbortController` + buffered emitContent match
|
|
24
|
+
* the patterns in `OllamaAdapter` / `OpenRouterAdapter` so concurrent
|
|
25
|
+
* spawns (per-repo backend + frontend) don't trample each other.
|
|
26
|
+
*
|
|
27
|
+
* Auth: `ANTHROPIC_API_KEY` for Claude models, `GOOGLE_API_KEY` /
|
|
28
|
+
* `GEMINI_API_KEY` for Gemini.
|
|
29
|
+
*/
|
|
30
|
+
import { randomUUID } from 'node:crypto';
|
|
31
|
+
import { emitContent as emitContentRaw, emitResult, emitToolResult, emitToolUse, } from './stream-format.js';
|
|
32
|
+
import { registerAnthropicLlm } from './adk-anthropic-llm.js';
|
|
33
|
+
import { UpstreamError, bodyLooksRetryable } from './upstream-error.js';
|
|
34
|
+
const PREFIX = 'adk:';
|
|
35
|
+
/**
|
|
36
|
+
* Defuse ADK's prompt template engine for source code we inject.
|
|
37
|
+
*
|
|
38
|
+
* ADK (`@google/adk`'s `instructions.js`) scans the prompt with
|
|
39
|
+
* `/\{+[^{}]*\}+/g`, strips ALL leading `{` and trailing `}`, trims,
|
|
40
|
+
* then if the residue matches `^[a-zA-Z_][a-zA-Z0-9_]*$` (a valid
|
|
41
|
+
* identifier) it tries to resolve it against the session state — and
|
|
42
|
+
* throws `Context variable not found: \`<name>\`` if it isn't there.
|
|
43
|
+
*
|
|
44
|
+
* Doubling braces does NOT help — `{{modalOpen}}` → strip `{+` / `}+`
|
|
45
|
+
* → `modalOpen` → still throws. Anvil doesn't use ADK's templating;
|
|
46
|
+
* we substitute our own `{{...}}` in `prompt-builders.ts:injectTemplateVars`
|
|
47
|
+
* before this call. By the time content lands here, every remaining
|
|
48
|
+
* `{name}` comes from KB-injected source code (TypeScript template
|
|
49
|
+
* literals, JSX expressions, Go struct literals).
|
|
50
|
+
*
|
|
51
|
+
* Insert a zero-width space (U+200B) right after every `{`. ADK still
|
|
52
|
+
* matches the regex but the resulting key starts with ZWSP, which
|
|
53
|
+
* fails the identifier check, so ADK returns `match[0]` unchanged
|
|
54
|
+
* instead of looking up state. ZWSP is invisible to the model — the
|
|
55
|
+
* source code reads identically.
|
|
56
|
+
*
|
|
57
|
+
* Provider-local: only ADK has this templating layer. Other adapters
|
|
58
|
+
* receive the raw prompt unchanged.
|
|
59
|
+
*/
|
|
60
|
+
function escapeAdkBraces(text) {
|
|
61
|
+
return text.replace(/\{/g, '{\u200B');
|
|
62
|
+
}
|
|
63
|
+
const ADK_PRICING = {
|
|
64
|
+
// Claude (Anthropic API)
|
|
65
|
+
'claude-haiku-4-5': [1.0, 5.0],
|
|
66
|
+
'claude-sonnet-4-6': [3.0, 15.0],
|
|
67
|
+
'claude-sonnet-4-7': [3.0, 15.0],
|
|
68
|
+
'claude-opus-4-7': [15.0, 75.0],
|
|
69
|
+
// Gemini
|
|
70
|
+
'gemini-2.5-flash': [0.075, 0.30],
|
|
71
|
+
'gemini-2.5-pro': [1.25, 5.00],
|
|
72
|
+
};
|
|
73
|
+
export class AdkAdapter {
|
|
74
|
+
provider = 'adk';
|
|
75
|
+
capabilities = {
|
|
76
|
+
tier: 'agentic',
|
|
77
|
+
streaming: true,
|
|
78
|
+
toolUse: true,
|
|
79
|
+
fileSystem: true,
|
|
80
|
+
shellExecution: true,
|
|
81
|
+
sessionResume: false,
|
|
82
|
+
cache: 'explicit',
|
|
83
|
+
cacheTtlSeconds: 300,
|
|
84
|
+
structuredOutput: 'tool-shim',
|
|
85
|
+
maxOutputTokens: true,
|
|
86
|
+
};
|
|
87
|
+
abortControllers = new Set();
|
|
88
|
+
supportsModel(modelId) {
|
|
89
|
+
return modelId.startsWith(PREFIX);
|
|
90
|
+
}
|
|
91
|
+
getModelPricing(modelId) {
|
|
92
|
+
const stripped = modelId.startsWith(PREFIX) ? modelId.slice(PREFIX.length) : modelId;
|
|
93
|
+
return ADK_PRICING[stripped] ?? null;
|
|
94
|
+
}
|
|
95
|
+
async checkAvailability() {
|
|
96
|
+
try {
|
|
97
|
+
const adk = await loadAdk();
|
|
98
|
+
const hasAnthropic = !!process.env.ANTHROPIC_API_KEY;
|
|
99
|
+
const hasGemini = !!(process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_GENAI_API_KEY);
|
|
100
|
+
if (!hasAnthropic && !hasGemini) {
|
|
101
|
+
return {
|
|
102
|
+
available: false,
|
|
103
|
+
error: 'Set ANTHROPIC_API_KEY (for adk:claude-*) or GOOGLE_API_KEY / GEMINI_API_KEY (for adk:gemini-*).',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// Touch the registry so we can confirm the package's surface is wired.
|
|
107
|
+
// Throws cleanly if the install is broken.
|
|
108
|
+
void adk.LLMRegistry;
|
|
109
|
+
return { available: true, version: '@google/adk' };
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
return {
|
|
113
|
+
available: false,
|
|
114
|
+
error: `@google/adk is not installed or failed to load: ${err.message}`,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async run(config, output) {
|
|
119
|
+
const startedAt = Date.now();
|
|
120
|
+
const upstreamModel = config.model.startsWith(PREFIX) ? config.model.slice(PREFIX.length) : config.model;
|
|
121
|
+
const adk = await loadAdk();
|
|
122
|
+
// Register Anthropic Llm exactly once per process — idempotent.
|
|
123
|
+
registerAnthropicLlm();
|
|
124
|
+
// Bridge `GOOGLE_API_KEY` → `GEMINI_API_KEY` for users who set the
|
|
125
|
+
// generic Google key. ADK's Gemini class only reads
|
|
126
|
+
// `GEMINI_API_KEY` / `GOOGLE_GENAI_API_KEY`. Don't overwrite if
|
|
127
|
+
// already set.
|
|
128
|
+
if (upstreamModel.startsWith('gemini-') &&
|
|
129
|
+
!process.env.GEMINI_API_KEY &&
|
|
130
|
+
!process.env.GOOGLE_GENAI_API_KEY &&
|
|
131
|
+
process.env.GOOGLE_API_KEY) {
|
|
132
|
+
process.env.GEMINI_API_KEY = process.env.GOOGLE_API_KEY;
|
|
133
|
+
}
|
|
134
|
+
// Per-call AbortController so concurrent spawns can't trample each other.
|
|
135
|
+
const ac = new AbortController();
|
|
136
|
+
this.abortControllers.add(ac);
|
|
137
|
+
const buffered = makeBufferedEmitter(output);
|
|
138
|
+
let totalInputTokens = 0;
|
|
139
|
+
let totalOutputTokens = 0;
|
|
140
|
+
let cacheReadTokens = 0;
|
|
141
|
+
let cacheWriteTokens = 0;
|
|
142
|
+
let toolCallCount = 0;
|
|
143
|
+
let stopReason = 'end_turn';
|
|
144
|
+
let finalText = '';
|
|
145
|
+
try {
|
|
146
|
+
const tools = buildAdkTools(adk, config.toolExecutor, {
|
|
147
|
+
workingDir: config.workingDir,
|
|
148
|
+
abortSignal: ac.signal,
|
|
149
|
+
});
|
|
150
|
+
const agent = new adk.LlmAgent({
|
|
151
|
+
name: 'anvil_adk_agent',
|
|
152
|
+
description: `Anvil agent (${config.persona ?? 'engineer'} stage=${config.stage ?? 'unknown'})`,
|
|
153
|
+
model: upstreamModel,
|
|
154
|
+
// ADK's prompt template engine treats `{varname}` as a context
|
|
155
|
+
// variable lookup and 500s on unresolved vars. Real source code
|
|
156
|
+
// injected via the KB / file reads naturally contains `{...}`
|
|
157
|
+
// (TypeScript template literals like `${adoptionId}`, JSON object
|
|
158
|
+
// literals, JSX expressions). We don't use ADK's templating —
|
|
159
|
+
// our own `injectTemplateVars` already substitutes `{{...}}`
|
|
160
|
+
// before this call. So escape every brace by doubling it; ADK
|
|
161
|
+
// unescapes `{{` → `{` and `}}` → `}` when rendering. Provider-
|
|
162
|
+
// local because no other adapter parses braces this way.
|
|
163
|
+
instruction: escapeAdkBraces(config.projectPrompt ?? ''),
|
|
164
|
+
tools,
|
|
165
|
+
});
|
|
166
|
+
const sessionService = new adk.InMemorySessionService();
|
|
167
|
+
const runner = new adk.Runner({
|
|
168
|
+
appName: 'anvil',
|
|
169
|
+
agent,
|
|
170
|
+
sessionService,
|
|
171
|
+
});
|
|
172
|
+
const userId = config.sessionId ?? `anvil-${randomUUID()}`;
|
|
173
|
+
const events = runner.runEphemeral({
|
|
174
|
+
userId,
|
|
175
|
+
newMessage: { role: 'user', parts: [{ text: escapeAdkBraces(config.userPrompt) }] },
|
|
176
|
+
});
|
|
177
|
+
// Wrap the iteration so plain Errors thrown by the underlying
|
|
178
|
+
// LLM (ADK's stock Gemini class throws plain Error on 429 /
|
|
179
|
+
// quota; our AnthropicLlm already throws UpstreamError directly)
|
|
180
|
+
// can be classified for the dashboard's chain-fallback duck-type
|
|
181
|
+
// check after the loop exits.
|
|
182
|
+
let iterError = null;
|
|
183
|
+
const wrapped = wrapIteratorErrors(events, (e) => { iterError = e; });
|
|
184
|
+
for await (const evt of wrapped) {
|
|
185
|
+
if (ac.signal.aborted)
|
|
186
|
+
break;
|
|
187
|
+
const usage = evt.usageMetadata;
|
|
188
|
+
if (usage) {
|
|
189
|
+
totalInputTokens += usage.promptTokenCount ?? 0;
|
|
190
|
+
totalOutputTokens += usage.candidatesTokenCount ?? 0;
|
|
191
|
+
if (typeof usage.cachedContentTokenCount === 'number') {
|
|
192
|
+
cacheReadTokens += usage.cachedContentTokenCount;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (evt.finishReason)
|
|
196
|
+
stopReason = String(evt.finishReason).toLowerCase();
|
|
197
|
+
// Translate parts → Anvil Stream Format. ADK fires content,
|
|
198
|
+
// function_call, and function_response in separate events so
|
|
199
|
+
// the partitioning is easy.
|
|
200
|
+
const parts = evt.content?.parts ?? [];
|
|
201
|
+
for (const part of parts) {
|
|
202
|
+
if (typeof part.text === 'string' && part.text.length > 0) {
|
|
203
|
+
buffered.push(part.text);
|
|
204
|
+
// Track for the final result line — last text wins as the
|
|
205
|
+
// canonical "answer".
|
|
206
|
+
finalText = part.text;
|
|
207
|
+
}
|
|
208
|
+
else if (part.functionCall) {
|
|
209
|
+
buffered.flush();
|
|
210
|
+
const id = part.functionCall.id ?? randomUUID();
|
|
211
|
+
emitToolUse(output, part.functionCall.name ?? '', (part.functionCall.args ?? {}), id);
|
|
212
|
+
toolCallCount += 1;
|
|
213
|
+
}
|
|
214
|
+
else if (part.functionResponse) {
|
|
215
|
+
buffered.flush();
|
|
216
|
+
const resp = part.functionResponse.response ?? {};
|
|
217
|
+
emitToolResult(output, {
|
|
218
|
+
toolUseId: part.functionResponse.id ?? '',
|
|
219
|
+
content: typeof resp === 'string' ? resp : JSON.stringify(resp),
|
|
220
|
+
isError: typeof resp === 'object' && resp != null && 'error' in resp,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (evt.errorMessage) {
|
|
225
|
+
// Classify the in-band error so the dashboard's chain-fallback
|
|
226
|
+
// can hop to another provider when an LLM hits quota/rate
|
|
227
|
+
// limit but ADK chose to surface it via `errorMessage`
|
|
228
|
+
// instead of throwing.
|
|
229
|
+
const retryable = bodyLooksRetryable(evt.errorMessage);
|
|
230
|
+
throw new UpstreamError(retryable ? 503 : 500, evt.errorMessage, {
|
|
231
|
+
provider: upstreamModel.startsWith('claude-') ? 'anthropic' : 'gemini',
|
|
232
|
+
retryable,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Surface any error the AsyncGenerator threw mid-stream. If the
|
|
237
|
+
// underlying LLM was our AnthropicLlm, it's already an UpstreamError
|
|
238
|
+
// (with `retryable` set correctly). For ADK's stock Gemini path
|
|
239
|
+
// we get a plain Error — classify by message body so we don't
|
|
240
|
+
// lose chain-fallback on 429/quota.
|
|
241
|
+
if (iterError) {
|
|
242
|
+
if (iterError instanceof UpstreamError)
|
|
243
|
+
throw iterError;
|
|
244
|
+
const e = iterError;
|
|
245
|
+
const msg = e?.message ?? String(iterError);
|
|
246
|
+
const retryable = bodyLooksRetryable(msg);
|
|
247
|
+
throw new UpstreamError(retryable ? 429 : 500, msg, {
|
|
248
|
+
provider: upstreamModel.startsWith('claude-') ? 'anthropic' : 'gemini',
|
|
249
|
+
retryable,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
buffered.flush();
|
|
253
|
+
const pricing = this.getModelPricing(config.model);
|
|
254
|
+
const costUsd = pricing
|
|
255
|
+
? (totalInputTokens * pricing[0] + totalOutputTokens * pricing[1]) / 1_000_000
|
|
256
|
+
: 0;
|
|
257
|
+
emitResult(output, {
|
|
258
|
+
text: finalText,
|
|
259
|
+
costUsd,
|
|
260
|
+
inputTokens: totalInputTokens,
|
|
261
|
+
outputTokens: totalOutputTokens,
|
|
262
|
+
durationMs: Date.now() - startedAt,
|
|
263
|
+
sessionId: userId,
|
|
264
|
+
cacheReadTokens,
|
|
265
|
+
cacheWriteTokens,
|
|
266
|
+
});
|
|
267
|
+
return {
|
|
268
|
+
output: finalText,
|
|
269
|
+
inputTokens: totalInputTokens,
|
|
270
|
+
outputTokens: totalOutputTokens,
|
|
271
|
+
costUsd,
|
|
272
|
+
durationMs: Date.now() - startedAt,
|
|
273
|
+
sessionId: userId,
|
|
274
|
+
provider: this.provider,
|
|
275
|
+
model: config.model,
|
|
276
|
+
cacheReadTokens,
|
|
277
|
+
cacheWriteTokens,
|
|
278
|
+
toolCallCount,
|
|
279
|
+
stopReason,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
finally {
|
|
283
|
+
this.abortControllers.delete(ac);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
kill() {
|
|
287
|
+
for (const ac of this.abortControllers) {
|
|
288
|
+
try {
|
|
289
|
+
ac.abort();
|
|
290
|
+
}
|
|
291
|
+
catch { /* ignore */ }
|
|
292
|
+
}
|
|
293
|
+
this.abortControllers.clear();
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// ───────────────────────────────────────────────────────────────────────
|
|
297
|
+
// AsyncGenerator error capture
|
|
298
|
+
// ───────────────────────────────────────────────────────────────────────
|
|
299
|
+
/**
|
|
300
|
+
* Iterates an async iterable and captures any thrown error in `onError`
|
|
301
|
+
* instead of re-throwing it through the loop. The wrapped generator
|
|
302
|
+
* stops yielding on the first throw; the caller checks `iterError`
|
|
303
|
+
* after the for-await exits and re-throws (with classification) so
|
|
304
|
+
* the dashboard's chain-fallback duck-type check sees an UpstreamError.
|
|
305
|
+
*/
|
|
306
|
+
async function* wrapIteratorErrors(src, onError) {
|
|
307
|
+
try {
|
|
308
|
+
for await (const v of src)
|
|
309
|
+
yield v;
|
|
310
|
+
}
|
|
311
|
+
catch (e) {
|
|
312
|
+
onError(e);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
let cachedAdk = null;
|
|
316
|
+
async function loadAdk() {
|
|
317
|
+
if (cachedAdk)
|
|
318
|
+
return cachedAdk;
|
|
319
|
+
// Variable-form import so a TS environment without the package can
|
|
320
|
+
// still type-check this file (the static `import type` above is
|
|
321
|
+
// erased; this dynamic import resolves at runtime).
|
|
322
|
+
const pkg = '@google/adk';
|
|
323
|
+
const mod = (await import(pkg));
|
|
324
|
+
// Silence ADK's default INFO-level logger — it dumps every Runner
|
|
325
|
+
// event (including the full request prompt) to stderr, which floods
|
|
326
|
+
// the dashboard's terminal once ADK is in the chain. Drop to ERROR
|
|
327
|
+
// so genuine failures still surface. Set `ANVIL_ADK_LOG=info|debug`
|
|
328
|
+
// to opt back in when debugging the adapter itself.
|
|
329
|
+
try {
|
|
330
|
+
const m = mod;
|
|
331
|
+
const wantedRaw = (process.env.ANVIL_ADK_LOG ?? 'error').toLowerCase();
|
|
332
|
+
const wanted = wantedRaw === 'debug' ? m.LogLevel?.DEBUG
|
|
333
|
+
: wantedRaw === 'info' ? m.LogLevel?.INFO
|
|
334
|
+
: wantedRaw === 'warn' ? m.LogLevel?.WARN
|
|
335
|
+
: m.LogLevel?.ERROR;
|
|
336
|
+
if (typeof wanted === 'number' && typeof m.setLogLevel === 'function') {
|
|
337
|
+
m.setLogLevel(wanted);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
catch { /* non-fatal — just keeps ADK noisy */ }
|
|
341
|
+
cachedAdk = mod;
|
|
342
|
+
return mod;
|
|
343
|
+
}
|
|
344
|
+
// ───────────────────────────────────────────────────────────────────────
|
|
345
|
+
// Tool translation: BuiltinToolExecutor schemas → ADK FunctionTool[]
|
|
346
|
+
// ───────────────────────────────────────────────────────────────────────
|
|
347
|
+
function buildAdkTools(adk, executor, ctx) {
|
|
348
|
+
if (!executor)
|
|
349
|
+
return [];
|
|
350
|
+
const out = [];
|
|
351
|
+
for (const schema of executor.listSchemas()) {
|
|
352
|
+
out.push(new adk.FunctionTool({
|
|
353
|
+
name: schema.name,
|
|
354
|
+
description: schema.description,
|
|
355
|
+
// ADK's FunctionTool accepts a JSON Schema in `parameters`; ADK
|
|
356
|
+
// forwards it as `parametersJsonSchema` to the underlying LLM
|
|
357
|
+
// (so AnthropicLlm picks it up via collectTools).
|
|
358
|
+
parameters: schema.inputSchema,
|
|
359
|
+
execute: async (input) => {
|
|
360
|
+
const args = (input ?? {});
|
|
361
|
+
const result = await executor.execute({ id: randomUUID(), name: schema.name, arguments: args }, { workingDir: ctx.workingDir, abortSignal: ctx.abortSignal });
|
|
362
|
+
// Anthropic's FunctionResponse expects a JSON-serializable
|
|
363
|
+
// object. We package error / output uniformly so AnthropicLlm
|
|
364
|
+
// can detect failures via the `error` key.
|
|
365
|
+
if (result.isError) {
|
|
366
|
+
return { error: result.content };
|
|
367
|
+
}
|
|
368
|
+
return { output: result.content };
|
|
369
|
+
},
|
|
370
|
+
}));
|
|
371
|
+
}
|
|
372
|
+
return out;
|
|
373
|
+
}
|
|
374
|
+
// ───────────────────────────────────────────────────────────────────────
|
|
375
|
+
// Buffered emitContent — flush on '\n' OR ~80 chars so the dashboard
|
|
376
|
+
// activity log reads as prose, not vertical tokens. Same convention as
|
|
377
|
+
// OpenRouter / Ollama adapters.
|
|
378
|
+
// ───────────────────────────────────────────────────────────────────────
|
|
379
|
+
function makeBufferedEmitter(output) {
|
|
380
|
+
let buf = '';
|
|
381
|
+
const FLUSH_AT = 80;
|
|
382
|
+
function flushNow() {
|
|
383
|
+
if (buf.length === 0)
|
|
384
|
+
return;
|
|
385
|
+
emitContentRaw(output, buf);
|
|
386
|
+
buf = '';
|
|
387
|
+
}
|
|
388
|
+
return {
|
|
389
|
+
push(s) {
|
|
390
|
+
buf += s;
|
|
391
|
+
let nl;
|
|
392
|
+
while ((nl = buf.indexOf('\n')) !== -1) {
|
|
393
|
+
const line = buf.slice(0, nl + 1);
|
|
394
|
+
emitContentRaw(output, line);
|
|
395
|
+
buf = buf.slice(nl + 1);
|
|
396
|
+
}
|
|
397
|
+
if (buf.length >= FLUSH_AT)
|
|
398
|
+
flushNow();
|
|
399
|
+
},
|
|
400
|
+
flush: flushNow,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
//# sourceMappingURL=adk-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adk-adapter.js","sourceRoot":"","sources":["../src/adk-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic-backed `BaseLlm` for Google ADK (`@google/adk` ≥ 1.1.0).
|
|
3
|
+
*
|
|
4
|
+
* ADK's TypeScript SDK ships only Gemini / Apigee adapters out of the
|
|
5
|
+
* box; Python/Java ADK have native multi-provider support. This file
|
|
6
|
+
* plugs Anthropic into ADK's `LLMRegistry` so
|
|
7
|
+
* `new LlmAgent({ model: 'claude-sonnet-4-6', ... })`
|
|
8
|
+
* works inside an ADK `Runner`.
|
|
9
|
+
*
|
|
10
|
+
* Translation map (ADK / @google/genai shape ↔ Anthropic Messages API):
|
|
11
|
+
*
|
|
12
|
+
* Content[] (role='user'|'model') ↔ messages[] (role='user'|'assistant')
|
|
13
|
+
* Part.text ↔ text content block
|
|
14
|
+
* Part.functionCall {id,name,args} ↔ tool_use {id,name,input}
|
|
15
|
+
* Part.functionResponse {id,name,response} ↔ tool_result {tool_use_id,content}
|
|
16
|
+
* FunctionDeclaration ↔ tools[].input_schema
|
|
17
|
+
*
|
|
18
|
+
* Streaming uses Anthropic's SSE event format (`message_start` →
|
|
19
|
+
* `content_block_start/_delta/_stop` → `message_delta` → `message_stop`).
|
|
20
|
+
* We yield one `LlmResponse` per turn-completed assistant message —
|
|
21
|
+
* ADK's `Runner` then dispatches any tool_use parts to the registered
|
|
22
|
+
* `FunctionTool` instances and re-invokes us with the function
|
|
23
|
+
* responses appended.
|
|
24
|
+
*
|
|
25
|
+
* Registration is idempotent — `registerAnthropicLlm()` no-ops on
|
|
26
|
+
* subsequent calls. Call it once before constructing an `LlmAgent`
|
|
27
|
+
* with a `claude-*` model id.
|
|
28
|
+
*/
|
|
29
|
+
import { BaseLlm } from '@google/adk';
|
|
30
|
+
import type { LlmRequest, LlmResponse, BaseLlmConnection } from '@google/adk';
|
|
31
|
+
export declare class AnthropicLlm extends BaseLlm {
|
|
32
|
+
/**
|
|
33
|
+
* Patterns that route to this Llm via `LLMRegistry.resolve(model)`.
|
|
34
|
+
* Matches `claude-sonnet-4-6`, `claude-opus-4-7`, `claude-haiku-4-5`,
|
|
35
|
+
* `claude-3-5-haiku-latest`, etc. Does NOT match OpenRouter slugs
|
|
36
|
+
* (`anthropic/claude-...`) — those go through `OpenRouterAdapter`.
|
|
37
|
+
*
|
|
38
|
+
* Typed as the (mutable) array shape ADK's `LLMRegistry.register`
|
|
39
|
+
* expects — the registry uses `Array<string | RegExp>` for its key,
|
|
40
|
+
* so a `ReadonlyArray` here is rejected at the static side.
|
|
41
|
+
*
|
|
42
|
+
* NOTE: ADK's registry wraps each pattern with `^...$` at resolve
|
|
43
|
+
* time. Our regex MUST cover the full id (no `^` anchor of our own,
|
|
44
|
+
* and a trailing `.*` so the wrapped regex stays well-formed). The
|
|
45
|
+
* source pattern is `claude-` followed by `.*`.
|
|
46
|
+
*/
|
|
47
|
+
static readonly supportedModels: Array<string | RegExp>;
|
|
48
|
+
constructor(params: {
|
|
49
|
+
model: string;
|
|
50
|
+
});
|
|
51
|
+
generateContentAsync(llmRequest: LlmRequest, stream?: boolean, abortSignal?: AbortSignal): AsyncGenerator<LlmResponse, void>;
|
|
52
|
+
connect(_llmRequest: LlmRequest): Promise<BaseLlmConnection>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Register `AnthropicLlm` with ADK's `LLMRegistry`. Safe to call
|
|
56
|
+
* multiple times — only the first call registers.
|
|
57
|
+
*/
|
|
58
|
+
export declare function registerAnthropicLlm(): void;
|
|
59
|
+
//# sourceMappingURL=adk-anthropic-llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adk-anthropic-llm.d.ts","sourceRoot":"","sources":["../src/adk-anthropic-llm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAwE9E,qBAAa,YAAa,SAAQ,OAAO;IACvC;;;;;;;;;;;;;;OAcG;IACH,gBAAyB,eAAe,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAiB;gBAErE,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;IAIrB,oBAAoB,CAClC,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,WAAW,GACxB,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;IA+CrB,OAAO,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAK5E;AAQD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C"}
|