@dexto/core 1.7.1 → 1.8.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/dist/agent/DextoAgent.cjs +157 -62
- package/dist/agent/DextoAgent.d.ts +71 -17
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +161 -63
- package/dist/agent/agent-options.d.ts +6 -10
- package/dist/agent/agent-options.d.ts.map +1 -1
- package/dist/agent/agentCard.js +1 -1
- package/dist/agent/error-codes.js +1 -1
- package/dist/agent/errors.js +1 -1
- package/dist/agent/index.d.ts +1 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/schemas.d.ts +2 -2
- package/dist/agent/schemas.js +1 -1
- package/dist/agent/state-manager.js +1 -1
- package/dist/approval/error-codes.cjs +1 -1
- package/dist/approval/error-codes.d.ts +1 -1
- package/dist/approval/error-codes.d.ts.map +1 -1
- package/dist/approval/error-codes.js +2 -2
- package/dist/approval/errors.cjs +2 -5
- package/dist/approval/errors.d.ts.map +1 -1
- package/dist/approval/errors.js +3 -6
- package/dist/approval/factory.cjs +19 -4
- package/dist/approval/factory.d.ts +4 -1
- package/dist/approval/factory.d.ts.map +1 -1
- package/dist/approval/factory.js +19 -5
- package/dist/approval/index.d.ts +1 -1
- package/dist/approval/index.d.ts.map +1 -1
- package/dist/approval/index.js +1 -1
- package/dist/approval/manager.cjs +168 -26
- package/dist/approval/manager.d.ts +46 -12
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +177 -29
- package/dist/approval/schemas.cjs +26 -26
- package/dist/approval/schemas.d.ts +29 -29
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +23 -23
- package/dist/approval/types.cjs +5 -5
- package/dist/approval/types.d.ts +18 -18
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/approval/types.js +6 -6
- package/dist/{chunk-PTJYTZNU.js → chunk-C6A6W6XS.js} +1 -44
- package/dist/config/index.cjs +75 -0
- package/dist/config/index.d.ts +15 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +50 -0
- package/dist/context/compaction/overflow.js +1 -1
- package/dist/context/compaction/strategies/noop.js +1 -1
- package/dist/context/compaction/strategies/reactive-overflow-compaction.js +1 -1
- package/dist/context/content-clone.cjs +131 -0
- package/dist/context/content-clone.d.ts +7 -0
- package/dist/context/content-clone.d.ts.map +1 -0
- package/dist/context/content-clone.js +104 -0
- package/dist/context/error-codes.js +1 -1
- package/dist/context/errors.js +1 -1
- package/dist/context/index.cjs +2 -0
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +2 -1
- package/dist/context/manager.cjs +47 -35
- package/dist/context/manager.d.ts +7 -7
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +48 -36
- package/dist/context/media-helpers.js +1 -1
- package/dist/context/schemas.cjs +77 -0
- package/dist/context/schemas.d.ts +5 -0
- package/dist/context/schemas.d.ts.map +1 -0
- package/dist/context/schemas.js +53 -0
- package/dist/context/types.js +1 -1
- package/dist/context/utils.cjs +70 -69
- package/dist/context/utils.d.ts +3 -3
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +71 -70
- package/dist/errors/DextoBaseError.js +1 -1
- package/dist/errors/DextoRuntimeError.js +1 -1
- package/dist/errors/DextoValidationError.js +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/errors/result-bridge.js +1 -1
- package/dist/errors/types.js +1 -1
- package/dist/events/index.cjs +9 -1
- package/dist/events/index.d.ts +20 -8
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +10 -2
- package/dist/hooks/builtins/content-policy.js +1 -1
- package/dist/hooks/builtins/response-sanitizer.js +1 -1
- package/dist/hooks/error-codes.js +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/manager.cjs +1 -1
- package/dist/hooks/manager.d.ts +2 -2
- package/dist/hooks/manager.d.ts.map +1 -1
- package/dist/hooks/manager.js +2 -2
- package/dist/hooks/types.d.ts +2 -2
- package/dist/hooks/types.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/llm/curation-config.js +1 -1
- package/dist/llm/curation.js +1 -1
- package/dist/llm/error-codes.js +1 -1
- package/dist/llm/errors.js +1 -1
- package/dist/llm/executor/index.cjs +32 -0
- package/dist/llm/executor/index.d.ts +2 -0
- package/dist/llm/executor/index.d.ts.map +1 -0
- package/dist/llm/executor/index.js +11 -0
- package/dist/llm/executor/provider-options.js +1 -1
- package/dist/llm/executor/stream-processor.cjs +28 -139
- package/dist/llm/executor/stream-processor.d.ts +2 -13
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.js +29 -140
- package/dist/{session/history/memory.cjs → llm/executor/tool-definitions.cjs} +21 -33
- package/dist/llm/executor/tool-definitions.d.ts +4 -0
- package/dist/llm/executor/tool-definitions.d.ts.map +1 -0
- package/dist/llm/executor/tool-definitions.js +22 -0
- package/dist/llm/executor/tool-output-truncator.js +1 -1
- package/dist/llm/executor/turn-executor.cjs +1093 -458
- package/dist/llm/executor/turn-executor.d.ts +269 -43
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +1079 -405
- package/dist/llm/executor/types.d.ts +6 -0
- package/dist/llm/executor/types.d.ts.map +1 -1
- package/dist/llm/formatters/vercel.js +1 -1
- package/dist/llm/index.cjs +2 -0
- package/dist/llm/index.d.ts +1 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +2 -1
- package/dist/llm/providers/codex-app-server.cjs +22 -2
- package/dist/llm/providers/codex-app-server.d.ts.map +1 -1
- package/dist/llm/providers/codex-app-server.js +23 -3
- package/dist/llm/providers/codex-base-url.js +1 -1
- package/dist/llm/providers/local/ai-sdk-adapter.js +1 -1
- package/dist/llm/providers/local/downloader.js +1 -1
- package/dist/llm/providers/local/error-codes.js +1 -1
- package/dist/llm/providers/local/errors.js +1 -1
- package/dist/llm/providers/local/gpu-detector.js +1 -1
- package/dist/llm/providers/local/index.js +1 -1
- package/dist/llm/providers/local/node-llama-provider.js +1 -1
- package/dist/llm/providers/local/ollama-provider.js +1 -1
- package/dist/llm/providers/local/registry.js +1 -1
- package/dist/llm/providers/local/schemas.js +1 -1
- package/dist/llm/providers/openrouter-model-registry.js +1 -1
- package/dist/llm/reasoning/anthropic-betas.js +1 -1
- package/dist/llm/reasoning/anthropic-thinking.js +1 -1
- package/dist/llm/reasoning/openai-reasoning-effort.js +1 -1
- package/dist/llm/reasoning/profile.js +1 -1
- package/dist/llm/reasoning/profiles/anthropic.js +1 -1
- package/dist/llm/reasoning/profiles/bedrock.js +1 -1
- package/dist/llm/reasoning/profiles/google.js +1 -1
- package/dist/llm/reasoning/profiles/openai-compatible.js +1 -1
- package/dist/llm/reasoning/profiles/openai.js +1 -1
- package/dist/llm/reasoning/profiles/openrouter.js +1 -1
- package/dist/llm/reasoning/profiles/shared.js +1 -1
- package/dist/llm/reasoning/profiles/vertex.js +1 -1
- package/dist/llm/registry/auto-update.js +1 -1
- package/dist/llm/registry/index.js +1 -1
- package/dist/llm/registry/models.generated.js +1 -1
- package/dist/llm/registry/models.manual.js +1 -1
- package/dist/llm/registry/sync.js +1 -1
- package/dist/llm/resolver.js +1 -1
- package/dist/llm/schemas.js +1 -1
- package/dist/llm/services/factory.cjs +5 -4
- package/dist/llm/services/factory.d.ts +3 -3
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +6 -5
- package/dist/llm/services/types.d.ts +10 -1
- package/dist/llm/services/types.d.ts.map +1 -1
- package/dist/llm/services/vercel.cjs +23 -8
- package/dist/llm/services/vercel.d.ts +11 -7
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +24 -9
- package/dist/llm/types.js +1 -1
- package/dist/llm/usage-metadata.cjs +20 -3
- package/dist/llm/usage-metadata.d.ts +1 -0
- package/dist/llm/usage-metadata.d.ts.map +1 -1
- package/dist/llm/usage-metadata.js +19 -3
- package/dist/llm/usage-scope.js +1 -1
- package/dist/llm/usage-summary.js +1 -1
- package/dist/llm/validation.js +1 -1
- package/dist/logger/browser.js +1 -1
- package/dist/logger/default-logger-factory.js +1 -1
- package/dist/logger/factory.js +1 -1
- package/dist/logger/index.js +1 -1
- package/dist/logger/logger.js +1 -1
- package/dist/logger/v2/dexto-logger.js +1 -1
- package/dist/logger/v2/error-codes.js +1 -1
- package/dist/logger/v2/errors.js +1 -1
- package/dist/logger/v2/schemas.js +1 -1
- package/dist/logger/v2/test-utils.js +1 -1
- package/dist/logger/v2/transport-factory.js +1 -1
- package/dist/logger/v2/transports/console-transport.js +1 -1
- package/dist/logger/v2/transports/file-transport.js +1 -1
- package/dist/logger/v2/transports/silent-transport.js +1 -1
- package/dist/logger/v2/types.js +1 -1
- package/dist/mcp/bundled-config.js +1 -1
- package/dist/mcp/error-codes.js +1 -1
- package/dist/mcp/errors.js +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/manager.js +1 -1
- package/dist/mcp/mcp-client.js +1 -1
- package/dist/mcp/resolver.js +1 -1
- package/dist/mcp/schemas.js +1 -1
- package/dist/memory/error-codes.js +1 -1
- package/dist/memory/errors.js +1 -1
- package/dist/memory/index.js +1 -1
- package/dist/memory/manager.cjs +7 -27
- package/dist/memory/manager.d.ts +4 -12
- package/dist/memory/manager.d.ts.map +1 -1
- package/dist/memory/manager.js +8 -28
- package/dist/memory/schemas.js +1 -1
- package/dist/prompts/error-codes.js +1 -1
- package/dist/prompts/errors.js +1 -1
- package/dist/prompts/index.js +1 -1
- package/dist/prompts/name-validation.js +1 -1
- package/dist/prompts/prompt-manager.cjs +9 -38
- package/dist/prompts/prompt-manager.d.ts +2 -10
- package/dist/prompts/prompt-manager.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.js +10 -39
- package/dist/prompts/providers/config-prompt-provider.cjs +8 -87
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +9 -88
- package/dist/prompts/providers/custom-prompt-provider.cjs +21 -22
- package/dist/prompts/providers/custom-prompt-provider.d.ts +19 -4
- package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/custom-prompt-provider.js +22 -23
- package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
- package/dist/prompts/schemas.cjs +2 -24
- package/dist/prompts/schemas.d.ts +0 -52
- package/dist/prompts/schemas.d.ts.map +1 -1
- package/dist/prompts/schemas.js +3 -25
- package/dist/prompts/types.d.ts +5 -32
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/prompts/utils.js +1 -1
- package/dist/resources/agent-resources-provider.js +1 -1
- package/dist/resources/error-codes.js +1 -1
- package/dist/resources/errors.js +1 -1
- package/dist/resources/handlers/blob-handler.cjs +14 -11
- package/dist/resources/handlers/blob-handler.d.ts +4 -4
- package/dist/resources/handlers/blob-handler.d.ts.map +1 -1
- package/dist/resources/handlers/blob-handler.js +15 -12
- package/dist/resources/handlers/factory.cjs +3 -3
- package/dist/resources/handlers/factory.js +4 -4
- package/dist/resources/handlers/filesystem-handler.js +1 -1
- package/dist/resources/handlers/types.d.ts +2 -2
- package/dist/resources/handlers/types.d.ts.map +1 -1
- package/dist/resources/index.js +1 -1
- package/dist/resources/manager.cjs +10 -7
- package/dist/resources/manager.d.ts +4 -4
- package/dist/resources/manager.d.ts.map +1 -1
- package/dist/resources/manager.js +11 -8
- package/dist/resources/reference-parser.js +1 -1
- package/dist/resources/schemas.cjs +1 -1
- package/dist/resources/schemas.d.ts +2 -2
- package/dist/resources/schemas.js +2 -2
- package/dist/runtime/host-runtime.js +1 -1
- package/dist/runtime/index.cjs +3 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +3 -1
- package/dist/runtime/run-context.js +1 -1
- package/dist/search/index.js +1 -1
- package/dist/search/search-service.cjs +6 -13
- package/dist/search/search-service.d.ts +5 -3
- package/dist/search/search-service.d.ts.map +1 -1
- package/dist/search/search-service.js +7 -14
- package/dist/session/chat-session.cjs +264 -108
- package/dist/session/chat-session.d.ts +75 -21
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +268 -108
- package/dist/session/error-codes.js +1 -1
- package/dist/session/errors.js +1 -1
- package/dist/session/index.cjs +19 -2
- package/dist/session/index.d.ts +4 -3
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +19 -3
- package/dist/session/message-queue.cjs +82 -51
- package/dist/session/message-queue.d.ts +13 -8
- package/dist/session/message-queue.d.ts.map +1 -1
- package/dist/session/message-queue.js +83 -52
- package/dist/session/queue-clone.cjs +50 -0
- package/dist/session/queue-clone.d.ts +5 -0
- package/dist/session/queue-clone.d.ts.map +1 -0
- package/dist/session/queue-clone.js +25 -0
- package/dist/session/schemas.cjs +74 -2
- package/dist/session/schemas.d.ts +94 -0
- package/dist/session/schemas.d.ts.map +1 -1
- package/dist/session/schemas.js +69 -2
- package/dist/session/session-manager.cjs +107 -123
- package/dist/session/session-manager.d.ts +7 -6
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +108 -124
- package/dist/session/title-generator.cjs +14 -26
- package/dist/session/title-generator.d.ts +4 -6
- package/dist/session/title-generator.d.ts.map +1 -1
- package/dist/session/title-generator.js +16 -28
- package/dist/session/types.cjs +28 -0
- package/dist/session/types.d.ts +5 -1
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js +19 -0
- package/dist/{session/history/factory.cjs → skills/index.cjs} +9 -9
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +7 -0
- package/dist/skills/skill-manager.cjs +76 -0
- package/dist/skills/skill-manager.d.ts +13 -0
- package/dist/skills/skill-manager.d.ts.map +1 -0
- package/dist/skills/skill-manager.js +53 -0
- package/dist/skills/types.d.ts +24 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/workspace-skill-source.cjs +120 -0
- package/dist/skills/workspace-skill-source.d.ts +16 -0
- package/dist/skills/workspace-skill-source.d.ts.map +1 -0
- package/dist/skills/workspace-skill-source.js +97 -0
- package/dist/storage/approvals/types.cjs +38 -0
- package/dist/storage/approvals/types.d.ts +54 -0
- package/dist/storage/approvals/types.d.ts.map +1 -0
- package/dist/storage/approvals/types.js +14 -0
- package/dist/storage/artifacts/types.d.ts +73 -0
- package/dist/storage/artifacts/types.d.ts.map +1 -0
- package/dist/storage/conversation/database.cjs +233 -0
- package/dist/storage/conversation/database.d.ts +38 -0
- package/dist/storage/conversation/database.d.ts.map +1 -0
- package/dist/storage/conversation/database.js +210 -0
- package/dist/storage/conversation/types.cjs +16 -0
- package/dist/storage/conversation/types.d.ts +21 -0
- package/dist/storage/conversation/types.d.ts.map +1 -0
- package/dist/storage/conversation/types.js +0 -0
- package/dist/storage/database/types.d.ts +4 -0
- package/dist/storage/database/types.d.ts.map +1 -1
- package/dist/storage/error-codes.js +1 -1
- package/dist/storage/errors.cjs +6 -6
- package/dist/storage/errors.d.ts +2 -2
- package/dist/storage/errors.js +7 -7
- package/dist/storage/index.cjs +42 -5
- package/dist/storage/index.d.ts +19 -8
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +39 -4
- package/dist/storage/memories/types.cjs +16 -0
- package/dist/storage/memories/types.d.ts +17 -0
- package/dist/storage/memories/types.d.ts.map +1 -0
- package/dist/storage/memories/types.js +0 -0
- package/dist/storage/message-queue/types.cjs +16 -0
- package/dist/storage/message-queue/types.d.ts +15 -0
- package/dist/storage/message-queue/types.d.ts.map +1 -0
- package/dist/storage/message-queue/types.js +0 -0
- package/dist/storage/prompts/types.cjs +16 -0
- package/dist/storage/prompts/types.d.ts +14 -0
- package/dist/storage/prompts/types.d.ts.map +1 -0
- package/dist/storage/prompts/types.js +0 -0
- package/dist/storage/runtime-events/types.cjs +16 -0
- package/dist/storage/runtime-events/types.d.ts +19 -0
- package/dist/storage/runtime-events/types.d.ts.map +1 -0
- package/dist/storage/runtime-events/types.js +0 -0
- package/dist/storage/sessions/types.cjs +16 -0
- package/dist/storage/sessions/types.d.ts +19 -0
- package/dist/storage/sessions/types.d.ts.map +1 -0
- package/dist/storage/sessions/types.js +0 -0
- package/dist/storage/stores/backend.cjs +702 -0
- package/dist/storage/stores/backend.d.ts +303 -0
- package/dist/storage/stores/backend.d.ts.map +1 -0
- package/dist/storage/stores/backend.js +677 -0
- package/dist/storage/stores/in-memory.cjs +510 -0
- package/dist/storage/stores/in-memory.d.ts +11 -0
- package/dist/storage/stores/in-memory.d.ts.map +1 -0
- package/dist/storage/stores/in-memory.js +487 -0
- package/dist/storage/stores/types.cjs +16 -0
- package/dist/storage/stores/types.d.ts +36 -0
- package/dist/storage/stores/types.d.ts.map +1 -0
- package/dist/storage/stores/types.js +0 -0
- package/dist/storage/tool-executions/types.cjs +127 -0
- package/dist/storage/tool-executions/types.d.ts +193 -0
- package/dist/storage/tool-executions/types.d.ts.map +1 -0
- package/dist/storage/tool-executions/types.js +96 -0
- package/dist/storage/tool-preferences/types.cjs +16 -0
- package/dist/storage/tool-preferences/types.d.ts +29 -0
- package/dist/storage/tool-preferences/types.d.ts.map +1 -0
- package/dist/storage/tool-preferences/types.js +0 -0
- package/dist/storage/tool-state/types.cjs +16 -0
- package/dist/storage/tool-state/types.d.ts +20 -0
- package/dist/storage/tool-state/types.d.ts.map +1 -0
- package/dist/storage/tool-state/types.js +0 -0
- package/dist/storage/workspaces/types.cjs +16 -0
- package/dist/storage/workspaces/types.d.ts +19 -0
- package/dist/storage/workspaces/types.d.ts.map +1 -0
- package/dist/storage/workspaces/types.js +0 -0
- package/dist/systemPrompt/contributors.cjs +10 -14
- package/dist/systemPrompt/contributors.d.ts +3 -3
- package/dist/systemPrompt/contributors.d.ts.map +1 -1
- package/dist/systemPrompt/contributors.js +11 -15
- package/dist/systemPrompt/error-codes.js +1 -1
- package/dist/systemPrompt/errors.js +1 -1
- package/dist/systemPrompt/in-built-prompts.js +1 -1
- package/dist/systemPrompt/index.js +1 -1
- package/dist/systemPrompt/manager.js +1 -1
- package/dist/systemPrompt/registry.js +1 -1
- package/dist/systemPrompt/schemas.js +1 -1
- package/dist/telemetry/decorators.js +1 -1
- package/dist/telemetry/error-codes.js +1 -1
- package/dist/telemetry/errors.js +1 -1
- package/dist/telemetry/exporters.js +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/schemas.js +1 -1
- package/dist/telemetry/telemetry.js +1 -1
- package/dist/telemetry/utils.js +1 -1
- package/dist/test-utils/in-memory-storage.cjs +9 -17
- package/dist/test-utils/in-memory-storage.js +9 -16
- package/dist/test-utils/session-state-stores.cjs +21 -24
- package/dist/test-utils/session-state-stores.js +22 -24
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.cjs +1 -1
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.d.ts +2 -2
- package/dist/tools/approval/allowed-tools-provider/factory.d.ts.map +1 -0
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.js +2 -2
- package/dist/tools/approval/allowed-tools-provider/in-memory.d.ts.map +1 -0
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.js +1 -1
- package/dist/tools/approval/allowed-tools-provider/storage.cjs +66 -0
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/storage.d.ts +4 -10
- package/dist/tools/approval/allowed-tools-provider/storage.d.ts.map +1 -0
- package/dist/tools/approval/allowed-tools-provider/storage.js +43 -0
- package/dist/tools/approval/allowed-tools-provider/types.cjs +16 -0
- package/dist/tools/approval/allowed-tools-provider/types.d.ts.map +1 -0
- package/dist/tools/approval/allowed-tools-provider/types.js +0 -0
- package/dist/tools/approval/session-tool-policy.cjs +269 -0
- package/dist/tools/approval/session-tool-policy.d.ts +43 -0
- package/dist/tools/approval/session-tool-policy.d.ts.map +1 -0
- package/dist/tools/approval/session-tool-policy.js +245 -0
- package/dist/tools/define-tool.js +1 -1
- package/dist/tools/display-types.js +1 -1
- package/dist/tools/error-codes.cjs +3 -3
- package/dist/tools/error-codes.d.ts +4 -4
- package/dist/tools/error-codes.d.ts.map +1 -1
- package/dist/tools/error-codes.js +4 -4
- package/dist/tools/errors.cjs +12 -12
- package/dist/tools/errors.d.ts +6 -6
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +13 -13
- package/dist/tools/index.cjs +3 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -1
- package/dist/tools/pattern-utils.js +1 -1
- package/dist/tools/presentation/tool-presentation.cjs +182 -0
- package/dist/tools/presentation/tool-presentation.d.ts +51 -0
- package/dist/tools/presentation/tool-presentation.d.ts.map +1 -0
- package/dist/tools/presentation/tool-presentation.js +159 -0
- package/dist/tools/presentation.js +1 -1
- package/dist/tools/schemas.cjs +5 -10
- package/dist/tools/schemas.d.ts +1 -4
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +6 -11
- package/dist/tools/session-tool-preferences-store.cjs +12 -28
- package/dist/tools/session-tool-preferences-store.d.ts +4 -7
- package/dist/tools/session-tool-preferences-store.d.ts.map +1 -1
- package/dist/tools/session-tool-preferences-store.js +12 -29
- package/dist/tools/tool-call-metadata.js +1 -1
- package/dist/tools/tool-manager.cjs +871 -834
- package/dist/tools/tool-manager.d.ts +94 -96
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +876 -833
- package/dist/tools/types.d.ts +10 -14
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/api-key-resolver.js +1 -1
- package/dist/utils/async-context.js +1 -1
- package/dist/utils/debug.js +1 -1
- package/dist/utils/defer.js +1 -1
- package/dist/utils/env.js +1 -1
- package/dist/utils/error-conversion.js +1 -1
- package/dist/utils/execution-context.js +1 -1
- package/dist/utils/fs-walk.js +1 -1
- package/dist/utils/path.js +1 -1
- package/dist/utils/redactor.js +1 -1
- package/dist/utils/result.js +1 -1
- package/dist/utils/safe-stringify.js +1 -1
- package/dist/utils/schema.js +1 -1
- package/dist/utils/service-initializer.cjs +37 -33
- package/dist/utils/service-initializer.d.ts +9 -5
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +38 -34
- package/dist/utils/zod-schema-converter.js +1 -1
- package/dist/workspace/error-codes.cjs +5 -1
- package/dist/workspace/error-codes.d.ts +4 -0
- package/dist/workspace/error-codes.d.ts.map +1 -1
- package/dist/workspace/error-codes.js +6 -2
- package/dist/workspace/errors.cjs +43 -0
- package/dist/workspace/errors.d.ts +9 -0
- package/dist/workspace/errors.d.ts.map +1 -1
- package/dist/workspace/errors.js +44 -1
- package/dist/workspace/index.d.ts +1 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -1
- package/dist/workspace/manager.cjs +21 -29
- package/dist/workspace/manager.d.ts +6 -6
- package/dist/workspace/manager.d.ts.map +1 -1
- package/dist/workspace/manager.js +22 -30
- package/dist/workspace/types.d.ts +47 -0
- package/dist/workspace/types.d.ts.map +1 -1
- package/package.json +114 -2
- package/dist/approval/session-approval-store.cjs +0 -91
- package/dist/approval/session-approval-store.d.ts +0 -37
- package/dist/approval/session-approval-store.d.ts.map +0 -1
- package/dist/approval/session-approval-store.js +0 -68
- package/dist/session/history/database.cjs +0 -232
- package/dist/session/history/database.d.ts +0 -41
- package/dist/session/history/database.d.ts.map +0 -1
- package/dist/session/history/database.js +0 -209
- package/dist/session/history/factory.d.ts +0 -11
- package/dist/session/history/factory.d.ts.map +0 -1
- package/dist/session/history/factory.js +0 -8
- package/dist/session/history/memory.d.ts +0 -22
- package/dist/session/history/memory.d.ts.map +0 -1
- package/dist/session/history/memory.js +0 -34
- package/dist/session/history/types.d.ts +0 -26
- package/dist/session/history/types.d.ts.map +0 -1
- package/dist/session/message-queue-store.cjs +0 -75
- package/dist/session/message-queue-store.d.ts +0 -16
- package/dist/session/message-queue-store.d.ts.map +0 -1
- package/dist/session/message-queue-store.js +0 -52
- package/dist/storage/storage-manager.cjs +0 -209
- package/dist/storage/storage-manager.d.ts +0 -77
- package/dist/storage/storage-manager.d.ts.map +0 -1
- package/dist/storage/storage-manager.js +0 -186
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts.map +0 -1
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts.map +0 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +0 -69
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts.map +0 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.js +0 -46
- package/dist/tools/confirmation/allowed-tools-provider/types.d.ts.map +0 -1
- /package/dist/{session/history → skills}/types.cjs +0 -0
- /package/dist/{session/history → skills}/types.js +0 -0
- /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.cjs +0 -0
- /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.js +0 -0
- /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.cjs +0 -0
- /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.d.ts +0 -0
- /package/dist/tools/{confirmation → approval}/allowed-tools-provider/types.d.ts +0 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import "../chunk-
|
|
1
|
+
import "../chunk-C6A6W6XS.js";
|
|
2
2
|
import { randomUUID } from "crypto";
|
|
3
3
|
import { ChatSession } from "./chat-session.js";
|
|
4
4
|
import { DextoLogComponent } from "../logger/v2/types.js";
|
|
5
5
|
import { SessionError } from "./errors.js";
|
|
6
|
+
import { normalizeTokenUsageForAccounting } from "../llm/usage-metadata.js";
|
|
6
7
|
import { ZodError } from "zod";
|
|
7
8
|
import {
|
|
8
9
|
SessionPromptContributorSchema
|
|
@@ -22,7 +23,6 @@ class SessionManager {
|
|
|
22
23
|
sessions = /* @__PURE__ */ new Map();
|
|
23
24
|
maxSessions;
|
|
24
25
|
sessionTTL;
|
|
25
|
-
static MESSAGE_QUEUE_KEY_PREFIX = "session-message-queue:";
|
|
26
26
|
initialized = false;
|
|
27
27
|
cleanupInterval;
|
|
28
28
|
initializationPromise;
|
|
@@ -31,7 +31,6 @@ class SessionManager {
|
|
|
31
31
|
// Per-session mutex for any SessionData read-modify-write path.
|
|
32
32
|
sessionDataLocks = /* @__PURE__ */ new Map();
|
|
33
33
|
logger;
|
|
34
|
-
static FORK_HISTORY_BATCH_SIZE = 500;
|
|
35
34
|
static FORK_ID_GENERATION_MAX_ATTEMPTS = 5;
|
|
36
35
|
static FORK_TITLE_PREFIX = "Fork: ";
|
|
37
36
|
static FORK_PARENT_ID_PREVIEW_LENGTH = 8;
|
|
@@ -74,23 +73,21 @@ class SessionManager {
|
|
|
74
73
|
*/
|
|
75
74
|
async restoreSessionsFromStorage() {
|
|
76
75
|
try {
|
|
77
|
-
const
|
|
78
|
-
this.logger.debug(`Found ${
|
|
79
|
-
for (const
|
|
80
|
-
const
|
|
81
|
-
const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
76
|
+
const sessionIds = await this.services.sessionStore.listSessionIds();
|
|
77
|
+
this.logger.debug(`Found ${sessionIds.length} persisted sessions to restore`);
|
|
78
|
+
for (const sessionId of sessionIds) {
|
|
79
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
82
80
|
if (sessionData) {
|
|
83
81
|
const now = Date.now();
|
|
84
82
|
const lastActivity = sessionData.lastActivity;
|
|
85
83
|
if (now - lastActivity <= this.sessionTTL) {
|
|
86
84
|
this.logger.debug(`Session ${sessionId} restored from storage`);
|
|
87
85
|
} else {
|
|
88
|
-
await
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
this.logger.debug(`Expired session ${sessionId} cleaned up during restore`);
|
|
86
|
+
await this.services.sessionStore.evictSession({ sessionId });
|
|
87
|
+
this.evictSessionInteractionState(sessionId);
|
|
88
|
+
this.logger.debug(
|
|
89
|
+
`Expired session ${sessionId} evicted during restore; durable history preserved`
|
|
90
|
+
);
|
|
94
91
|
}
|
|
95
92
|
}
|
|
96
93
|
}
|
|
@@ -102,18 +99,19 @@ class SessionManager {
|
|
|
102
99
|
}
|
|
103
100
|
async clearPersistedQueuedMessages(reason) {
|
|
104
101
|
try {
|
|
105
|
-
const
|
|
106
|
-
|
|
102
|
+
const steerSessionIds = await this.services.steerQueueStore.listSessionIds();
|
|
103
|
+
const followUpSessionIds = await this.services.followUpQueueStore.listSessionIds();
|
|
104
|
+
const sessionIds = Array.from(/* @__PURE__ */ new Set([...steerSessionIds, ...followUpSessionIds]));
|
|
105
|
+
if (sessionIds.length === 0) {
|
|
107
106
|
return;
|
|
108
107
|
}
|
|
109
108
|
await Promise.all(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
)
|
|
109
|
+
sessionIds.flatMap((sessionId) => [
|
|
110
|
+
this.services.steerQueueStore.delete({ sessionId }),
|
|
111
|
+
this.services.followUpQueueStore.delete({ sessionId })
|
|
112
|
+
])
|
|
115
113
|
);
|
|
116
|
-
const message = `${reason === "startup" ? "Cleared stale
|
|
114
|
+
const message = `${reason === "startup" ? "Cleared stale pending input state from previous agent run" : "Cleared pending input state during agent shutdown"} (${sessionIds.length} session bucket(s))`;
|
|
117
115
|
if (reason === "startup") {
|
|
118
116
|
this.logger.info(message);
|
|
119
117
|
} else {
|
|
@@ -174,21 +172,17 @@ class SessionManager {
|
|
|
174
172
|
*/
|
|
175
173
|
async forkSession(parentSessionId) {
|
|
176
174
|
await this.ensureInitialized();
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
const parentMessagesKey = `messages:${parentSessionId}`;
|
|
181
|
-
const parentSessionData = await database.get(parentSessionKey);
|
|
175
|
+
const parentSessionData = await this.services.sessionStore.getSession({
|
|
176
|
+
sessionId: parentSessionId
|
|
177
|
+
});
|
|
182
178
|
if (!parentSessionData) {
|
|
183
179
|
throw SessionError.notFound(parentSessionId);
|
|
184
180
|
}
|
|
185
|
-
const
|
|
186
|
-
if (
|
|
187
|
-
throw SessionError.maxSessionsExceeded(
|
|
181
|
+
const activeSessionIds = await this.services.sessionStore.listSessionIds();
|
|
182
|
+
if (activeSessionIds.length >= this.maxSessions) {
|
|
183
|
+
throw SessionError.maxSessionsExceeded(activeSessionIds.length, this.maxSessions);
|
|
188
184
|
}
|
|
189
185
|
const childSessionId = await this.generateForkSessionId();
|
|
190
|
-
const childSessionKey = `session:${childSessionId}`;
|
|
191
|
-
const childMessagesKey = `messages:${childSessionId}`;
|
|
192
186
|
const now = Date.now();
|
|
193
187
|
const childTitle = this.buildForkTitle(parentSessionData, parentSessionId);
|
|
194
188
|
const childSessionData = {
|
|
@@ -215,16 +209,19 @@ class SessionManager {
|
|
|
215
209
|
}
|
|
216
210
|
};
|
|
217
211
|
try {
|
|
218
|
-
await
|
|
219
|
-
|
|
212
|
+
await this.services.sessionStore.saveSession({
|
|
213
|
+
sessionId: childSessionId,
|
|
214
|
+
session: childSessionData,
|
|
215
|
+
ttlSeconds: this.sessionTTL / 1e3
|
|
216
|
+
});
|
|
217
|
+
await this.copySessionHistory(parentSessionId, childSessionId);
|
|
220
218
|
const childSession = await this.createSession(childSessionId);
|
|
221
219
|
this.logger.info(`Forked session '${parentSessionId}' into child '${childSessionId}'`);
|
|
222
220
|
return childSession;
|
|
223
221
|
} catch (error) {
|
|
224
222
|
await Promise.allSettled([
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
cache.delete(childSessionKey)
|
|
223
|
+
this.services.sessionStore.deleteSession({ sessionId: childSessionId }),
|
|
224
|
+
this.services.conversationStore.clearMessages({ sessionId: childSessionId })
|
|
228
225
|
]);
|
|
229
226
|
const inMemorySession = this.sessions.get(childSessionId);
|
|
230
227
|
if (inMemorySession) {
|
|
@@ -245,13 +242,14 @@ class SessionManager {
|
|
|
245
242
|
return `${prefix}${baseTitle}`;
|
|
246
243
|
}
|
|
247
244
|
async generateForkSessionId() {
|
|
248
|
-
const database = this.services.storageManager.getDatabase();
|
|
249
245
|
for (let attempt = 0; attempt < SessionManager.FORK_ID_GENERATION_MAX_ATTEMPTS; attempt++) {
|
|
250
246
|
const candidateId = randomUUID();
|
|
251
247
|
if (this.sessions.has(candidateId) || this.pendingCreations.has(candidateId)) {
|
|
252
248
|
continue;
|
|
253
249
|
}
|
|
254
|
-
const existing = await
|
|
250
|
+
const existing = await this.services.sessionStore.getSession({
|
|
251
|
+
sessionId: candidateId
|
|
252
|
+
});
|
|
255
253
|
if (!existing) {
|
|
256
254
|
return candidateId;
|
|
257
255
|
}
|
|
@@ -261,25 +259,15 @@ class SessionManager {
|
|
|
261
259
|
"failed to generate unique child session ID"
|
|
262
260
|
);
|
|
263
261
|
}
|
|
264
|
-
async copySessionHistory(
|
|
265
|
-
const
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
);
|
|
273
|
-
if (batch.length === 0) {
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
for (const message of batch) {
|
|
277
|
-
await database.append(childMessagesKey, message);
|
|
278
|
-
}
|
|
279
|
-
offset += batch.length;
|
|
280
|
-
if (batch.length < SessionManager.FORK_HISTORY_BATCH_SIZE) {
|
|
281
|
-
return;
|
|
282
|
-
}
|
|
262
|
+
async copySessionHistory(parentSessionId, childSessionId) {
|
|
263
|
+
const messages = await this.services.conversationStore.listMessages({
|
|
264
|
+
sessionId: parentSessionId
|
|
265
|
+
});
|
|
266
|
+
for (const message of messages) {
|
|
267
|
+
await this.services.conversationStore.saveMessage({
|
|
268
|
+
sessionId: childSessionId,
|
|
269
|
+
message
|
|
270
|
+
});
|
|
283
271
|
}
|
|
284
272
|
}
|
|
285
273
|
/**
|
|
@@ -288,8 +276,7 @@ class SessionManager {
|
|
|
288
276
|
*/
|
|
289
277
|
async createSessionInternal(id) {
|
|
290
278
|
await this.cleanupExpiredSessions();
|
|
291
|
-
const
|
|
292
|
-
const existingMetadata = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
279
|
+
const existingMetadata = await this.services.sessionStore.getSession({ sessionId: id });
|
|
293
280
|
if (existingMetadata) {
|
|
294
281
|
await this.updateSessionActivity(id);
|
|
295
282
|
const runtimeConfig = this.services.stateManager.getRuntimeConfig();
|
|
@@ -299,7 +286,7 @@ class SessionManager {
|
|
|
299
286
|
agentId,
|
|
300
287
|
sessionId: id
|
|
301
288
|
});
|
|
302
|
-
const sessionData2 = await this.services.
|
|
289
|
+
const sessionData2 = await this.services.sessionStore.getSession({ sessionId: id });
|
|
303
290
|
if (sessionData2?.llmOverride) {
|
|
304
291
|
const { resolveApiKeyForProvider } = await import("../utils/api-key-resolver.js");
|
|
305
292
|
const apiKey = resolveApiKeyForProvider(sessionData2.llmOverride.provider);
|
|
@@ -324,7 +311,7 @@ class SessionManager {
|
|
|
324
311
|
this.logger.info(`Restored session from storage: ${id}`);
|
|
325
312
|
return session2;
|
|
326
313
|
}
|
|
327
|
-
const activeSessionKeys = await this.services.
|
|
314
|
+
const activeSessionKeys = await this.services.sessionStore.listSessionIds();
|
|
328
315
|
if (activeSessionKeys.length >= this.maxSessions) {
|
|
329
316
|
throw SessionError.maxSessionsExceeded(activeSessionKeys.length, this.maxSessions);
|
|
330
317
|
}
|
|
@@ -338,7 +325,11 @@ class SessionManager {
|
|
|
338
325
|
...workspace?.id !== void 0 && { workspaceId: workspace.id }
|
|
339
326
|
};
|
|
340
327
|
try {
|
|
341
|
-
await this.services.
|
|
328
|
+
await this.services.sessionStore.saveSession({
|
|
329
|
+
sessionId: id,
|
|
330
|
+
session: sessionData,
|
|
331
|
+
ttlSeconds: this.sessionTTL / 1e3
|
|
332
|
+
});
|
|
342
333
|
} catch (error) {
|
|
343
334
|
this.logger.error(`Failed to store session metadata for ${id}:`, {
|
|
344
335
|
error: error instanceof Error ? error.message : String(error)
|
|
@@ -357,15 +348,13 @@ class SessionManager {
|
|
|
357
348
|
session = new ChatSession(this.getChatSessionServices(), id, sessionLogger);
|
|
358
349
|
await session.init();
|
|
359
350
|
this.sessions.set(id, session);
|
|
360
|
-
await this.services.storageManager.getCache().set(sessionKey, sessionData, this.sessionTTL / 1e3);
|
|
361
351
|
this.logger.info(`Created new session: ${id}`);
|
|
362
352
|
return session;
|
|
363
353
|
} catch (error) {
|
|
364
354
|
this.logger.error(
|
|
365
355
|
`Failed to initialize session ${id}: ${error instanceof Error ? error.message : String(error)}`
|
|
366
356
|
);
|
|
367
|
-
await this.services.
|
|
368
|
-
await this.services.storageManager.getCache().delete(sessionKey);
|
|
357
|
+
await this.services.sessionStore.deleteSession({ sessionId: id });
|
|
369
358
|
const reason = error instanceof Error ? error.message : "unknown error";
|
|
370
359
|
throw SessionError.initializationFailed(id, reason);
|
|
371
360
|
}
|
|
@@ -386,8 +375,7 @@ class SessionManager {
|
|
|
386
375
|
return this.sessions.get(sessionId);
|
|
387
376
|
}
|
|
388
377
|
if (restoreFromStorage) {
|
|
389
|
-
const
|
|
390
|
-
const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
378
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
391
379
|
if (sessionData) {
|
|
392
380
|
const runtimeConfig = this.services.stateManager.getRuntimeConfig();
|
|
393
381
|
const agentId = runtimeConfig.agentCard?.name ?? runtimeConfig.agentId;
|
|
@@ -439,8 +427,7 @@ class SessionManager {
|
|
|
439
427
|
await session.cleanup();
|
|
440
428
|
this.sessions.delete(sessionId);
|
|
441
429
|
}
|
|
442
|
-
|
|
443
|
-
await this.services.storageManager.getCache().delete(sessionKey);
|
|
430
|
+
await this.services.sessionStore.evictSession({ sessionId });
|
|
444
431
|
this.evictSessionInteractionState(sessionId);
|
|
445
432
|
this.logger.debug(
|
|
446
433
|
`Ended session (removed from memory, chat history preserved): ${sessionId}`
|
|
@@ -459,12 +446,9 @@ class SessionManager {
|
|
|
459
446
|
await session.cleanup();
|
|
460
447
|
this.sessions.delete(sessionId);
|
|
461
448
|
}
|
|
462
|
-
|
|
463
|
-
await this.services.storageManager.getDatabase().delete(sessionKey);
|
|
464
|
-
await this.services.storageManager.getCache().delete(sessionKey);
|
|
449
|
+
await this.services.sessionStore.deleteSession({ sessionId });
|
|
465
450
|
await this.deleteSessionInteractionState(sessionId);
|
|
466
|
-
|
|
467
|
-
await this.services.storageManager.getDatabase().delete(messagesKey);
|
|
451
|
+
await this.services.conversationStore.clearMessages({ sessionId });
|
|
468
452
|
this.logger.debug(`Deleted session and conversation history: ${sessionId}`);
|
|
469
453
|
}
|
|
470
454
|
/**
|
|
@@ -480,7 +464,7 @@ class SessionManager {
|
|
|
480
464
|
throw SessionError.notFound(sessionId);
|
|
481
465
|
}
|
|
482
466
|
await session.reset();
|
|
483
|
-
await session.
|
|
467
|
+
await session.clearPendingInput();
|
|
484
468
|
await Promise.all([
|
|
485
469
|
this.services.toolManager.deleteSessionState(sessionId),
|
|
486
470
|
this.services.approvalManager.deleteSessionState(sessionId)
|
|
@@ -489,15 +473,15 @@ class SessionManager {
|
|
|
489
473
|
this.services.stateManager.clearSessionOverride(sessionId);
|
|
490
474
|
await session.switchLLM(this.services.stateManager.getRuntimeConfig().llm);
|
|
491
475
|
}
|
|
492
|
-
await this.runWithSessionDataLock(sessionId, async (
|
|
493
|
-
const sessionData = await this.services.
|
|
476
|
+
await this.runWithSessionDataLock(sessionId, async () => {
|
|
477
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
494
478
|
if (!sessionData) {
|
|
495
479
|
return;
|
|
496
480
|
}
|
|
497
481
|
sessionData.messageCount = 0;
|
|
498
482
|
sessionData.lastActivity = Date.now();
|
|
499
483
|
delete sessionData.llmOverride;
|
|
500
|
-
await this.persistSessionData(
|
|
484
|
+
await this.persistSessionData(sessionId, sessionData);
|
|
501
485
|
});
|
|
502
486
|
this.logger.debug(`Reset session conversation: ${sessionId}`);
|
|
503
487
|
}
|
|
@@ -508,8 +492,7 @@ class SessionManager {
|
|
|
508
492
|
*/
|
|
509
493
|
async listSessions() {
|
|
510
494
|
await this.ensureInitialized();
|
|
511
|
-
|
|
512
|
-
return sessionKeys.map((key) => key.replace("session:", ""));
|
|
495
|
+
return await this.services.sessionStore.listSessionIds();
|
|
513
496
|
}
|
|
514
497
|
/**
|
|
515
498
|
* Gets metadata for a specific session.
|
|
@@ -519,8 +502,7 @@ class SessionManager {
|
|
|
519
502
|
*/
|
|
520
503
|
async getSessionMetadata(sessionId) {
|
|
521
504
|
await this.ensureInitialized();
|
|
522
|
-
const
|
|
523
|
-
const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
505
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
524
506
|
if (!sessionData) return void 0;
|
|
525
507
|
return {
|
|
526
508
|
createdAt: sessionData.createdAt,
|
|
@@ -541,8 +523,7 @@ class SessionManager {
|
|
|
541
523
|
}
|
|
542
524
|
async getSessionSystemPromptContributors(sessionId) {
|
|
543
525
|
await this.ensureInitialized();
|
|
544
|
-
const
|
|
545
|
-
const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
526
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
546
527
|
if (!sessionData) {
|
|
547
528
|
throw SessionError.notFound(sessionId);
|
|
548
529
|
}
|
|
@@ -550,8 +531,8 @@ class SessionManager {
|
|
|
550
531
|
}
|
|
551
532
|
async upsertSessionSystemPromptContributor(sessionId, contributor) {
|
|
552
533
|
await this.ensureInitialized();
|
|
553
|
-
return await this.runWithSessionDataLock(sessionId, async (
|
|
554
|
-
const sessionData = await this.services.
|
|
534
|
+
return await this.runWithSessionDataLock(sessionId, async () => {
|
|
535
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
555
536
|
if (!sessionData) {
|
|
556
537
|
throw SessionError.notFound(sessionId);
|
|
557
538
|
}
|
|
@@ -563,14 +544,14 @@ class SessionManager {
|
|
|
563
544
|
sessionData.metadata = sessionData.metadata || {};
|
|
564
545
|
sessionData.metadata.systemPromptContributors = next;
|
|
565
546
|
sessionData.lastActivity = Date.now();
|
|
566
|
-
await this.persistSessionData(
|
|
547
|
+
await this.persistSessionData(sessionId, sessionData);
|
|
567
548
|
return replaced;
|
|
568
549
|
});
|
|
569
550
|
}
|
|
570
551
|
async removeSessionSystemPromptContributor(sessionId, contributorId) {
|
|
571
552
|
await this.ensureInitialized();
|
|
572
|
-
return await this.runWithSessionDataLock(sessionId, async (
|
|
573
|
-
const sessionData = await this.services.
|
|
553
|
+
return await this.runWithSessionDataLock(sessionId, async () => {
|
|
554
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
574
555
|
if (!sessionData) {
|
|
575
556
|
throw SessionError.notFound(sessionId);
|
|
576
557
|
}
|
|
@@ -583,7 +564,7 @@ class SessionManager {
|
|
|
583
564
|
sessionData.metadata = sessionData.metadata || {};
|
|
584
565
|
sessionData.metadata.systemPromptContributors = next;
|
|
585
566
|
sessionData.lastActivity = Date.now();
|
|
586
|
-
await this.persistSessionData(
|
|
567
|
+
await this.persistSessionData(sessionId, sessionData);
|
|
587
568
|
return true;
|
|
588
569
|
});
|
|
589
570
|
}
|
|
@@ -601,8 +582,8 @@ class SessionManager {
|
|
|
601
582
|
}
|
|
602
583
|
async markUntrackedChatGPTLoginUsage(sessionId) {
|
|
603
584
|
await this.ensureInitialized();
|
|
604
|
-
await this.runWithSessionDataLock(sessionId, async (
|
|
605
|
-
const sessionData = await this.services.
|
|
585
|
+
await this.runWithSessionDataLock(sessionId, async () => {
|
|
586
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
606
587
|
if (!sessionData || sessionData.usageTracking?.hasUntrackedChatGPTLoginUsage) {
|
|
607
588
|
return;
|
|
608
589
|
}
|
|
@@ -610,7 +591,7 @@ class SessionManager {
|
|
|
610
591
|
...sessionData.usageTracking ?? {},
|
|
611
592
|
hasUntrackedChatGPTLoginUsage: true
|
|
612
593
|
};
|
|
613
|
-
await this.persistSessionData(
|
|
594
|
+
await this.persistSessionData(sessionId, sessionData);
|
|
614
595
|
});
|
|
615
596
|
}
|
|
616
597
|
/**
|
|
@@ -626,13 +607,13 @@ class SessionManager {
|
|
|
626
607
|
* Updates the last activity timestamp for a session.
|
|
627
608
|
*/
|
|
628
609
|
async updateSessionActivity(sessionId) {
|
|
629
|
-
await this.runWithSessionDataLock(sessionId, async (
|
|
630
|
-
const sessionData = await this.services.
|
|
610
|
+
await this.runWithSessionDataLock(sessionId, async () => {
|
|
611
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
631
612
|
if (!sessionData) {
|
|
632
613
|
return;
|
|
633
614
|
}
|
|
634
615
|
sessionData.lastActivity = Date.now();
|
|
635
|
-
await this.persistSessionData(
|
|
616
|
+
await this.persistSessionData(sessionId, sessionData);
|
|
636
617
|
});
|
|
637
618
|
}
|
|
638
619
|
/**
|
|
@@ -640,14 +621,14 @@ class SessionManager {
|
|
|
640
621
|
*/
|
|
641
622
|
async incrementMessageCount(sessionId) {
|
|
642
623
|
await this.ensureInitialized();
|
|
643
|
-
await this.runWithSessionDataLock(sessionId, async (
|
|
644
|
-
const sessionData = await this.services.
|
|
624
|
+
await this.runWithSessionDataLock(sessionId, async () => {
|
|
625
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
645
626
|
if (!sessionData) {
|
|
646
627
|
return;
|
|
647
628
|
}
|
|
648
629
|
sessionData.messageCount++;
|
|
649
630
|
sessionData.lastActivity = Date.now();
|
|
650
|
-
await this.persistSessionData(
|
|
631
|
+
await this.persistSessionData(sessionId, sessionData);
|
|
651
632
|
});
|
|
652
633
|
}
|
|
653
634
|
/**
|
|
@@ -663,11 +644,13 @@ class SessionManager {
|
|
|
663
644
|
*/
|
|
664
645
|
async accumulateTokenUsage(sessionId, usage, cost, modelInfo) {
|
|
665
646
|
await this.ensureInitialized();
|
|
666
|
-
await this.runWithSessionDataLock(sessionId, async (
|
|
667
|
-
const sessionData = await this.services.
|
|
647
|
+
await this.runWithSessionDataLock(sessionId, async () => {
|
|
648
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
649
|
+
const normalizedUsage = normalizeTokenUsageForAccounting(usage);
|
|
650
|
+
const finiteCost = typeof cost === "number" && Number.isFinite(cost) ? cost : void 0;
|
|
668
651
|
if (!sessionData) return;
|
|
669
652
|
if (modelInfo) {
|
|
670
|
-
this.updateModelStats(sessionData,
|
|
653
|
+
this.updateModelStats(sessionData, normalizedUsage, finiteCost, modelInfo);
|
|
671
654
|
}
|
|
672
655
|
if (!sessionData.tokenUsage) {
|
|
673
656
|
sessionData.tokenUsage = {
|
|
@@ -679,12 +662,12 @@ class SessionManager {
|
|
|
679
662
|
totalTokens: 0
|
|
680
663
|
};
|
|
681
664
|
}
|
|
682
|
-
this.accumulateTokensInto(sessionData.tokenUsage,
|
|
683
|
-
if (
|
|
684
|
-
sessionData.estimatedCost = (sessionData.estimatedCost ?? 0) +
|
|
665
|
+
this.accumulateTokensInto(sessionData.tokenUsage, normalizedUsage);
|
|
666
|
+
if (finiteCost !== void 0) {
|
|
667
|
+
sessionData.estimatedCost = (sessionData.estimatedCost ?? 0) + finiteCost;
|
|
685
668
|
}
|
|
686
669
|
sessionData.lastActivity = Date.now();
|
|
687
|
-
await this.persistSessionData(
|
|
670
|
+
await this.persistSessionData(sessionId, sessionData);
|
|
688
671
|
});
|
|
689
672
|
}
|
|
690
673
|
/**
|
|
@@ -745,8 +728,8 @@ class SessionManager {
|
|
|
745
728
|
async setSessionTitle(sessionId, title, opts = {}) {
|
|
746
729
|
await this.ensureInitialized();
|
|
747
730
|
const normalized = title.trim().slice(0, 80);
|
|
748
|
-
await this.runWithSessionDataLock(sessionId, async (
|
|
749
|
-
const sessionData = await this.services.
|
|
731
|
+
await this.runWithSessionDataLock(sessionId, async () => {
|
|
732
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
750
733
|
if (!sessionData) {
|
|
751
734
|
throw SessionError.notFound(sessionId);
|
|
752
735
|
}
|
|
@@ -756,7 +739,7 @@ class SessionManager {
|
|
|
756
739
|
sessionData.metadata = sessionData.metadata || {};
|
|
757
740
|
sessionData.metadata.title = normalized;
|
|
758
741
|
sessionData.lastActivity = Date.now();
|
|
759
|
-
await this.persistSessionData(
|
|
742
|
+
await this.persistSessionData(sessionId, sessionData);
|
|
760
743
|
});
|
|
761
744
|
}
|
|
762
745
|
/**
|
|
@@ -764,8 +747,7 @@ class SessionManager {
|
|
|
764
747
|
*/
|
|
765
748
|
async getSessionTitle(sessionId) {
|
|
766
749
|
await this.ensureInitialized();
|
|
767
|
-
const
|
|
768
|
-
const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
750
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
769
751
|
return sessionData?.metadata?.title;
|
|
770
752
|
}
|
|
771
753
|
/**
|
|
@@ -776,8 +758,7 @@ class SessionManager {
|
|
|
776
758
|
const now = Date.now();
|
|
777
759
|
const expiredSessions = [];
|
|
778
760
|
for (const [sessionId, _session] of this.sessions.entries()) {
|
|
779
|
-
const
|
|
780
|
-
const sessionData = await this.services.storageManager.getDatabase().get(sessionKey);
|
|
761
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
781
762
|
if (sessionData && now - sessionData.lastActivity > this.sessionTTL) {
|
|
782
763
|
expiredSessions.push(sessionId);
|
|
783
764
|
}
|
|
@@ -887,8 +868,8 @@ class SessionManager {
|
|
|
887
868
|
return configWithoutApiKey;
|
|
888
869
|
}
|
|
889
870
|
async setPersistedSessionLLMOverride(sessionId, llmOverride) {
|
|
890
|
-
await this.runWithSessionDataLock(sessionId, async (
|
|
891
|
-
const sessionData = await this.services.
|
|
871
|
+
await this.runWithSessionDataLock(sessionId, async () => {
|
|
872
|
+
const sessionData = await this.services.sessionStore.getSession({ sessionId });
|
|
892
873
|
if (!sessionData) {
|
|
893
874
|
return;
|
|
894
875
|
}
|
|
@@ -897,7 +878,7 @@ class SessionManager {
|
|
|
897
878
|
} else {
|
|
898
879
|
delete sessionData.llmOverride;
|
|
899
880
|
}
|
|
900
|
-
await this.persistSessionData(
|
|
881
|
+
await this.persistSessionData(sessionId, sessionData);
|
|
901
882
|
});
|
|
902
883
|
}
|
|
903
884
|
async deleteSessionInteractionState(sessionId) {
|
|
@@ -905,7 +886,8 @@ class SessionManager {
|
|
|
905
886
|
await Promise.all([
|
|
906
887
|
this.services.toolManager.deleteSessionState(sessionId),
|
|
907
888
|
this.services.approvalManager.deleteSessionState(sessionId),
|
|
908
|
-
this.services.
|
|
889
|
+
this.services.steerQueueStore.delete({ sessionId }),
|
|
890
|
+
this.services.followUpQueueStore.delete({ sessionId })
|
|
909
891
|
]);
|
|
910
892
|
}
|
|
911
893
|
evictSessionInteractionState(sessionId) {
|
|
@@ -916,7 +898,7 @@ class SessionManager {
|
|
|
916
898
|
const sessionKey = `session:${sessionId}`;
|
|
917
899
|
const previousLock = this.sessionDataLocks.get(sessionKey) ?? Promise.resolve();
|
|
918
900
|
const currentResult = previousLock.catch(() => {
|
|
919
|
-
}).then(() => fn(
|
|
901
|
+
}).then(() => fn());
|
|
920
902
|
const currentLock = currentResult.then(
|
|
921
903
|
() => void 0,
|
|
922
904
|
() => void 0
|
|
@@ -930,9 +912,12 @@ class SessionManager {
|
|
|
930
912
|
}
|
|
931
913
|
}
|
|
932
914
|
}
|
|
933
|
-
async persistSessionData(
|
|
934
|
-
await this.services.
|
|
935
|
-
|
|
915
|
+
async persistSessionData(sessionId, sessionData) {
|
|
916
|
+
await this.services.sessionStore.saveSession({
|
|
917
|
+
sessionId,
|
|
918
|
+
session: sessionData,
|
|
919
|
+
ttlSeconds: this.sessionTTL / 1e3
|
|
920
|
+
});
|
|
936
921
|
}
|
|
937
922
|
/**
|
|
938
923
|
* Get session statistics for monitoring and debugging.
|
|
@@ -956,8 +941,7 @@ class SessionManager {
|
|
|
956
941
|
*/
|
|
957
942
|
async getSessionData(sessionId) {
|
|
958
943
|
await this.ensureInitialized();
|
|
959
|
-
|
|
960
|
-
return await this.services.storageManager.getDatabase().get(sessionKey);
|
|
944
|
+
return await this.services.sessionStore.getSession({ sessionId });
|
|
961
945
|
}
|
|
962
946
|
/**
|
|
963
947
|
* Cleanup all sessions and resources.
|
|
@@ -23,10 +23,8 @@ __export(title_generator_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(title_generator_exports);
|
|
25
25
|
var import_factory = require("../llm/services/factory.js");
|
|
26
|
-
var
|
|
27
|
-
|
|
28
|
-
var import_message_queue = require("./message-queue.js");
|
|
29
|
-
async function generateSessionTitle(config, toolManager, systemPromptManager, resourceManager, userText, logger, opts = {}) {
|
|
26
|
+
var import_ai = require("ai");
|
|
27
|
+
async function generateSessionTitle(config, userText, logger, opts = {}) {
|
|
30
28
|
const timeoutMs = opts.timeoutMs;
|
|
31
29
|
const controller = timeoutMs !== void 0 ? new AbortController() : void 0;
|
|
32
30
|
let timer;
|
|
@@ -34,24 +32,12 @@ async function generateSessionTitle(config, toolManager, systemPromptManager, re
|
|
|
34
32
|
timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
35
33
|
}
|
|
36
34
|
try {
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const sessionId = `titlegen-${Math.random().toString(36).slice(2)}`;
|
|
40
|
-
const options = {
|
|
41
|
-
messageQueue: import_message_queue.MessageQueueService.createEphemeral(bus, logger, sessionId)
|
|
42
|
-
};
|
|
43
|
-
const tempService = (0, import_factory.createLLMService)(
|
|
35
|
+
const providerContext = opts.providerContext ?? {};
|
|
36
|
+
const model = opts.languageModelFactory?.({
|
|
44
37
|
config,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
bus,
|
|
49
|
-
sessionId,
|
|
50
|
-
resourceManager,
|
|
51
|
-
logger,
|
|
52
|
-
options,
|
|
53
|
-
opts.languageModelFactory
|
|
54
|
-
);
|
|
38
|
+
context: providerContext,
|
|
39
|
+
createDefaultLanguageModel: () => (0, import_factory.createVercelModel)(config, providerContext)
|
|
40
|
+
}) ?? (0, import_factory.createVercelModel)(config, providerContext);
|
|
55
41
|
const instruction = [
|
|
56
42
|
"Generate a short conversation title from the following user message.",
|
|
57
43
|
"Rules: 3\u20138 words; no surrounding punctuation, emojis, or PII; return only the title.",
|
|
@@ -59,11 +45,13 @@ async function generateSessionTitle(config, toolManager, systemPromptManager, re
|
|
|
59
45
|
"Message:",
|
|
60
46
|
sanitizeUserText(userText, 512)
|
|
61
47
|
].join("\n");
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
48
|
+
const result = await (0, import_ai.generateText)({
|
|
49
|
+
model,
|
|
50
|
+
prompt: instruction,
|
|
51
|
+
maxOutputTokens: 32,
|
|
52
|
+
...controller ? { abortSignal: controller.signal } : {}
|
|
53
|
+
});
|
|
54
|
+
const processed = postProcessTitle(result.text);
|
|
67
55
|
if (!processed) {
|
|
68
56
|
return { error: "LLM returned empty title" };
|
|
69
57
|
}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import type { ValidatedLLMConfig } from '../llm/schemas.js';
|
|
2
|
-
import type { ToolManager } from '../tools/tool-manager.js';
|
|
3
|
-
import type { SystemPromptManager } from '../systemPrompt/manager.js';
|
|
4
|
-
import type { ResourceManager } from '../resources/index.js';
|
|
5
2
|
import type { Logger } from '../logger/v2/types.js';
|
|
6
|
-
import type { LanguageModelFactory } from '../llm/services/types.js';
|
|
3
|
+
import type { DextoProviderContext, LanguageModelFactory } from '../llm/services/types.js';
|
|
7
4
|
export interface GenerateSessionTitleResult {
|
|
8
5
|
title?: string;
|
|
9
6
|
error?: string;
|
|
@@ -13,9 +10,10 @@ export interface GenerateSessionTitleResult {
|
|
|
13
10
|
* Generate a concise title for a chat based on the first user message.
|
|
14
11
|
* Runs a lightweight, isolated LLM completion that does not touch real history.
|
|
15
12
|
*/
|
|
16
|
-
export declare function generateSessionTitle(config: ValidatedLLMConfig,
|
|
17
|
-
timeoutMs?: number;
|
|
13
|
+
export declare function generateSessionTitle(config: ValidatedLLMConfig, userText: string, logger: Logger, opts?: {
|
|
18
14
|
languageModelFactory?: LanguageModelFactory;
|
|
15
|
+
providerContext?: DextoProviderContext;
|
|
16
|
+
timeoutMs?: number;
|
|
19
17
|
}): Promise<GenerateSessionTitleResult>;
|
|
20
18
|
/**
|
|
21
19
|
* Heuristic fallback when the LLM-based title fails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"title-generator.d.ts","sourceRoot":"","sources":["../../src/session/title-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"title-generator.d.ts","sourceRoot":"","sources":["../../src/session/title-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAI3F,MAAM,WAAW,0BAA0B;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IACF,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACjB,GACP,OAAO,CAAC,0BAA0B,CAAC,CAgDrC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA8BzE"}
|