@strands-agents/sdk 0.5.0 → 0.7.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/README.md +64 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts +37 -4
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +31 -4
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/metrics-helpers.d.ts +55 -0
- package/dist/src/__fixtures__/metrics-helpers.d.ts.map +1 -0
- package/dist/src/__fixtures__/metrics-helpers.js +57 -0
- package/dist/src/__fixtures__/metrics-helpers.js.map +1 -0
- package/dist/src/__fixtures__/mock-message-model.d.ts +8 -4
- package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-message-model.js +25 -7
- package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
- package/dist/src/__fixtures__/mock-meter.d.ts +32 -0
- package/dist/src/__fixtures__/mock-meter.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-meter.js +47 -0
- package/dist/src/__fixtures__/mock-meter.js.map +1 -0
- package/dist/src/__fixtures__/mock-plugin.d.ts +13 -0
- package/dist/src/__fixtures__/mock-plugin.d.ts.map +1 -0
- package/dist/src/__fixtures__/{mock-hook-provider.js → mock-plugin.js} +8 -5
- package/dist/src/__fixtures__/mock-plugin.js.map +1 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts +5 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-storage-provider.js +23 -6
- package/dist/src/__fixtures__/mock-storage-provider.js.map +1 -1
- package/dist/src/__fixtures__/slim-types.d.ts +2 -1
- package/dist/src/__fixtures__/slim-types.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +5 -2
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
- package/dist/src/__tests__/index.test.js +21 -0
- package/dist/src/__tests__/index.test.js.map +1 -1
- package/dist/src/__tests__/mcp.test.js +45 -15
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/__tests__/mime.test.d.ts +2 -0
- package/dist/src/__tests__/mime.test.d.ts.map +1 -0
- package/dist/src/__tests__/mime.test.js +83 -0
- package/dist/src/__tests__/mime.test.js.map +1 -0
- package/dist/src/__tests__/state-store.test.d.ts +2 -0
- package/dist/src/__tests__/state-store.test.d.ts.map +1 -0
- package/dist/src/__tests__/{app-state.test.js → state-store.test.js} +86 -51
- package/dist/src/__tests__/state-store.test.js.map +1 -0
- package/dist/src/a2a/__tests__/a2a-agent.test.d.ts +2 -0
- package/dist/src/a2a/__tests__/a2a-agent.test.d.ts.map +1 -0
- package/dist/src/a2a/__tests__/a2a-agent.test.js +364 -0
- package/dist/src/a2a/__tests__/a2a-agent.test.js.map +1 -0
- package/dist/src/a2a/__tests__/adapters.test.d.ts +2 -0
- package/dist/src/a2a/__tests__/adapters.test.d.ts.map +1 -0
- package/dist/src/a2a/__tests__/adapters.test.js +151 -0
- package/dist/src/a2a/__tests__/adapters.test.js.map +1 -0
- package/dist/src/a2a/__tests__/executor.test.d.ts +2 -0
- package/dist/src/a2a/__tests__/executor.test.d.ts.map +1 -0
- package/dist/src/a2a/__tests__/executor.test.js +196 -0
- package/dist/src/a2a/__tests__/executor.test.js.map +1 -0
- package/dist/src/a2a/__tests__/server.test.d.ts +2 -0
- package/dist/src/a2a/__tests__/server.test.d.ts.map +1 -0
- package/dist/src/a2a/__tests__/server.test.js +51 -0
- package/dist/src/a2a/__tests__/server.test.js.map +1 -0
- package/dist/src/a2a/__tests__/server.test.node.d.ts +2 -0
- package/dist/src/a2a/__tests__/server.test.node.d.ts.map +1 -0
- package/dist/src/a2a/__tests__/server.test.node.js +110 -0
- package/dist/src/a2a/__tests__/server.test.node.js.map +1 -0
- package/dist/src/a2a/a2a-agent.d.ts +132 -0
- package/dist/src/a2a/a2a-agent.d.ts.map +1 -0
- package/dist/src/a2a/a2a-agent.js +255 -0
- package/dist/src/a2a/a2a-agent.js.map +1 -0
- package/dist/src/a2a/adapters.d.ts +27 -0
- package/dist/src/a2a/adapters.d.ts.map +1 -0
- package/dist/src/a2a/adapters.js +175 -0
- package/dist/src/a2a/adapters.js.map +1 -0
- package/dist/src/a2a/events.d.ts +42 -0
- package/dist/src/a2a/events.d.ts.map +1 -0
- package/dist/src/a2a/events.js +35 -0
- package/dist/src/a2a/events.js.map +1 -0
- package/dist/src/a2a/executor.d.ts +57 -0
- package/dist/src/a2a/executor.d.ts.map +1 -0
- package/dist/src/a2a/executor.js +130 -0
- package/dist/src/a2a/executor.js.map +1 -0
- package/dist/src/a2a/express-server.d.ts +67 -0
- package/dist/src/a2a/express-server.d.ts.map +1 -0
- package/dist/src/a2a/express-server.js +95 -0
- package/dist/src/a2a/express-server.js.map +1 -0
- package/dist/src/a2a/index.d.ts +16 -0
- package/dist/src/a2a/index.d.ts.map +1 -0
- package/dist/src/a2a/index.js +16 -0
- package/dist/src/a2a/index.js.map +1 -0
- package/dist/src/a2a/logging.d.ts +8 -0
- package/dist/src/a2a/logging.d.ts.map +1 -0
- package/dist/src/a2a/logging.js +15 -0
- package/dist/src/a2a/logging.js.map +1 -0
- package/dist/src/a2a/server.d.ts +67 -0
- package/dist/src/a2a/server.d.ts.map +1 -0
- package/dist/src/a2a/server.js +67 -0
- package/dist/src/a2a/server.js.map +1 -0
- package/dist/src/agent/__tests__/agent.hook.test.js +87 -51
- package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.test.js +176 -101
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.tracer.test.js +10 -10
- package/dist/src/agent/__tests__/agent.tracer.test.js.map +1 -1
- package/dist/src/agent/__tests__/snapshot.test.js +11 -11
- package/dist/src/agent/__tests__/snapshot.test.js.map +1 -1
- package/dist/src/agent/agent.d.ts +71 -58
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +177 -93
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/agent/snapshot.d.ts.map +1 -1
- package/dist/src/agent/snapshot.js +3 -2
- package/dist/src/agent/snapshot.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +100 -0
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +26 -10
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +84 -21
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/conversation-manager.d.ts +87 -0
- package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -0
- package/dist/src/conversation-manager/conversation-manager.js +59 -0
- package/dist/src/conversation-manager/conversation-manager.js.map +1 -0
- package/dist/src/conversation-manager/index.d.ts +1 -0
- package/dist/src/conversation-manager/index.d.ts.map +1 -1
- package/dist/src/conversation-manager/index.js +1 -0
- package/dist/src/conversation-manager/index.js.map +1 -1
- package/dist/src/conversation-manager/null-conversation-manager.d.ts +12 -8
- package/dist/src/conversation-manager/null-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/null-conversation-manager.js +13 -7
- package/dist/src/conversation-manager/null-conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +28 -19
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +44 -36
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
- package/dist/src/errors.d.ts +6 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +9 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/hooks/__tests__/events.test.js +2 -0
- package/dist/src/hooks/__tests__/events.test.js.map +1 -1
- package/dist/src/hooks/__tests__/registry.test.js +10 -154
- package/dist/src/hooks/__tests__/registry.test.js.map +1 -1
- package/dist/src/hooks/events.d.ts +60 -44
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js +11 -11
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/hooks/index.d.ts +4 -4
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/index.js +2 -2
- package/dist/src/hooks/registry.d.ts +1 -32
- package/dist/src/hooks/registry.d.ts.map +1 -1
- package/dist/src/hooks/registry.js +1 -47
- package/dist/src/hooks/registry.js.map +1 -1
- package/dist/src/hooks/types.d.ts +0 -31
- package/dist/src/hooks/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +30 -15
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +21 -8
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp.d.ts +38 -0
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +23 -6
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/mime.d.ts +24 -0
- package/dist/src/mime.d.ts.map +1 -0
- package/dist/src/mime.js +82 -0
- package/dist/src/mime.js.map +1 -0
- package/dist/src/models/__tests__/anthropic.test.js +78 -1
- package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +2050 -131
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/gemini.test.js +100 -1
- package/dist/src/models/__tests__/gemini.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +131 -0
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/__tests__/openai.test.js +184 -32
- package/dist/src/models/__tests__/openai.test.js.map +1 -1
- package/dist/src/models/__tests__/streaming.test.d.ts +2 -0
- package/dist/src/models/__tests__/streaming.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/streaming.test.js +50 -0
- package/dist/src/models/__tests__/streaming.test.js.map +1 -0
- package/dist/src/models/anthropic.d.ts.map +1 -1
- package/dist/src/models/anthropic.js +6 -7
- package/dist/src/models/anthropic.js.map +1 -1
- package/dist/src/models/bedrock.d.ts +144 -11
- package/dist/src/models/bedrock.d.ts.map +1 -1
- package/dist/src/models/bedrock.js +416 -28
- package/dist/src/models/bedrock.js.map +1 -1
- package/dist/src/models/gemini/adapters.d.ts.map +1 -1
- package/dist/src/models/gemini/adapters.js +65 -14
- package/dist/src/models/gemini/adapters.js.map +1 -1
- package/dist/src/models/model.d.ts +18 -0
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +57 -11
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/openai.d.ts +15 -0
- package/dist/src/models/openai.d.ts.map +1 -1
- package/dist/src/models/openai.js +108 -64
- package/dist/src/models/openai.js.map +1 -1
- package/dist/src/models/streaming.d.ts +88 -2
- package/dist/src/models/streaming.d.ts.map +1 -1
- package/dist/src/models/streaming.js +26 -0
- package/dist/src/models/streaming.js.map +1 -1
- package/dist/src/multiagent/__tests__/events.test.js +41 -8
- package/dist/src/multiagent/__tests__/events.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/graph.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/graph.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/graph.test.js +453 -0
- package/dist/src/multiagent/__tests__/graph.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.js +34 -16
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/queue.test.js +22 -0
- package/dist/src/multiagent/__tests__/queue.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/swarm.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/swarm.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/swarm.test.js +264 -0
- package/dist/src/multiagent/__tests__/swarm.test.js.map +1 -0
- package/dist/src/multiagent/edge.d.ts +9 -2
- package/dist/src/multiagent/edge.d.ts.map +1 -1
- package/dist/src/multiagent/events.d.ts +63 -15
- package/dist/src/multiagent/events.d.ts.map +1 -1
- package/dist/src/multiagent/events.js +28 -3
- package/dist/src/multiagent/events.js.map +1 -1
- package/dist/src/multiagent/graph.d.ts +135 -0
- package/dist/src/multiagent/graph.d.ts.map +1 -0
- package/dist/src/multiagent/graph.js +400 -0
- package/dist/src/multiagent/graph.js.map +1 -0
- package/dist/src/multiagent/index.d.ts +8 -3
- package/dist/src/multiagent/index.d.ts.map +1 -1
- package/dist/src/multiagent/index.js +3 -1
- package/dist/src/multiagent/index.js.map +1 -1
- package/dist/src/multiagent/multiagent.d.ts +41 -0
- package/dist/src/multiagent/multiagent.d.ts.map +1 -0
- package/dist/src/multiagent/multiagent.js +2 -0
- package/dist/src/multiagent/multiagent.js.map +1 -0
- package/dist/src/multiagent/nodes.d.ts +24 -25
- package/dist/src/multiagent/nodes.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.js +42 -15
- package/dist/src/multiagent/nodes.js.map +1 -1
- package/dist/src/multiagent/plugins.d.ts +70 -0
- package/dist/src/multiagent/plugins.d.ts.map +1 -0
- package/dist/src/multiagent/plugins.js +70 -0
- package/dist/src/multiagent/plugins.js.map +1 -0
- package/dist/src/multiagent/queue.d.ts +6 -0
- package/dist/src/multiagent/queue.d.ts.map +1 -1
- package/dist/src/multiagent/queue.js +13 -0
- package/dist/src/multiagent/queue.js.map +1 -1
- package/dist/src/multiagent/state.d.ts +4 -2
- package/dist/src/multiagent/state.d.ts.map +1 -1
- package/dist/src/multiagent/state.js +5 -2
- package/dist/src/multiagent/state.js.map +1 -1
- package/dist/src/multiagent/swarm.d.ts +112 -0
- package/dist/src/multiagent/swarm.d.ts.map +1 -0
- package/dist/src/multiagent/swarm.js +256 -0
- package/dist/src/multiagent/swarm.js.map +1 -0
- package/dist/src/plugins/__tests__/plugin.test.d.ts +2 -0
- package/dist/src/plugins/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/src/plugins/__tests__/plugin.test.js +114 -0
- package/dist/src/plugins/__tests__/plugin.test.js.map +1 -0
- package/dist/src/plugins/__tests__/registry.test.d.ts +2 -0
- package/dist/src/plugins/__tests__/registry.test.d.ts.map +1 -0
- package/dist/src/plugins/__tests__/registry.test.js +147 -0
- package/dist/src/plugins/__tests__/registry.test.js.map +1 -0
- package/dist/src/plugins/index.d.ts +30 -0
- package/dist/src/plugins/index.d.ts.map +1 -0
- package/dist/src/plugins/index.js +30 -0
- package/dist/src/plugins/index.js.map +1 -0
- package/dist/src/plugins/plugin.d.ts +74 -0
- package/dist/src/plugins/plugin.d.ts.map +1 -0
- package/dist/src/plugins/plugin.js +8 -0
- package/dist/src/plugins/plugin.js.map +1 -0
- package/dist/src/plugins/registry.d.ts +25 -0
- package/dist/src/plugins/registry.d.ts.map +1 -0
- package/dist/src/plugins/registry.js +41 -0
- package/dist/src/plugins/registry.js.map +1 -0
- package/dist/src/registry/__tests__/tool-registry.test.d.ts +2 -0
- package/dist/src/registry/__tests__/tool-registry.test.d.ts.map +1 -0
- package/dist/src/registry/__tests__/tool-registry.test.js +124 -0
- package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -0
- package/dist/src/registry/tool-registry.d.ts +32 -20
- package/dist/src/registry/tool-registry.d.ts.map +1 -1
- package/dist/src/registry/tool-registry.js +60 -158
- package/dist/src/registry/tool-registry.js.map +1 -1
- package/dist/src/session/__tests__/file-storage.test.node.js +75 -15
- package/dist/src/session/__tests__/file-storage.test.node.js.map +1 -1
- package/dist/src/session/__tests__/s3-storage.test.d.ts +2 -0
- package/dist/src/session/__tests__/s3-storage.test.d.ts.map +1 -0
- package/dist/src/session/__tests__/{s3-storage.test.node.js → s3-storage.test.js} +161 -75
- package/dist/src/session/__tests__/s3-storage.test.js.map +1 -0
- package/dist/src/session/__tests__/session-manager.test.d.ts +2 -0
- package/dist/src/session/__tests__/session-manager.test.d.ts.map +1 -0
- package/dist/src/session/__tests__/session-manager.test.js +443 -0
- package/dist/src/session/__tests__/session-manager.test.js.map +1 -0
- package/dist/src/session/__tests__/validation.test.js +28 -1
- package/dist/src/session/__tests__/validation.test.js.map +1 -1
- package/dist/src/session/file-storage.d.ts +53 -27
- package/dist/src/session/file-storage.d.ts.map +1 -1
- package/dist/src/session/file-storage.js +103 -52
- package/dist/src/session/file-storage.js.map +1 -1
- package/dist/src/session/index.d.ts +6 -14
- package/dist/src/session/index.d.ts.map +1 -1
- package/dist/src/session/index.js +4 -13
- package/dist/src/session/index.js.map +1 -1
- package/dist/src/session/s3-storage.d.ts +49 -20
- package/dist/src/session/s3-storage.d.ts.map +1 -1
- package/dist/src/session/s3-storage.js +120 -35
- package/dist/src/session/s3-storage.js.map +1 -1
- package/dist/src/session/session-manager.d.ts +87 -0
- package/dist/src/session/session-manager.d.ts.map +1 -0
- package/dist/src/session/session-manager.js +128 -0
- package/dist/src/session/session-manager.js.map +1 -0
- package/dist/src/session/storage.d.ts +20 -12
- package/dist/src/session/storage.d.ts.map +1 -1
- package/dist/src/session/types.d.ts +8 -20
- package/dist/src/session/types.d.ts.map +1 -1
- package/dist/src/session/validation.d.ts +7 -0
- package/dist/src/session/validation.d.ts.map +1 -1
- package/dist/src/session/validation.js +12 -0
- package/dist/src/session/validation.js.map +1 -1
- package/dist/src/{app-state.d.ts → state-store.d.ts} +11 -11
- package/dist/src/state-store.d.ts.map +1 -0
- package/dist/src/{app-state.js → state-store.js} +8 -7
- package/dist/src/state-store.js.map +1 -0
- package/dist/src/structured-output/__tests__/context.test.js +13 -13
- package/dist/src/structured-output/__tests__/context.test.js.map +1 -1
- package/dist/src/structured-output/context.js +1 -1
- package/dist/src/structured-output/context.js.map +1 -1
- package/dist/src/telemetry/__tests__/config.test.d.ts +2 -0
- package/dist/src/telemetry/__tests__/config.test.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.js +64 -0
- package/dist/src/telemetry/__tests__/config.test.js.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.node.js +66 -36
- package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -1
- package/dist/src/telemetry/__tests__/meter.test.d.ts +2 -0
- package/dist/src/telemetry/__tests__/meter.test.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/meter.test.js +624 -0
- package/dist/src/telemetry/__tests__/meter.test.js.map +1 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.js +123 -2
- package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -1
- package/dist/src/telemetry/config.d.ts +104 -23
- package/dist/src/telemetry/config.d.ts.map +1 -1
- package/dist/src/telemetry/config.js +152 -43
- package/dist/src/telemetry/config.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +10 -7
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/index.js +9 -6
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/meter.d.ts +296 -0
- package/dist/src/telemetry/meter.d.ts.map +1 -0
- package/dist/src/telemetry/meter.js +365 -0
- package/dist/src/telemetry/meter.js.map +1 -0
- package/dist/src/telemetry/tracer.d.ts +27 -0
- package/dist/src/telemetry/tracer.d.ts.map +1 -1
- package/dist/src/telemetry/tracer.js +79 -4
- package/dist/src/telemetry/tracer.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +2 -0
- package/dist/src/telemetry/types.d.ts.map +1 -1
- package/dist/src/telemetry/utils.d.ts +10 -0
- package/dist/src/telemetry/utils.d.ts.map +1 -0
- package/dist/src/telemetry/utils.js +13 -0
- package/dist/src/telemetry/utils.js.map +1 -0
- package/dist/src/tools/__tests__/tool-factory.test.d.ts +2 -0
- package/dist/src/tools/__tests__/tool-factory.test.d.ts.map +1 -0
- package/dist/src/tools/__tests__/tool-factory.test.js +98 -0
- package/dist/src/tools/__tests__/tool-factory.test.js.map +1 -0
- package/dist/src/tools/__tests__/tool.test.js +22 -1
- package/dist/src/tools/__tests__/tool.test.js.map +1 -1
- package/dist/src/tools/__tests__/zod-tool.test-d.js +1 -1
- package/dist/src/tools/__tests__/zod-tool.test-d.js.map +1 -1
- package/dist/src/tools/__tests__/zod-tool.test.js +3 -4
- package/dist/src/tools/__tests__/zod-tool.test.js.map +1 -1
- package/dist/src/tools/function-tool.d.ts +26 -3
- package/dist/src/tools/function-tool.d.ts.map +1 -1
- package/dist/src/tools/function-tool.js +88 -3
- package/dist/src/tools/function-tool.js.map +1 -1
- package/dist/src/tools/tool-factory.d.ts +22 -0
- package/dist/src/tools/tool-factory.d.ts.map +1 -0
- package/dist/src/tools/tool-factory.js +55 -0
- package/dist/src/tools/tool-factory.js.map +1 -0
- package/dist/src/tools/tool.d.ts +2 -2
- package/dist/src/tools/tool.d.ts.map +1 -1
- package/dist/src/tools/zod-tool.d.ts +55 -52
- package/dist/src/tools/zod-tool.d.ts.map +1 -1
- package/dist/src/tools/zod-tool.js +7 -61
- package/dist/src/tools/zod-tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/agent.test.js +11 -0
- package/dist/src/types/__tests__/agent.test.js.map +1 -1
- package/dist/src/types/__tests__/citations.test.d.ts +2 -0
- package/dist/src/types/__tests__/citations.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/citations.test.js +104 -0
- package/dist/src/types/__tests__/citations.test.js.map +1 -0
- package/dist/src/types/__tests__/media.test.js +22 -16
- package/dist/src/types/__tests__/media.test.js.map +1 -1
- package/dist/src/types/__tests__/messages.test.js +26 -0
- package/dist/src/types/__tests__/messages.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +82 -7
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js +9 -0
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/citations.d.ts +180 -0
- package/dist/src/types/citations.d.ts.map +1 -0
- package/dist/src/types/citations.js +45 -0
- package/dist/src/types/citations.js.map +1 -0
- package/dist/src/types/media.d.ts +27 -30
- package/dist/src/types/media.d.ts.map +1 -1
- package/dist/src/types/media.js +15 -56
- package/dist/src/types/media.js.map +1 -1
- package/dist/src/types/messages.d.ts +23 -5
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js +26 -26
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/types/serializable.d.ts +34 -4
- package/dist/src/types/serializable.d.ts.map +1 -1
- package/dist/src/types/serializable.js +31 -2
- package/dist/src/types/serializable.js.map +1 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +5 -4
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
- package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
- package/dist/src/vended-tools/bash/bash.js +1 -2
- package/dist/src/vended-tools/bash/bash.js.map +1 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.d.ts.map +1 -0
- package/dist/src/vended-tools/{file_editor → file-editor}/__tests__/file-editor.test.node.js +11 -4
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -0
- package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.d.ts +1 -1
- package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.d.ts.map +1 -1
- package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.js +3 -3
- package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.js.map +1 -1
- package/dist/src/vended-tools/{file_editor → file-editor}/index.d.ts.map +1 -1
- package/dist/src/vended-tools/file-editor/index.js.map +1 -0
- package/dist/src/vended-tools/{file_editor → file-editor}/types.d.ts.map +1 -1
- package/dist/src/vended-tools/file-editor/types.js.map +1 -0
- package/dist/src/vended-tools/http-request/__tests__/http-request.test.d.ts.map +1 -0
- package/dist/src/vended-tools/{http_request → http-request}/__tests__/http-request.test.js.map +1 -1
- package/dist/src/vended-tools/http-request/http-request.d.ts.map +1 -0
- package/dist/src/vended-tools/{http_request → http-request}/http-request.js +1 -2
- package/dist/src/vended-tools/http-request/http-request.js.map +1 -0
- package/dist/src/vended-tools/{http_request → http-request}/index.d.ts.map +1 -1
- package/dist/src/vended-tools/http-request/index.js.map +1 -0
- package/dist/src/vended-tools/{http_request → http-request}/types.d.ts.map +1 -1
- package/dist/src/vended-tools/http-request/types.js.map +1 -0
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +5 -4
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
- package/dist/src/vended-tools/notebook/notebook.d.ts +1 -1
- package/dist/src/vended-tools/notebook/notebook.js +2 -2
- package/dist/src/vended-tools/notebook/notebook.js.map +1 -1
- package/package.json +66 -12
- package/dist/src/__fixtures__/mock-hook-provider.d.ts +0 -10
- package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +0 -1
- package/dist/src/__fixtures__/mock-hook-provider.js.map +0 -1
- package/dist/src/__tests__/app-state.test.d.ts +0 -2
- package/dist/src/__tests__/app-state.test.d.ts.map +0 -1
- package/dist/src/__tests__/app-state.test.js.map +0 -1
- package/dist/src/app-state.d.ts.map +0 -1
- package/dist/src/app-state.js.map +0 -1
- package/dist/src/multiagent/base.d.ts +0 -25
- package/dist/src/multiagent/base.d.ts.map +0 -1
- package/dist/src/multiagent/base.js +0 -2
- package/dist/src/multiagent/base.js.map +0 -1
- package/dist/src/registry/registry.d.ts +0 -117
- package/dist/src/registry/registry.d.ts.map +0 -1
- package/dist/src/registry/registry.js +0 -298
- package/dist/src/registry/registry.js.map +0 -1
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts +0 -2
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts.map +0 -1
- package/dist/src/session/__tests__/s3-storage.test.node.js.map +0 -1
- package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.d.ts.map +0 -1
- package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js.map +0 -1
- package/dist/src/vended-tools/file_editor/index.js.map +0 -1
- package/dist/src/vended-tools/file_editor/types.js.map +0 -1
- package/dist/src/vended-tools/http_request/__tests__/http-request.test.d.ts.map +0 -1
- package/dist/src/vended-tools/http_request/http-request.d.ts.map +0 -1
- package/dist/src/vended-tools/http_request/http-request.js.map +0 -1
- package/dist/src/vended-tools/http_request/index.js.map +0 -1
- package/dist/src/vended-tools/http_request/types.js.map +0 -1
- /package/dist/src/vended-tools/{file_editor → file-editor}/__tests__/file-editor.test.node.d.ts +0 -0
- /package/dist/src/vended-tools/{file_editor → file-editor}/index.d.ts +0 -0
- /package/dist/src/vended-tools/{file_editor → file-editor}/index.js +0 -0
- /package/dist/src/vended-tools/{file_editor → file-editor}/types.d.ts +0 -0
- /package/dist/src/vended-tools/{file_editor → file-editor}/types.js +0 -0
- /package/dist/src/vended-tools/{http_request → http-request}/__tests__/http-request.test.d.ts +0 -0
- /package/dist/src/vended-tools/{http_request → http-request}/__tests__/http-request.test.js +0 -0
- /package/dist/src/vended-tools/{http_request → http-request}/http-request.d.ts +0 -0
- /package/dist/src/vended-tools/{http_request → http-request}/index.d.ts +0 -0
- /package/dist/src/vended-tools/{http_request → http-request}/index.js +0 -0
- /package/dist/src/vended-tools/{http_request → http-request}/types.d.ts +0 -0
- /package/dist/src/vended-tools/{http_request → http-request}/types.js +0 -0
|
@@ -1,14 +1,23 @@
|
|
|
1
|
-
import { S3Client, PutObjectCommand, GetObjectCommand, ListObjectsV2Command } from '@aws-sdk/client-s3';
|
|
1
|
+
import { S3Client, PutObjectCommand, GetObjectCommand, ListObjectsV2Command, DeleteObjectsCommand, } from '@aws-sdk/client-s3';
|
|
2
2
|
import { SessionError } from '../errors.js';
|
|
3
|
-
import { validateIdentifier } from './validation.js';
|
|
3
|
+
import { validateIdentifier, validateUuidV7 } from './validation.js';
|
|
4
4
|
const MANIFEST = 'manifest.json';
|
|
5
5
|
const SNAPSHOT_LATEST = 'snapshot_latest.json';
|
|
6
6
|
const IMMUTABLE_HISTORY = 'immutable_history/';
|
|
7
|
-
const SNAPSHOT_REGEX = /snapshot_(\d+)\.json$/;
|
|
8
7
|
const SCHEMA_VERSION = '1.0';
|
|
9
|
-
const
|
|
8
|
+
const SNAPSHOT_REGEX = /snapshot_([\w-]+)\.json$/;
|
|
9
|
+
const S3_PAGE_SIZE = 1000;
|
|
10
10
|
/**
|
|
11
|
-
* S3-based implementation of SnapshotStorage
|
|
11
|
+
* S3-based implementation of SnapshotStorage.
|
|
12
|
+
* Persists session snapshots as JSON objects in an S3 bucket.
|
|
13
|
+
*
|
|
14
|
+
* Object key layout:
|
|
15
|
+
* ```
|
|
16
|
+
* [<prefix>/]<sessionId>/scopes/<scope>/<scopeId>/snapshots/
|
|
17
|
+
* snapshot_latest.json
|
|
18
|
+
* immutable_history/
|
|
19
|
+
* snapshot_<uuid7>.json
|
|
20
|
+
* ```
|
|
12
21
|
*/
|
|
13
22
|
export class S3Storage {
|
|
14
23
|
/** S3 client instance */
|
|
@@ -30,7 +39,8 @@ export class S3Storage {
|
|
|
30
39
|
this._s3 = config.s3Client ?? new S3Client({ region: config.region ?? 'us-east-1' });
|
|
31
40
|
}
|
|
32
41
|
/**
|
|
33
|
-
*
|
|
42
|
+
* Resolves the full S3 object key for a given scope location and path.
|
|
43
|
+
* Validates sessionId and scopeId before constructing the key.
|
|
34
44
|
*/
|
|
35
45
|
_getKey(location, path) {
|
|
36
46
|
validateIdentifier(location.sessionId);
|
|
@@ -39,16 +49,31 @@ export class S3Storage {
|
|
|
39
49
|
return `${base}${location.sessionId}/scopes/${location.scope}/${location.scopeId}/snapshots/${path}`;
|
|
40
50
|
}
|
|
41
51
|
/**
|
|
42
|
-
*
|
|
52
|
+
* Resolves the S3 key prefix for an entire session (`[<prefix>/]<sessionId>/`).
|
|
53
|
+
* Used by deleteSession to list and remove all objects under the session.
|
|
54
|
+
*/
|
|
55
|
+
_getSessionPrefix(sessionId) {
|
|
56
|
+
validateIdentifier(sessionId);
|
|
57
|
+
const base = this._prefix ? `${this._prefix}/` : '';
|
|
58
|
+
return `${base}${sessionId}/`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Persists a snapshot to S3.
|
|
62
|
+
* If `isLatest` is true, writes to `snapshot_latest.json` (overwriting any previous).
|
|
63
|
+
* Otherwise, writes to `immutable_history/snapshot_<snapshotId>.json`.
|
|
43
64
|
*/
|
|
44
65
|
async saveSnapshot(params) {
|
|
45
|
-
|
|
46
|
-
|
|
66
|
+
if (!params.isLatest) {
|
|
67
|
+
await this._writeJSON(this._getHistorySnapshotKey(params.location, params.snapshotId), params.snapshot);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
47
70
|
await this._writeJSON(this._getLatestSnapshotKey(params.location), params.snapshot);
|
|
48
71
|
}
|
|
49
72
|
}
|
|
50
73
|
/**
|
|
51
|
-
* Loads snapshot
|
|
74
|
+
* Loads a snapshot from S3.
|
|
75
|
+
* If `snapshotId` is omitted, loads `snapshot_latest.json`.
|
|
76
|
+
* Returns null if the object does not exist.
|
|
52
77
|
*/
|
|
53
78
|
async loadSnapshot(params) {
|
|
54
79
|
const key = params.snapshotId === undefined
|
|
@@ -57,54 +82,102 @@ export class S3Storage {
|
|
|
57
82
|
return this._readJSON(key);
|
|
58
83
|
}
|
|
59
84
|
/**
|
|
60
|
-
* Lists
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* listSnapshots(params: {
|
|
66
|
-
* sessionId: string
|
|
67
|
-
* scope: Scope
|
|
68
|
-
* limit?: number // Max results to return (e.g., 100)
|
|
69
|
-
* startAfter?: string // Snapshot ID to start after (for cursor-based pagination)
|
|
70
|
-
* }): Promise<{ snapshotIds: string[]; nextToken?: string }>
|
|
71
|
-
* ```
|
|
85
|
+
* Lists immutable snapshot IDs for a scope, sorted chronologically.
|
|
86
|
+
* Since IDs are UUID v7, lexicographic sort equals chronological order.
|
|
87
|
+
* Pushes `startAfter` and `limit` down to S3 via `StartAfter` and `MaxKeys`
|
|
88
|
+
* to avoid fetching unnecessary objects.
|
|
89
|
+
* Returns an empty array if no snapshots exist yet.
|
|
72
90
|
*/
|
|
73
91
|
async listSnapshotIds(params) {
|
|
92
|
+
if (params.limit !== undefined && params.limit <= 0)
|
|
93
|
+
return [];
|
|
94
|
+
if (params.startAfter)
|
|
95
|
+
validateUuidV7(params.startAfter);
|
|
74
96
|
const prefix = this._getKey(params.location, IMMUTABLE_HISTORY);
|
|
97
|
+
// S3 StartAfter is a full object key; construct it from the UUID cursor.
|
|
98
|
+
// Exclusive: objects after this key are returned, matching our pagination contract.
|
|
99
|
+
const startAfterKey = params.startAfter
|
|
100
|
+
? this._getHistorySnapshotKey(params.location, params.startAfter)
|
|
101
|
+
: undefined;
|
|
75
102
|
try {
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
103
|
+
const ids = [];
|
|
104
|
+
let continuationToken;
|
|
105
|
+
do {
|
|
106
|
+
const response = await this._s3.send(new ListObjectsV2Command({
|
|
107
|
+
Bucket: this._bucket,
|
|
108
|
+
Prefix: prefix,
|
|
109
|
+
StartAfter: continuationToken ? undefined : startAfterKey,
|
|
110
|
+
MaxKeys: params.limit !== undefined ? Math.min(S3_PAGE_SIZE, params.limit - ids.length) : S3_PAGE_SIZE,
|
|
111
|
+
ContinuationToken: continuationToken,
|
|
112
|
+
}));
|
|
113
|
+
const page = (response.Contents ?? [])
|
|
114
|
+
.map((obj) => obj.Key?.match(SNAPSHOT_REGEX)?.[1])
|
|
115
|
+
.filter((id) => id !== undefined);
|
|
116
|
+
ids.push(...page);
|
|
117
|
+
if (response.IsTruncated) {
|
|
118
|
+
if (!response.NextContinuationToken) {
|
|
119
|
+
throw new SessionError('S3 returned truncated response without continuation token');
|
|
120
|
+
}
|
|
121
|
+
continuationToken = response.NextContinuationToken;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
continuationToken = undefined;
|
|
125
|
+
}
|
|
126
|
+
} while (continuationToken && (params.limit === undefined || ids.length < params.limit));
|
|
127
|
+
return params.limit !== undefined ? ids.slice(0, params.limit) : ids;
|
|
82
128
|
}
|
|
83
129
|
catch (error) {
|
|
130
|
+
if (error instanceof SessionError)
|
|
131
|
+
throw error;
|
|
132
|
+
if (this._isNotFoundError(error))
|
|
133
|
+
return [];
|
|
84
134
|
throw new SessionError(`Failed to list snapshots for session ${params.location.sessionId}`, { cause: error });
|
|
85
135
|
}
|
|
86
136
|
}
|
|
87
137
|
/**
|
|
88
|
-
*
|
|
138
|
+
* Deletes all S3 objects belonging to a session by listing and batch-deleting
|
|
139
|
+
* everything under `[<prefix>/]<sessionId>/`.
|
|
140
|
+
* Handles buckets with more than 1000 objects via continuation token pagination.
|
|
141
|
+
* No-ops if the session has no objects.
|
|
142
|
+
*/
|
|
143
|
+
async deleteSession(params) {
|
|
144
|
+
const prefix = this._getSessionPrefix(params.sessionId);
|
|
145
|
+
try {
|
|
146
|
+
let continuationToken;
|
|
147
|
+
do {
|
|
148
|
+
const response = await this._s3.send(new ListObjectsV2Command({ Bucket: this._bucket, Prefix: prefix, ContinuationToken: continuationToken }));
|
|
149
|
+
const keys = (response.Contents ?? []).map((obj) => ({ Key: obj.Key }));
|
|
150
|
+
if (keys.length > 0) {
|
|
151
|
+
await this._s3.send(new DeleteObjectsCommand({ Bucket: this._bucket, Delete: { Objects: keys } }));
|
|
152
|
+
}
|
|
153
|
+
continuationToken = response.IsTruncated ? response.NextContinuationToken : undefined;
|
|
154
|
+
} while (continuationToken);
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
throw new SessionError(`Failed to delete session ${params.sessionId}`, { cause: error });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Loads the snapshot manifest for a scope from S3.
|
|
162
|
+
* Returns a default manifest with the current timestamp if none exists yet.
|
|
89
163
|
*/
|
|
90
164
|
async loadManifest(params) {
|
|
91
165
|
const key = this._getKey(params.location, MANIFEST);
|
|
92
166
|
const manifest = await this._readJSON(key);
|
|
93
167
|
return (manifest ?? {
|
|
94
168
|
schemaVersion: SCHEMA_VERSION,
|
|
95
|
-
nextSnapshotId: DEFAULT_SNAPSHOT_ID,
|
|
96
169
|
updatedAt: new Date().toISOString(),
|
|
97
170
|
});
|
|
98
171
|
}
|
|
99
172
|
/**
|
|
100
|
-
*
|
|
173
|
+
* Persists the snapshot manifest for a scope to S3.
|
|
101
174
|
*/
|
|
102
175
|
async saveManifest(params) {
|
|
103
176
|
const key = this._getKey(params.location, MANIFEST);
|
|
104
177
|
await this._writeJSON(key, params.manifest);
|
|
105
178
|
}
|
|
106
179
|
/**
|
|
107
|
-
*
|
|
180
|
+
* Serializes data as JSON and writes it to S3 with `application/json` content type.
|
|
108
181
|
*/
|
|
109
182
|
async _writeJSON(key, data) {
|
|
110
183
|
try {
|
|
@@ -120,7 +193,8 @@ export class S3Storage {
|
|
|
120
193
|
}
|
|
121
194
|
}
|
|
122
195
|
/**
|
|
123
|
-
* Reads and parses JSON from S3
|
|
196
|
+
* Reads and parses a JSON object from S3. Returns null if the object does not exist.
|
|
197
|
+
* Throws SessionError on parse failure or unexpected S3 errors.
|
|
124
198
|
*/
|
|
125
199
|
async _readJSON(key) {
|
|
126
200
|
try {
|
|
@@ -131,7 +205,7 @@ export class S3Storage {
|
|
|
131
205
|
return JSON.parse(body);
|
|
132
206
|
}
|
|
133
207
|
catch (error) {
|
|
134
|
-
if (error
|
|
208
|
+
if (this._isNotFoundError(error)) {
|
|
135
209
|
return null;
|
|
136
210
|
}
|
|
137
211
|
if (error instanceof SyntaxError) {
|
|
@@ -140,11 +214,22 @@ export class S3Storage {
|
|
|
140
214
|
throw new SessionError(`S3 error reading ${key}`, { cause: error });
|
|
141
215
|
}
|
|
142
216
|
}
|
|
217
|
+
/** Returns true if the error represents a missing S3 object (`NoSuchKey`) or bucket (`NoSuchBucket`). */
|
|
218
|
+
_isNotFoundError(error) {
|
|
219
|
+
return (error !== null &&
|
|
220
|
+
typeof error === 'object' &&
|
|
221
|
+
'name' in error &&
|
|
222
|
+
typeof error.name === 'string' &&
|
|
223
|
+
(error.name === 'NoSuchKey' || error.name === 'NoSuchBucket'));
|
|
224
|
+
}
|
|
225
|
+
/** Returns the S3 key for `snapshot_latest.json` within the given scope. */
|
|
143
226
|
_getLatestSnapshotKey(location) {
|
|
144
227
|
return this._getKey(location, SNAPSHOT_LATEST);
|
|
145
228
|
}
|
|
229
|
+
/** Returns the S3 key for an immutable snapshot in `immutable_history/`. Validates the snapshotId before constructing the key. */
|
|
146
230
|
_getHistorySnapshotKey(location, snapshotId) {
|
|
147
|
-
|
|
231
|
+
validateIdentifier(snapshotId);
|
|
232
|
+
return this._getKey(location, `${IMMUTABLE_HISTORY}snapshot_${snapshotId}.json`);
|
|
148
233
|
}
|
|
149
234
|
}
|
|
150
235
|
//# sourceMappingURL=s3-storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-storage.js","sourceRoot":"","sources":["../../../src/session/s3-storage.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"s3-storage.js","sourceRoot":"","sources":["../../../src/session/s3-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { SnapshotStorage } from './storage.js';
|
|
2
|
+
import type { SnapshotTriggerCallback } from './types.js';
|
|
3
|
+
import type { Plugin } from '../plugins/plugin.js';
|
|
4
|
+
import type { LocalAgent } from '../types/agent.js';
|
|
5
|
+
import type { Agent } from '../agent/agent.js';
|
|
6
|
+
/**
|
|
7
|
+
* Controls when `snapshot_latest` is saved automatically.
|
|
8
|
+
*
|
|
9
|
+
* There are two kinds of snapshots:
|
|
10
|
+
* - **`snapshot_latest`**: A single mutable snapshot that is overwritten on each save. Used to
|
|
11
|
+
* resume the most recent conversation state (e.g. after a crash or restart). Always reflects
|
|
12
|
+
* the last saved point in time.
|
|
13
|
+
* - **Immutable snapshots**: Append-only snapshots with unique IDs (UUID v7), created only when
|
|
14
|
+
* `snapshotTrigger` fires. Used for checkpointing — you can restore to any prior state, not
|
|
15
|
+
* just the latest.
|
|
16
|
+
*
|
|
17
|
+
* `SaveLatestStrategy` controls how frequently `snapshot_latest` is updated:
|
|
18
|
+
* - `'invocation'`: after every agent invocation completes (default; balances durability and I/O)
|
|
19
|
+
* - `'message'`: after every message added and after model calls with guardrail redactions (most durable, highest I/O)
|
|
20
|
+
* - `'trigger'`: only when a `snapshotTrigger` fires (or manually via `saveSnapshot`)
|
|
21
|
+
*/
|
|
22
|
+
export type SaveLatestStrategy = 'message' | 'invocation' | 'trigger';
|
|
23
|
+
export interface SessionManagerConfig {
|
|
24
|
+
/** Pluggable storage backends for snapshot persistence. Defaults to FileStorage in Node.js; required in browser environments. */
|
|
25
|
+
storage: {
|
|
26
|
+
snapshot: SnapshotStorage;
|
|
27
|
+
};
|
|
28
|
+
/** Unique session identifier. Defaults to `'default-session'`. */
|
|
29
|
+
sessionId?: string;
|
|
30
|
+
/** When to save snapshot_latest. Default: `'invocation'` (after each agent invocation completes). See {@link SaveLatestStrategy} for details. */
|
|
31
|
+
saveLatestOn?: SaveLatestStrategy;
|
|
32
|
+
/** Callback invoked after each invocation to decide whether to create an immutable snapshot. */
|
|
33
|
+
snapshotTrigger?: SnapshotTriggerCallback;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Manages session persistence for agents, enabling conversation state
|
|
37
|
+
* to be saved and restored across invocations using pluggable storage backends.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* import { SessionManager, FileStorage } from '@strands-agents/sdk'
|
|
42
|
+
*
|
|
43
|
+
* const session = new SessionManager({
|
|
44
|
+
* sessionId: 'my-session',
|
|
45
|
+
* storage: { snapshot: new FileStorage() },
|
|
46
|
+
* })
|
|
47
|
+
* const agent = new Agent({ sessionManager: session })
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare class SessionManager implements Plugin {
|
|
51
|
+
private readonly _sessionId;
|
|
52
|
+
private readonly _storage;
|
|
53
|
+
private readonly _saveLatestOn;
|
|
54
|
+
private readonly _snapshotTrigger?;
|
|
55
|
+
/**
|
|
56
|
+
* Unique identifier for this plugin.
|
|
57
|
+
*/
|
|
58
|
+
get name(): string;
|
|
59
|
+
constructor(config: SessionManagerConfig);
|
|
60
|
+
/** Initializes the plugin by registering lifecycle hook callbacks. */
|
|
61
|
+
initAgent(agent: LocalAgent): void;
|
|
62
|
+
private _location;
|
|
63
|
+
saveSnapshot(params: {
|
|
64
|
+
target: Agent;
|
|
65
|
+
isLatest: boolean;
|
|
66
|
+
}): Promise<void>;
|
|
67
|
+
/** Deletes all snapshots and manifests for this session from storage. */
|
|
68
|
+
deleteSession(): Promise<void>;
|
|
69
|
+
/** Loads a snapshot from storage and restores it into the target agent. Returns false if no snapshot exists. */
|
|
70
|
+
restoreSnapshot(params: {
|
|
71
|
+
target: Agent;
|
|
72
|
+
snapshotId?: string;
|
|
73
|
+
}): Promise<boolean>;
|
|
74
|
+
/** Restores session state on agent initialization. */
|
|
75
|
+
private _onAgentInitialized;
|
|
76
|
+
/** Saves latest on invocation and fires the snapshot trigger if configured. */
|
|
77
|
+
private _onAfterAgentInvocation;
|
|
78
|
+
private _onMessageAdded;
|
|
79
|
+
/**
|
|
80
|
+
* Saves snapshot when a message is redacted after a model call.
|
|
81
|
+
* Critical for ensuring guardrail redactions are persisted immediately.
|
|
82
|
+
*/
|
|
83
|
+
private _onAfterModelCall;
|
|
84
|
+
/** Captures one snapshot and writes it to both immutable history and snapshot_latest. */
|
|
85
|
+
private _saveImmutableAndLatest;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/session/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAA;AAErE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG9C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAA;AAErE,MAAM,WAAW,oBAAoB;IACnC,iIAAiI;IACjI,OAAO,EAAE;QACP,QAAQ,EAAE,eAAe,CAAA;KAC1B,CAAA;IACD,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iJAAiJ;IACjJ,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,gGAAgG;IAChG,eAAe,CAAC,EAAE,uBAAuB,CAAA;CAC1C;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,MAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAqC;IAEvE;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;gBAEW,MAAM,EAAE,oBAAoB;IAOxC,sEAAsE;IAC/D,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAmBzC,OAAO,CAAC,SAAS;IAIX,YAAY,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/E,yEAAyE;IACnE,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,gHAAgH;IAC1G,eAAe,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAWvF,sDAAsD;YACxC,mBAAmB;IAIjC,+EAA+E;YACjE,uBAAuB;YAYvB,eAAe;IAK7B;;;OAGG;YACW,iBAAiB;IAQ/B,yFAAyF;YAC3E,uBAAuB;CAatC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { validateIdentifier } from './validation.js';
|
|
2
|
+
import { AfterInvocationEvent, AfterModelCallEvent, InitializedEvent, MessageAddedEvent } from '../hooks/events.js';
|
|
3
|
+
import { v7 as uuidV7 } from 'uuid';
|
|
4
|
+
import { takeSnapshot, loadSnapshot } from '../agent/snapshot.js';
|
|
5
|
+
/**
|
|
6
|
+
* Manages session persistence for agents, enabling conversation state
|
|
7
|
+
* to be saved and restored across invocations using pluggable storage backends.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { SessionManager, FileStorage } from '@strands-agents/sdk'
|
|
12
|
+
*
|
|
13
|
+
* const session = new SessionManager({
|
|
14
|
+
* sessionId: 'my-session',
|
|
15
|
+
* storage: { snapshot: new FileStorage() },
|
|
16
|
+
* })
|
|
17
|
+
* const agent = new Agent({ sessionManager: session })
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export class SessionManager {
|
|
21
|
+
_sessionId;
|
|
22
|
+
_storage;
|
|
23
|
+
_saveLatestOn;
|
|
24
|
+
_snapshotTrigger;
|
|
25
|
+
/**
|
|
26
|
+
* Unique identifier for this plugin.
|
|
27
|
+
*/
|
|
28
|
+
get name() {
|
|
29
|
+
return 'strands:session-manager';
|
|
30
|
+
}
|
|
31
|
+
constructor(config) {
|
|
32
|
+
this._sessionId = validateIdentifier(config.sessionId ?? 'default-session');
|
|
33
|
+
this._storage = { snapshot: config.storage.snapshot };
|
|
34
|
+
this._saveLatestOn = config.saveLatestOn ?? 'invocation';
|
|
35
|
+
this._snapshotTrigger = config.snapshotTrigger;
|
|
36
|
+
}
|
|
37
|
+
/** Initializes the plugin by registering lifecycle hook callbacks. */
|
|
38
|
+
initAgent(agent) {
|
|
39
|
+
agent.addHook(InitializedEvent, async (event) => {
|
|
40
|
+
await this._onAgentInitialized(event);
|
|
41
|
+
});
|
|
42
|
+
if (this._saveLatestOn === 'message') {
|
|
43
|
+
agent.addHook(MessageAddedEvent, async (event) => {
|
|
44
|
+
await this._onMessageAdded(event);
|
|
45
|
+
});
|
|
46
|
+
// Also listen to AfterModelCallEvent when saving per-message to ensure
|
|
47
|
+
// message modifications (e.g., guardrail redactions) are persisted immediately
|
|
48
|
+
agent.addHook(AfterModelCallEvent, async (event) => {
|
|
49
|
+
await this._onAfterModelCall(event);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
agent.addHook(AfterInvocationEvent, async (event) => {
|
|
53
|
+
await this._onAfterAgentInvocation(event);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
_location(agent) {
|
|
57
|
+
return { sessionId: this._sessionId, scope: 'agent', scopeId: agent.id };
|
|
58
|
+
}
|
|
59
|
+
async saveSnapshot(params) {
|
|
60
|
+
const snapshot = takeSnapshot(params.target, { preset: 'session' });
|
|
61
|
+
const snapshotId = params.isLatest ? 'latest' : uuidV7();
|
|
62
|
+
await this._storage.snapshot.saveSnapshot({
|
|
63
|
+
location: this._location(params.target),
|
|
64
|
+
snapshotId,
|
|
65
|
+
isLatest: params.isLatest,
|
|
66
|
+
snapshot,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/** Deletes all snapshots and manifests for this session from storage. */
|
|
70
|
+
async deleteSession() {
|
|
71
|
+
await this._storage.snapshot.deleteSession({ sessionId: this._sessionId });
|
|
72
|
+
}
|
|
73
|
+
/** Loads a snapshot from storage and restores it into the target agent. Returns false if no snapshot exists. */
|
|
74
|
+
async restoreSnapshot(params) {
|
|
75
|
+
const snapshot = await this._storage.snapshot.loadSnapshot({
|
|
76
|
+
location: this._location(params.target),
|
|
77
|
+
...(params.snapshotId !== undefined && { snapshotId: params.snapshotId }),
|
|
78
|
+
});
|
|
79
|
+
if (!snapshot)
|
|
80
|
+
return false;
|
|
81
|
+
loadSnapshot(params.target, snapshot);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
/** Restores session state on agent initialization. */
|
|
85
|
+
async _onAgentInitialized(event) {
|
|
86
|
+
await this.restoreSnapshot({ target: event.agent });
|
|
87
|
+
}
|
|
88
|
+
/** Saves latest on invocation and fires the snapshot trigger if configured. */
|
|
89
|
+
async _onAfterAgentInvocation(event) {
|
|
90
|
+
const agent = event.agent;
|
|
91
|
+
if (this._saveLatestOn === 'invocation') {
|
|
92
|
+
await this.saveSnapshot({ target: agent, isLatest: true });
|
|
93
|
+
}
|
|
94
|
+
if (this._snapshotTrigger?.({ agentData: agent })) {
|
|
95
|
+
await this._saveImmutableAndLatest(agent);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async _onMessageAdded(event) {
|
|
99
|
+
const agent = event.agent;
|
|
100
|
+
await this.saveSnapshot({ target: agent, isLatest: true });
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Saves snapshot when a message is redacted after a model call.
|
|
104
|
+
* Critical for ensuring guardrail redactions are persisted immediately.
|
|
105
|
+
*/
|
|
106
|
+
async _onAfterModelCall(event) {
|
|
107
|
+
// Only save if there was a redaction
|
|
108
|
+
if (event.stopData?.redaction) {
|
|
109
|
+
const agent = event.agent;
|
|
110
|
+
await this.saveSnapshot({ target: agent, isLatest: true });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** Captures one snapshot and writes it to both immutable history and snapshot_latest. */
|
|
114
|
+
async _saveImmutableAndLatest(agent) {
|
|
115
|
+
const snapshot = takeSnapshot(agent, { preset: 'session' });
|
|
116
|
+
const snapshotId = uuidV7();
|
|
117
|
+
await Promise.all([
|
|
118
|
+
this._storage.snapshot.saveSnapshot({ location: this._location(agent), snapshotId, isLatest: false, snapshot }),
|
|
119
|
+
this._storage.snapshot.saveSnapshot({
|
|
120
|
+
location: this._location(agent),
|
|
121
|
+
snapshotId: 'latest',
|
|
122
|
+
isLatest: true,
|
|
123
|
+
snapshot,
|
|
124
|
+
}),
|
|
125
|
+
]);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ export type SnapshotLocation = {
|
|
|
7
7
|
sessionId: string;
|
|
8
8
|
/** Scope of the snapshot (agent or multi-agent) */
|
|
9
9
|
scope: Scope;
|
|
10
|
-
/** Scope-specific identifier (
|
|
10
|
+
/** Scope-specific identifier (agent id or multi-agent id) */
|
|
11
11
|
scopeId: string;
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
@@ -35,10 +35,9 @@ export type SessionStorage = {
|
|
|
35
35
|
* agent/<scope_id>/
|
|
36
36
|
* snapshots/
|
|
37
37
|
* snapshot_latest.json
|
|
38
|
-
* manifest.json
|
|
39
38
|
* immutable_history/
|
|
40
|
-
*
|
|
41
|
-
*
|
|
39
|
+
* snapshot_<uuid>.json
|
|
40
|
+
* snapshot_<uuid>.json
|
|
42
41
|
* ```
|
|
43
42
|
*/
|
|
44
43
|
export interface SnapshotStorage {
|
|
@@ -59,21 +58,30 @@ export interface SnapshotStorage {
|
|
|
59
58
|
snapshotId?: string;
|
|
60
59
|
}): Promise<Snapshot | null>;
|
|
61
60
|
/**
|
|
62
|
-
* Lists all available snapshot IDs for a session scope.
|
|
61
|
+
* Lists all available immutable snapshot IDs for a session scope, sorted chronologically.
|
|
62
|
+
* Snapshot IDs are UUID v7 strings vended by the SDK — callers should treat them as opaque
|
|
63
|
+
* handles and never construct them manually.
|
|
63
64
|
*
|
|
64
|
-
*
|
|
65
|
-
* Future signature could be:
|
|
65
|
+
* Typical pagination pattern:
|
|
66
66
|
* ```typescript
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* limit?: number // Max results to return (e.g., 100)
|
|
70
|
-
* startAfter?: string // Snapshot ID to start after (for cursor-based pagination)
|
|
71
|
-
* }): Promise<{ snapshotIds: string[]; nextToken?: string }>
|
|
67
|
+
* const page1 = await storage.listSnapshotIds({ location })
|
|
68
|
+
* const page2 = await storage.listSnapshotIds({ location, startAfter: page1.at(-1) })
|
|
72
69
|
* ```
|
|
70
|
+
*
|
|
71
|
+
* `limit` caps the number of returned IDs. `startAfter` is an exclusive cursor (the last ID
|
|
72
|
+
* from the previous page); it must be a UUID v7 obtained from a prior `listSnapshotIds` call.
|
|
73
73
|
*/
|
|
74
74
|
listSnapshotIds(params: {
|
|
75
75
|
location: SnapshotLocation;
|
|
76
|
+
limit?: number;
|
|
77
|
+
startAfter?: string;
|
|
76
78
|
}): Promise<string[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Deletes all snapshots and directories belonging to the session ID.
|
|
81
|
+
*/
|
|
82
|
+
deleteSession(params: {
|
|
83
|
+
sessionId: string;
|
|
84
|
+
}): Promise<void>;
|
|
77
85
|
/**
|
|
78
86
|
* Loads the snapshot manifest.
|
|
79
87
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/session/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEnE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,mDAAmD;IACnD,KAAK,EAAE,KAAK,CAAA;IACZ,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/session/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEnE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,mDAAmD;IACnD,KAAK,EAAE,KAAK,CAAA;IACZ,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,eAAe,CAAA;CAE1B,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE;QACnB,QAAQ,EAAE,gBAAgB,CAAA;QAC1B,UAAU,EAAE,MAAM,CAAA;QAClB,QAAQ,EAAE,OAAO,CAAA;QACjB,QAAQ,EAAE,QAAQ,CAAA;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEjB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA;IAEnG;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAE/G;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE3D;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAE/E;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAChG"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LocalAgent } from '../types/agent.js';
|
|
2
2
|
export type { Snapshot, Scope } from '../agent/snapshot.js';
|
|
3
3
|
/**
|
|
4
|
-
* Manifest tracks snapshot metadata
|
|
5
|
-
* Stored alongside snapshots to
|
|
4
|
+
* Manifest tracks snapshot metadata.
|
|
5
|
+
* Stored alongside snapshots to support versioning and future multi-agent patterns.
|
|
6
6
|
*/
|
|
7
7
|
export interface SnapshotManifest {
|
|
8
8
|
/** Schema version for forward/backward compatibility */
|
|
9
9
|
schemaVersion: string;
|
|
10
|
-
/** Next available snapshot ID for allocation */
|
|
11
|
-
nextSnapshotId: string;
|
|
12
10
|
/** ISO 8601 timestamp of last manifest update */
|
|
13
11
|
updatedAt: string;
|
|
14
12
|
}
|
|
@@ -16,12 +14,8 @@ export interface SnapshotManifest {
|
|
|
16
14
|
* Parameters passed to SnapshotTriggerCallback to determine when to create snapshots.
|
|
17
15
|
*/
|
|
18
16
|
export interface SnapshotTriggerParams {
|
|
19
|
-
/** Number of agent invocations (turns) since session started */
|
|
20
|
-
turnCount: number;
|
|
21
|
-
/** Timestamp (ms) of last immutable snapshot creation, undefined if no snapshot yet */
|
|
22
|
-
lastSnapshotAt?: number;
|
|
23
17
|
/** Current agent data including messages and state */
|
|
24
|
-
agentData:
|
|
18
|
+
agentData: LocalAgent;
|
|
25
19
|
}
|
|
26
20
|
/**
|
|
27
21
|
* Callback function to determine when to create immutable snapshots.
|
|
@@ -32,17 +26,11 @@ export interface SnapshotTriggerParams {
|
|
|
32
26
|
*
|
|
33
27
|
* @example
|
|
34
28
|
* ```ts
|
|
35
|
-
* // Snapshot every
|
|
36
|
-
* const trigger: SnapshotTriggerCallback = ({
|
|
29
|
+
* // Snapshot every 10 messages
|
|
30
|
+
* const trigger: SnapshotTriggerCallback = ({ agentData }) => agentData.messages.length % 10 === 0
|
|
37
31
|
*
|
|
38
|
-
* // Snapshot
|
|
39
|
-
* const trigger: SnapshotTriggerCallback = ({
|
|
40
|
-
* if (!lastSnapshotAt) return false
|
|
41
|
-
* return Date.now() - lastSnapshotAt > 60000
|
|
42
|
-
* }
|
|
43
|
-
*
|
|
44
|
-
* // Snapshot when conversation exceeds 10 messages
|
|
45
|
-
* const trigger: SnapshotTriggerCallback = ({ agentData }) => agentData.messages.length > 10
|
|
32
|
+
* // Snapshot when conversation exceeds 20 messages
|
|
33
|
+
* const trigger: SnapshotTriggerCallback = ({ agentData }) => agentData.messages.length > 20
|
|
46
34
|
* ```
|
|
47
35
|
*/
|
|
48
36
|
export type SnapshotTriggerCallback = (params: SnapshotTriggerParams) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/session/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/session/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE3D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAA;IACrB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,SAAS,EAAE,UAAU,CAAA;CACtB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAA"}
|
|
@@ -7,4 +7,11 @@
|
|
|
7
7
|
* @throws Error if identifier contains invalid characters
|
|
8
8
|
*/
|
|
9
9
|
export declare function validateIdentifier(id: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Validates that a string is a UUID v7.
|
|
12
|
+
*
|
|
13
|
+
* @param id - The string to validate
|
|
14
|
+
* @throws Error if the string is not a valid UUID v7
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateUuidV7(id: string): void;
|
|
10
17
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/session/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMrD"}
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/session/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAK/C"}
|