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,374 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trick Q: Recitation / Goal Reinforcement
|
|
3
|
+
*
|
|
4
|
+
* Periodically injects task summaries (plans, todos, goals) into the END
|
|
5
|
+
* of the context to combat "lost in the middle" attention issues.
|
|
6
|
+
*
|
|
7
|
+
* Problem: In long conversations (50+ tool calls), the model "forgets"
|
|
8
|
+
* the original goal because it's buried in the middle of the context.
|
|
9
|
+
*
|
|
10
|
+
* Solution: Periodically "recite" the current goal/plan at the context end,
|
|
11
|
+
* pushing it into the model's recent attention span.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { createRecitationManager } from './recitation';
|
|
16
|
+
*
|
|
17
|
+
* const recitation = createRecitationManager({
|
|
18
|
+
* frequency: 5, // Every 5 iterations
|
|
19
|
+
* sources: ['plan', 'todo', 'goal'],
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // In agent loop
|
|
23
|
+
* const messages = recitation.injectIfNeeded(
|
|
24
|
+
* currentMessages,
|
|
25
|
+
* { plan, todos, goal, iteration: 15 }
|
|
26
|
+
* );
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
// =============================================================================
|
|
30
|
+
// RECITATION MANAGER
|
|
31
|
+
// =============================================================================
|
|
32
|
+
/**
|
|
33
|
+
* Manages periodic goal/plan recitation.
|
|
34
|
+
*/
|
|
35
|
+
export class RecitationManager {
|
|
36
|
+
config;
|
|
37
|
+
history = [];
|
|
38
|
+
lastInjectionIteration = 0;
|
|
39
|
+
listeners = [];
|
|
40
|
+
constructor(config) {
|
|
41
|
+
this.config = {
|
|
42
|
+
frequency: config.frequency,
|
|
43
|
+
sources: config.sources,
|
|
44
|
+
maxTokens: config.maxTokens ?? 500,
|
|
45
|
+
customBuilder: config.customBuilder ?? (() => null),
|
|
46
|
+
trackHistory: config.trackHistory ?? true,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check if recitation should be injected at this iteration.
|
|
51
|
+
*/
|
|
52
|
+
shouldInject(iteration) {
|
|
53
|
+
// Always inject on first iteration
|
|
54
|
+
if (iteration === 1)
|
|
55
|
+
return true;
|
|
56
|
+
// Inject every N iterations
|
|
57
|
+
const iterationsSinceLastInjection = iteration - this.lastInjectionIteration;
|
|
58
|
+
return iterationsSinceLastInjection >= this.config.frequency;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build recitation content from state.
|
|
62
|
+
*/
|
|
63
|
+
buildRecitation(state) {
|
|
64
|
+
const parts = [];
|
|
65
|
+
const usedSources = [];
|
|
66
|
+
// Goal
|
|
67
|
+
if (this.config.sources.includes('goal') && state.goal) {
|
|
68
|
+
parts.push(`**Goal**: ${state.goal}`);
|
|
69
|
+
usedSources.push('goal');
|
|
70
|
+
}
|
|
71
|
+
// Plan progress
|
|
72
|
+
if (this.config.sources.includes('plan') && state.plan) {
|
|
73
|
+
const planSummary = this.buildPlanSummary(state.plan);
|
|
74
|
+
if (planSummary) {
|
|
75
|
+
parts.push(planSummary);
|
|
76
|
+
usedSources.push('plan');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Todo list
|
|
80
|
+
if (this.config.sources.includes('todo') && state.todos?.length) {
|
|
81
|
+
const todoSummary = this.buildTodoSummary(state.todos);
|
|
82
|
+
if (todoSummary) {
|
|
83
|
+
parts.push(todoSummary);
|
|
84
|
+
usedSources.push('todo');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Memory context
|
|
88
|
+
if (this.config.sources.includes('memory') && state.memories?.length) {
|
|
89
|
+
const memorySummary = this.buildMemorySummary(state.memories);
|
|
90
|
+
if (memorySummary) {
|
|
91
|
+
parts.push(memorySummary);
|
|
92
|
+
usedSources.push('memory');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Custom content
|
|
96
|
+
if (this.config.sources.includes('custom')) {
|
|
97
|
+
const customContent = this.config.customBuilder(state);
|
|
98
|
+
if (customContent) {
|
|
99
|
+
parts.push(customContent);
|
|
100
|
+
usedSources.push('custom');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Active files (always include if present)
|
|
104
|
+
if (state.activeFiles?.length) {
|
|
105
|
+
parts.push(`**Active files**: ${state.activeFiles.join(', ')}`);
|
|
106
|
+
}
|
|
107
|
+
// Recent errors (warn about them)
|
|
108
|
+
if (state.recentErrors?.length) {
|
|
109
|
+
parts.push(`**Recent errors**: ${state.recentErrors.slice(-2).join('; ')}`);
|
|
110
|
+
}
|
|
111
|
+
if (parts.length === 0) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
const content = parts.join('\n\n');
|
|
115
|
+
// Truncate if too long
|
|
116
|
+
const tokenEstimate = Math.ceil(content.length / 4);
|
|
117
|
+
if (tokenEstimate > this.config.maxTokens) {
|
|
118
|
+
const truncated = this.truncateContent(content, this.config.maxTokens);
|
|
119
|
+
this.emit({ type: 'recitation.built', content: truncated, tokenEstimate: this.config.maxTokens });
|
|
120
|
+
return truncated;
|
|
121
|
+
}
|
|
122
|
+
this.emit({ type: 'recitation.built', content, tokenEstimate });
|
|
123
|
+
return content;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Inject recitation into messages if needed.
|
|
127
|
+
* Returns the modified message array.
|
|
128
|
+
*/
|
|
129
|
+
injectIfNeeded(messages, state) {
|
|
130
|
+
if (!this.shouldInject(state.iteration)) {
|
|
131
|
+
this.emit({
|
|
132
|
+
type: 'recitation.skipped',
|
|
133
|
+
iteration: state.iteration,
|
|
134
|
+
reason: 'not_due',
|
|
135
|
+
});
|
|
136
|
+
return messages;
|
|
137
|
+
}
|
|
138
|
+
const recitationContent = this.buildRecitation(state);
|
|
139
|
+
if (!recitationContent) {
|
|
140
|
+
this.emit({
|
|
141
|
+
type: 'recitation.skipped',
|
|
142
|
+
iteration: state.iteration,
|
|
143
|
+
reason: 'no_content',
|
|
144
|
+
});
|
|
145
|
+
return messages;
|
|
146
|
+
}
|
|
147
|
+
// Create recitation message
|
|
148
|
+
const recitationMessage = {
|
|
149
|
+
role: 'system',
|
|
150
|
+
content: `[Current Status - Iteration ${state.iteration}]\n${recitationContent}`,
|
|
151
|
+
};
|
|
152
|
+
// Track injection
|
|
153
|
+
this.lastInjectionIteration = state.iteration;
|
|
154
|
+
if (this.config.trackHistory) {
|
|
155
|
+
this.history.push({
|
|
156
|
+
iteration: state.iteration,
|
|
157
|
+
timestamp: new Date().toISOString(),
|
|
158
|
+
content: recitationContent,
|
|
159
|
+
sources: this.config.sources.filter(s => recitationContent.toLowerCase().includes(s.toLowerCase())),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
this.emit({
|
|
163
|
+
type: 'recitation.injected',
|
|
164
|
+
iteration: state.iteration,
|
|
165
|
+
sources: this.config.sources,
|
|
166
|
+
});
|
|
167
|
+
// Inject at the END of messages (before the final user message if present)
|
|
168
|
+
const lastUserIndex = this.findLastUserMessageIndex(messages);
|
|
169
|
+
if (lastUserIndex >= 0) {
|
|
170
|
+
// Insert before the last user message
|
|
171
|
+
return [
|
|
172
|
+
...messages.slice(0, lastUserIndex),
|
|
173
|
+
recitationMessage,
|
|
174
|
+
...messages.slice(lastUserIndex),
|
|
175
|
+
];
|
|
176
|
+
}
|
|
177
|
+
// No user message at end, just append
|
|
178
|
+
return [...messages, recitationMessage];
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Force recitation injection regardless of frequency.
|
|
182
|
+
*/
|
|
183
|
+
forceInject(messages, state) {
|
|
184
|
+
const originalFrequency = this.config.frequency;
|
|
185
|
+
this.config.frequency = 0; // Force injection
|
|
186
|
+
const result = this.injectIfNeeded(messages, state);
|
|
187
|
+
this.config.frequency = originalFrequency;
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get injection history.
|
|
192
|
+
*/
|
|
193
|
+
getHistory() {
|
|
194
|
+
return [...this.history];
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Clear history.
|
|
198
|
+
*/
|
|
199
|
+
clearHistory() {
|
|
200
|
+
this.history = [];
|
|
201
|
+
this.lastInjectionIteration = 0;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Update configuration.
|
|
205
|
+
*/
|
|
206
|
+
updateConfig(updates) {
|
|
207
|
+
Object.assign(this.config, updates);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Subscribe to events.
|
|
211
|
+
*/
|
|
212
|
+
on(listener) {
|
|
213
|
+
this.listeners.push(listener);
|
|
214
|
+
return () => {
|
|
215
|
+
const idx = this.listeners.indexOf(listener);
|
|
216
|
+
if (idx >= 0)
|
|
217
|
+
this.listeners.splice(idx, 1);
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// Internal methods
|
|
221
|
+
buildPlanSummary(plan) {
|
|
222
|
+
const completedCount = plan.tasks.filter(t => t.status === 'completed').length;
|
|
223
|
+
const totalCount = plan.tasks.length;
|
|
224
|
+
const currentTask = plan.tasks[plan.currentTaskIndex];
|
|
225
|
+
const lines = [
|
|
226
|
+
`**Plan Progress**: ${completedCount}/${totalCount} tasks completed`,
|
|
227
|
+
];
|
|
228
|
+
if (currentTask) {
|
|
229
|
+
lines.push(`**Current Task**: ${currentTask.description}`);
|
|
230
|
+
}
|
|
231
|
+
// Show next pending tasks (max 2)
|
|
232
|
+
const pendingTasks = plan.tasks
|
|
233
|
+
.filter(t => t.status === 'pending')
|
|
234
|
+
.slice(0, 2);
|
|
235
|
+
if (pendingTasks.length > 0) {
|
|
236
|
+
lines.push('**Next**: ' + pendingTasks.map(t => t.description).join('; '));
|
|
237
|
+
}
|
|
238
|
+
return lines.join('\n');
|
|
239
|
+
}
|
|
240
|
+
buildTodoSummary(todos) {
|
|
241
|
+
const pending = todos.filter(t => t.status === 'pending');
|
|
242
|
+
const inProgress = todos.filter(t => t.status === 'in_progress');
|
|
243
|
+
const completed = todos.filter(t => t.status === 'completed');
|
|
244
|
+
const lines = [
|
|
245
|
+
`**Todo Status**: ${completed.length} done, ${inProgress.length} active, ${pending.length} pending`,
|
|
246
|
+
];
|
|
247
|
+
if (inProgress.length > 0) {
|
|
248
|
+
lines.push('**In Progress**: ' + inProgress.map(t => t.content).join('; '));
|
|
249
|
+
}
|
|
250
|
+
if (pending.length > 0 && pending.length <= 3) {
|
|
251
|
+
lines.push('**Remaining**: ' + pending.map(t => t.content).join('; '));
|
|
252
|
+
}
|
|
253
|
+
else if (pending.length > 3) {
|
|
254
|
+
lines.push('**Next**: ' + pending.slice(0, 3).map(t => t.content).join('; ') +
|
|
255
|
+
` (+${pending.length - 3} more)`);
|
|
256
|
+
}
|
|
257
|
+
return lines.join('\n');
|
|
258
|
+
}
|
|
259
|
+
buildMemorySummary(memories) {
|
|
260
|
+
if (memories.length === 0)
|
|
261
|
+
return '';
|
|
262
|
+
const maxMemories = 3;
|
|
263
|
+
const shown = memories.slice(0, maxMemories);
|
|
264
|
+
let summary = '**Relevant Context**: ' + shown.join('; ');
|
|
265
|
+
if (memories.length > maxMemories) {
|
|
266
|
+
summary += ` (+${memories.length - maxMemories} more)`;
|
|
267
|
+
}
|
|
268
|
+
return summary;
|
|
269
|
+
}
|
|
270
|
+
truncateContent(content, maxTokens) {
|
|
271
|
+
const maxChars = maxTokens * 4;
|
|
272
|
+
if (content.length <= maxChars)
|
|
273
|
+
return content;
|
|
274
|
+
return content.slice(0, maxChars - 20) + '\n...[truncated]';
|
|
275
|
+
}
|
|
276
|
+
findLastUserMessageIndex(messages) {
|
|
277
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
278
|
+
if (messages[i].role === 'user') {
|
|
279
|
+
return i;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return -1;
|
|
283
|
+
}
|
|
284
|
+
emit(event) {
|
|
285
|
+
for (const listener of this.listeners) {
|
|
286
|
+
try {
|
|
287
|
+
listener(event);
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
// Ignore listener errors
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// =============================================================================
|
|
296
|
+
// FACTORY FUNCTIONS
|
|
297
|
+
// =============================================================================
|
|
298
|
+
/**
|
|
299
|
+
* Create a recitation manager.
|
|
300
|
+
*
|
|
301
|
+
* @example
|
|
302
|
+
* ```typescript
|
|
303
|
+
* const recitation = createRecitationManager({
|
|
304
|
+
* frequency: 5, // Every 5 iterations
|
|
305
|
+
* sources: ['goal', 'plan', 'todo'],
|
|
306
|
+
* maxTokens: 500,
|
|
307
|
+
* });
|
|
308
|
+
*
|
|
309
|
+
* // In agent loop
|
|
310
|
+
* const enrichedMessages = recitation.injectIfNeeded(messages, {
|
|
311
|
+
* iteration: currentIteration,
|
|
312
|
+
* goal: 'Implement user authentication',
|
|
313
|
+
* plan: currentPlan,
|
|
314
|
+
* todos: currentTodos,
|
|
315
|
+
* });
|
|
316
|
+
* ```
|
|
317
|
+
*/
|
|
318
|
+
export function createRecitationManager(config) {
|
|
319
|
+
return new RecitationManager(config);
|
|
320
|
+
}
|
|
321
|
+
// =============================================================================
|
|
322
|
+
// UTILITIES
|
|
323
|
+
// =============================================================================
|
|
324
|
+
/**
|
|
325
|
+
* Quick helper to build a recitation block without full manager.
|
|
326
|
+
*/
|
|
327
|
+
export function buildQuickRecitation(state) {
|
|
328
|
+
const parts = [];
|
|
329
|
+
if (state.goal) {
|
|
330
|
+
parts.push(`Goal: ${state.goal}`);
|
|
331
|
+
}
|
|
332
|
+
if (state.plan) {
|
|
333
|
+
const completed = state.plan.tasks.filter(t => t.status === 'completed').length;
|
|
334
|
+
parts.push(`Progress: ${completed}/${state.plan.tasks.length} tasks`);
|
|
335
|
+
const current = state.plan.tasks[state.plan.currentTaskIndex];
|
|
336
|
+
if (current) {
|
|
337
|
+
parts.push(`Current: ${current.description}`);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
if (state.todos?.length) {
|
|
341
|
+
const pending = state.todos.filter(t => t.status !== 'completed').length;
|
|
342
|
+
parts.push(`Todos: ${pending} remaining`);
|
|
343
|
+
}
|
|
344
|
+
return parts.join(' | ');
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Calculate optimal recitation frequency based on context size.
|
|
348
|
+
* Longer contexts need more frequent recitation.
|
|
349
|
+
*/
|
|
350
|
+
export function calculateOptimalFrequency(contextTokens) {
|
|
351
|
+
if (contextTokens < 10000)
|
|
352
|
+
return 10; // Light context
|
|
353
|
+
if (contextTokens < 30000)
|
|
354
|
+
return 7; // Medium context
|
|
355
|
+
if (contextTokens < 60000)
|
|
356
|
+
return 5; // Heavy context
|
|
357
|
+
return 3; // Very heavy context - recite often
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Format recitation history for debugging.
|
|
361
|
+
*/
|
|
362
|
+
export function formatRecitationHistory(history) {
|
|
363
|
+
if (history.length === 0) {
|
|
364
|
+
return 'No recitation history.';
|
|
365
|
+
}
|
|
366
|
+
const lines = ['Recitation History:', ''];
|
|
367
|
+
for (const entry of history.slice(-5)) {
|
|
368
|
+
lines.push(`[Iteration ${entry.iteration}] (${entry.sources.join(', ')})`);
|
|
369
|
+
lines.push(` ${entry.content.slice(0, 100)}${entry.content.length > 100 ? '...' : ''}`);
|
|
370
|
+
lines.push('');
|
|
371
|
+
}
|
|
372
|
+
return lines.join('\n');
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=recitation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recitation.js","sourceRoot":"","sources":["../../../src/tricks/recitation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trick R: Reversible Compaction
|
|
3
|
+
*
|
|
4
|
+
* Preserves "reconstruction recipes" during context compaction.
|
|
5
|
+
* Instead of discarding information, store retrieval keys so the model
|
|
6
|
+
* can fetch details when needed.
|
|
7
|
+
*
|
|
8
|
+
* Problem: Traditional compaction loses important details forever.
|
|
9
|
+
* When a file path or URL is summarized away, the model can't recover it.
|
|
10
|
+
*
|
|
11
|
+
* Solution: Extract and preserve references (URLs, file paths, function names)
|
|
12
|
+
* as "reconstruction recipes" - minimal keys that enable re-retrieval.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { createReversibleCompactor, extractReferences } from './reversible-compaction';
|
|
17
|
+
*
|
|
18
|
+
* const compactor = createReversibleCompactor({
|
|
19
|
+
* preserveTypes: ['file', 'url', 'function', 'error'],
|
|
20
|
+
* maxReferences: 50,
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* // Compact with reference preservation
|
|
24
|
+
* const result = compactor.compact(messages, {
|
|
25
|
+
* summarize: async (msgs) => summarizeLLM(msgs),
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* console.log(result.summary); // Condensed summary
|
|
29
|
+
* console.log(result.references); // Preserved references for retrieval
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* Types of references that can be preserved.
|
|
34
|
+
*/
|
|
35
|
+
export type ReferenceType = 'file' | 'url' | 'function' | 'class' | 'error' | 'command' | 'snippet' | 'decision' | 'custom';
|
|
36
|
+
/**
|
|
37
|
+
* A preserved reference that can be used for retrieval.
|
|
38
|
+
*/
|
|
39
|
+
export interface Reference {
|
|
40
|
+
/** Unique ID for this reference */
|
|
41
|
+
id: string;
|
|
42
|
+
/** Type of reference */
|
|
43
|
+
type: ReferenceType;
|
|
44
|
+
/** The actual value (path, URL, name, etc.) */
|
|
45
|
+
value: string;
|
|
46
|
+
/** Brief context about this reference */
|
|
47
|
+
context?: string;
|
|
48
|
+
/** When this reference was encountered */
|
|
49
|
+
timestamp: string;
|
|
50
|
+
/** Source message index (before compaction) */
|
|
51
|
+
sourceIndex?: number;
|
|
52
|
+
/** Relevance score (0-1) for prioritization */
|
|
53
|
+
relevance?: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Configuration for reversible compaction.
|
|
57
|
+
*/
|
|
58
|
+
export interface ReversibleCompactionConfig {
|
|
59
|
+
/** Types of references to preserve */
|
|
60
|
+
preserveTypes: ReferenceType[];
|
|
61
|
+
/** Maximum references to keep */
|
|
62
|
+
maxReferences?: number;
|
|
63
|
+
/** Whether to deduplicate references */
|
|
64
|
+
deduplicate?: boolean;
|
|
65
|
+
/** Custom extractors for specific reference types */
|
|
66
|
+
customExtractors?: Map<ReferenceType, ReferenceExtractor>;
|
|
67
|
+
/** Minimum relevance score to preserve (0-1) */
|
|
68
|
+
minRelevance?: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Result of compaction.
|
|
72
|
+
*/
|
|
73
|
+
export interface CompactionResult {
|
|
74
|
+
/** The summarized content */
|
|
75
|
+
summary: string;
|
|
76
|
+
/** Preserved references for retrieval */
|
|
77
|
+
references: Reference[];
|
|
78
|
+
/** Statistics about the compaction */
|
|
79
|
+
stats: CompactionStats;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Statistics about compaction.
|
|
83
|
+
*/
|
|
84
|
+
export interface CompactionStats {
|
|
85
|
+
/** Original message count */
|
|
86
|
+
originalMessages: number;
|
|
87
|
+
/** Original estimated tokens */
|
|
88
|
+
originalTokens: number;
|
|
89
|
+
/** Compacted token count */
|
|
90
|
+
compactedTokens: number;
|
|
91
|
+
/** References extracted */
|
|
92
|
+
referencesExtracted: number;
|
|
93
|
+
/** References preserved (after dedup/limits) */
|
|
94
|
+
referencesPreserved: number;
|
|
95
|
+
/** Compression ratio */
|
|
96
|
+
compressionRatio: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Message for compaction.
|
|
100
|
+
*/
|
|
101
|
+
export interface CompactionMessage {
|
|
102
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
103
|
+
content: string;
|
|
104
|
+
name?: string;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Custom reference extractor function.
|
|
108
|
+
*/
|
|
109
|
+
export type ReferenceExtractor = (content: string, index: number) => Reference[];
|
|
110
|
+
/**
|
|
111
|
+
* Options for compact operation.
|
|
112
|
+
*/
|
|
113
|
+
export interface CompactOptions {
|
|
114
|
+
/** Function to summarize messages */
|
|
115
|
+
summarize: (messages: CompactionMessage[]) => Promise<string>;
|
|
116
|
+
/** Additional context to preserve */
|
|
117
|
+
additionalContext?: string;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Events emitted during compaction.
|
|
121
|
+
*/
|
|
122
|
+
export type CompactionEvent = {
|
|
123
|
+
type: 'compaction.started';
|
|
124
|
+
messageCount: number;
|
|
125
|
+
} | {
|
|
126
|
+
type: 'reference.extracted';
|
|
127
|
+
reference: Reference;
|
|
128
|
+
} | {
|
|
129
|
+
type: 'reference.deduplicated';
|
|
130
|
+
kept: number;
|
|
131
|
+
removed: number;
|
|
132
|
+
} | {
|
|
133
|
+
type: 'compaction.completed';
|
|
134
|
+
stats: CompactionStats;
|
|
135
|
+
};
|
|
136
|
+
export type CompactionEventListener = (event: CompactionEvent) => void;
|
|
137
|
+
/**
|
|
138
|
+
* Extract file path references from content.
|
|
139
|
+
*/
|
|
140
|
+
export declare function extractFileReferences(content: string, sourceIndex?: number): Reference[];
|
|
141
|
+
/**
|
|
142
|
+
* Extract URL references from content.
|
|
143
|
+
*/
|
|
144
|
+
export declare function extractUrlReferences(content: string, sourceIndex?: number): Reference[];
|
|
145
|
+
/**
|
|
146
|
+
* Extract function/method references from content.
|
|
147
|
+
*/
|
|
148
|
+
export declare function extractFunctionReferences(content: string, sourceIndex?: number): Reference[];
|
|
149
|
+
/**
|
|
150
|
+
* Extract error references from content.
|
|
151
|
+
*/
|
|
152
|
+
export declare function extractErrorReferences(content: string, sourceIndex?: number): Reference[];
|
|
153
|
+
/**
|
|
154
|
+
* Extract command references from content.
|
|
155
|
+
*/
|
|
156
|
+
export declare function extractCommandReferences(content: string, sourceIndex?: number): Reference[];
|
|
157
|
+
/**
|
|
158
|
+
* Extract all references from content.
|
|
159
|
+
*/
|
|
160
|
+
export declare function extractReferences(content: string, types: ReferenceType[], sourceIndex?: number, customExtractors?: Map<ReferenceType, ReferenceExtractor>): Reference[];
|
|
161
|
+
/**
|
|
162
|
+
* Manages reversible context compaction.
|
|
163
|
+
*/
|
|
164
|
+
export declare class ReversibleCompactor {
|
|
165
|
+
private config;
|
|
166
|
+
private preservedReferences;
|
|
167
|
+
private listeners;
|
|
168
|
+
constructor(config: ReversibleCompactionConfig);
|
|
169
|
+
/**
|
|
170
|
+
* Compact messages while preserving references.
|
|
171
|
+
*/
|
|
172
|
+
compact(messages: CompactionMessage[], options: CompactOptions): Promise<CompactionResult>;
|
|
173
|
+
/**
|
|
174
|
+
* Format references as a block for inclusion in context.
|
|
175
|
+
*/
|
|
176
|
+
formatReferencesBlock(references: Reference[]): string;
|
|
177
|
+
/**
|
|
178
|
+
* Get a reference by ID.
|
|
179
|
+
*/
|
|
180
|
+
getReference(id: string): Reference | undefined;
|
|
181
|
+
/**
|
|
182
|
+
* Get references by type.
|
|
183
|
+
*/
|
|
184
|
+
getReferencesByType(type: ReferenceType): Reference[];
|
|
185
|
+
/**
|
|
186
|
+
* Search references by value.
|
|
187
|
+
*/
|
|
188
|
+
searchReferences(query: string): Reference[];
|
|
189
|
+
/**
|
|
190
|
+
* Get all preserved references.
|
|
191
|
+
*/
|
|
192
|
+
getPreservedReferences(): Reference[];
|
|
193
|
+
/**
|
|
194
|
+
* Clear preserved references.
|
|
195
|
+
*/
|
|
196
|
+
clear(): void;
|
|
197
|
+
/**
|
|
198
|
+
* Subscribe to events.
|
|
199
|
+
*/
|
|
200
|
+
on(listener: CompactionEventListener): () => void;
|
|
201
|
+
private deduplicateReferences;
|
|
202
|
+
private emit;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Create a reversible compactor.
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```typescript
|
|
209
|
+
* const compactor = createReversibleCompactor({
|
|
210
|
+
* preserveTypes: ['file', 'url', 'error'],
|
|
211
|
+
* maxReferences: 50,
|
|
212
|
+
* deduplicate: true,
|
|
213
|
+
* });
|
|
214
|
+
*
|
|
215
|
+
* const result = await compactor.compact(messages, {
|
|
216
|
+
* summarize: async (msgs) => {
|
|
217
|
+
* // Use LLM to summarize
|
|
218
|
+
* return await llm.summarize(msgs);
|
|
219
|
+
* },
|
|
220
|
+
* });
|
|
221
|
+
*
|
|
222
|
+
* // Result includes both summary and preserved references
|
|
223
|
+
* console.log(result.summary);
|
|
224
|
+
* console.log(result.references);
|
|
225
|
+
*
|
|
226
|
+
* // Later, search for specific references
|
|
227
|
+
* const fileRefs = compactor.getReferencesByType('file');
|
|
228
|
+
* const errorRefs = compactor.searchReferences('TypeError');
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
export declare function createReversibleCompactor(config: ReversibleCompactionConfig): ReversibleCompactor;
|
|
232
|
+
/**
|
|
233
|
+
* Quick helper to extract references without full compaction.
|
|
234
|
+
*/
|
|
235
|
+
export declare function quickExtract(content: string, types?: ReferenceType[]): Reference[];
|
|
236
|
+
/**
|
|
237
|
+
* Create a reconstruction prompt for re-fetching details.
|
|
238
|
+
*/
|
|
239
|
+
export declare function createReconstructionPrompt(references: Reference[]): string;
|
|
240
|
+
/**
|
|
241
|
+
* Calculate relevance score for a reference based on context.
|
|
242
|
+
*/
|
|
243
|
+
export declare function calculateRelevance(reference: Reference, context: {
|
|
244
|
+
goal?: string;
|
|
245
|
+
recentTopics?: string[];
|
|
246
|
+
}): number;
|
|
247
|
+
/**
|
|
248
|
+
* Format compaction stats for display.
|
|
249
|
+
*/
|
|
250
|
+
export declare function formatCompactionStats(stats: CompactionStats): string;
|
|
251
|
+
//# sourceMappingURL=reversible-compaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reversible-compaction.d.ts","sourceRoot":"","sources":["../../../src/tricks/reversible-compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAMH;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,KAAK,GACL,UAAU,GACV,OAAO,GACP,OAAO,GACP,SAAS,GACT,SAAS,GACT,UAAU,GACV,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,EAAE,EAAE,MAAM,CAAC;IAEX,wBAAwB;IACxB,IAAI,EAAE,aAAa,CAAC;IAEpB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IAEd,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAElB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,sCAAsC;IACtC,aAAa,EAAE,aAAa,EAAE,CAAC;IAE/B,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;IAE1D,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,yCAAyC;IACzC,UAAU,EAAE,SAAS,EAAE,CAAC;IAExB,sCAAsC;IACtC,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IAEvB,4BAA4B;IAC5B,eAAe,EAAE,MAAM,CAAC;IAExB,2BAA2B;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAE5B,gDAAgD;IAChD,mBAAmB,EAAE,MAAM,CAAC;IAE5B,wBAAwB;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,SAAS,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9D,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;AAMvE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CA6BxF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAmCvF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CA2C5F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CA0CzF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAiC3F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,EAAE,EACtB,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,kBAAkB,CAAC,GACxD,SAAS,EAAE,CAiCb;AAMD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,mBAAmB,CAAmB;IAC9C,OAAO,CAAC,SAAS,CAAiC;gBAEtC,MAAM,EAAE,0BAA0B;IAU9C;;OAEG;IACG,OAAO,CACX,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,gBAAgB,CAAC;IAwE5B;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM;IAuBtD;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI/C;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE;IAIrD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE;IAO5C;;OAEG;IACH,sBAAsB,IAAI,SAAS,EAAE;IAIrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,EAAE,CAAC,QAAQ,EAAE,uBAAuB,GAAG,MAAM,IAAI;IAUjD,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,IAAI;CASb;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,0BAA0B,GACjC,mBAAmB,CAErB;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,aAAa,EAAyC,GAC5D,SAAS,EAAE,CAEb;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CA2D1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAClD,MAAM,CA6BR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAQpE"}
|