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,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lesson 26: Cache Boundary Tracker
|
|
3
|
+
*
|
|
4
|
+
* Analyzes KV cache efficiency during agent execution.
|
|
5
|
+
* Tracks content hashes to detect cache invalidation,
|
|
6
|
+
* compares predicted vs actual cache hit rates from API responses.
|
|
7
|
+
*
|
|
8
|
+
* Key insight: Anthropic returns `cache_creation_input_tokens` and
|
|
9
|
+
* `cache_read_input_tokens` in the usage response, allowing us to
|
|
10
|
+
* measure actual cache performance.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const tracker = new CacheBoundaryTracker();
|
|
15
|
+
*
|
|
16
|
+
* // Record request
|
|
17
|
+
* tracker.recordRequest({
|
|
18
|
+
* messages: [...],
|
|
19
|
+
* systemPrompt: '...',
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // After getting API response, record actual cache stats
|
|
23
|
+
* tracker.recordResponse({
|
|
24
|
+
* cacheReadTokens: response.usage.cache_read_input_tokens,
|
|
25
|
+
* cacheWriteTokens: response.usage.cache_creation_input_tokens,
|
|
26
|
+
* totalInputTokens: response.usage.input_tokens,
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // Analyze
|
|
30
|
+
* const analysis = tracker.analyze();
|
|
31
|
+
* console.log(`Cache hit rate: ${analysis.hitRate * 100}%`);
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
import { type CacheBreakdown, type CacheBreakpointInfo } from './types.js';
|
|
35
|
+
/**
|
|
36
|
+
* Request data for cache tracking.
|
|
37
|
+
*/
|
|
38
|
+
export interface CacheTrackingRequest {
|
|
39
|
+
/** System prompt content */
|
|
40
|
+
systemPrompt: string;
|
|
41
|
+
/** Messages array */
|
|
42
|
+
messages: Array<{
|
|
43
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
44
|
+
content: string;
|
|
45
|
+
toolCallId?: string;
|
|
46
|
+
}>;
|
|
47
|
+
/** Tool definitions (affects cache) */
|
|
48
|
+
toolDefinitions?: unknown[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Response data from API with cache info.
|
|
52
|
+
*/
|
|
53
|
+
export interface CacheTrackingResponse {
|
|
54
|
+
/** Tokens read from cache (cache hit) */
|
|
55
|
+
cacheReadTokens: number;
|
|
56
|
+
/** Tokens written to cache (new cache entries) */
|
|
57
|
+
cacheWriteTokens: number;
|
|
58
|
+
/** Total input tokens */
|
|
59
|
+
totalInputTokens: number;
|
|
60
|
+
/** Output tokens */
|
|
61
|
+
outputTokens: number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Historical cache data point.
|
|
65
|
+
*/
|
|
66
|
+
interface CacheHistoryEntry {
|
|
67
|
+
/** Request number */
|
|
68
|
+
requestNumber: number;
|
|
69
|
+
/** Timestamp */
|
|
70
|
+
timestamp: number;
|
|
71
|
+
/** Content hash of the prefix */
|
|
72
|
+
prefixHash: string;
|
|
73
|
+
/** Hash of each message */
|
|
74
|
+
messageHashes: string[];
|
|
75
|
+
/** Predicted cacheable tokens */
|
|
76
|
+
predictedCacheableTokens: number;
|
|
77
|
+
/** Actual cache read from API */
|
|
78
|
+
actualCacheReadTokens?: number;
|
|
79
|
+
/** Actual cache write from API */
|
|
80
|
+
actualCacheWriteTokens?: number;
|
|
81
|
+
/** Total input tokens */
|
|
82
|
+
totalInputTokens?: number;
|
|
83
|
+
/** Detected breakpoints */
|
|
84
|
+
breakpoints: CacheBreakpointInfo[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Cache analysis result.
|
|
88
|
+
*/
|
|
89
|
+
export interface CacheAnalysis {
|
|
90
|
+
/** Overall cache hit rate (0-1) */
|
|
91
|
+
hitRate: number;
|
|
92
|
+
/** Average hit rate across all requests */
|
|
93
|
+
avgHitRate: number;
|
|
94
|
+
/** Tokens saved by caching */
|
|
95
|
+
tokensSaved: number;
|
|
96
|
+
/** Cost savings estimate (USD) */
|
|
97
|
+
estimatedSavings: number;
|
|
98
|
+
/** Cache efficiency trend */
|
|
99
|
+
trend: 'improving' | 'declining' | 'stable';
|
|
100
|
+
/** Most common breakpoint types */
|
|
101
|
+
commonBreakpoints: Array<{
|
|
102
|
+
type: CacheBreakpointInfo['type'];
|
|
103
|
+
count: number;
|
|
104
|
+
avgTokensAffected: number;
|
|
105
|
+
}>;
|
|
106
|
+
/** Recommendations for improving cache efficiency */
|
|
107
|
+
recommendations: string[];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Tracks KV cache boundaries and efficiency during agent execution.
|
|
111
|
+
*/
|
|
112
|
+
export declare class CacheBoundaryTracker {
|
|
113
|
+
private history;
|
|
114
|
+
private requestCount;
|
|
115
|
+
private previousPrefixHash;
|
|
116
|
+
private previousMessageHashes;
|
|
117
|
+
private readonly cachedTokenCost;
|
|
118
|
+
private readonly uncachedTokenCost;
|
|
119
|
+
/**
|
|
120
|
+
* Record a new request for cache tracking.
|
|
121
|
+
*/
|
|
122
|
+
recordRequest(request: CacheTrackingRequest): CacheBreakdown;
|
|
123
|
+
/**
|
|
124
|
+
* Update the last request with actual API response data.
|
|
125
|
+
*/
|
|
126
|
+
recordResponse(response: CacheTrackingResponse): CacheBreakdown;
|
|
127
|
+
/**
|
|
128
|
+
* Get comprehensive cache analysis.
|
|
129
|
+
*/
|
|
130
|
+
analyze(): CacheAnalysis;
|
|
131
|
+
/**
|
|
132
|
+
* Get cache breakdown for the current state.
|
|
133
|
+
*/
|
|
134
|
+
getCurrentBreakdown(): CacheBreakdown | null;
|
|
135
|
+
/**
|
|
136
|
+
* Get history of all cache tracking entries.
|
|
137
|
+
*/
|
|
138
|
+
getHistory(): CacheHistoryEntry[];
|
|
139
|
+
/**
|
|
140
|
+
* Reset tracker state.
|
|
141
|
+
*/
|
|
142
|
+
reset(): void;
|
|
143
|
+
/**
|
|
144
|
+
* Detect cache breakpoints by comparing with previous request.
|
|
145
|
+
*/
|
|
146
|
+
private detectBreakpoints;
|
|
147
|
+
/**
|
|
148
|
+
* Classify what type of breakpoint this is.
|
|
149
|
+
*/
|
|
150
|
+
private classifyBreakpoint;
|
|
151
|
+
/**
|
|
152
|
+
* Predict how many tokens will be cached based on history.
|
|
153
|
+
*/
|
|
154
|
+
private predictCacheableTokens;
|
|
155
|
+
/**
|
|
156
|
+
* Estimate tokens for a request.
|
|
157
|
+
*/
|
|
158
|
+
private estimateTokens;
|
|
159
|
+
/**
|
|
160
|
+
* Estimate tokens from content (rough approximation).
|
|
161
|
+
*/
|
|
162
|
+
private estimateTokensFromContent;
|
|
163
|
+
/**
|
|
164
|
+
* Estimate tokens remaining after a position.
|
|
165
|
+
*/
|
|
166
|
+
private estimateRemainingTokens;
|
|
167
|
+
/**
|
|
168
|
+
* Calculate cost savings from caching.
|
|
169
|
+
*/
|
|
170
|
+
private calculateSavings;
|
|
171
|
+
/**
|
|
172
|
+
* Calculate trend from hit rate history.
|
|
173
|
+
*/
|
|
174
|
+
private calculateTrend;
|
|
175
|
+
/**
|
|
176
|
+
* Generate recommendations based on analysis.
|
|
177
|
+
*/
|
|
178
|
+
private generateRecommendations;
|
|
179
|
+
/**
|
|
180
|
+
* Simple hash function for content comparison.
|
|
181
|
+
*/
|
|
182
|
+
private hashContent;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Create a new cache boundary tracker.
|
|
186
|
+
*/
|
|
187
|
+
export declare function createCacheBoundaryTracker(): CacheBoundaryTracker;
|
|
188
|
+
export {};
|
|
189
|
+
//# sourceMappingURL=cache-boundary-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-boundary-tracker.d.ts","sourceRoot":"","sources":["../../../src/tracing/cache-boundary-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lesson 26: Cache Boundary Tracker
|
|
3
|
+
*
|
|
4
|
+
* Analyzes KV cache efficiency during agent execution.
|
|
5
|
+
* Tracks content hashes to detect cache invalidation,
|
|
6
|
+
* compares predicted vs actual cache hit rates from API responses.
|
|
7
|
+
*
|
|
8
|
+
* Key insight: Anthropic returns `cache_creation_input_tokens` and
|
|
9
|
+
* `cache_read_input_tokens` in the usage response, allowing us to
|
|
10
|
+
* measure actual cache performance.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const tracker = new CacheBoundaryTracker();
|
|
15
|
+
*
|
|
16
|
+
* // Record request
|
|
17
|
+
* tracker.recordRequest({
|
|
18
|
+
* messages: [...],
|
|
19
|
+
* systemPrompt: '...',
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // After getting API response, record actual cache stats
|
|
23
|
+
* tracker.recordResponse({
|
|
24
|
+
* cacheReadTokens: response.usage.cache_read_input_tokens,
|
|
25
|
+
* cacheWriteTokens: response.usage.cache_creation_input_tokens,
|
|
26
|
+
* totalInputTokens: response.usage.input_tokens,
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // Analyze
|
|
30
|
+
* const analysis = tracker.analyze();
|
|
31
|
+
* console.log(`Cache hit rate: ${analysis.hitRate * 100}%`);
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
import { stableStringify } from '../tricks/kv-cache-context.js';
|
|
35
|
+
// =============================================================================
|
|
36
|
+
// CACHE BOUNDARY TRACKER
|
|
37
|
+
// =============================================================================
|
|
38
|
+
/**
|
|
39
|
+
* Tracks KV cache boundaries and efficiency during agent execution.
|
|
40
|
+
*/
|
|
41
|
+
export class CacheBoundaryTracker {
|
|
42
|
+
history = [];
|
|
43
|
+
requestCount = 0;
|
|
44
|
+
previousPrefixHash = null;
|
|
45
|
+
previousMessageHashes = [];
|
|
46
|
+
// Cost assumptions for savings calculation
|
|
47
|
+
cachedTokenCost = 0.00025 / 1000; // $0.25 per 1M cached
|
|
48
|
+
uncachedTokenCost = 0.003 / 1000; // $3 per 1M uncached
|
|
49
|
+
/**
|
|
50
|
+
* Record a new request for cache tracking.
|
|
51
|
+
*/
|
|
52
|
+
recordRequest(request) {
|
|
53
|
+
this.requestCount++;
|
|
54
|
+
// Compute prefix hash (system prompt + tools)
|
|
55
|
+
const prefixContent = request.systemPrompt +
|
|
56
|
+
(request.toolDefinitions ? stableStringify(request.toolDefinitions) : '');
|
|
57
|
+
const prefixHash = this.hashContent(prefixContent);
|
|
58
|
+
// Compute message hashes
|
|
59
|
+
const messageHashes = request.messages.map(msg => this.hashContent(`${msg.role}:${msg.content}:${msg.toolCallId ?? ''}`));
|
|
60
|
+
// Detect breakpoints
|
|
61
|
+
const breakpoints = this.detectBreakpoints(prefixHash, messageHashes, request.messages);
|
|
62
|
+
// Estimate cacheable tokens
|
|
63
|
+
const estimatedTokens = this.estimateTokens(request);
|
|
64
|
+
const predictedCacheableTokens = this.predictCacheableTokens(prefixHash, messageHashes, estimatedTokens);
|
|
65
|
+
// Store history entry
|
|
66
|
+
const entry = {
|
|
67
|
+
requestNumber: this.requestCount,
|
|
68
|
+
timestamp: Date.now(),
|
|
69
|
+
prefixHash,
|
|
70
|
+
messageHashes,
|
|
71
|
+
predictedCacheableTokens,
|
|
72
|
+
breakpoints,
|
|
73
|
+
};
|
|
74
|
+
this.history.push(entry);
|
|
75
|
+
// Update previous state
|
|
76
|
+
this.previousPrefixHash = prefixHash;
|
|
77
|
+
this.previousMessageHashes = [...messageHashes];
|
|
78
|
+
// Return breakdown (will be updated when response comes)
|
|
79
|
+
return {
|
|
80
|
+
cacheReadTokens: predictedCacheableTokens,
|
|
81
|
+
cacheWriteTokens: estimatedTokens.total - predictedCacheableTokens,
|
|
82
|
+
freshTokens: estimatedTokens.total - predictedCacheableTokens,
|
|
83
|
+
hitRate: predictedCacheableTokens / estimatedTokens.total,
|
|
84
|
+
estimatedSavings: this.calculateSavings(predictedCacheableTokens, estimatedTokens.total - predictedCacheableTokens),
|
|
85
|
+
breakpoints,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Update the last request with actual API response data.
|
|
90
|
+
*/
|
|
91
|
+
recordResponse(response) {
|
|
92
|
+
if (this.history.length === 0) {
|
|
93
|
+
throw new Error('No request recorded to update');
|
|
94
|
+
}
|
|
95
|
+
const lastEntry = this.history[this.history.length - 1];
|
|
96
|
+
lastEntry.actualCacheReadTokens = response.cacheReadTokens;
|
|
97
|
+
lastEntry.actualCacheWriteTokens = response.cacheWriteTokens;
|
|
98
|
+
lastEntry.totalInputTokens = response.totalInputTokens;
|
|
99
|
+
const freshTokens = response.totalInputTokens - response.cacheReadTokens;
|
|
100
|
+
const hitRate = response.totalInputTokens > 0
|
|
101
|
+
? response.cacheReadTokens / response.totalInputTokens
|
|
102
|
+
: 0;
|
|
103
|
+
return {
|
|
104
|
+
cacheReadTokens: response.cacheReadTokens,
|
|
105
|
+
cacheWriteTokens: response.cacheWriteTokens,
|
|
106
|
+
freshTokens,
|
|
107
|
+
hitRate,
|
|
108
|
+
estimatedSavings: this.calculateSavings(response.cacheReadTokens, freshTokens),
|
|
109
|
+
breakpoints: lastEntry.breakpoints,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get comprehensive cache analysis.
|
|
114
|
+
*/
|
|
115
|
+
analyze() {
|
|
116
|
+
if (this.history.length === 0) {
|
|
117
|
+
return {
|
|
118
|
+
hitRate: 0,
|
|
119
|
+
avgHitRate: 0,
|
|
120
|
+
tokensSaved: 0,
|
|
121
|
+
estimatedSavings: 0,
|
|
122
|
+
trend: 'stable',
|
|
123
|
+
commonBreakpoints: [],
|
|
124
|
+
recommendations: ['No requests recorded yet'],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// Calculate overall stats
|
|
128
|
+
let totalCacheRead = 0;
|
|
129
|
+
let totalTokens = 0;
|
|
130
|
+
const hitRates = [];
|
|
131
|
+
for (const entry of this.history) {
|
|
132
|
+
if (entry.actualCacheReadTokens !== undefined && entry.totalInputTokens !== undefined) {
|
|
133
|
+
totalCacheRead += entry.actualCacheReadTokens;
|
|
134
|
+
totalTokens += entry.totalInputTokens;
|
|
135
|
+
hitRates.push(entry.actualCacheReadTokens / entry.totalInputTokens);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const hitRate = totalTokens > 0 ? totalCacheRead / totalTokens : 0;
|
|
139
|
+
const avgHitRate = hitRates.length > 0
|
|
140
|
+
? hitRates.reduce((a, b) => a + b, 0) / hitRates.length
|
|
141
|
+
: 0;
|
|
142
|
+
// Calculate tokens saved and cost savings
|
|
143
|
+
const tokensSaved = totalCacheRead;
|
|
144
|
+
const estimatedSavings = this.calculateSavings(totalCacheRead, totalTokens - totalCacheRead);
|
|
145
|
+
// Determine trend
|
|
146
|
+
const trend = this.calculateTrend(hitRates);
|
|
147
|
+
// Aggregate breakpoints
|
|
148
|
+
const breakpointCounts = new Map();
|
|
149
|
+
for (const entry of this.history) {
|
|
150
|
+
for (const bp of entry.breakpoints) {
|
|
151
|
+
const existing = breakpointCounts.get(bp.type) ?? { count: 0, tokens: 0 };
|
|
152
|
+
existing.count++;
|
|
153
|
+
existing.tokens += bp.tokensAffected;
|
|
154
|
+
breakpointCounts.set(bp.type, existing);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const commonBreakpoints = Array.from(breakpointCounts.entries())
|
|
158
|
+
.map(([type, data]) => ({
|
|
159
|
+
type,
|
|
160
|
+
count: data.count,
|
|
161
|
+
avgTokensAffected: data.tokens / data.count,
|
|
162
|
+
}))
|
|
163
|
+
.sort((a, b) => b.count - a.count);
|
|
164
|
+
// Generate recommendations
|
|
165
|
+
const recommendations = this.generateRecommendations(hitRate, commonBreakpoints, trend);
|
|
166
|
+
return {
|
|
167
|
+
hitRate,
|
|
168
|
+
avgHitRate,
|
|
169
|
+
tokensSaved,
|
|
170
|
+
estimatedSavings,
|
|
171
|
+
trend,
|
|
172
|
+
commonBreakpoints,
|
|
173
|
+
recommendations,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get cache breakdown for the current state.
|
|
178
|
+
*/
|
|
179
|
+
getCurrentBreakdown() {
|
|
180
|
+
if (this.history.length === 0)
|
|
181
|
+
return null;
|
|
182
|
+
const lastEntry = this.history[this.history.length - 1];
|
|
183
|
+
if (lastEntry.actualCacheReadTokens === undefined) {
|
|
184
|
+
return {
|
|
185
|
+
cacheReadTokens: lastEntry.predictedCacheableTokens,
|
|
186
|
+
cacheWriteTokens: 0,
|
|
187
|
+
freshTokens: 0,
|
|
188
|
+
hitRate: 0,
|
|
189
|
+
estimatedSavings: 0,
|
|
190
|
+
breakpoints: lastEntry.breakpoints,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const freshTokens = (lastEntry.totalInputTokens ?? 0) - lastEntry.actualCacheReadTokens;
|
|
194
|
+
return {
|
|
195
|
+
cacheReadTokens: lastEntry.actualCacheReadTokens,
|
|
196
|
+
cacheWriteTokens: lastEntry.actualCacheWriteTokens ?? 0,
|
|
197
|
+
freshTokens,
|
|
198
|
+
hitRate: lastEntry.totalInputTokens
|
|
199
|
+
? lastEntry.actualCacheReadTokens / lastEntry.totalInputTokens
|
|
200
|
+
: 0,
|
|
201
|
+
estimatedSavings: this.calculateSavings(lastEntry.actualCacheReadTokens, freshTokens),
|
|
202
|
+
breakpoints: lastEntry.breakpoints,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get history of all cache tracking entries.
|
|
207
|
+
*/
|
|
208
|
+
getHistory() {
|
|
209
|
+
return [...this.history];
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Reset tracker state.
|
|
213
|
+
*/
|
|
214
|
+
reset() {
|
|
215
|
+
this.history = [];
|
|
216
|
+
this.requestCount = 0;
|
|
217
|
+
this.previousPrefixHash = null;
|
|
218
|
+
this.previousMessageHashes = [];
|
|
219
|
+
}
|
|
220
|
+
// ==========================================================================
|
|
221
|
+
// PRIVATE METHODS
|
|
222
|
+
// ==========================================================================
|
|
223
|
+
/**
|
|
224
|
+
* Detect cache breakpoints by comparing with previous request.
|
|
225
|
+
*/
|
|
226
|
+
detectBreakpoints(currentPrefixHash, currentMessageHashes, messages) {
|
|
227
|
+
const breakpoints = [];
|
|
228
|
+
// First request - no breakpoints
|
|
229
|
+
if (this.previousPrefixHash === null) {
|
|
230
|
+
return breakpoints;
|
|
231
|
+
}
|
|
232
|
+
// Check prefix change (system prompt or tools changed)
|
|
233
|
+
if (currentPrefixHash !== this.previousPrefixHash) {
|
|
234
|
+
breakpoints.push({
|
|
235
|
+
position: 0,
|
|
236
|
+
type: 'dynamic_content',
|
|
237
|
+
description: 'System prompt or tool definitions changed',
|
|
238
|
+
tokensAffected: this.estimateTokensFromContent(messages[0]?.content ?? ''),
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
// Check each message for changes
|
|
242
|
+
let lastUnchangedIndex = -1;
|
|
243
|
+
for (let i = 0; i < currentMessageHashes.length; i++) {
|
|
244
|
+
if (i >= this.previousMessageHashes.length) {
|
|
245
|
+
// New message (expected, not a breakpoint)
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (currentMessageHashes[i] !== this.previousMessageHashes[i]) {
|
|
249
|
+
// Message changed!
|
|
250
|
+
const msg = messages[i];
|
|
251
|
+
const breakpointType = this.classifyBreakpoint(msg, i, lastUnchangedIndex);
|
|
252
|
+
breakpoints.push({
|
|
253
|
+
position: i,
|
|
254
|
+
type: breakpointType,
|
|
255
|
+
description: `Message at position ${i} (${msg.role}) changed`,
|
|
256
|
+
tokensAffected: this.estimateRemainingTokens(messages, i),
|
|
257
|
+
});
|
|
258
|
+
break; // Only report first change
|
|
259
|
+
}
|
|
260
|
+
lastUnchangedIndex = i;
|
|
261
|
+
}
|
|
262
|
+
return breakpoints;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Classify what type of breakpoint this is.
|
|
266
|
+
*/
|
|
267
|
+
classifyBreakpoint(message, position, lastUnchangedIndex) {
|
|
268
|
+
// If role changed from previous position
|
|
269
|
+
if (position > 0) {
|
|
270
|
+
return 'role_change';
|
|
271
|
+
}
|
|
272
|
+
// Tool result messages
|
|
273
|
+
if (message.role === 'tool') {
|
|
274
|
+
return 'tool_result';
|
|
275
|
+
}
|
|
276
|
+
// Content change
|
|
277
|
+
return 'content_change';
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Predict how many tokens will be cached based on history.
|
|
281
|
+
*/
|
|
282
|
+
predictCacheableTokens(currentPrefixHash, currentMessageHashes, estimatedTokens) {
|
|
283
|
+
// First request - nothing cached
|
|
284
|
+
if (this.previousPrefixHash === null) {
|
|
285
|
+
return 0;
|
|
286
|
+
}
|
|
287
|
+
// Prefix changed - no cache
|
|
288
|
+
if (currentPrefixHash !== this.previousPrefixHash) {
|
|
289
|
+
return 0;
|
|
290
|
+
}
|
|
291
|
+
// Count matching message hashes from the start
|
|
292
|
+
let cachedTokens = estimatedTokens.total - estimatedTokens.messages.reduce((a, b) => a + b, 0);
|
|
293
|
+
for (let i = 0; i < currentMessageHashes.length && i < this.previousMessageHashes.length; i++) {
|
|
294
|
+
if (currentMessageHashes[i] === this.previousMessageHashes[i]) {
|
|
295
|
+
cachedTokens += estimatedTokens.messages[i] ?? 0;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return cachedTokens;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Estimate tokens for a request.
|
|
305
|
+
*/
|
|
306
|
+
estimateTokens(request) {
|
|
307
|
+
const systemTokens = this.estimateTokensFromContent(request.systemPrompt);
|
|
308
|
+
const toolTokens = request.toolDefinitions
|
|
309
|
+
? this.estimateTokensFromContent(stableStringify(request.toolDefinitions))
|
|
310
|
+
: 0;
|
|
311
|
+
const messageTokens = request.messages.map(msg => this.estimateTokensFromContent(msg.content));
|
|
312
|
+
const total = systemTokens + toolTokens + messageTokens.reduce((a, b) => a + b, 0);
|
|
313
|
+
return { total, messages: messageTokens };
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Estimate tokens from content (rough approximation).
|
|
317
|
+
*/
|
|
318
|
+
estimateTokensFromContent(content) {
|
|
319
|
+
// Rough estimate: 1 token per 4 characters
|
|
320
|
+
return Math.ceil(content.length / 4);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Estimate tokens remaining after a position.
|
|
324
|
+
*/
|
|
325
|
+
estimateRemainingTokens(messages, fromIndex) {
|
|
326
|
+
let tokens = 0;
|
|
327
|
+
for (let i = fromIndex; i < messages.length; i++) {
|
|
328
|
+
tokens += this.estimateTokensFromContent(messages[i].content);
|
|
329
|
+
}
|
|
330
|
+
return tokens;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Calculate cost savings from caching.
|
|
334
|
+
*/
|
|
335
|
+
calculateSavings(cachedTokens, uncachedTokens) {
|
|
336
|
+
// What it would have cost without caching
|
|
337
|
+
const withoutCacheCost = (cachedTokens + uncachedTokens) * this.uncachedTokenCost;
|
|
338
|
+
// What it actually costs with caching
|
|
339
|
+
const withCacheCost = cachedTokens * this.cachedTokenCost + uncachedTokens * this.uncachedTokenCost;
|
|
340
|
+
return withoutCacheCost - withCacheCost;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Calculate trend from hit rate history.
|
|
344
|
+
*/
|
|
345
|
+
calculateTrend(hitRates) {
|
|
346
|
+
if (hitRates.length < 3)
|
|
347
|
+
return 'stable';
|
|
348
|
+
// Compare first half to second half
|
|
349
|
+
const midpoint = Math.floor(hitRates.length / 2);
|
|
350
|
+
const firstHalf = hitRates.slice(0, midpoint);
|
|
351
|
+
const secondHalf = hitRates.slice(midpoint);
|
|
352
|
+
const firstAvg = firstHalf.reduce((a, b) => a + b, 0) / firstHalf.length;
|
|
353
|
+
const secondAvg = secondHalf.reduce((a, b) => a + b, 0) / secondHalf.length;
|
|
354
|
+
const diff = secondAvg - firstAvg;
|
|
355
|
+
if (diff > 0.05)
|
|
356
|
+
return 'improving';
|
|
357
|
+
if (diff < -0.05)
|
|
358
|
+
return 'declining';
|
|
359
|
+
return 'stable';
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Generate recommendations based on analysis.
|
|
363
|
+
*/
|
|
364
|
+
generateRecommendations(hitRate, breakpoints, trend) {
|
|
365
|
+
const recommendations = [];
|
|
366
|
+
if (hitRate < 0.5) {
|
|
367
|
+
recommendations.push('Cache hit rate is low (<50%). Consider stabilizing system prompts.');
|
|
368
|
+
}
|
|
369
|
+
if (hitRate < 0.3) {
|
|
370
|
+
recommendations.push('Very low cache efficiency. Check for timestamps or dynamic content at the start of prompts.');
|
|
371
|
+
}
|
|
372
|
+
// Check for common breakpoint types
|
|
373
|
+
const dynamicBreaks = breakpoints.find(b => b.type === 'dynamic_content');
|
|
374
|
+
if (dynamicBreaks && dynamicBreaks.count > 2) {
|
|
375
|
+
recommendations.push('Frequent dynamic content changes detected. Move variable content to the end of prompts.');
|
|
376
|
+
}
|
|
377
|
+
const contentChanges = breakpoints.find(b => b.type === 'content_change');
|
|
378
|
+
if (contentChanges && contentChanges.count > 3) {
|
|
379
|
+
recommendations.push('Message content is being modified. Ensure append-only message history.');
|
|
380
|
+
}
|
|
381
|
+
if (trend === 'declining') {
|
|
382
|
+
recommendations.push('Cache efficiency is declining over time. Review recent prompt structure changes.');
|
|
383
|
+
}
|
|
384
|
+
if (recommendations.length === 0 && hitRate > 0.7) {
|
|
385
|
+
recommendations.push('Good cache efficiency! Current patterns are working well.');
|
|
386
|
+
}
|
|
387
|
+
return recommendations;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Simple hash function for content comparison.
|
|
391
|
+
*/
|
|
392
|
+
hashContent(content) {
|
|
393
|
+
let hash = 0;
|
|
394
|
+
for (let i = 0; i < content.length; i++) {
|
|
395
|
+
const char = content.charCodeAt(i);
|
|
396
|
+
hash = ((hash << 5) - hash) + char;
|
|
397
|
+
hash = hash & hash;
|
|
398
|
+
}
|
|
399
|
+
return hash.toString(16);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
// =============================================================================
|
|
403
|
+
// FACTORY FUNCTION
|
|
404
|
+
// =============================================================================
|
|
405
|
+
/**
|
|
406
|
+
* Create a new cache boundary tracker.
|
|
407
|
+
*/
|
|
408
|
+
export function createCacheBoundaryTracker() {
|
|
409
|
+
return new CacheBoundaryTracker();
|
|
410
|
+
}
|
|
411
|
+
//# sourceMappingURL=cache-boundary-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-boundary-tracker.js","sourceRoot":"","sources":["../../../src/tracing/cache-boundary-tracker.ts"],"names":[],"mappings":"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"}
|