@superblocksteam/vite-plugin-file-sync 2.0.77 → 2.0.78-next.1
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/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js +26 -0
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.js +13 -0
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-executor.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-executor.js +102 -7
- package/dist/ai-service/agent/tools/apis/api-executor.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api-artifact.d.ts +17 -0
- package/dist/ai-service/agent/tools/apis/build-api-artifact.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api-artifact.js +20 -12
- package/dist/ai-service/agent/tools/apis/build-api-artifact.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api.js +9 -1
- package/dist/ai-service/agent/tools/apis/build-api.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/get-api-docs.d.ts +46 -0
- package/dist/ai-service/agent/tools/apis/get-api-docs.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/get-api-docs.js +326 -58
- package/dist/ai-service/agent/tools/apis/get-api-docs.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/integration-types.d.ts +20 -1
- package/dist/ai-service/agent/tools/apis/integration-types.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/integration-types.js +1033 -288
- package/dist/ai-service/agent/tools/apis/integration-types.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.d.ts +1 -1
- package/dist/ai-service/agent/tools/apis/write-api.d.ts +2 -2
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +1 -1
- package/dist/ai-service/agent/tools/build-read-file.d.ts +1 -1
- package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +1 -1
- package/dist/ai-service/agent/tools/integrations/metadata.js +1 -1
- package/dist/ai-service/agent/tools/integrations/metadata.js.map +1 -1
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +18 -10
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js +11 -7
- package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +27 -5
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata-ripgrep.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata-ripgrep.js +78 -7
- package/dist/ai-service/agent/tools2/tools/grep-metadata-ripgrep.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts +6 -2
- package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata.js +26 -0
- package/dist/ai-service/agent/tools2/tools/grep-metadata.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/index.d.ts +2 -0
- package/dist/ai-service/agent/tools2/tools/index.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/index.js +2 -0
- package/dist/ai-service/agent/tools2/tools/index.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/list-attachments.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/list-attachments.js +2 -3
- package/dist/ai-service/agent/tools2/tools/list-attachments.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/start-test-run.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/start-test-run.js +51 -6
- package/dist/ai-service/agent/tools2/tools/start-test-run.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/web-fetch.d.ts +28 -0
- package/dist/ai-service/agent/tools2/tools/web-fetch.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/web-fetch.js +274 -0
- package/dist/ai-service/agent/tools2/tools/web-fetch.js.map +1 -0
- package/dist/ai-service/agent/tools2/tools/web-search.d.ts +25 -0
- package/dist/ai-service/agent/tools2/tools/web-search.d.ts.map +1 -0
- package/dist/ai-service/agent/tools2/tools/web-search.js +210 -0
- package/dist/ai-service/agent/tools2/tools/web-search.js.map +1 -0
- package/dist/ai-service/attachments/store.d.ts +4 -4
- package/dist/ai-service/attachments/store.d.ts.map +1 -1
- package/dist/ai-service/attachments/store.js.map +1 -1
- package/dist/ai-service/chat/chat-session-store.d.ts +19 -4
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +32 -6
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/clark-provider/clark-language-model.d.ts.map +1 -1
- package/dist/ai-service/clark-provider/clark-language-model.js +11 -2
- package/dist/ai-service/clark-provider/clark-language-model.js.map +1 -1
- package/dist/ai-service/const.d.ts +3 -2
- package/dist/ai-service/const.d.ts.map +1 -1
- package/dist/ai-service/const.js +3 -2
- package/dist/ai-service/const.js.map +1 -1
- package/dist/ai-service/context-download.d.ts +4 -1
- package/dist/ai-service/context-download.d.ts.map +1 -1
- package/dist/ai-service/context-download.js +36 -7
- package/dist/ai-service/context-download.js.map +1 -1
- package/dist/ai-service/features.d.ts +8 -0
- package/dist/ai-service/features.d.ts.map +1 -1
- package/dist/ai-service/features.js +8 -0
- package/dist/ai-service/features.js.map +1 -1
- package/dist/ai-service/index.d.ts +1 -0
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +101 -18
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/integrations/store.d.ts +14 -2
- package/dist/ai-service/integrations/store.d.ts.map +1 -1
- package/dist/ai-service/integrations/store.js +19 -2
- package/dist/ai-service/integrations/store.js.map +1 -1
- package/dist/ai-service/judge/judge-eval-service-runner.d.ts.map +1 -1
- package/dist/ai-service/judge/judge-eval-service-runner.js +7 -0
- package/dist/ai-service/judge/judge-eval-service-runner.js.map +1 -1
- package/dist/ai-service/llm/client.d.ts +29 -11
- package/dist/ai-service/llm/client.d.ts.map +1 -1
- package/dist/ai-service/llm/client.js +95 -78
- package/dist/ai-service/llm/client.js.map +1 -1
- package/dist/ai-service/llm/context/context.d.ts +2 -1
- package/dist/ai-service/llm/context/context.d.ts.map +1 -1
- package/dist/ai-service/llm/context/context.js.map +1 -1
- package/dist/ai-service/llm/context/conversation-context.d.ts +89 -0
- package/dist/ai-service/llm/context/conversation-context.d.ts.map +1 -0
- package/dist/ai-service/llm/context/conversation-context.js +13 -0
- package/dist/ai-service/llm/context/conversation-context.js.map +1 -0
- package/dist/ai-service/llm/context/index.d.ts +1 -0
- package/dist/ai-service/llm/context/index.d.ts.map +1 -1
- package/dist/ai-service/llm/context/utils/get-loaded-context.d.ts +12 -0
- package/dist/ai-service/llm/context/utils/get-loaded-context.d.ts.map +1 -0
- package/dist/ai-service/llm/context/utils/get-loaded-context.js +7 -0
- package/dist/ai-service/llm/context/utils/get-loaded-context.js.map +1 -0
- package/dist/ai-service/llm/context/utils/index.d.ts +1 -5
- package/dist/ai-service/llm/context/utils/index.d.ts.map +1 -1
- package/dist/ai-service/llm/context/utils/index.js +1 -5
- package/dist/ai-service/llm/context/utils/index.js.map +1 -1
- package/dist/ai-service/llm/context-v2/adapter.d.ts +26 -0
- package/dist/ai-service/llm/context-v2/adapter.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/adapter.js +88 -0
- package/dist/ai-service/llm/context-v2/adapter.js.map +1 -0
- package/dist/ai-service/llm/context-v2/caching.d.ts +39 -0
- package/dist/ai-service/llm/context-v2/caching.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/caching.js +48 -0
- package/dist/ai-service/llm/context-v2/caching.js.map +1 -0
- package/dist/ai-service/llm/context-v2/compactor.d.ts +16 -0
- package/dist/ai-service/llm/context-v2/compactor.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/compactor.js +164 -0
- package/dist/ai-service/llm/context-v2/compactor.js.map +1 -0
- package/dist/ai-service/llm/context-v2/config.d.ts +6 -0
- package/dist/ai-service/llm/context-v2/config.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/config.js +8 -0
- package/dist/ai-service/llm/context-v2/config.js.map +1 -0
- package/dist/ai-service/llm/context-v2/context.d.ts +61 -0
- package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/context.js +238 -0
- package/dist/ai-service/llm/context-v2/context.js.map +1 -0
- package/dist/ai-service/llm/context-v2/index.d.ts +16 -0
- package/dist/ai-service/llm/context-v2/index.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/index.js +16 -0
- package/dist/ai-service/llm/context-v2/index.js.map +1 -0
- package/dist/ai-service/llm/context-v2/manager.d.ts +57 -0
- package/dist/ai-service/llm/context-v2/manager.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/manager.js +129 -0
- package/dist/ai-service/llm/context-v2/manager.js.map +1 -0
- package/dist/ai-service/llm/context-v2/migrations/index.d.ts +8 -0
- package/dist/ai-service/llm/context-v2/migrations/index.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/migrations/index.js +8 -0
- package/dist/ai-service/llm/context-v2/migrations/index.js.map +1 -0
- package/dist/ai-service/llm/context-v2/migrations/registry.d.ts +19 -0
- package/dist/ai-service/llm/context-v2/migrations/registry.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/migrations/registry.js +32 -0
- package/dist/ai-service/llm/context-v2/migrations/registry.js.map +1 -0
- package/dist/ai-service/llm/context-v2/migrations/runner.d.ts +3 -0
- package/dist/ai-service/llm/context-v2/migrations/runner.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/migrations/runner.js +61 -0
- package/dist/ai-service/llm/context-v2/migrations/runner.js.map +1 -0
- package/dist/ai-service/llm/context-v2/migrations/types.d.ts +22 -0
- package/dist/ai-service/llm/context-v2/migrations/types.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/migrations/types.js +33 -0
- package/dist/ai-service/llm/context-v2/migrations/types.js.map +1 -0
- package/dist/ai-service/llm/context-v2/migrations/v1-to-v2.d.ts +29 -0
- package/dist/ai-service/llm/context-v2/migrations/v1-to-v2.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/migrations/v1-to-v2.js +143 -0
- package/dist/ai-service/llm/context-v2/migrations/v1-to-v2.js.map +1 -0
- package/dist/ai-service/llm/context-v2/operation-queue.d.ts +9 -0
- package/dist/ai-service/llm/context-v2/operation-queue.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/operation-queue.js +13 -0
- package/dist/ai-service/llm/context-v2/operation-queue.js.map +1 -0
- package/dist/ai-service/llm/context-v2/phase1-tool-summarizer.d.ts +16 -0
- package/dist/ai-service/llm/context-v2/phase1-tool-summarizer.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/phase1-tool-summarizer.js +135 -0
- package/dist/ai-service/llm/context-v2/phase1-tool-summarizer.js.map +1 -0
- package/dist/ai-service/llm/context-v2/phase2-session-summarizer.d.ts +20 -0
- package/dist/ai-service/llm/context-v2/phase2-session-summarizer.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/phase2-session-summarizer.js +213 -0
- package/dist/ai-service/llm/context-v2/phase2-session-summarizer.js.map +1 -0
- package/dist/ai-service/llm/context-v2/prompts/compaction.d.ts +11 -0
- package/dist/ai-service/llm/context-v2/prompts/compaction.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/prompts/compaction.js +57 -0
- package/dist/ai-service/llm/context-v2/prompts/compaction.js.map +1 -0
- package/dist/ai-service/llm/context-v2/session-capture.d.ts +18 -0
- package/dist/ai-service/llm/context-v2/session-capture.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/session-capture.js +64 -0
- package/dist/ai-service/llm/context-v2/session-capture.js.map +1 -0
- package/dist/ai-service/llm/context-v2/storage/index.d.ts +14 -0
- package/dist/ai-service/llm/context-v2/storage/index.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/storage/index.js +2 -0
- package/dist/ai-service/llm/context-v2/storage/index.js.map +1 -0
- package/dist/ai-service/llm/context-v2/storage/local.d.ts +25 -0
- package/dist/ai-service/llm/context-v2/storage/local.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/storage/local.js +71 -0
- package/dist/ai-service/llm/context-v2/storage/local.js.map +1 -0
- package/dist/ai-service/llm/context-v2/storage/types.d.ts +12 -0
- package/dist/ai-service/llm/context-v2/storage/types.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/storage/types.js +2 -0
- package/dist/ai-service/llm/context-v2/storage/types.js.map +1 -0
- package/dist/ai-service/llm/context-v2/token-tracker.d.ts +4 -0
- package/dist/ai-service/llm/context-v2/token-tracker.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/token-tracker.js +13 -0
- package/dist/ai-service/llm/context-v2/token-tracker.js.map +1 -0
- package/dist/ai-service/llm/context-v2/truncation-fallback.d.ts +10 -0
- package/dist/ai-service/llm/context-v2/truncation-fallback.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/truncation-fallback.js +120 -0
- package/dist/ai-service/llm/context-v2/truncation-fallback.js.map +1 -0
- package/dist/ai-service/llm/context-v2/turns.d.ts +23 -0
- package/dist/ai-service/llm/context-v2/turns.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/turns.js +61 -0
- package/dist/ai-service/llm/context-v2/turns.js.map +1 -0
- package/dist/ai-service/llm/context-v2/types.d.ts +100 -0
- package/dist/ai-service/llm/context-v2/types.d.ts.map +1 -0
- package/dist/ai-service/llm/context-v2/types.js +262 -0
- package/dist/ai-service/llm/context-v2/types.js.map +1 -0
- package/dist/ai-service/llm/error.d.ts +4 -0
- package/dist/ai-service/llm/error.d.ts.map +1 -1
- package/dist/ai-service/llm/error.js +26 -0
- package/dist/ai-service/llm/error.js.map +1 -1
- package/dist/ai-service/llm/impl/clark.d.ts.map +1 -1
- package/dist/ai-service/llm/impl/clark.js +3 -2
- package/dist/ai-service/llm/impl/clark.js.map +1 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.js +3 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -1
- package/dist/ai-service/llm/provider.d.ts +2 -2
- package/dist/ai-service/llm/provider.d.ts.map +1 -1
- package/dist/ai-service/llm/provider.js +2 -2
- package/dist/ai-service/llm/provider.js.map +1 -1
- package/dist/ai-service/llm/stream/event-bus.d.ts +1 -1
- package/dist/ai-service/llm/stream/event-bus.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/observers/context.d.ts +2 -9
- package/dist/ai-service/llm/stream/observers/context.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/observers/context.js +4 -4
- package/dist/ai-service/llm/stream/observers/context.js.map +1 -1
- package/dist/ai-service/llm/stream/observers/llmobs.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/observers/llmobs.js +2 -1
- package/dist/ai-service/llm/stream/observers/llmobs.js.map +1 -1
- package/dist/ai-service/llm/stream/observers/logging.js +1 -1
- package/dist/ai-service/llm/stream/observers/logging.js.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.js +22 -13
- package/dist/ai-service/llm/stream/orchestrator.js.map +1 -1
- package/dist/ai-service/llm/stream/session.d.ts +3 -0
- package/dist/ai-service/llm/stream/session.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/session.js +2 -0
- package/dist/ai-service/llm/stream/session.js.map +1 -1
- package/dist/ai-service/llm/utils.d.ts +2 -2
- package/dist/ai-service/llm/utils.d.ts.map +1 -1
- package/dist/ai-service/llm/utils.js +27 -10
- package/dist/ai-service/llm/utils.js.map +1 -1
- package/dist/ai-service/llm/workflow-metrics.d.ts +14 -0
- package/dist/ai-service/llm/workflow-metrics.d.ts.map +1 -0
- package/dist/ai-service/llm/workflow-metrics.js +19 -0
- package/dist/ai-service/llm/workflow-metrics.js.map +1 -0
- package/dist/ai-service/security/safety-classifier.d.ts +2 -0
- package/dist/ai-service/security/safety-classifier.d.ts.map +1 -1
- package/dist/ai-service/security/safety-classifier.js +9 -6
- package/dist/ai-service/security/safety-classifier.js.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts +15 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +3 -4
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +32 -18
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.js +34 -0
- package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/idle.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/idle.js +6 -1
- package/dist/ai-service/state-machine/handlers/idle.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +84 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +6 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.d.ts +7 -0
- package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.js +24 -8
- package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
- package/dist/ai-service/transform/api-builder/shared.d.ts +5 -0
- package/dist/ai-service/transform/api-builder/shared.d.ts.map +1 -1
- package/dist/ai-service/transform/api-builder/shared.js +13 -1
- package/dist/ai-service/transform/api-builder/shared.js.map +1 -1
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.d.ts +11 -0
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.d.ts.map +1 -1
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.js +11 -4
- package/dist/ai-service/transform/api-builder/to-sdk-transformer.js.map +1 -1
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.d.ts +4 -0
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.d.ts.map +1 -1
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.js +7 -0
- package/dist/ai-service/transform/api-builder/to-yaml-transformer.js.map +1 -1
- package/dist/binding-extraction/extract-identifiers.d.ts.map +1 -1
- package/dist/binding-extraction/extract-identifiers.js +39 -3
- package/dist/binding-extraction/extract-identifiers.js.map +1 -1
- package/dist/clark-log-forwarder.d.ts.map +1 -1
- package/dist/clark-log-forwarder.js +1 -0
- package/dist/clark-log-forwarder.js.map +1 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +4 -1
- package/dist/resolver.js.map +1 -1
- package/dist/router-parser.d.ts.map +1 -1
- package/dist/router-parser.js +34 -9
- package/dist/router-parser.js.map +1 -1
- package/package.json +23 -18
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared interface for conversation context implementations.
|
|
3
|
+
*
|
|
4
|
+
* Both v1 Context and v2 ContextV2Adapter must implement this interface
|
|
5
|
+
* to ensure compile-time parity and prevent feature drift.
|
|
6
|
+
*
|
|
7
|
+
* This interface defines the minimal set of methods required by:
|
|
8
|
+
* - LLMClient (setSystemPrompt, startTurn, getMessages, initializeWith, storeSummary)
|
|
9
|
+
* - ContextObserver (startStep, endStep, endTurn)
|
|
10
|
+
* - AttachmentsStore (setAttachments, getAttachments)
|
|
11
|
+
*/
|
|
12
|
+
import type { CompactionSummary } from "./serialization.js";
|
|
13
|
+
import type { AttachmentsRecord } from "../../attachments/store.js";
|
|
14
|
+
import type { ModelMessage, UserModelMessage, SystemModelMessage, LanguageModelUsage } from "ai";
|
|
15
|
+
/**
|
|
16
|
+
* Core conversation context interface.
|
|
17
|
+
*
|
|
18
|
+
* Implementations:
|
|
19
|
+
* - Context (v1): Full-featured with three-level compaction
|
|
20
|
+
* - ContextV2Adapter (v2): Wrapper around ContextV2 with phase-based compaction
|
|
21
|
+
*/
|
|
22
|
+
export interface ConversationContext {
|
|
23
|
+
/**
|
|
24
|
+
* Sets the system prompt for the conversation.
|
|
25
|
+
*/
|
|
26
|
+
setSystemPrompt(prompt: SystemModelMessage): void;
|
|
27
|
+
/**
|
|
28
|
+
* Starts a new conversation turn with a user message.
|
|
29
|
+
* May be async in v2 implementation.
|
|
30
|
+
*/
|
|
31
|
+
startTurn(user: UserModelMessage): void | Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Starts a new step within the active turn.
|
|
34
|
+
* Called before each LLM inference cycle.
|
|
35
|
+
*/
|
|
36
|
+
startStep(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Ends the current step, recording response messages.
|
|
39
|
+
* @param responses - Accumulated assistant/tool messages for the step
|
|
40
|
+
* @param usage - Optional token usage for compaction decisions
|
|
41
|
+
*/
|
|
42
|
+
endStep(responses: ModelMessage[], usage?: LanguageModelUsage): void | Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Ends the active turn.
|
|
45
|
+
* @param usage - Optional final token usage
|
|
46
|
+
*/
|
|
47
|
+
endTurn(usage?: LanguageModelUsage): void;
|
|
48
|
+
/**
|
|
49
|
+
* Returns all messages in the conversation (system + history).
|
|
50
|
+
* May be async in v2 implementation.
|
|
51
|
+
*/
|
|
52
|
+
getMessages(): ModelMessage[] | Promise<ModelMessage[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Initializes the context with existing messages.
|
|
55
|
+
* Used for ephemeral contexts that need pre-existing conversation history.
|
|
56
|
+
* May be async in v2 implementation.
|
|
57
|
+
*/
|
|
58
|
+
initializeWith(messages: ModelMessage[]): void | Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Stores a tool call summary for use during compaction.
|
|
61
|
+
* Summaries are used to provide meaningful placeholders when
|
|
62
|
+
* tool outputs are compressed.
|
|
63
|
+
*/
|
|
64
|
+
storeSummary(toolCallId: string, summary: CompactionSummary): void;
|
|
65
|
+
/**
|
|
66
|
+
* Sets the attachments record for the context.
|
|
67
|
+
* Used by AttachmentsStore to persist user-uploaded files.
|
|
68
|
+
*/
|
|
69
|
+
setAttachments(attachments: AttachmentsRecord): void;
|
|
70
|
+
/**
|
|
71
|
+
* Gets the attachments record from the context.
|
|
72
|
+
* Returns undefined if no attachments have been set.
|
|
73
|
+
*/
|
|
74
|
+
getAttachments(): AttachmentsRecord | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Truncates all messages after a given timestamp.
|
|
77
|
+
* Messages without timestamps are never truncated (treated as permanent).
|
|
78
|
+
*/
|
|
79
|
+
truncateAfterTimestamp(timestamp: number): void;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Handle for a context instance with release capability.
|
|
83
|
+
* Used by ContextObserver to manage context lifecycle.
|
|
84
|
+
*/
|
|
85
|
+
export interface ContextHandle {
|
|
86
|
+
context: ConversationContext;
|
|
87
|
+
release(): void;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=conversation-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-context.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/context/conversation-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,IAAI,CAAC;AAEZ;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAElD;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;;OAGG;IACH,SAAS,IAAI,IAAI,CAAC;IAElB;;;;OAIG;IACH,OAAO,CACL,SAAS,EAAE,YAAY,EAAE,EACzB,KAAK,CAAC,EAAE,kBAAkB,GACzB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAE1C;;;OAGG;IACH,WAAW,IAAI,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAExD;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/D;;;;OAIG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAEnE;;;OAGG;IACH,cAAc,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAErD;;;OAGG;IACH,cAAc,IAAI,iBAAiB,GAAG,SAAS,CAAC;IAEhD;;;OAGG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared interface for conversation context implementations.
|
|
3
|
+
*
|
|
4
|
+
* Both v1 Context and v2 ContextV2Adapter must implement this interface
|
|
5
|
+
* to ensure compile-time parity and prevent feature drift.
|
|
6
|
+
*
|
|
7
|
+
* This interface defines the minimal set of methods required by:
|
|
8
|
+
* - LLMClient (setSystemPrompt, startTurn, getMessages, initializeWith, storeSummary)
|
|
9
|
+
* - ContextObserver (startStep, endStep, endTurn)
|
|
10
|
+
* - AttachmentsStore (setAttachments, getAttachments)
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=conversation-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-context.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/context/conversation-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
|
@@ -14,4 +14,5 @@ export { ContextLockManager, ContextLockError, ContextNotOwnedError, type Contex
|
|
|
14
14
|
export { loadContextConfigFromEnv, type ContextConfig } from "./config.js";
|
|
15
15
|
export { UserPromptTooLargeError, ContextLimitExceededError, } from "./errors.js";
|
|
16
16
|
export * from "./types.js";
|
|
17
|
+
export type { ConversationContext, ContextHandle as ConversationContextHandle, } from "./conversation-context.js";
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/context/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,wBAAwB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/context/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,wBAAwB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,cAAc,YAAY,CAAC;AAG3B,YAAY,EACV,mBAAmB,EACnB,aAAa,IAAI,yBAAyB,GAC3C,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Clark, ClarkStateHandlerParams } from "../../../state-machine/clark-fsm.js";
|
|
2
|
+
import type { ContextV2 } from "../../context-v2/context.js";
|
|
3
|
+
import type { ContextManagerV2 } from "../../context-v2/manager.js";
|
|
4
|
+
import type { Context } from "../context.js";
|
|
5
|
+
import type { ContextManager } from "../manager.js";
|
|
6
|
+
export type LoadedContext = Context | ContextV2;
|
|
7
|
+
export interface ContextManagers {
|
|
8
|
+
contextManager: ContextManager;
|
|
9
|
+
contextManagerV2?: ContextManagerV2;
|
|
10
|
+
}
|
|
11
|
+
export declare function getActiveContext(clark: Clark, services: ContextManagers & Pick<ClarkStateHandlerParams, "applicationId">): LoadedContext | undefined;
|
|
12
|
+
//# sourceMappingURL=get-loaded-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-loaded-context.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/llm/context/utils/get-loaded-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,KAAK,EACL,uBAAuB,EACxB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC,uBAAuB,EAAE,eAAe,CAAC,GACzE,aAAa,GAAG,SAAS,CAM3B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { getContextId } from "../../../state-machine/helpers/context-id.js";
|
|
2
|
+
export function getActiveContext(clark, services) {
|
|
3
|
+
const contextId = getContextId(clark, services);
|
|
4
|
+
return (services.contextManagerV2?.getLoadedContext(contextId) ??
|
|
5
|
+
services.contextManager.getLoadedContext(contextId));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=get-loaded-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-loaded-context.js","sourceRoot":"","sources":["../../../../../src/ai-service/llm/context/utils/get-loaded-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;AAiB5E,MAAM,UAAU,gBAAgB,CAC9B,KAAY,EACZ,QAA0E;IAE1E,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChD,OAAO,CACL,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,SAAS,CAAC;QACtD,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC,CACpD,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility function exports for context management.
|
|
3
|
-
*
|
|
4
|
-
* Internal utilities used by Context and Turn classes.
|
|
5
|
-
*/
|
|
6
1
|
export { estimateTokenCount, countChars as countChars, } from "./token-estimation.js";
|
|
7
2
|
export { compactContent } from "./content-compaction.js";
|
|
8
3
|
export { normalizeToolResultOutput } from "./message-utils.js";
|
|
9
4
|
export { renderContext } from "./visualization.js";
|
|
5
|
+
export { getActiveContext, type LoadedContext, type ContextManagers, } from "./get-loaded-context.js";
|
|
10
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/llm/context/utils/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/llm/context/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,UAAU,IAAI,UAAU,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility function exports for context management.
|
|
3
|
-
*
|
|
4
|
-
* Internal utilities used by Context and Turn classes.
|
|
5
|
-
*/
|
|
6
1
|
export { estimateTokenCount, countChars as countChars, } from "./token-estimation.js";
|
|
7
2
|
export { compactContent } from "./content-compaction.js";
|
|
8
3
|
export { normalizeToolResultOutput } from "./message-utils.js";
|
|
9
4
|
export { renderContext } from "./visualization.js";
|
|
5
|
+
export { getActiveContext, } from "./get-loaded-context.js";
|
|
10
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/ai-service/llm/context/utils/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/ai-service/llm/context/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,UAAU,IAAI,UAAU,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,gBAAgB,GAGjB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ContextV2 } from "./context.js";
|
|
2
|
+
import type { CompactionCallbacks } from "./types.js";
|
|
3
|
+
import type { AttachmentsRecord } from "../../attachments/store.js";
|
|
4
|
+
import type { ConversationContext } from "../context/conversation-context.js";
|
|
5
|
+
import type { CompactionSummary } from "../context/serialization.js";
|
|
6
|
+
import type { ModelMessage, UserModelMessage, SystemModelMessage, LanguageModelUsage } from "ai";
|
|
7
|
+
export declare class ContextV2Adapter implements ConversationContext {
|
|
8
|
+
private v2;
|
|
9
|
+
private responseCount;
|
|
10
|
+
private lastUsage?;
|
|
11
|
+
private constructor();
|
|
12
|
+
static fromContext(context: ContextV2): ContextV2Adapter;
|
|
13
|
+
setSystemPrompt(prompt: SystemModelMessage): void;
|
|
14
|
+
initializeWith(messages: ModelMessage[]): Promise<void>;
|
|
15
|
+
startTurn(user: UserModelMessage): Promise<void>;
|
|
16
|
+
startStep(): void;
|
|
17
|
+
endStep(responses: ModelMessage[], usage?: LanguageModelUsage): Promise<void>;
|
|
18
|
+
endTurn(_usage?: LanguageModelUsage): void;
|
|
19
|
+
getMessages(): Promise<ModelMessage[]>;
|
|
20
|
+
storeSummary(toolCallId: string, summary: CompactionSummary): void;
|
|
21
|
+
setAttachments(attachments: AttachmentsRecord): void;
|
|
22
|
+
getAttachments(): AttachmentsRecord | undefined;
|
|
23
|
+
truncateAfterTimestamp(timestamp: number): void;
|
|
24
|
+
setCompactionCallbacks(callbacks: CompactionCallbacks | undefined): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/context-v2/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,IAAI,CAAC;AAIZ,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAC,CAAqB;IAEvC,OAAO;IAIP,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,gBAAgB;IAIxD,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAI3C,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvD,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD,SAAS,IAAI,IAAI;IAIX,OAAO,CACX,SAAS,EAAE,YAAY,EAAE,EACzB,KAAK,CAAC,EAAE,kBAAkB,GACzB,OAAO,CAAC,IAAI,CAAC;IAgChB,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAIpC,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAI5C,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIlE,cAAc,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAIpD,cAAc,IAAI,iBAAiB,GAAG,SAAS;IAI/C,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/C,sBAAsB,CAAC,SAAS,EAAE,mBAAmB,GAAG,SAAS,GAAG,IAAI;CAGzE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { getPrefixedLogger } from "../../../util/logger.js";
|
|
2
|
+
const logger = getPrefixedLogger("[context-v2-adapter]");
|
|
3
|
+
export class ContextV2Adapter {
|
|
4
|
+
v2;
|
|
5
|
+
responseCount = 0;
|
|
6
|
+
lastUsage;
|
|
7
|
+
constructor(context) {
|
|
8
|
+
this.v2 = context;
|
|
9
|
+
}
|
|
10
|
+
static fromContext(context) {
|
|
11
|
+
return new ContextV2Adapter(context);
|
|
12
|
+
}
|
|
13
|
+
setSystemPrompt(prompt) {
|
|
14
|
+
this.v2.setSystemPrompt(prompt);
|
|
15
|
+
}
|
|
16
|
+
async initializeWith(messages) {
|
|
17
|
+
// Add each message to the context
|
|
18
|
+
for (const msg of messages) {
|
|
19
|
+
if (msg.role === "user") {
|
|
20
|
+
await this.v2.addUserMessage(msg);
|
|
21
|
+
}
|
|
22
|
+
else if (msg.role === "assistant" || msg.role === "tool") {
|
|
23
|
+
// Not sure what we do for usage... for historical ModelMessages from the ai-sdk, we do not have real usage
|
|
24
|
+
const minimalUsage = {
|
|
25
|
+
inputTokens: 0,
|
|
26
|
+
outputTokens: 0,
|
|
27
|
+
totalTokens: 0,
|
|
28
|
+
};
|
|
29
|
+
await this.v2.addResponse(msg, minimalUsage, { skipCompaction: true });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async startTurn(user) {
|
|
34
|
+
await this.v2.addUserMessage(user);
|
|
35
|
+
this.responseCount = 0;
|
|
36
|
+
}
|
|
37
|
+
startStep() {
|
|
38
|
+
// No-op - v2 doesn't track step boundaries
|
|
39
|
+
}
|
|
40
|
+
async endStep(responses, usage) {
|
|
41
|
+
const newResponses = responses.slice(this.responseCount);
|
|
42
|
+
this.responseCount = responses.length;
|
|
43
|
+
if (!usage) {
|
|
44
|
+
logger.warn("endStep called without usage data - compaction may not trigger");
|
|
45
|
+
}
|
|
46
|
+
this.lastUsage = usage ?? this.lastUsage;
|
|
47
|
+
// at the very least, we will have some data. on the first turn, this is 0. in the future,
|
|
48
|
+
// either `usage` is defined and we will use that, or we will use the last usage.
|
|
49
|
+
const defaultUsage = this.lastUsage ?? {
|
|
50
|
+
inputTokens: 0,
|
|
51
|
+
outputTokens: 0,
|
|
52
|
+
totalTokens: 0,
|
|
53
|
+
};
|
|
54
|
+
// Only run compaction on the last response to avoid duplicate compaction
|
|
55
|
+
// with stale usage data
|
|
56
|
+
for (let i = 0; i < newResponses.length; i++) {
|
|
57
|
+
const response = newResponses[i];
|
|
58
|
+
const isLast = i === newResponses.length - 1;
|
|
59
|
+
if (response) {
|
|
60
|
+
await this.v2.addResponse(response, usage ?? defaultUsage, {
|
|
61
|
+
skipCompaction: !isLast,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
endTurn(_usage) {
|
|
67
|
+
// No-op - v2 handles compaction automatically in addResponse
|
|
68
|
+
}
|
|
69
|
+
async getMessages() {
|
|
70
|
+
return this.v2.getMessages();
|
|
71
|
+
}
|
|
72
|
+
storeSummary(toolCallId, summary) {
|
|
73
|
+
this.v2.storeSummary(toolCallId, summary);
|
|
74
|
+
}
|
|
75
|
+
setAttachments(attachments) {
|
|
76
|
+
this.v2.setAttachments(attachments);
|
|
77
|
+
}
|
|
78
|
+
getAttachments() {
|
|
79
|
+
return this.v2.getAttachments();
|
|
80
|
+
}
|
|
81
|
+
truncateAfterTimestamp(timestamp) {
|
|
82
|
+
this.v2.truncateAfterTimestamp(timestamp);
|
|
83
|
+
}
|
|
84
|
+
setCompactionCallbacks(callbacks) {
|
|
85
|
+
this.v2.setCompactionCallbacks(callbacks);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/context-v2/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAa5D,MAAM,MAAM,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;AAEzD,MAAM,OAAO,gBAAgB;IACnB,EAAE,CAAY;IACd,aAAa,GAAG,CAAC,CAAC;IAClB,SAAS,CAAsB;IAEvC,YAAoB,OAAkB;QACpC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,OAAkB;QACnC,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,eAAe,CAAC,MAA0B;QACxC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAwB;QAC3C,kCAAkC;QAClC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACpC,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3D,2GAA2G;gBAC3G,MAAM,YAAY,GAAG;oBACnB,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,CAAC;iBACf,CAAC;gBACF,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAsB;QACpC,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,SAAS;QACP,2CAA2C;IAC7C,CAAC;IAED,KAAK,CAAC,OAAO,CACX,SAAyB,EACzB,KAA0B;QAE1B,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC;QAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CACT,gEAAgE,CACjE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC;QACzC,0FAA0F;QAC1F,iFAAiF;QACjF,MAAM,YAAY,GAAuB,IAAI,CAAC,SAAS,IAAI;YACzD,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;SACf,CAAC;QAEF,yEAAyE;QACzE,wBAAwB;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,CAAC,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,IAAI,YAAY,EAAE;oBACzD,cAAc,EAAE,CAAC,MAAM;iBACxB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAA2B;QACjC,6DAA6D;IAC/D,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;IAED,YAAY,CAAC,UAAkB,EAAE,OAA0B;QACzD,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,cAAc,CAAC,WAA8B;QAC3C,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC;IAClC,CAAC;IAED,sBAAsB,CAAC,SAAiB;QACtC,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,sBAAsB,CAAC,SAA0C;QAC/D,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache breakpoint calculation for prompt caching.
|
|
3
|
+
*
|
|
4
|
+
* Strategy based on Anthropic's recommendations for multi-turn conversations:
|
|
5
|
+
* - Cache system prompt (stable, high reuse across all requests)
|
|
6
|
+
* - Cache incrementally at the end of each turn (enables incremental caching)
|
|
7
|
+
*
|
|
8
|
+
* This approach is more effective than token-interval based placement because:
|
|
9
|
+
* 1. System prompts are identical across requests, maximizing cache hits
|
|
10
|
+
* 2. End-of-conversation caching enables incremental cache growth
|
|
11
|
+
* 3. We use our limited breakpoints (max 4) on meaningful content boundaries
|
|
12
|
+
*
|
|
13
|
+
* @see https://platform.claude.com/docs/en/build-with-claude/prompt-caching#continuing-a-multi-turn-conversation
|
|
14
|
+
*/
|
|
15
|
+
import type { CachingConfig } from "./config.js";
|
|
16
|
+
import type { StoredMessage } from "./types.js";
|
|
17
|
+
/**
|
|
18
|
+
* Input for cache breakpoint calculation.
|
|
19
|
+
*/
|
|
20
|
+
export interface CacheInput {
|
|
21
|
+
messages: StoredMessage[];
|
|
22
|
+
hasSystemPrompt: boolean;
|
|
23
|
+
config: CachingConfig;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Finds optimal cache breakpoint positions in message array.
|
|
27
|
+
*
|
|
28
|
+
* Strategy (per Anthropic's recommendation):
|
|
29
|
+
* - Always place breakpoint at system prompt (index 0) if present
|
|
30
|
+
* - Place breakpoint at the last message for incremental caching
|
|
31
|
+
*
|
|
32
|
+
* The system automatically checks backwards up to 20 blocks for cache hits,
|
|
33
|
+
* so we don't need to place breakpoints at intermediate positions.
|
|
34
|
+
*
|
|
35
|
+
* @see https://platform.claude.com/docs/en/build-with-claude/prompt-caching
|
|
36
|
+
* @returns Array of message indices where cache breakpoints should be placed
|
|
37
|
+
*/
|
|
38
|
+
export declare function findBreakpoints(input: CacheInput): number[];
|
|
39
|
+
//# sourceMappingURL=caching.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caching.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/context-v2/caching.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAwB3D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache breakpoint calculation for prompt caching.
|
|
3
|
+
*
|
|
4
|
+
* Strategy based on Anthropic's recommendations for multi-turn conversations:
|
|
5
|
+
* - Cache system prompt (stable, high reuse across all requests)
|
|
6
|
+
* - Cache incrementally at the end of each turn (enables incremental caching)
|
|
7
|
+
*
|
|
8
|
+
* This approach is more effective than token-interval based placement because:
|
|
9
|
+
* 1. System prompts are identical across requests, maximizing cache hits
|
|
10
|
+
* 2. End-of-conversation caching enables incremental cache growth
|
|
11
|
+
* 3. We use our limited breakpoints (max 4) on meaningful content boundaries
|
|
12
|
+
*
|
|
13
|
+
* @see https://platform.claude.com/docs/en/build-with-claude/prompt-caching#continuing-a-multi-turn-conversation
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Finds optimal cache breakpoint positions in message array.
|
|
17
|
+
*
|
|
18
|
+
* Strategy (per Anthropic's recommendation):
|
|
19
|
+
* - Always place breakpoint at system prompt (index 0) if present
|
|
20
|
+
* - Place breakpoint at the last message for incremental caching
|
|
21
|
+
*
|
|
22
|
+
* The system automatically checks backwards up to 20 blocks for cache hits,
|
|
23
|
+
* so we don't need to place breakpoints at intermediate positions.
|
|
24
|
+
*
|
|
25
|
+
* @see https://platform.claude.com/docs/en/build-with-claude/prompt-caching
|
|
26
|
+
* @returns Array of message indices where cache breakpoints should be placed
|
|
27
|
+
*/
|
|
28
|
+
export function findBreakpoints(input) {
|
|
29
|
+
const { messages, hasSystemPrompt, config } = input;
|
|
30
|
+
const breakpoints = [];
|
|
31
|
+
if (messages.length === 0) {
|
|
32
|
+
return breakpoints;
|
|
33
|
+
}
|
|
34
|
+
let availableBreakpoints = config.maxBreakpoints;
|
|
35
|
+
// Always cache system prompt if present (stable, high reuse)
|
|
36
|
+
if (hasSystemPrompt && availableBreakpoints > 0) {
|
|
37
|
+
breakpoints.push(0);
|
|
38
|
+
availableBreakpoints -= 1;
|
|
39
|
+
}
|
|
40
|
+
// Cache at the end of the conversation for incremental caching
|
|
41
|
+
// This enables the conversation to grow while reusing cached prefixes
|
|
42
|
+
const lastIndex = messages.length - 1;
|
|
43
|
+
if (availableBreakpoints > 0 && lastIndex > 0) {
|
|
44
|
+
breakpoints.push(lastIndex);
|
|
45
|
+
}
|
|
46
|
+
return breakpoints;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=caching.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caching.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/context-v2/caching.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACpD,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC;IAEjD,6DAA6D;IAC7D,IAAI,eAAe,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;QAChD,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,oBAAoB,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,+DAA+D;IAC/D,sEAAsE;IACtE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,IAAI,oBAAoB,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAC9C,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LLMObsTracer } from "../../llmobs/tracer.js";
|
|
2
|
+
import type { ContextOptionsV2 } from "./config.js";
|
|
3
|
+
import type { StoredMessage, CompactionResult, CompactionCallbacks } from "./types.js";
|
|
4
|
+
import type { LanguageModel, LanguageModelUsage } from "ai";
|
|
5
|
+
export interface CompactOptions {
|
|
6
|
+
messages: StoredMessage[];
|
|
7
|
+
usage: LanguageModelUsage;
|
|
8
|
+
model: LanguageModel;
|
|
9
|
+
rootDir: string;
|
|
10
|
+
config?: Partial<ContextOptionsV2>;
|
|
11
|
+
callbacks?: CompactionCallbacks;
|
|
12
|
+
tracer?: LLMObsTracer;
|
|
13
|
+
}
|
|
14
|
+
export declare function needsCompaction(usage: LanguageModelUsage, options: ContextOptionsV2): boolean;
|
|
15
|
+
export declare function compact(options: CompactOptions): Promise<CompactionResult>;
|
|
16
|
+
//# sourceMappingURL=compactor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compactor.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/context-v2/compactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAStD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAID,wBAAgB,eAAe,CAC7B,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAET;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAkN3B"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { getPrefixedLogger } from "../../../util/logger.js";
|
|
2
|
+
import { LLMObsTracer } from "../../llmobs/tracer.js";
|
|
3
|
+
import { DEFAULT_OPTIONS } from "./config.js";
|
|
4
|
+
import { summarizeToolOutputs, calculatePruneableTokens, } from "./phase1-tool-summarizer.js";
|
|
5
|
+
import { summarizeSession } from "./phase2-session-summarizer.js";
|
|
6
|
+
import { captureSession } from "./session-capture.js";
|
|
7
|
+
import { isOverflow, getTotalTokens } from "./token-tracker.js";
|
|
8
|
+
const logger = getPrefixedLogger("[context-v2:compactor]");
|
|
9
|
+
export function needsCompaction(usage, options) {
|
|
10
|
+
return isOverflow(usage, options.contextLimit, options.maxOutputTokens);
|
|
11
|
+
}
|
|
12
|
+
export async function compact(options) {
|
|
13
|
+
const { messages, usage, model, config = {}, callbacks, tracer = LLMObsTracer.instance, rootDir, } = options;
|
|
14
|
+
return tracer.trace({ name: "context.compaction", kind: "task" }, async (compactionSpan) => {
|
|
15
|
+
const mergedOptions = {
|
|
16
|
+
...DEFAULT_OPTIONS,
|
|
17
|
+
...config,
|
|
18
|
+
};
|
|
19
|
+
const { contextLimit, maxOutputTokens, phase2TargetRatio, phase1Enabled, phase1MinPruneable, phase1ProtectedTokens, } = mergedOptions;
|
|
20
|
+
const initialTokens = getTotalTokens(usage);
|
|
21
|
+
const availableForInput = contextLimit - maxOutputTokens;
|
|
22
|
+
const targetTokens = Math.floor(availableForInput * phase2TargetRatio);
|
|
23
|
+
let currentMessages = messages;
|
|
24
|
+
let phase1Applied = false;
|
|
25
|
+
let phase2Applied = false;
|
|
26
|
+
let tokensSaved = 0;
|
|
27
|
+
captureSession({
|
|
28
|
+
messages,
|
|
29
|
+
usage,
|
|
30
|
+
}, rootDir);
|
|
31
|
+
const pruneableTokens = calculatePruneableTokens(messages, phase1ProtectedTokens);
|
|
32
|
+
if (phase1Enabled && pruneableTokens >= phase1MinPruneable) {
|
|
33
|
+
logger.info(`Phase 1: summarizing tool outputs (${pruneableTokens} pruneable tokens)`);
|
|
34
|
+
const phase1MessageId = crypto.randomUUID();
|
|
35
|
+
callbacks?.onCompactionStart?.("phase1", phase1MessageId);
|
|
36
|
+
const result = tracer.trace({ name: "context.compaction.phase1", kind: "task" }, (phase1Span) => {
|
|
37
|
+
const summarizeResult = summarizeToolOutputs({
|
|
38
|
+
messages: currentMessages,
|
|
39
|
+
protectedTokens: phase1ProtectedTokens,
|
|
40
|
+
});
|
|
41
|
+
const estimatedTokensAfter = initialTokens - pruneableTokens;
|
|
42
|
+
tracer.annotate(phase1Span, {
|
|
43
|
+
metadata: {
|
|
44
|
+
input: {
|
|
45
|
+
messageCount: currentMessages.length,
|
|
46
|
+
pruneableTokens,
|
|
47
|
+
},
|
|
48
|
+
config: {
|
|
49
|
+
protectedTokens: phase1ProtectedTokens,
|
|
50
|
+
},
|
|
51
|
+
result: {
|
|
52
|
+
summarizedCount: summarizeResult.summarizedCount,
|
|
53
|
+
estimatedTokensAfter,
|
|
54
|
+
sufficient: estimatedTokensAfter < targetTokens,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
return summarizeResult;
|
|
59
|
+
});
|
|
60
|
+
currentMessages = result.messages;
|
|
61
|
+
phase1Applied = true;
|
|
62
|
+
logger.info(`Phase 1 complete: summarized ${result.summarizedCount} tool outputs`);
|
|
63
|
+
callbacks?.onCompactionComplete?.("phase1", phase1MessageId);
|
|
64
|
+
// After phase 1, we can't know exact token savings without another LLM call.
|
|
65
|
+
// We'll proceed to phase 2 if we still appear to be over target based on
|
|
66
|
+
// the pruneable tokens we identified.
|
|
67
|
+
const estimatedNewTokens = initialTokens - pruneableTokens;
|
|
68
|
+
if (estimatedNewTokens < targetTokens) {
|
|
69
|
+
tokensSaved = pruneableTokens;
|
|
70
|
+
tracer.annotate(compactionSpan, {
|
|
71
|
+
metadata: {
|
|
72
|
+
input: {
|
|
73
|
+
messageCount: messages.length,
|
|
74
|
+
tokens: initialTokens,
|
|
75
|
+
},
|
|
76
|
+
config: {
|
|
77
|
+
contextLimit,
|
|
78
|
+
maxOutputTokens,
|
|
79
|
+
targetTokens,
|
|
80
|
+
phase1Enabled,
|
|
81
|
+
phase1MinPruneable,
|
|
82
|
+
phase1ProtectedTokens,
|
|
83
|
+
phase2TargetRatio,
|
|
84
|
+
},
|
|
85
|
+
result: {
|
|
86
|
+
tokens: initialTokens - tokensSaved,
|
|
87
|
+
tokensSaved,
|
|
88
|
+
tokensSavedIsEstimate: true,
|
|
89
|
+
phase1Applied,
|
|
90
|
+
phase2Applied,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
return {
|
|
95
|
+
messages: currentMessages,
|
|
96
|
+
phase1Applied,
|
|
97
|
+
phase2Applied,
|
|
98
|
+
tokensSaved,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
logger.info("Phase 2: generating session summary");
|
|
103
|
+
const phase2MessageId = crypto.randomUUID();
|
|
104
|
+
callbacks?.onCompactionStart?.("phase2", phase2MessageId);
|
|
105
|
+
const summaryResult = await tracer.trace({ name: "context.compaction.phase2", kind: "task" }, async (phase2Span) => {
|
|
106
|
+
const result = await summarizeSession({
|
|
107
|
+
messages: currentMessages,
|
|
108
|
+
model,
|
|
109
|
+
targetTokens,
|
|
110
|
+
tracer,
|
|
111
|
+
});
|
|
112
|
+
tracer.annotate(phase2Span, {
|
|
113
|
+
metadata: {
|
|
114
|
+
input: {
|
|
115
|
+
messageCount: currentMessages.length,
|
|
116
|
+
},
|
|
117
|
+
result: {
|
|
118
|
+
messageCount: result.messages.length,
|
|
119
|
+
summary: result.summary,
|
|
120
|
+
summaryLength: result.summary.length,
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
return result;
|
|
125
|
+
});
|
|
126
|
+
phase2Applied = true;
|
|
127
|
+
currentMessages = summaryResult.messages;
|
|
128
|
+
const summaryTokens = summaryResult.messages.reduce((sum, msg) => sum + (msg._superblocks?.tokenCount ?? 100), 0);
|
|
129
|
+
tokensSaved = initialTokens - summaryTokens;
|
|
130
|
+
logger.info(`Phase 2 complete: ${initialTokens}→${summaryTokens} tokens (saved ${tokensSaved})`);
|
|
131
|
+
callbacks?.onCompactionComplete?.("phase2", phase2MessageId);
|
|
132
|
+
tracer.annotate(compactionSpan, {
|
|
133
|
+
metadata: {
|
|
134
|
+
input: {
|
|
135
|
+
messageCount: messages.length,
|
|
136
|
+
tokens: initialTokens,
|
|
137
|
+
},
|
|
138
|
+
config: {
|
|
139
|
+
contextLimit,
|
|
140
|
+
maxOutputTokens,
|
|
141
|
+
targetTokens,
|
|
142
|
+
phase1Enabled,
|
|
143
|
+
phase1MinPruneable,
|
|
144
|
+
phase1ProtectedTokens,
|
|
145
|
+
phase2TargetRatio,
|
|
146
|
+
},
|
|
147
|
+
result: {
|
|
148
|
+
tokens: summaryTokens,
|
|
149
|
+
tokensSaved,
|
|
150
|
+
tokensSavedIsEstimate: false,
|
|
151
|
+
phase1Applied,
|
|
152
|
+
phase2Applied,
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
return {
|
|
157
|
+
messages: currentMessages,
|
|
158
|
+
phase1Applied,
|
|
159
|
+
phase2Applied,
|
|
160
|
+
tokensSaved,
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=compactor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compactor.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/context-v2/compactor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ContextOptionsV2 } from "@superblocksteam/library-shared/types";
|
|
2
|
+
import type { CachingConfig } from "./types.js";
|
|
3
|
+
export type { CachingConfig, ContextOptionsV2 };
|
|
4
|
+
export declare const DEFAULT_CACHING: CachingConfig;
|
|
5
|
+
export declare const DEFAULT_OPTIONS: ContextOptionsV2;
|
|
6
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/context-v2/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,uCAAuC,CAAC;AAK/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AAEhD,eAAO,MAAM,eAAe,EAAE,aAG7B,CAAC;AAEF,eAAO,MAAM,eAAe,kBAA6B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DEFAULT_CONTEXT_OPTIONS_V2, } from "@superblocksteam/library-shared/types";
|
|
2
|
+
import { PROVIDER_CACHE_MAX_BREAKPOINTS, PROVIDER_CACHE_MIN_CACHEABLE_TOKENS, } from "./types.js";
|
|
3
|
+
export const DEFAULT_CACHING = {
|
|
4
|
+
maxBreakpoints: PROVIDER_CACHE_MAX_BREAKPOINTS,
|
|
5
|
+
minCacheableTokens: PROVIDER_CACHE_MIN_CACHEABLE_TOKENS,
|
|
6
|
+
};
|
|
7
|
+
export const DEFAULT_OPTIONS = DEFAULT_CONTEXT_OPTIONS_V2;
|
|
8
|
+
//# sourceMappingURL=config.js.map
|