attocode 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/CHANGELOG.md +48 -0
- package/LICENSE +21 -0
- package/README.md +164 -0
- package/dist/src/adapters.d.ts +83 -0
- package/dist/src/adapters.d.ts.map +1 -0
- package/dist/src/adapters.js +221 -0
- package/dist/src/adapters.js.map +1 -0
- package/dist/src/agent-tools/index.d.ts +7 -0
- package/dist/src/agent-tools/index.d.ts.map +1 -0
- package/dist/src/agent-tools/index.js +8 -0
- package/dist/src/agent-tools/index.js.map +1 -0
- package/dist/src/agent-tools/lsp-file-tools.d.ts +33 -0
- package/dist/src/agent-tools/lsp-file-tools.d.ts.map +1 -0
- package/dist/src/agent-tools/lsp-file-tools.js +200 -0
- package/dist/src/agent-tools/lsp-file-tools.js.map +1 -0
- package/dist/src/agent.d.ts +667 -0
- package/dist/src/agent.d.ts.map +1 -0
- package/dist/src/agent.js +2824 -0
- package/dist/src/agent.js.map +1 -0
- package/dist/src/cli.d.ts +36 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +176 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/handler.d.ts +22 -0
- package/dist/src/commands/handler.d.ts.map +1 -0
- package/dist/src/commands/handler.js +1320 -0
- package/dist/src/commands/handler.js.map +1 -0
- package/dist/src/commands/init.d.ts +7 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +153 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/types.d.ts +70 -0
- package/dist/src/commands/types.d.ts.map +1 -0
- package/dist/src/commands/types.js +8 -0
- package/dist/src/commands/types.js.map +1 -0
- package/dist/src/config.d.ts +22 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +25 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/core/index.d.ts +32 -0
- package/dist/src/core/index.d.ts.map +1 -0
- package/dist/src/core/index.js +35 -0
- package/dist/src/core/index.js.map +1 -0
- package/dist/src/core/process-handlers.d.ts +43 -0
- package/dist/src/core/process-handlers.d.ts.map +1 -0
- package/dist/src/core/process-handlers.js +117 -0
- package/dist/src/core/process-handlers.js.map +1 -0
- package/dist/src/core/protocol/bridge.d.ts +117 -0
- package/dist/src/core/protocol/bridge.d.ts.map +1 -0
- package/dist/src/core/protocol/bridge.js +149 -0
- package/dist/src/core/protocol/bridge.js.map +1 -0
- package/dist/src/core/protocol/index.d.ts +8 -0
- package/dist/src/core/protocol/index.d.ts.map +1 -0
- package/dist/src/core/protocol/index.js +8 -0
- package/dist/src/core/protocol/index.js.map +1 -0
- package/dist/src/core/protocol/types.d.ts +539 -0
- package/dist/src/core/protocol/types.d.ts.map +1 -0
- package/dist/src/core/protocol/types.js +149 -0
- package/dist/src/core/protocol/types.js.map +1 -0
- package/dist/src/core/queues/atomic-counter.d.ts +36 -0
- package/dist/src/core/queues/atomic-counter.d.ts.map +1 -0
- package/dist/src/core/queues/atomic-counter.js +46 -0
- package/dist/src/core/queues/atomic-counter.js.map +1 -0
- package/dist/src/core/queues/event-queue.d.ts +126 -0
- package/dist/src/core/queues/event-queue.d.ts.map +1 -0
- package/dist/src/core/queues/event-queue.js +208 -0
- package/dist/src/core/queues/event-queue.js.map +1 -0
- package/dist/src/core/queues/index.d.ts +12 -0
- package/dist/src/core/queues/index.d.ts.map +1 -0
- package/dist/src/core/queues/index.js +15 -0
- package/dist/src/core/queues/index.js.map +1 -0
- package/dist/src/core/queues/submission-queue.d.ts +116 -0
- package/dist/src/core/queues/submission-queue.d.ts.map +1 -0
- package/dist/src/core/queues/submission-queue.js +236 -0
- package/dist/src/core/queues/submission-queue.js.map +1 -0
- package/dist/src/costs/index.d.ts +22 -0
- package/dist/src/costs/index.d.ts.map +1 -0
- package/dist/src/costs/index.js +22 -0
- package/dist/src/costs/index.js.map +1 -0
- package/dist/src/costs/model-registry.d.ts +80 -0
- package/dist/src/costs/model-registry.d.ts.map +1 -0
- package/dist/src/costs/model-registry.js +237 -0
- package/dist/src/costs/model-registry.js.map +1 -0
- package/dist/src/costs/types.d.ts +50 -0
- package/dist/src/costs/types.d.ts.map +1 -0
- package/dist/src/costs/types.js +2 -0
- package/dist/src/costs/types.js.map +1 -0
- package/dist/src/defaults.d.ts +114 -0
- package/dist/src/defaults.d.ts.map +1 -0
- package/dist/src/defaults.js +457 -0
- package/dist/src/defaults.js.map +1 -0
- package/dist/src/first-run.d.ts +35 -0
- package/dist/src/first-run.d.ts.map +1 -0
- package/dist/src/first-run.js +94 -0
- package/dist/src/first-run.js.map +1 -0
- package/dist/src/hello.d.ts +2 -0
- package/dist/src/hello.d.ts.map +1 -0
- package/dist/src/hello.js +4 -0
- package/dist/src/hello.js.map +1 -0
- package/dist/src/integrations/agent-registry.d.ts +160 -0
- package/dist/src/integrations/agent-registry.d.ts.map +1 -0
- package/dist/src/integrations/agent-registry.js +446 -0
- package/dist/src/integrations/agent-registry.js.map +1 -0
- package/dist/src/integrations/auto-compaction.d.ts +177 -0
- package/dist/src/integrations/auto-compaction.d.ts.map +1 -0
- package/dist/src/integrations/auto-compaction.js +428 -0
- package/dist/src/integrations/auto-compaction.js.map +1 -0
- package/dist/src/integrations/cancellation.d.ts +162 -0
- package/dist/src/integrations/cancellation.d.ts.map +1 -0
- package/dist/src/integrations/cancellation.js +339 -0
- package/dist/src/integrations/cancellation.js.map +1 -0
- package/dist/src/integrations/codebase-context.d.ts +319 -0
- package/dist/src/integrations/codebase-context.d.ts.map +1 -0
- package/dist/src/integrations/codebase-context.js +816 -0
- package/dist/src/integrations/codebase-context.js.map +1 -0
- package/dist/src/integrations/compaction.d.ts +192 -0
- package/dist/src/integrations/compaction.d.ts.map +1 -0
- package/dist/src/integrations/compaction.js +376 -0
- package/dist/src/integrations/compaction.js.map +1 -0
- package/dist/src/integrations/context-engineering.d.ts +246 -0
- package/dist/src/integrations/context-engineering.d.ts.map +1 -0
- package/dist/src/integrations/context-engineering.js +394 -0
- package/dist/src/integrations/context-engineering.js.map +1 -0
- package/dist/src/integrations/diff-utils.d.ts +105 -0
- package/dist/src/integrations/diff-utils.d.ts.map +1 -0
- package/dist/src/integrations/diff-utils.js +497 -0
- package/dist/src/integrations/diff-utils.js.map +1 -0
- package/dist/src/integrations/economics.d.ts +192 -0
- package/dist/src/integrations/economics.d.ts.map +1 -0
- package/dist/src/integrations/economics.js +431 -0
- package/dist/src/integrations/economics.js.map +1 -0
- package/dist/src/integrations/execution-policy.d.ts +189 -0
- package/dist/src/integrations/execution-policy.d.ts.map +1 -0
- package/dist/src/integrations/execution-policy.js +352 -0
- package/dist/src/integrations/execution-policy.js.map +1 -0
- package/dist/src/integrations/file-change-tracker.d.ts +161 -0
- package/dist/src/integrations/file-change-tracker.d.ts.map +1 -0
- package/dist/src/integrations/file-change-tracker.js +520 -0
- package/dist/src/integrations/file-change-tracker.js.map +1 -0
- package/dist/src/integrations/hierarchical-config.d.ts +212 -0
- package/dist/src/integrations/hierarchical-config.d.ts.map +1 -0
- package/dist/src/integrations/hierarchical-config.js +484 -0
- package/dist/src/integrations/hierarchical-config.js.map +1 -0
- package/dist/src/integrations/hooks.d.ts +114 -0
- package/dist/src/integrations/hooks.d.ts.map +1 -0
- package/dist/src/integrations/hooks.js +326 -0
- package/dist/src/integrations/hooks.js.map +1 -0
- package/dist/src/integrations/ignore.d.ts +143 -0
- package/dist/src/integrations/ignore.d.ts.map +1 -0
- package/dist/src/integrations/ignore.js +417 -0
- package/dist/src/integrations/ignore.js.map +1 -0
- package/dist/src/integrations/image-renderer.d.ts +119 -0
- package/dist/src/integrations/image-renderer.d.ts.map +1 -0
- package/dist/src/integrations/image-renderer.js +306 -0
- package/dist/src/integrations/image-renderer.js.map +1 -0
- package/dist/src/integrations/index.d.ts +42 -0
- package/dist/src/integrations/index.d.ts.map +1 -0
- package/dist/src/integrations/index.js +73 -0
- package/dist/src/integrations/index.js.map +1 -0
- package/dist/src/integrations/lsp.d.ts +196 -0
- package/dist/src/integrations/lsp.d.ts.map +1 -0
- package/dist/src/integrations/lsp.js +582 -0
- package/dist/src/integrations/lsp.js.map +1 -0
- package/dist/src/integrations/mcp-client.d.ts +270 -0
- package/dist/src/integrations/mcp-client.d.ts.map +1 -0
- package/dist/src/integrations/mcp-client.js +698 -0
- package/dist/src/integrations/mcp-client.js.map +1 -0
- package/dist/src/integrations/mcp-tool-search.d.ts +77 -0
- package/dist/src/integrations/mcp-tool-search.d.ts.map +1 -0
- package/dist/src/integrations/mcp-tool-search.js +220 -0
- package/dist/src/integrations/mcp-tool-search.js.map +1 -0
- package/dist/src/integrations/memory.d.ts +108 -0
- package/dist/src/integrations/memory.d.ts.map +1 -0
- package/dist/src/integrations/memory.js +288 -0
- package/dist/src/integrations/memory.js.map +1 -0
- package/dist/src/integrations/multi-agent.d.ts +150 -0
- package/dist/src/integrations/multi-agent.d.ts.map +1 -0
- package/dist/src/integrations/multi-agent.js +306 -0
- package/dist/src/integrations/multi-agent.js.map +1 -0
- package/dist/src/integrations/observability.d.ts +162 -0
- package/dist/src/integrations/observability.d.ts.map +1 -0
- package/dist/src/integrations/observability.js +406 -0
- package/dist/src/integrations/observability.js.map +1 -0
- package/dist/src/integrations/openrouter-pricing.d.ts +42 -0
- package/dist/src/integrations/openrouter-pricing.d.ts.map +1 -0
- package/dist/src/integrations/openrouter-pricing.js +124 -0
- package/dist/src/integrations/openrouter-pricing.js.map +1 -0
- package/dist/src/integrations/pending-plan.d.ts +171 -0
- package/dist/src/integrations/pending-plan.d.ts.map +1 -0
- package/dist/src/integrations/pending-plan.js +244 -0
- package/dist/src/integrations/pending-plan.js.map +1 -0
- package/dist/src/integrations/persistence.d.ts +48 -0
- package/dist/src/integrations/persistence.d.ts.map +1 -0
- package/dist/src/integrations/persistence.js +196 -0
- package/dist/src/integrations/persistence.js.map +1 -0
- package/dist/src/integrations/planning.d.ts +96 -0
- package/dist/src/integrations/planning.d.ts.map +1 -0
- package/dist/src/integrations/planning.js +338 -0
- package/dist/src/integrations/planning.js.map +1 -0
- package/dist/src/integrations/pty-shell.d.ts +169 -0
- package/dist/src/integrations/pty-shell.d.ts.map +1 -0
- package/dist/src/integrations/pty-shell.js +367 -0
- package/dist/src/integrations/pty-shell.js.map +1 -0
- package/dist/src/integrations/react.d.ts +139 -0
- package/dist/src/integrations/react.d.ts.map +1 -0
- package/dist/src/integrations/react.js +273 -0
- package/dist/src/integrations/react.js.map +1 -0
- package/dist/src/integrations/resources.d.ts +177 -0
- package/dist/src/integrations/resources.d.ts.map +1 -0
- package/dist/src/integrations/resources.js +311 -0
- package/dist/src/integrations/resources.js.map +1 -0
- package/dist/src/integrations/result-synthesizer.d.ts +389 -0
- package/dist/src/integrations/result-synthesizer.d.ts.map +1 -0
- package/dist/src/integrations/result-synthesizer.js +951 -0
- package/dist/src/integrations/result-synthesizer.js.map +1 -0
- package/dist/src/integrations/routing.d.ts +117 -0
- package/dist/src/integrations/routing.d.ts.map +1 -0
- package/dist/src/integrations/routing.js +347 -0
- package/dist/src/integrations/routing.js.map +1 -0
- package/dist/src/integrations/rules.d.ts +131 -0
- package/dist/src/integrations/rules.d.ts.map +1 -0
- package/dist/src/integrations/rules.js +284 -0
- package/dist/src/integrations/rules.js.map +1 -0
- package/dist/src/integrations/safety.d.ts +142 -0
- package/dist/src/integrations/safety.d.ts.map +1 -0
- package/dist/src/integrations/safety.js +342 -0
- package/dist/src/integrations/safety.js.map +1 -0
- package/dist/src/integrations/sandbox/basic.d.ts +74 -0
- package/dist/src/integrations/sandbox/basic.d.ts.map +1 -0
- package/dist/src/integrations/sandbox/basic.js +310 -0
- package/dist/src/integrations/sandbox/basic.js.map +1 -0
- package/dist/src/integrations/sandbox/docker.d.ts +94 -0
- package/dist/src/integrations/sandbox/docker.d.ts.map +1 -0
- package/dist/src/integrations/sandbox/docker.js +293 -0
- package/dist/src/integrations/sandbox/docker.js.map +1 -0
- package/dist/src/integrations/sandbox/index.d.ts +182 -0
- package/dist/src/integrations/sandbox/index.d.ts.map +1 -0
- package/dist/src/integrations/sandbox/index.js +382 -0
- package/dist/src/integrations/sandbox/index.js.map +1 -0
- package/dist/src/integrations/sandbox/landlock.d.ts +59 -0
- package/dist/src/integrations/sandbox/landlock.d.ts.map +1 -0
- package/dist/src/integrations/sandbox/landlock.js +326 -0
- package/dist/src/integrations/sandbox/landlock.js.map +1 -0
- package/dist/src/integrations/sandbox/seatbelt.d.ts +68 -0
- package/dist/src/integrations/sandbox/seatbelt.d.ts.map +1 -0
- package/dist/src/integrations/sandbox/seatbelt.js +298 -0
- package/dist/src/integrations/sandbox/seatbelt.js.map +1 -0
- package/dist/src/integrations/semantic-cache.d.ts +178 -0
- package/dist/src/integrations/semantic-cache.d.ts.map +1 -0
- package/dist/src/integrations/semantic-cache.js +372 -0
- package/dist/src/integrations/semantic-cache.js.map +1 -0
- package/dist/src/integrations/session-store.d.ts +183 -0
- package/dist/src/integrations/session-store.d.ts.map +1 -0
- package/dist/src/integrations/session-store.js +345 -0
- package/dist/src/integrations/session-store.js.map +1 -0
- package/dist/src/integrations/shared-blackboard.d.ts +403 -0
- package/dist/src/integrations/shared-blackboard.d.ts.map +1 -0
- package/dist/src/integrations/shared-blackboard.js +710 -0
- package/dist/src/integrations/shared-blackboard.js.map +1 -0
- package/dist/src/integrations/skills.d.ts +171 -0
- package/dist/src/integrations/skills.d.ts.map +1 -0
- package/dist/src/integrations/skills.js +403 -0
- package/dist/src/integrations/skills.js.map +1 -0
- package/dist/src/integrations/smart-decomposer.d.ts +322 -0
- package/dist/src/integrations/smart-decomposer.d.ts.map +1 -0
- package/dist/src/integrations/smart-decomposer.js +856 -0
- package/dist/src/integrations/smart-decomposer.js.map +1 -0
- package/dist/src/integrations/sourcegraph.d.ts +169 -0
- package/dist/src/integrations/sourcegraph.d.ts.map +1 -0
- package/dist/src/integrations/sourcegraph.js +379 -0
- package/dist/src/integrations/sourcegraph.js.map +1 -0
- package/dist/src/integrations/sqlite-store.d.ts +518 -0
- package/dist/src/integrations/sqlite-store.d.ts.map +1 -0
- package/dist/src/integrations/sqlite-store.js +1423 -0
- package/dist/src/integrations/sqlite-store.js.map +1 -0
- package/dist/src/integrations/streaming.d.ts +102 -0
- package/dist/src/integrations/streaming.d.ts.map +1 -0
- package/dist/src/integrations/streaming.js +362 -0
- package/dist/src/integrations/streaming.js.map +1 -0
- package/dist/src/integrations/thread-manager.d.ts +199 -0
- package/dist/src/integrations/thread-manager.d.ts.map +1 -0
- package/dist/src/integrations/thread-manager.js +357 -0
- package/dist/src/integrations/thread-manager.js.map +1 -0
- package/dist/src/main.d.ts +26 -0
- package/dist/src/main.d.ts.map +1 -0
- package/dist/src/main.js +170 -0
- package/dist/src/main.js.map +1 -0
- package/dist/src/modes/index.d.ts +10 -0
- package/dist/src/modes/index.d.ts.map +1 -0
- package/dist/src/modes/index.js +10 -0
- package/dist/src/modes/index.js.map +1 -0
- package/dist/src/modes/repl.d.ts +19 -0
- package/dist/src/modes/repl.d.ts.map +1 -0
- package/dist/src/modes/repl.js +393 -0
- package/dist/src/modes/repl.js.map +1 -0
- package/dist/src/modes/tui.d.ts +29 -0
- package/dist/src/modes/tui.d.ts.map +1 -0
- package/dist/src/modes/tui.js +272 -0
- package/dist/src/modes/tui.js.map +1 -0
- package/dist/src/modes.d.ts +179 -0
- package/dist/src/modes.d.ts.map +1 -0
- package/dist/src/modes.js +385 -0
- package/dist/src/modes.js.map +1 -0
- package/dist/src/observability/tracer.d.ts +111 -0
- package/dist/src/observability/tracer.d.ts.map +1 -0
- package/dist/src/observability/tracer.js +300 -0
- package/dist/src/observability/tracer.js.map +1 -0
- package/dist/src/observability/types.d.ts +271 -0
- package/dist/src/observability/types.d.ts.map +1 -0
- package/dist/src/observability/types.js +24 -0
- package/dist/src/observability/types.js.map +1 -0
- package/dist/src/paths.d.ts +101 -0
- package/dist/src/paths.d.ts.map +1 -0
- package/dist/src/paths.js +148 -0
- package/dist/src/paths.js.map +1 -0
- package/dist/src/persistence/index.d.ts +38 -0
- package/dist/src/persistence/index.d.ts.map +1 -0
- package/dist/src/persistence/index.js +48 -0
- package/dist/src/persistence/index.js.map +1 -0
- package/dist/src/persistence/migrator.d.ts +135 -0
- package/dist/src/persistence/migrator.d.ts.map +1 -0
- package/dist/src/persistence/migrator.js +303 -0
- package/dist/src/persistence/migrator.js.map +1 -0
- package/dist/src/persistence/schema.d.ts +101 -0
- package/dist/src/persistence/schema.d.ts.map +1 -0
- package/dist/src/persistence/schema.js +395 -0
- package/dist/src/persistence/schema.js.map +1 -0
- package/dist/src/providers/adapters/anthropic.d.ts +20 -0
- package/dist/src/providers/adapters/anthropic.d.ts.map +1 -0
- package/dist/src/providers/adapters/anthropic.js +124 -0
- package/dist/src/providers/adapters/anthropic.js.map +1 -0
- package/dist/src/providers/adapters/mock.d.ts +25 -0
- package/dist/src/providers/adapters/mock.d.ts.map +1 -0
- package/dist/src/providers/adapters/mock.js +133 -0
- package/dist/src/providers/adapters/mock.js.map +1 -0
- package/dist/src/providers/adapters/openai.d.ts +21 -0
- package/dist/src/providers/adapters/openai.d.ts.map +1 -0
- package/dist/src/providers/adapters/openai.js +126 -0
- package/dist/src/providers/adapters/openai.js.map +1 -0
- package/dist/src/providers/adapters/openrouter.d.ts +49 -0
- package/dist/src/providers/adapters/openrouter.d.ts.map +1 -0
- package/dist/src/providers/adapters/openrouter.js +363 -0
- package/dist/src/providers/adapters/openrouter.js.map +1 -0
- package/dist/src/providers/provider.d.ts +54 -0
- package/dist/src/providers/provider.d.ts.map +1 -0
- package/dist/src/providers/provider.js +111 -0
- package/dist/src/providers/provider.js.map +1 -0
- package/dist/src/providers/resilient-fetch.d.ts +99 -0
- package/dist/src/providers/resilient-fetch.d.ts.map +1 -0
- package/dist/src/providers/resilient-fetch.js +208 -0
- package/dist/src/providers/resilient-fetch.js.map +1 -0
- package/dist/src/providers/types.d.ts +227 -0
- package/dist/src/providers/types.d.ts.map +1 -0
- package/dist/src/providers/types.js +24 -0
- package/dist/src/providers/types.js.map +1 -0
- package/dist/src/session-picker.d.ts +28 -0
- package/dist/src/session-picker.d.ts.map +1 -0
- package/dist/src/session-picker.js +256 -0
- package/dist/src/session-picker.js.map +1 -0
- package/dist/src/test-sqlite.d.ts +2 -0
- package/dist/src/test-sqlite.d.ts.map +1 -0
- package/dist/src/test-sqlite.js +114 -0
- package/dist/src/test-sqlite.js.map +1 -0
- package/dist/src/tools/agent.d.ts +44 -0
- package/dist/src/tools/agent.d.ts.map +1 -0
- package/dist/src/tools/agent.js +110 -0
- package/dist/src/tools/agent.js.map +1 -0
- package/dist/src/tools/bash.d.ts +52 -0
- package/dist/src/tools/bash.d.ts.map +1 -0
- package/dist/src/tools/bash.js +141 -0
- package/dist/src/tools/bash.js.map +1 -0
- package/dist/src/tools/file.d.ts +47 -0
- package/dist/src/tools/file.d.ts.map +1 -0
- package/dist/src/tools/file.js +263 -0
- package/dist/src/tools/file.js.map +1 -0
- package/dist/src/tools/permission.d.ts +43 -0
- package/dist/src/tools/permission.d.ts.map +1 -0
- package/dist/src/tools/permission.js +216 -0
- package/dist/src/tools/permission.js.map +1 -0
- package/dist/src/tools/registry.d.ts +63 -0
- package/dist/src/tools/registry.d.ts.map +1 -0
- package/dist/src/tools/registry.js +250 -0
- package/dist/src/tools/registry.js.map +1 -0
- package/dist/src/tools/standard.d.ts +57 -0
- package/dist/src/tools/standard.d.ts.map +1 -0
- package/dist/src/tools/standard.js +113 -0
- package/dist/src/tools/standard.js.map +1 -0
- package/dist/src/tools/types.d.ts +146 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +28 -0
- package/dist/src/tools/types.js.map +1 -0
- package/dist/src/tools/undo.d.ts +71 -0
- package/dist/src/tools/undo.d.ts.map +1 -0
- package/dist/src/tools/undo.js +123 -0
- package/dist/src/tools/undo.js.map +1 -0
- package/dist/src/tracing/cache-boundary-tracker.d.ts +189 -0
- package/dist/src/tracing/cache-boundary-tracker.d.ts.map +1 -0
- package/dist/src/tracing/cache-boundary-tracker.js +411 -0
- package/dist/src/tracing/cache-boundary-tracker.js.map +1 -0
- package/dist/src/tracing/trace-collector.d.ts +274 -0
- package/dist/src/tracing/trace-collector.d.ts.map +1 -0
- package/dist/src/tracing/trace-collector.js +727 -0
- package/dist/src/tracing/trace-collector.js.map +1 -0
- package/dist/src/tracing/types.d.ts +657 -0
- package/dist/src/tracing/types.d.ts.map +1 -0
- package/dist/src/tracing/types.js +39 -0
- package/dist/src/tracing/types.js.map +1 -0
- package/dist/src/tricks/failure-evidence.d.ts +268 -0
- package/dist/src/tricks/failure-evidence.d.ts.map +1 -0
- package/dist/src/tricks/failure-evidence.js +544 -0
- package/dist/src/tricks/failure-evidence.js.map +1 -0
- package/dist/src/tricks/json-utils.d.ts +77 -0
- package/dist/src/tricks/json-utils.d.ts.map +1 -0
- package/dist/src/tricks/json-utils.js +247 -0
- package/dist/src/tricks/json-utils.js.map +1 -0
- package/dist/src/tricks/kv-cache-context.d.ts +227 -0
- package/dist/src/tricks/kv-cache-context.d.ts.map +1 -0
- package/dist/src/tricks/kv-cache-context.js +377 -0
- package/dist/src/tricks/kv-cache-context.js.map +1 -0
- package/dist/src/tricks/recitation.d.ts +208 -0
- package/dist/src/tricks/recitation.d.ts.map +1 -0
- package/dist/src/tricks/recitation.js +374 -0
- package/dist/src/tricks/recitation.js.map +1 -0
- package/dist/src/tricks/reversible-compaction.d.ts +251 -0
- package/dist/src/tricks/reversible-compaction.d.ts.map +1 -0
- package/dist/src/tricks/reversible-compaction.js +555 -0
- package/dist/src/tricks/reversible-compaction.js.map +1 -0
- package/dist/src/tricks/serialization-diversity.d.ts +197 -0
- package/dist/src/tricks/serialization-diversity.d.ts.map +1 -0
- package/dist/src/tricks/serialization-diversity.js +460 -0
- package/dist/src/tricks/serialization-diversity.js.map +1 -0
- package/dist/src/tui/app.d.ts +42 -0
- package/dist/src/tui/app.d.ts.map +1 -0
- package/dist/src/tui/app.js +1076 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/components/ApprovalDialog.d.ts +28 -0
- package/dist/src/tui/components/ApprovalDialog.d.ts.map +1 -0
- package/dist/src/tui/components/ApprovalDialog.js +59 -0
- package/dist/src/tui/components/ApprovalDialog.js.map +1 -0
- package/dist/src/tui/components/InputArea.d.ts +35 -0
- package/dist/src/tui/components/InputArea.d.ts.map +1 -0
- package/dist/src/tui/components/InputArea.js +144 -0
- package/dist/src/tui/components/InputArea.js.map +1 -0
- package/dist/src/tui/components/MessageItem.d.ts +28 -0
- package/dist/src/tui/components/MessageItem.d.ts.map +1 -0
- package/dist/src/tui/components/MessageItem.js +27 -0
- package/dist/src/tui/components/MessageItem.js.map +1 -0
- package/dist/src/tui/components/ScrollableBox.d.ts +41 -0
- package/dist/src/tui/components/ScrollableBox.d.ts.map +1 -0
- package/dist/src/tui/components/ScrollableBox.js +101 -0
- package/dist/src/tui/components/ScrollableBox.js.map +1 -0
- package/dist/src/tui/components/ToolCallItem.d.ts +33 -0
- package/dist/src/tui/components/ToolCallItem.d.ts.map +1 -0
- package/dist/src/tui/components/ToolCallItem.js +91 -0
- package/dist/src/tui/components/ToolCallItem.js.map +1 -0
- package/dist/src/tui/components/index.d.ts +13 -0
- package/dist/src/tui/components/index.d.ts.map +1 -0
- package/dist/src/tui/components/index.js +15 -0
- package/dist/src/tui/components/index.js.map +1 -0
- package/dist/src/tui/event-display.d.ts +19 -0
- package/dist/src/tui/event-display.d.ts.map +1 -0
- package/dist/src/tui/event-display.js +178 -0
- package/dist/src/tui/event-display.js.map +1 -0
- package/dist/src/tui/index.d.ts +105 -0
- package/dist/src/tui/index.d.ts.map +1 -0
- package/dist/src/tui/index.js +214 -0
- package/dist/src/tui/index.js.map +1 -0
- package/dist/src/tui/input/CommandPalette.d.ts +55 -0
- package/dist/src/tui/input/CommandPalette.d.ts.map +1 -0
- package/dist/src/tui/input/CommandPalette.js +135 -0
- package/dist/src/tui/input/CommandPalette.js.map +1 -0
- package/dist/src/tui/input/index.d.ts +7 -0
- package/dist/src/tui/input/index.d.ts.map +1 -0
- package/dist/src/tui/input/index.js +7 -0
- package/dist/src/tui/input/index.js.map +1 -0
- package/dist/src/tui/theme/index.d.ts +45 -0
- package/dist/src/tui/theme/index.d.ts.map +1 -0
- package/dist/src/tui/theme/index.js +215 -0
- package/dist/src/tui/theme/index.js.map +1 -0
- package/dist/src/tui/types.d.ts +214 -0
- package/dist/src/tui/types.d.ts.map +1 -0
- package/dist/src/tui/types.js +27 -0
- package/dist/src/tui/types.js.map +1 -0
- package/dist/src/types.d.ts +905 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +9 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter Provider Adapter
|
|
3
|
+
*
|
|
4
|
+
* Adapts the OpenRouter API (OpenAI-compatible) to our LLMProvider interface.
|
|
5
|
+
* OpenRouter provides access to 100+ models from various providers through
|
|
6
|
+
* a single API key.
|
|
7
|
+
*/
|
|
8
|
+
import { ProviderError } from '../types.js';
|
|
9
|
+
import { registerProvider, hasEnv, requireEnv } from '../provider.js';
|
|
10
|
+
import { resilientFetch } from '../resilient-fetch.js';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// DEFAULT MODEL SELECTION
|
|
13
|
+
// =============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* TODO: Choose your default model for OpenRouter.
|
|
16
|
+
*
|
|
17
|
+
* This is a meaningful design choice based on your priorities:
|
|
18
|
+
*
|
|
19
|
+
* Cost-optimized options:
|
|
20
|
+
* - 'meta-llama/llama-3.1-8b-instruct' - Very cheap, good for simple tasks
|
|
21
|
+
* - 'mistralai/mistral-7b-instruct' - Budget-friendly, solid performance
|
|
22
|
+
*
|
|
23
|
+
* Balanced options:
|
|
24
|
+
* - 'anthropic/claude-sonnet-4' - Good balance of quality and cost
|
|
25
|
+
* - 'openai/gpt-4o-mini' - Fast, cheap, capable
|
|
26
|
+
*
|
|
27
|
+
* Quality-optimized options:
|
|
28
|
+
* - 'anthropic/claude-opus-4' - Highest Claude quality
|
|
29
|
+
* - 'openai/gpt-4-turbo' - High quality, good for complex tasks
|
|
30
|
+
*
|
|
31
|
+
* Consider: What's your primary use case? Development/testing (use cheaper),
|
|
32
|
+
* production (use quality), or experimentation (use balanced)?
|
|
33
|
+
*/
|
|
34
|
+
function getDefaultModel() {
|
|
35
|
+
// Using Gemini Flash - fast, cheap, and good tool use support
|
|
36
|
+
// Change to 'anthropic/claude-sonnet-4' for higher quality
|
|
37
|
+
return 'google/gemini-2.0-flash-001';
|
|
38
|
+
}
|
|
39
|
+
// =============================================================================
|
|
40
|
+
// OPENROUTER PROVIDER
|
|
41
|
+
// =============================================================================
|
|
42
|
+
export class OpenRouterProvider {
|
|
43
|
+
name = 'openrouter';
|
|
44
|
+
defaultModel;
|
|
45
|
+
apiKey;
|
|
46
|
+
model;
|
|
47
|
+
baseUrl = 'https://openrouter.ai/api/v1';
|
|
48
|
+
siteUrl;
|
|
49
|
+
siteName;
|
|
50
|
+
networkConfig;
|
|
51
|
+
constructor(config) {
|
|
52
|
+
this.apiKey = config?.apiKey ?? requireEnv('OPENROUTER_API_KEY');
|
|
53
|
+
this.defaultModel = getDefaultModel();
|
|
54
|
+
this.model = config?.model ?? process.env.OPENROUTER_MODEL ?? this.defaultModel;
|
|
55
|
+
this.siteUrl = config?.siteUrl ?? process.env.OPENROUTER_SITE_URL;
|
|
56
|
+
this.siteName = config?.siteName ?? process.env.OPENROUTER_SITE_NAME;
|
|
57
|
+
this.networkConfig = {
|
|
58
|
+
timeout: 120000, // 2 minutes
|
|
59
|
+
maxRetries: 3,
|
|
60
|
+
baseRetryDelay: 1000,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
isConfigured() {
|
|
64
|
+
return hasEnv('OPENROUTER_API_KEY');
|
|
65
|
+
}
|
|
66
|
+
async chat(messages, options) {
|
|
67
|
+
const model = options?.model ?? this.model;
|
|
68
|
+
// OpenRouter uses OpenAI-compatible message format
|
|
69
|
+
const openRouterMessages = messages.map(m => ({
|
|
70
|
+
role: m.role,
|
|
71
|
+
content: m.content,
|
|
72
|
+
}));
|
|
73
|
+
// Build request body (OpenAI-compatible)
|
|
74
|
+
const body = {
|
|
75
|
+
model,
|
|
76
|
+
messages: openRouterMessages,
|
|
77
|
+
max_tokens: options?.maxTokens ?? 4096,
|
|
78
|
+
temperature: options?.temperature ?? 0.7,
|
|
79
|
+
...(options?.stopSequences && { stop: options.stopSequences }),
|
|
80
|
+
// Enable usage accounting to get actual cost from OpenRouter
|
|
81
|
+
usage: { include: true },
|
|
82
|
+
};
|
|
83
|
+
// OpenRouter requires specific headers for analytics
|
|
84
|
+
const headers = {
|
|
85
|
+
'Content-Type': 'application/json',
|
|
86
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
87
|
+
};
|
|
88
|
+
// Optional headers for OpenRouter analytics/rate limits
|
|
89
|
+
if (this.siteUrl) {
|
|
90
|
+
headers['HTTP-Referer'] = this.siteUrl;
|
|
91
|
+
}
|
|
92
|
+
if (this.siteName) {
|
|
93
|
+
headers['X-Title'] = this.siteName;
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const { response } = await resilientFetch({
|
|
97
|
+
url: `${this.baseUrl}/chat/completions`,
|
|
98
|
+
init: {
|
|
99
|
+
method: 'POST',
|
|
100
|
+
headers,
|
|
101
|
+
body: JSON.stringify(body),
|
|
102
|
+
},
|
|
103
|
+
providerName: this.name,
|
|
104
|
+
networkConfig: this.networkConfig,
|
|
105
|
+
onRetry: (attempt, delay, error) => {
|
|
106
|
+
console.warn(`[OpenRouter] Retry attempt ${attempt} after ${delay}ms: ${error.message}`);
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
if (!response.ok) {
|
|
110
|
+
const error = await response.text();
|
|
111
|
+
throw this.handleError(response.status, error);
|
|
112
|
+
}
|
|
113
|
+
const data = await response.json();
|
|
114
|
+
const choice = data.choices[0];
|
|
115
|
+
// Get cost: try inline first, then query generation endpoint
|
|
116
|
+
let cost = data.usage.cost;
|
|
117
|
+
if (cost === undefined && data.id) {
|
|
118
|
+
cost = await this.queryGenerationCost(data.id);
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
content: choice.message.content,
|
|
122
|
+
stopReason: this.mapStopReason(choice.finish_reason),
|
|
123
|
+
usage: {
|
|
124
|
+
inputTokens: data.usage.prompt_tokens,
|
|
125
|
+
outputTokens: data.usage.completion_tokens,
|
|
126
|
+
cost,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (error instanceof ProviderError)
|
|
132
|
+
throw error;
|
|
133
|
+
throw new ProviderError(`OpenRouter request failed: ${error.message}`, this.name, 'NETWORK_ERROR', error);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* ═══════════════════════════════════════════════════════════════════════════
|
|
138
|
+
* NATIVE TOOL USE: Why This Matters
|
|
139
|
+
* ═══════════════════════════════════════════════════════════════════════════
|
|
140
|
+
*
|
|
141
|
+
* Before (Lesson 1): Parse JSON from text response
|
|
142
|
+
* LLM returns: "I'll use the read_file tool:\n```json\n{\"path\": \"x.ts\"}\n```"
|
|
143
|
+
* We parse: Extract JSON with regex → JSON.parse → Hope it's valid
|
|
144
|
+
* Problems: Hallucinated formats, partial JSON, extra text
|
|
145
|
+
*
|
|
146
|
+
* After (Native tool use):
|
|
147
|
+
* LLM returns: { tool_calls: [{ function: { name: "read_file", arguments: "{\"path\":\"x.ts\"}" }}] }
|
|
148
|
+
* We use: Structured response → Always valid JSON → Type-safe
|
|
149
|
+
* Benefits: No parsing errors, proper function calling semantics
|
|
150
|
+
*
|
|
151
|
+
* This method enables native tool use through OpenRouter's OpenAI-compatible API.
|
|
152
|
+
* ═══════════════════════════════════════════════════════════════════════════
|
|
153
|
+
*/
|
|
154
|
+
async chatWithTools(messages, options) {
|
|
155
|
+
const model = options?.model ?? this.model;
|
|
156
|
+
// Convert messages to OpenRouter format
|
|
157
|
+
// This handles both simple string content and structured content with cache_control
|
|
158
|
+
const openRouterMessages = messages.map(m => {
|
|
159
|
+
// Handle tool role messages (results from tool execution)
|
|
160
|
+
if ('tool_call_id' in m && m.role === 'tool') {
|
|
161
|
+
const toolMsg = {
|
|
162
|
+
role: 'tool',
|
|
163
|
+
content: typeof m.content === 'string' ? m.content : m.content.map(c => c.text).join(''),
|
|
164
|
+
tool_call_id: m.tool_call_id,
|
|
165
|
+
};
|
|
166
|
+
// Include name if present (required for Gemini)
|
|
167
|
+
if ('name' in m && m.name) {
|
|
168
|
+
toolMsg.name = m.name;
|
|
169
|
+
}
|
|
170
|
+
return toolMsg;
|
|
171
|
+
}
|
|
172
|
+
// Handle assistant messages with tool calls
|
|
173
|
+
if ('tool_calls' in m && m.tool_calls) {
|
|
174
|
+
return {
|
|
175
|
+
role: 'assistant',
|
|
176
|
+
content: typeof m.content === 'string' ? m.content : (m.content.length > 0 ? m.content.map(c => c.text).join('') : null),
|
|
177
|
+
tool_calls: m.tool_calls,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
// Handle structured content (with potential cache_control)
|
|
181
|
+
if (typeof m.content !== 'string') {
|
|
182
|
+
return {
|
|
183
|
+
role: m.role,
|
|
184
|
+
content: m.content, // Pass through structured content for caching
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
// Simple string content
|
|
188
|
+
return {
|
|
189
|
+
role: m.role,
|
|
190
|
+
content: m.content,
|
|
191
|
+
};
|
|
192
|
+
});
|
|
193
|
+
// Build request body with tool definitions
|
|
194
|
+
const body = {
|
|
195
|
+
model,
|
|
196
|
+
messages: openRouterMessages,
|
|
197
|
+
max_tokens: options?.maxTokens ?? 4096,
|
|
198
|
+
temperature: options?.temperature ?? 0.7,
|
|
199
|
+
...(options?.stopSequences && { stop: options.stopSequences }),
|
|
200
|
+
// Enable usage accounting to get cached_tokens in response
|
|
201
|
+
usage: { include: true },
|
|
202
|
+
};
|
|
203
|
+
// Add tool definitions if provided
|
|
204
|
+
if (options?.tools && options.tools.length > 0) {
|
|
205
|
+
body.tools = options.tools;
|
|
206
|
+
body.tool_choice = options?.tool_choice ?? 'auto';
|
|
207
|
+
}
|
|
208
|
+
const headers = {
|
|
209
|
+
'Content-Type': 'application/json',
|
|
210
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
211
|
+
};
|
|
212
|
+
if (this.siteUrl) {
|
|
213
|
+
headers['HTTP-Referer'] = this.siteUrl;
|
|
214
|
+
}
|
|
215
|
+
if (this.siteName) {
|
|
216
|
+
headers['X-Title'] = this.siteName;
|
|
217
|
+
}
|
|
218
|
+
try {
|
|
219
|
+
const { response } = await resilientFetch({
|
|
220
|
+
url: `${this.baseUrl}/chat/completions`,
|
|
221
|
+
init: {
|
|
222
|
+
method: 'POST',
|
|
223
|
+
headers,
|
|
224
|
+
body: JSON.stringify(body),
|
|
225
|
+
},
|
|
226
|
+
providerName: this.name,
|
|
227
|
+
networkConfig: this.networkConfig,
|
|
228
|
+
onRetry: (attempt, delay, error) => {
|
|
229
|
+
console.warn(`[OpenRouter] Retry attempt ${attempt} after ${delay}ms: ${error.message}`);
|
|
230
|
+
},
|
|
231
|
+
});
|
|
232
|
+
if (!response.ok) {
|
|
233
|
+
const error = await response.text();
|
|
234
|
+
throw this.handleError(response.status, error);
|
|
235
|
+
}
|
|
236
|
+
const data = await response.json();
|
|
237
|
+
const choice = data.choices[0];
|
|
238
|
+
// Get cost: try inline first, then query generation endpoint
|
|
239
|
+
let cost = data.usage.cost;
|
|
240
|
+
if (cost === undefined && data.id) {
|
|
241
|
+
cost = await this.queryGenerationCost(data.id);
|
|
242
|
+
}
|
|
243
|
+
if (process.env.DEBUG_COST) {
|
|
244
|
+
console.log('[OpenRouter] Response ID:', data.id);
|
|
245
|
+
console.log('[OpenRouter] Usage:', JSON.stringify(data.usage));
|
|
246
|
+
console.log('[OpenRouter] Final cost:', cost);
|
|
247
|
+
}
|
|
248
|
+
// Extract tool calls if present
|
|
249
|
+
const toolCalls = choice.message.tool_calls?.map(tc => ({
|
|
250
|
+
id: tc.id,
|
|
251
|
+
type: tc.type,
|
|
252
|
+
function: {
|
|
253
|
+
name: tc.function.name,
|
|
254
|
+
arguments: tc.function.arguments,
|
|
255
|
+
},
|
|
256
|
+
}));
|
|
257
|
+
return {
|
|
258
|
+
content: choice.message.content ?? '',
|
|
259
|
+
stopReason: this.mapStopReason(choice.finish_reason),
|
|
260
|
+
usage: {
|
|
261
|
+
inputTokens: data.usage.prompt_tokens,
|
|
262
|
+
outputTokens: data.usage.completion_tokens,
|
|
263
|
+
cachedTokens: data.usage.prompt_tokens_details?.cached_tokens,
|
|
264
|
+
// Use actual cost from OpenRouter
|
|
265
|
+
cost,
|
|
266
|
+
},
|
|
267
|
+
toolCalls,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
if (error instanceof ProviderError)
|
|
272
|
+
throw error;
|
|
273
|
+
throw new ProviderError(`OpenRouter request failed: ${error.message}`, this.name, 'NETWORK_ERROR', error);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Query the generation endpoint to get actual cost with retry.
|
|
278
|
+
* OpenRouter's generation data may not be immediately available after completion,
|
|
279
|
+
* so we retry with exponential backoff.
|
|
280
|
+
*/
|
|
281
|
+
async queryGenerationCost(generationId) {
|
|
282
|
+
const maxRetries = 3;
|
|
283
|
+
const delays = [100, 300, 600]; // ms - exponential backoff
|
|
284
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
285
|
+
try {
|
|
286
|
+
// Wait before querying (generation data needs time to propagate)
|
|
287
|
+
await new Promise(resolve => setTimeout(resolve, delays[attempt]));
|
|
288
|
+
const response = await fetch(`${this.baseUrl}/generation?id=${generationId}`, {
|
|
289
|
+
method: 'GET',
|
|
290
|
+
headers: {
|
|
291
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
292
|
+
},
|
|
293
|
+
});
|
|
294
|
+
if (!response.ok) {
|
|
295
|
+
if (process.env.DEBUG_COST) {
|
|
296
|
+
console.log(`[OpenRouter] Generation query attempt ${attempt + 1} failed:`, response.status);
|
|
297
|
+
}
|
|
298
|
+
continue; // Retry on non-OK response
|
|
299
|
+
}
|
|
300
|
+
const data = await response.json();
|
|
301
|
+
// OpenRouter returns cost in data.total_cost or data.usage
|
|
302
|
+
const cost = data.data?.total_cost ?? data.data?.usage;
|
|
303
|
+
if (process.env.DEBUG_COST) {
|
|
304
|
+
console.log(`[OpenRouter] Generation attempt ${attempt + 1}:`, JSON.stringify(data.data));
|
|
305
|
+
console.log('[OpenRouter] Cost from generation:', cost);
|
|
306
|
+
}
|
|
307
|
+
// If we got a valid cost, return it
|
|
308
|
+
if (cost !== undefined && cost > 0) {
|
|
309
|
+
return cost;
|
|
310
|
+
}
|
|
311
|
+
// Cost not ready yet, continue to retry
|
|
312
|
+
if (process.env.DEBUG_COST) {
|
|
313
|
+
console.log(`[OpenRouter] Cost not ready, attempt ${attempt + 1}/${maxRetries}`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
catch (err) {
|
|
317
|
+
if (process.env.DEBUG_COST) {
|
|
318
|
+
console.log(`[OpenRouter] Generation query error attempt ${attempt + 1}:`, err);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
if (process.env.DEBUG_COST) {
|
|
323
|
+
console.log('[OpenRouter] Failed to get cost after all retries');
|
|
324
|
+
}
|
|
325
|
+
return undefined;
|
|
326
|
+
}
|
|
327
|
+
handleError(status, body) {
|
|
328
|
+
let code = 'UNKNOWN';
|
|
329
|
+
if (status === 401)
|
|
330
|
+
code = 'AUTHENTICATION_FAILED';
|
|
331
|
+
else if (status === 429)
|
|
332
|
+
code = 'RATE_LIMITED';
|
|
333
|
+
else if (status === 400) {
|
|
334
|
+
if (body.includes('context_length')) {
|
|
335
|
+
code = 'CONTEXT_LENGTH_EXCEEDED';
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
code = 'INVALID_REQUEST';
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
else if (status >= 500)
|
|
342
|
+
code = 'SERVER_ERROR';
|
|
343
|
+
return new ProviderError(`OpenRouter API error (${status}): ${body}`, this.name, code);
|
|
344
|
+
}
|
|
345
|
+
mapStopReason(reason) {
|
|
346
|
+
switch (reason) {
|
|
347
|
+
case 'stop': return 'end_turn';
|
|
348
|
+
case 'length': return 'max_tokens';
|
|
349
|
+
case 'stop_sequence': return 'stop_sequence';
|
|
350
|
+
case 'tool_calls': return 'end_turn'; // Tool calls are a form of completion
|
|
351
|
+
default: return 'end_turn';
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
// =============================================================================
|
|
356
|
+
// REGISTRATION
|
|
357
|
+
// =============================================================================
|
|
358
|
+
registerProvider('openrouter', {
|
|
359
|
+
priority: 0, // Highest priority - becomes default when configured
|
|
360
|
+
detect: () => hasEnv('OPENROUTER_API_KEY'),
|
|
361
|
+
create: async () => new OpenRouterProvider(),
|
|
362
|
+
});
|
|
363
|
+
//# sourceMappingURL=openrouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../../../src/providers/adapters/openrouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lesson 2: Provider Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates and manages LLM providers with auto-detection.
|
|
5
|
+
*/
|
|
6
|
+
import type { LLMProvider, ProviderConfig } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Registry of available providers.
|
|
9
|
+
* Each provider has a detection function and factory.
|
|
10
|
+
*/
|
|
11
|
+
interface ProviderRegistry {
|
|
12
|
+
detect: () => boolean;
|
|
13
|
+
create: () => Promise<LLMProvider>;
|
|
14
|
+
priority: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Register a provider.
|
|
18
|
+
* Call this for each provider adapter.
|
|
19
|
+
*/
|
|
20
|
+
export declare function registerProvider(name: string, registry: ProviderRegistry): void;
|
|
21
|
+
/**
|
|
22
|
+
* Auto-detect and create the best available provider.
|
|
23
|
+
*
|
|
24
|
+
* Detection order (by priority):
|
|
25
|
+
* 0. OpenRouter (if OPENROUTER_API_KEY set)
|
|
26
|
+
* 1. Anthropic (if ANTHROPIC_API_KEY set)
|
|
27
|
+
* 2. OpenAI (if OPENAI_API_KEY set)
|
|
28
|
+
* 3. Azure (if AZURE_OPENAI_* set)
|
|
29
|
+
* 100. Mock (always available as fallback)
|
|
30
|
+
*/
|
|
31
|
+
export declare function getProvider(preferred?: string): Promise<LLMProvider>;
|
|
32
|
+
/**
|
|
33
|
+
* Create a provider from explicit configuration.
|
|
34
|
+
* Use this when you don't want auto-detection.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createProvider(config: ProviderConfig): Promise<LLMProvider>;
|
|
37
|
+
/**
|
|
38
|
+
* List all registered providers and their status.
|
|
39
|
+
*/
|
|
40
|
+
export declare function listProviders(): Array<{
|
|
41
|
+
name: string;
|
|
42
|
+
configured: boolean;
|
|
43
|
+
priority: number;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* Check if an environment variable is set and non-empty.
|
|
47
|
+
*/
|
|
48
|
+
export declare function hasEnv(key: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Get environment variable or throw.
|
|
51
|
+
*/
|
|
52
|
+
export declare function requireEnv(key: string): string;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/providers/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO9D;;;GAGG;AACH,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,gBAAgB,GACzB,IAAI,CAEN;AAMD;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA8B1E;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CA8BjF;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ9F;AAMD;;GAEG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG3C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9C"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lesson 2: Provider Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates and manages LLM providers with auto-detection.
|
|
5
|
+
*/
|
|
6
|
+
import { ProviderError } from './types.js';
|
|
7
|
+
const providers = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Register a provider.
|
|
10
|
+
* Call this for each provider adapter.
|
|
11
|
+
*/
|
|
12
|
+
export function registerProvider(name, registry) {
|
|
13
|
+
providers.set(name, registry);
|
|
14
|
+
}
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// PROVIDER FACTORY
|
|
17
|
+
// =============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Auto-detect and create the best available provider.
|
|
20
|
+
*
|
|
21
|
+
* Detection order (by priority):
|
|
22
|
+
* 0. OpenRouter (if OPENROUTER_API_KEY set)
|
|
23
|
+
* 1. Anthropic (if ANTHROPIC_API_KEY set)
|
|
24
|
+
* 2. OpenAI (if OPENAI_API_KEY set)
|
|
25
|
+
* 3. Azure (if AZURE_OPENAI_* set)
|
|
26
|
+
* 100. Mock (always available as fallback)
|
|
27
|
+
*/
|
|
28
|
+
export async function getProvider(preferred) {
|
|
29
|
+
// If preferred provider specified, try it first
|
|
30
|
+
if (preferred) {
|
|
31
|
+
const registry = providers.get(preferred);
|
|
32
|
+
if (registry?.detect()) {
|
|
33
|
+
return registry.create();
|
|
34
|
+
}
|
|
35
|
+
throw new ProviderError(`Preferred provider "${preferred}" is not configured`, preferred, 'NOT_CONFIGURED');
|
|
36
|
+
}
|
|
37
|
+
// Sort by priority and find first configured provider
|
|
38
|
+
const sorted = [...providers.entries()]
|
|
39
|
+
.sort((a, b) => a[1].priority - b[1].priority);
|
|
40
|
+
for (const [name, registry] of sorted) {
|
|
41
|
+
if (registry.detect()) {
|
|
42
|
+
console.log(`🔌 Using provider: ${name}`);
|
|
43
|
+
return registry.create();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
throw new ProviderError('No LLM provider configured. Set ANTHROPIC_API_KEY, OPENAI_API_KEY, or AZURE_OPENAI_* environment variables.', 'none', 'NOT_CONFIGURED');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create a provider from explicit configuration.
|
|
50
|
+
* Use this when you don't want auto-detection.
|
|
51
|
+
*/
|
|
52
|
+
export async function createProvider(config) {
|
|
53
|
+
switch (config.type) {
|
|
54
|
+
case 'anthropic': {
|
|
55
|
+
const { AnthropicProvider } = await import('./adapters/anthropic.js');
|
|
56
|
+
return new AnthropicProvider(config.config);
|
|
57
|
+
}
|
|
58
|
+
case 'openai': {
|
|
59
|
+
const { OpenAIProvider } = await import('./adapters/openai.js');
|
|
60
|
+
return new OpenAIProvider(config.config);
|
|
61
|
+
}
|
|
62
|
+
// Azure provider not included in attocode
|
|
63
|
+
// case 'azure': {
|
|
64
|
+
// const { AzureOpenAIProvider } = await import('./adapters/azure.js');
|
|
65
|
+
// return new AzureOpenAIProvider(config.config);
|
|
66
|
+
// }
|
|
67
|
+
case 'openrouter': {
|
|
68
|
+
const { OpenRouterProvider } = await import('./adapters/openrouter.js');
|
|
69
|
+
return new OpenRouterProvider(config.config);
|
|
70
|
+
}
|
|
71
|
+
case 'mock': {
|
|
72
|
+
const { MockProvider } = await import('./adapters/mock.js');
|
|
73
|
+
return new MockProvider();
|
|
74
|
+
}
|
|
75
|
+
default:
|
|
76
|
+
throw new ProviderError(`Unknown provider type: ${config.type}`, 'unknown', 'INVALID_REQUEST');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* List all registered providers and their status.
|
|
81
|
+
*/
|
|
82
|
+
export function listProviders() {
|
|
83
|
+
return [...providers.entries()]
|
|
84
|
+
.map(([name, registry]) => ({
|
|
85
|
+
name,
|
|
86
|
+
configured: registry.detect(),
|
|
87
|
+
priority: registry.priority,
|
|
88
|
+
}))
|
|
89
|
+
.sort((a, b) => a.priority - b.priority);
|
|
90
|
+
}
|
|
91
|
+
// =============================================================================
|
|
92
|
+
// HELPER FOR ADAPTER REGISTRATION
|
|
93
|
+
// =============================================================================
|
|
94
|
+
/**
|
|
95
|
+
* Check if an environment variable is set and non-empty.
|
|
96
|
+
*/
|
|
97
|
+
export function hasEnv(key) {
|
|
98
|
+
const value = process.env[key];
|
|
99
|
+
return value !== undefined && value.trim() !== '';
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get environment variable or throw.
|
|
103
|
+
*/
|
|
104
|
+
export function requireEnv(key) {
|
|
105
|
+
const value = process.env[key];
|
|
106
|
+
if (!value) {
|
|
107
|
+
throw new Error(`Missing required environment variable: ${key}`);
|
|
108
|
+
}
|
|
109
|
+
return value;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilient Fetch Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides network resilience for LLM provider requests:
|
|
5
|
+
* - Configurable timeout to prevent infinite hangs
|
|
6
|
+
* - Retry with exponential backoff for transient failures
|
|
7
|
+
* - Rate limit handling with Retry-After header parsing
|
|
8
|
+
* - Cancellation token support for user interrupts
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Network configuration for resilient fetch.
|
|
12
|
+
*/
|
|
13
|
+
export interface NetworkConfig {
|
|
14
|
+
/** Request timeout in milliseconds (default: 30000) */
|
|
15
|
+
timeout?: number;
|
|
16
|
+
/** Maximum retry attempts (default: 3) */
|
|
17
|
+
maxRetries?: number;
|
|
18
|
+
/** Base delay between retries in ms (default: 1000) */
|
|
19
|
+
baseRetryDelay?: number;
|
|
20
|
+
/** Maximum delay between retries in ms (default: 30000) */
|
|
21
|
+
maxRetryDelay?: number;
|
|
22
|
+
/** HTTP status codes that trigger retry (default: [429, 500, 502, 503, 504]) */
|
|
23
|
+
retryableStatusCodes?: number[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Cancellation token interface for external cancellation.
|
|
27
|
+
*/
|
|
28
|
+
export interface CancellationToken {
|
|
29
|
+
/** Whether cancellation has been requested */
|
|
30
|
+
isCancelled: boolean;
|
|
31
|
+
/** Register a callback to be called on cancellation */
|
|
32
|
+
onCancel?: (callback: () => void) => void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Options for resilient fetch.
|
|
36
|
+
*/
|
|
37
|
+
export interface ResilientFetchOptions {
|
|
38
|
+
/** URL to fetch */
|
|
39
|
+
url: string;
|
|
40
|
+
/** Fetch init options (method, headers, body, etc.) */
|
|
41
|
+
init: RequestInit;
|
|
42
|
+
/** Provider name for error messages */
|
|
43
|
+
providerName: string;
|
|
44
|
+
/** Network configuration */
|
|
45
|
+
networkConfig?: NetworkConfig;
|
|
46
|
+
/** External cancellation token */
|
|
47
|
+
cancellationToken?: CancellationToken;
|
|
48
|
+
/** Callback for retry events */
|
|
49
|
+
onRetry?: (attempt: number, delay: number, error: Error) => void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Result of resilient fetch.
|
|
53
|
+
*/
|
|
54
|
+
export interface ResilientFetchResult {
|
|
55
|
+
/** The fetch response */
|
|
56
|
+
response: Response;
|
|
57
|
+
/** Number of attempts made */
|
|
58
|
+
attempts: number;
|
|
59
|
+
/** Total duration in milliseconds */
|
|
60
|
+
duration: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Error thrown when fetch fails after all retries.
|
|
64
|
+
*/
|
|
65
|
+
export declare class ResilientFetchError extends Error {
|
|
66
|
+
readonly providerName: string;
|
|
67
|
+
readonly attempts: number;
|
|
68
|
+
readonly lastError?: Error | undefined;
|
|
69
|
+
readonly isTimeout: boolean;
|
|
70
|
+
readonly isCancelled: boolean;
|
|
71
|
+
constructor(message: string, providerName: string, attempts: number, lastError?: Error | undefined, isTimeout?: boolean, isCancelled?: boolean);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Perform a fetch with timeout, retry, and cancellation support.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const { response, attempts, duration } = await resilientFetch({
|
|
79
|
+
* url: 'https://api.anthropic.com/v1/messages',
|
|
80
|
+
* init: { method: 'POST', headers: {...}, body: JSON.stringify(body) },
|
|
81
|
+
* providerName: 'anthropic',
|
|
82
|
+
* networkConfig: { timeout: 60000, maxRetries: 3 },
|
|
83
|
+
* });
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export declare function resilientFetch(options: ResilientFetchOptions): Promise<ResilientFetchResult>;
|
|
87
|
+
/**
|
|
88
|
+
* Check if an error is a resilient fetch error.
|
|
89
|
+
*/
|
|
90
|
+
export declare function isResilientFetchError(error: unknown): error is ResilientFetchError;
|
|
91
|
+
/**
|
|
92
|
+
* Check if an error is a timeout error.
|
|
93
|
+
*/
|
|
94
|
+
export declare function isTimeoutError(error: unknown): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Check if an error is a cancellation error.
|
|
97
|
+
*/
|
|
98
|
+
export declare function isCancellationError(error: unknown): boolean;
|
|
99
|
+
//# sourceMappingURL=resilient-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilient-fetch.d.ts","sourceRoot":"","sources":["../../../src/providers/resilient-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,IAAI,EAAE,WAAW,CAAC;IAClB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,gCAAgC;IAChC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yBAAyB;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,YAAY,EAAE,MAAM;aACpB,QAAQ,EAAE,MAAM;aAChB,SAAS,CAAC,EAAE,KAAK;aACjB,SAAS,EAAE,OAAO;aAClB,WAAW,EAAE,OAAO;gBALpC,OAAO,EAAE,MAAM,EACC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,KAAK,YAAA,EACjB,SAAS,GAAE,OAAe,EAC1B,WAAW,GAAE,OAAe;CAK/C;AAkBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAmJ/B;AA0DD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3D"}
|