@strands-agents/sdk 1.9.0 → 1.11.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 +1 -1
- package/dist/src/agent/agent.d.ts +22 -42
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +73 -426
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/context-manager/modes/agentic/agentic-context.d.ts +2 -2
- package/dist/src/errors.d.ts +15 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +18 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/hooks/events.d.ts +5 -4
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js +3 -3
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.node.d.ts.map +1 -1
- package/dist/src/index.node.js +2 -6
- package/dist/src/index.node.js.map +1 -1
- package/dist/src/middleware/interrupt.d.ts +18 -0
- package/dist/src/middleware/interrupt.d.ts.map +1 -0
- package/dist/src/middleware/interrupt.js +33 -0
- package/dist/src/middleware/interrupt.js.map +1 -0
- package/dist/src/models/bedrock.d.ts.map +1 -1
- package/dist/src/models/bedrock.js +23 -1
- package/dist/src/models/bedrock.js.map +1 -1
- package/dist/src/models/openai/errors.d.ts.map +1 -1
- package/dist/src/models/openai/errors.js +1 -0
- package/dist/src/models/openai/errors.js.map +1 -1
- package/dist/src/models/openai/mantle.d.ts +8 -3
- package/dist/src/models/openai/mantle.d.ts.map +1 -1
- package/dist/src/models/openai/mantle.js +41 -6
- package/dist/src/models/openai/mantle.js.map +1 -1
- package/dist/src/models/openai/model.d.ts.map +1 -1
- package/dist/src/models/openai/model.js +4 -3
- package/dist/src/models/openai/model.js.map +1 -1
- package/dist/src/models/openai/responses-adapter.d.ts.map +1 -1
- package/dist/src/models/openai/responses-adapter.js +41 -9
- package/dist/src/models/openai/responses-adapter.js.map +1 -1
- package/dist/src/models/vercel.d.ts.map +1 -1
- package/dist/src/models/vercel.js +28 -1
- package/dist/src/models/vercel.js.map +1 -1
- package/dist/src/multiagent/graph.d.ts.map +1 -1
- package/dist/src/multiagent/graph.js +1 -1
- package/dist/src/multiagent/graph.js.map +1 -1
- package/dist/src/{multiagent/queue.d.ts → queue.d.ts} +12 -27
- package/dist/src/queue.d.ts.map +1 -0
- package/dist/src/{multiagent/queue.js → queue.js} +4 -2
- package/dist/src/queue.js.map +1 -0
- package/dist/src/register-node-defaults.d.ts +3 -0
- package/dist/src/register-node-defaults.d.ts.map +1 -0
- package/dist/src/register-node-defaults.js +10 -0
- package/dist/src/register-node-defaults.js.map +1 -0
- package/dist/src/sandbox/register-node-defaults.d.ts +3 -0
- package/dist/src/sandbox/register-node-defaults.d.ts.map +1 -0
- package/dist/src/sandbox/register-node-defaults.js +8 -0
- package/dist/src/sandbox/register-node-defaults.js.map +1 -0
- package/dist/src/session/file-storage.d.ts +3 -0
- package/dist/src/session/file-storage.d.ts.map +1 -1
- package/dist/src/session/file-storage.js +3 -0
- package/dist/src/session/file-storage.js.map +1 -1
- package/dist/src/session/s3-storage.d.ts +3 -0
- package/dist/src/session/s3-storage.d.ts.map +1 -1
- package/dist/src/session/s3-storage.js +3 -0
- package/dist/src/session/s3-storage.js.map +1 -1
- package/dist/src/session/session-manager.d.ts +11 -2
- package/dist/src/session/session-manager.d.ts.map +1 -1
- package/dist/src/session/session-manager.js +19 -8
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/session/snapshot-storage-adapter.d.ts +93 -0
- package/dist/src/session/snapshot-storage-adapter.d.ts.map +1 -0
- package/dist/src/session/snapshot-storage-adapter.js +157 -0
- package/dist/src/session/snapshot-storage-adapter.js.map +1 -0
- package/dist/src/session/storage.d.ts +3 -6
- package/dist/src/session/storage.d.ts.map +1 -1
- package/dist/src/storage/in-memory-storage.d.ts +64 -0
- package/dist/src/storage/in-memory-storage.d.ts.map +1 -0
- package/dist/src/storage/in-memory-storage.js +85 -0
- package/dist/src/storage/in-memory-storage.js.map +1 -0
- package/dist/src/storage/index.d.ts +20 -0
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/src/storage/index.js +18 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/storage/local-file-storage.d.ts +81 -0
- package/dist/src/storage/local-file-storage.d.ts.map +1 -0
- package/dist/src/storage/local-file-storage.js +244 -0
- package/dist/src/storage/local-file-storage.js.map +1 -0
- package/dist/src/storage/s3-storage.d.ts +73 -0
- package/dist/src/storage/s3-storage.d.ts.map +1 -0
- package/dist/src/storage/s3-storage.js +146 -0
- package/dist/src/storage/s3-storage.js.map +1 -0
- package/dist/src/storage/storage.d.ts +102 -0
- package/dist/src/storage/storage.d.ts.map +1 -0
- package/dist/src/storage/storage.js +68 -0
- package/dist/src/storage/storage.js.map +1 -0
- package/dist/src/telemetry/tracer.d.ts +18 -0
- package/dist/src/telemetry/tracer.d.ts.map +1 -1
- package/dist/src/telemetry/tracer.js +31 -11
- package/dist/src/telemetry/tracer.js.map +1 -1
- package/dist/src/tools/executors/concurrent.d.ts +32 -0
- package/dist/src/tools/executors/concurrent.d.ts.map +1 -0
- package/dist/src/tools/executors/concurrent.js +128 -0
- package/dist/src/tools/executors/concurrent.js.map +1 -0
- package/dist/src/tools/executors/executor.d.ts +61 -0
- package/dist/src/tools/executors/executor.d.ts.map +1 -0
- package/dist/src/tools/executors/executor.js +190 -0
- package/dist/src/tools/executors/executor.js.map +1 -0
- package/dist/src/tools/executors/sequential.d.ts +30 -0
- package/dist/src/tools/executors/sequential.d.ts.map +1 -0
- package/dist/src/tools/executors/sequential.js +67 -0
- package/dist/src/tools/executors/sequential.js.map +1 -0
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/agent.d.ts +5 -4
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/vended-memory-stores/test-memory-store/store.d.ts +32 -24
- package/dist/src/vended-memory-stores/test-memory-store/store.d.ts.map +1 -1
- package/dist/src/vended-memory-stores/test-memory-store/store.js +84 -91
- package/dist/src/vended-memory-stores/test-memory-store/store.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts +37 -5
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/plugin.js +116 -17
- package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.d.ts +23 -9
- package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.js +21 -6
- package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -1
- package/dist/src/vended-tools/index.d.ts +3 -1
- package/dist/src/vended-tools/index.d.ts.map +1 -1
- package/dist/src/vended-tools/index.js +3 -1
- package/dist/src/vended-tools/index.js.map +1 -1
- package/dist/src/vended-tools/notebook/notebook.d.ts +1 -1
- package/dist/src/vended-tools/sleep/index.d.ts +9 -0
- package/dist/src/vended-tools/sleep/index.d.ts.map +1 -0
- package/dist/src/vended-tools/sleep/index.js +7 -0
- package/dist/src/vended-tools/sleep/index.js.map +1 -0
- package/dist/src/vended-tools/sleep/make-sleep.d.ts +48 -0
- package/dist/src/vended-tools/sleep/make-sleep.d.ts.map +1 -0
- package/dist/src/vended-tools/sleep/make-sleep.js +81 -0
- package/dist/src/vended-tools/sleep/make-sleep.js.map +1 -0
- package/dist/src/vended-tools/sleep/sleep.d.ts +19 -0
- package/dist/src/vended-tools/sleep/sleep.d.ts.map +1 -0
- package/dist/src/vended-tools/sleep/sleep.js +20 -0
- package/dist/src/vended-tools/sleep/sleep.js.map +1 -0
- package/dist/src/vended-tools/sleep/types.d.ts +31 -0
- package/dist/src/vended-tools/sleep/types.d.ts.map +1 -0
- package/dist/src/vended-tools/sleep/types.js +22 -0
- package/dist/src/vended-tools/sleep/types.js.map +1 -0
- package/dist/src/vended-tools/stop/index.d.ts +8 -0
- package/dist/src/vended-tools/stop/index.d.ts.map +1 -0
- package/dist/src/vended-tools/stop/index.js +6 -0
- package/dist/src/vended-tools/stop/index.js.map +1 -0
- package/dist/src/vended-tools/stop/stop.d.ts +47 -0
- package/dist/src/vended-tools/stop/stop.d.ts.map +1 -0
- package/dist/src/vended-tools/stop/stop.js +85 -0
- package/dist/src/vended-tools/stop/stop.js.map +1 -0
- package/dist/src/vended-tools/stop/types.d.ts +54 -0
- package/dist/src/vended-tools/stop/types.d.ts.map +1 -0
- package/dist/src/vended-tools/stop/types.js +58 -0
- package/dist/src/vended-tools/stop/types.js.map +1 -0
- package/package.json +13 -2
- package/dist/src/conversation-manager/index.d.ts +0 -10
- package/dist/src/conversation-manager/index.d.ts.map +0 -1
- package/dist/src/conversation-manager/index.js +0 -10
- package/dist/src/conversation-manager/index.js.map +0 -1
- package/dist/src/multiagent/queue.d.ts.map +0 -1
- package/dist/src/multiagent/queue.js.map +0 -1
|
@@ -203,10 +203,6 @@ export interface LocalAgent {
|
|
|
203
203
|
* The unique identifier of the agent instance.
|
|
204
204
|
*/
|
|
205
205
|
readonly id: string;
|
|
206
|
-
/**
|
|
207
|
-
* Read-only snapshot of accumulated agent metrics (cycles, token usage, tool stats).
|
|
208
|
-
*/
|
|
209
|
-
readonly metrics: AgentMetrics;
|
|
210
206
|
/**
|
|
211
207
|
* App state storage accessible to tools and application logic.
|
|
212
208
|
*/
|
|
@@ -232,6 +228,11 @@ export interface LocalAgent {
|
|
|
232
228
|
* environment (e.g. browsers, where no host default is registered).
|
|
233
229
|
*/
|
|
234
230
|
readonly sandbox: Sandbox;
|
|
231
|
+
/**
|
|
232
|
+
* Aggregated metrics for the agent's loop execution.
|
|
233
|
+
* Tracks cycle counts, token usage, tool execution stats, and model latency.
|
|
234
|
+
*/
|
|
235
|
+
readonly metrics: AgentMetrics;
|
|
235
236
|
/**
|
|
236
237
|
* The model provider used by the agent for inference.
|
|
237
238
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/types/agent.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/types/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/types/agent.ts"],"names":[],"mappings":"AA0CA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/types/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,9 @@ export interface TestMemoryAddResult {
|
|
|
38
38
|
* Each {@link add} rewrites the whole file, so this fits modest volumes, not fit for high volume
|
|
39
39
|
* production workloads. Use a managed store like {@link BedrockKnowledgeBaseStore} for that.
|
|
40
40
|
*
|
|
41
|
+
* Persistence is backed by the unified `Storage` interface: `persist: true` (the default) uses a
|
|
42
|
+
* `LocalFileStorage`, `persist: false` an ephemeral `InMemoryStorage`.
|
|
43
|
+
*
|
|
41
44
|
* The on-disk format is shared with the Python SDK's `TestMemoryStore`: records use the same
|
|
42
45
|
* camelCase keys (`id`, `content`, `metadata`, `createdAt`) and the same timestamp shape, so a
|
|
43
46
|
* backing file written by either SDK can be read by the other.
|
|
@@ -60,18 +63,15 @@ export declare class TestMemoryStore implements MemoryStore {
|
|
|
60
63
|
readonly writable: boolean;
|
|
61
64
|
readonly extraction?: boolean | ExtractionConfig;
|
|
62
65
|
private readonly _persist;
|
|
63
|
-
/** Explicit `path` override from config, if any; the default path is resolved lazily in {@link
|
|
66
|
+
/** Explicit `path` override from config, if any; the default path is resolved lazily in {@link _resolve}. */
|
|
64
67
|
private readonly _explicitPath;
|
|
65
|
-
private _resolvedPath;
|
|
66
|
-
/** The loaded records once {@link _load} resolves; the working in-memory copy thereafter. */
|
|
67
|
-
private _records;
|
|
68
68
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
69
|
+
* The resolved `(storage, key)` pair, memoized on first use. Resolution is lazy because the
|
|
70
|
+
* default-path branch needs `node:os`/`node:path`, and deferring those dynamic imports keeps the
|
|
71
|
+
* module safe to bundle for the browser and construction free of filesystem I/O.
|
|
72
72
|
*/
|
|
73
|
-
private
|
|
74
|
-
/** Serializes writes so concurrent `add`s never interleave the
|
|
73
|
+
private _resolved;
|
|
74
|
+
/** Serializes writes so concurrent `add`s never interleave the read-modify-write cycle. */
|
|
75
75
|
private _writeChain;
|
|
76
76
|
constructor(options: TestMemoryStoreConfig);
|
|
77
77
|
/**
|
|
@@ -83,6 +83,9 @@ export declare class TestMemoryStore implements MemoryStore {
|
|
|
83
83
|
* @returns Matching memory entries ordered by relevance. Each entry's `metadata` includes a
|
|
84
84
|
* `_relevanceScore` key (the token-overlap count). An empty or token-less query returns
|
|
85
85
|
* no results.
|
|
86
|
+
* @throws An `Error` if `options.maxSearchResults` is less than 1, or if the backing blob is
|
|
87
|
+
* malformed (invalid JSON, not an array, or a record missing required string fields).
|
|
88
|
+
* @throws {@link StorageError} if the backend read fails.
|
|
86
89
|
*/
|
|
87
90
|
search(query: string, options?: SearchOptions): Promise<MemoryEntry[]>;
|
|
88
91
|
/**
|
|
@@ -95,28 +98,33 @@ export declare class TestMemoryStore implements MemoryStore {
|
|
|
95
98
|
* reserved: {@link search} populates it on results, so a value stored under it here is
|
|
96
99
|
* overwritten in search output.
|
|
97
100
|
* @returns The id of the stored (or already-present) record
|
|
101
|
+
* @throws An `Error` if the store is not writable, if `content` is empty or whitespace, or if
|
|
102
|
+
* the existing backing blob is malformed (invalid JSON, not an array, or a record missing
|
|
103
|
+
* required string fields).
|
|
104
|
+
* @throws {@link StorageError} if the backend read or write fails.
|
|
98
105
|
*/
|
|
99
106
|
add(content: string, metadata?: Record<string, JSONValue>): Promise<TestMemoryAddResult>;
|
|
100
107
|
/**
|
|
101
|
-
* Resolves (and
|
|
102
|
-
*
|
|
103
|
-
* `
|
|
108
|
+
* Resolves (and memoizes) the `(storage, key)` pair whose on-disk location matches the
|
|
109
|
+
* pre-`Storage` behavior exactly: `persist: false` → an in-memory backend; an explicit `path` →
|
|
110
|
+
* the file at `path` (backend rooted at its parent); the default → `~/.strands/memory/<name>.json`.
|
|
111
|
+
* The `node:os`/`node:path` imports are dynamic so the module stays safe to bundle for the browser.
|
|
104
112
|
*/
|
|
105
|
-
private
|
|
113
|
+
private _resolve;
|
|
106
114
|
/**
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
115
|
+
* Reads and parses the backing file from storage; a missing key (or empty store) starts empty.
|
|
116
|
+
* Reads fresh on every call — there is no in-memory cache, so a search always reflects the
|
|
117
|
+
* latest write.
|
|
118
|
+
*
|
|
119
|
+
* @throws An `Error` if the stored file is not valid JSON, is not an array, or holds a record
|
|
120
|
+
* missing the required string fields. A backend I/O failure surfaces as its own `StorageError`.
|
|
110
121
|
*/
|
|
111
|
-
private
|
|
112
|
-
/** Reads and parses the backing file (or returns an empty list when ephemeral / missing). */
|
|
113
|
-
private _readFromDisk;
|
|
122
|
+
private _read;
|
|
114
123
|
/**
|
|
115
|
-
* Persists `records`
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* `cause`) when the path is unreachable or not writable.
|
|
124
|
+
* Persists `records` as a single JSON file through the storage backend. Callers serialize
|
|
125
|
+
* invocations via {@link _writeChain}; atomicity is the backend's responsibility. A backend I/O
|
|
126
|
+
* failure surfaces as its own `StorageError`, naming the key.
|
|
119
127
|
*/
|
|
120
|
-
private
|
|
128
|
+
private _write;
|
|
121
129
|
}
|
|
122
130
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/vended-memory-stores/test-memory-store/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/vended-memory-stores/test-memory-store/store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACvG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAoBpD;;;;;GAKG;AACH,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,EAAE,EAAE,MAAM,CAAA;CACX;AAyCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAA;IAEhD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,6GAA6G;IAC7G,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAA+C;IAChE,2FAA2F;IAC3F,OAAO,CAAC,WAAW,CAAsC;gBAE7C,OAAO,EAAE,qBAAqB;IAyB1C;;;;;;;;;;;;OAYG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA2B5E;;;;;;;;;;;;;;OAcG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiC9F;;;;;OAKG;YACW,QAAQ;IAqBtB;;;;;;;OAOG;YACW,KAAK;IA4CnB;;;;OAIG;YACW,MAAM;CAKrB"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { v7 as uuidv7 } from 'uuid';
|
|
2
|
+
import { InMemoryStorage } from '../../storage/in-memory-storage.js';
|
|
3
|
+
import { LocalFileStorage } from '../../storage/local-file-storage.js';
|
|
2
4
|
const DEFAULT_MAX_SEARCH_RESULTS = 10;
|
|
3
5
|
/**
|
|
4
6
|
* Metadata key holding the token-overlap relevance score on a search result.
|
|
@@ -50,6 +52,9 @@ function tokenOverlapScore(queryTokens, content) {
|
|
|
50
52
|
* Each {@link add} rewrites the whole file, so this fits modest volumes, not fit for high volume
|
|
51
53
|
* production workloads. Use a managed store like {@link BedrockKnowledgeBaseStore} for that.
|
|
52
54
|
*
|
|
55
|
+
* Persistence is backed by the unified `Storage` interface: `persist: true` (the default) uses a
|
|
56
|
+
* `LocalFileStorage`, `persist: false` an ephemeral `InMemoryStorage`.
|
|
57
|
+
*
|
|
53
58
|
* The on-disk format is shared with the Python SDK's `TestMemoryStore`: records use the same
|
|
54
59
|
* camelCase keys (`id`, `content`, `metadata`, `createdAt`) and the same timestamp shape, so a
|
|
55
60
|
* backing file written by either SDK can be read by the other.
|
|
@@ -72,18 +77,15 @@ export class TestMemoryStore {
|
|
|
72
77
|
writable;
|
|
73
78
|
extraction;
|
|
74
79
|
_persist;
|
|
75
|
-
/** Explicit `path` override from config, if any; the default path is resolved lazily in {@link
|
|
80
|
+
/** Explicit `path` override from config, if any; the default path is resolved lazily in {@link _resolve}. */
|
|
76
81
|
_explicitPath;
|
|
77
|
-
_resolvedPath;
|
|
78
|
-
/** The loaded records once {@link _load} resolves; the working in-memory copy thereafter. */
|
|
79
|
-
_records;
|
|
80
82
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
83
|
+
* The resolved `(storage, key)` pair, memoized on first use. Resolution is lazy because the
|
|
84
|
+
* default-path branch needs `node:os`/`node:path`, and deferring those dynamic imports keeps the
|
|
85
|
+
* module safe to bundle for the browser and construction free of filesystem I/O.
|
|
84
86
|
*/
|
|
85
|
-
|
|
86
|
-
/** Serializes writes so concurrent `add`s never interleave the
|
|
87
|
+
_resolved;
|
|
88
|
+
/** Serializes writes so concurrent `add`s never interleave the read-modify-write cycle. */
|
|
87
89
|
_writeChain = Promise.resolve();
|
|
88
90
|
constructor(options) {
|
|
89
91
|
const { name, description, maxSearchResults, writable, extraction, persist, path } = options;
|
|
@@ -118,6 +120,9 @@ export class TestMemoryStore {
|
|
|
118
120
|
* @returns Matching memory entries ordered by relevance. Each entry's `metadata` includes a
|
|
119
121
|
* `_relevanceScore` key (the token-overlap count). An empty or token-less query returns
|
|
120
122
|
* no results.
|
|
123
|
+
* @throws An `Error` if `options.maxSearchResults` is less than 1, or if the backing blob is
|
|
124
|
+
* malformed (invalid JSON, not an array, or a record missing required string fields).
|
|
125
|
+
* @throws {@link StorageError} if the backend read fails.
|
|
121
126
|
*/
|
|
122
127
|
async search(query, options) {
|
|
123
128
|
if (options?.maxSearchResults !== undefined && options.maxSearchResults < 1) {
|
|
@@ -127,7 +132,7 @@ export class TestMemoryStore {
|
|
|
127
132
|
const queryTokens = tokenize(query);
|
|
128
133
|
if (queryTokens.size === 0)
|
|
129
134
|
return [];
|
|
130
|
-
const records = await this.
|
|
135
|
+
const records = await this._read();
|
|
131
136
|
const scored = [];
|
|
132
137
|
for (const record of records) {
|
|
133
138
|
const score = tokenOverlapScore(queryTokens, record.content);
|
|
@@ -150,6 +155,10 @@ export class TestMemoryStore {
|
|
|
150
155
|
* reserved: {@link search} populates it on results, so a value stored under it here is
|
|
151
156
|
* overwritten in search output.
|
|
152
157
|
* @returns The id of the stored (or already-present) record
|
|
158
|
+
* @throws An `Error` if the store is not writable, if `content` is empty or whitespace, or if
|
|
159
|
+
* the existing backing blob is malformed (invalid JSON, not an array, or a record missing
|
|
160
|
+
* required string fields).
|
|
161
|
+
* @throws {@link StorageError} if the backend read or write fails.
|
|
153
162
|
*/
|
|
154
163
|
async add(content, metadata) {
|
|
155
164
|
if (!this.writable) {
|
|
@@ -158,10 +167,12 @@ export class TestMemoryStore {
|
|
|
158
167
|
if (!content.trim()) {
|
|
159
168
|
throw new Error('TestMemoryStore: content must not be empty.');
|
|
160
169
|
}
|
|
161
|
-
// Serialize the whole
|
|
162
|
-
// don't each
|
|
170
|
+
// Serialize the whole read-modify-write cycle behind any in-flight write so concurrent `add`s on
|
|
171
|
+
// this instance don't each read the same snapshot and clobber one another. Reading inside the
|
|
172
|
+
// chained callback guarantees add #N sees add #N-1's write. Serialization is per instance; adds
|
|
173
|
+
// from separate instances/processes against a shared file remain last-write-wins.
|
|
163
174
|
const run = this._writeChain.then(async () => {
|
|
164
|
-
const records = await this.
|
|
175
|
+
const records = await this._read();
|
|
165
176
|
const normalizedContent = content.trim();
|
|
166
177
|
const existing = records.find((record) => record.content.trim() === normalizedContent);
|
|
167
178
|
if (existing)
|
|
@@ -169,11 +180,7 @@ export class TestMemoryStore {
|
|
|
169
180
|
const record = { id: uuidv7(), content, createdAt: new Date().toISOString() };
|
|
170
181
|
if (metadata !== undefined)
|
|
171
182
|
record.metadata = metadata;
|
|
172
|
-
|
|
173
|
-
// succeeds, so a failed flush never leaves a phantom record that later writes resurrect.
|
|
174
|
-
const next = [...records, record];
|
|
175
|
-
await this._flush(next);
|
|
176
|
-
this._records = next;
|
|
183
|
+
await this._write([...records, record]);
|
|
177
184
|
return { id: record.id };
|
|
178
185
|
});
|
|
179
186
|
// Keep the chain alive even if this write rejects, so a failed write doesn't wedge later ones.
|
|
@@ -181,101 +188,87 @@ export class TestMemoryStore {
|
|
|
181
188
|
return run;
|
|
182
189
|
}
|
|
183
190
|
/**
|
|
184
|
-
* Resolves (and
|
|
185
|
-
*
|
|
186
|
-
* `
|
|
191
|
+
* Resolves (and memoizes) the `(storage, key)` pair whose on-disk location matches the
|
|
192
|
+
* pre-`Storage` behavior exactly: `persist: false` → an in-memory backend; an explicit `path` →
|
|
193
|
+
* the file at `path` (backend rooted at its parent); the default → `~/.strands/memory/<name>.json`.
|
|
194
|
+
* The `node:os`/`node:path` imports are dynamic so the module stays safe to bundle for the browser.
|
|
187
195
|
*/
|
|
188
|
-
async
|
|
189
|
-
if (
|
|
190
|
-
return
|
|
191
|
-
if (this.
|
|
192
|
-
|
|
193
|
-
if (this._explicitPath !== undefined) {
|
|
194
|
-
this._resolvedPath = this._explicitPath;
|
|
195
|
-
return this._resolvedPath;
|
|
196
|
+
async _resolve() {
|
|
197
|
+
if (this._resolved !== undefined)
|
|
198
|
+
return this._resolved;
|
|
199
|
+
if (!this._persist) {
|
|
200
|
+
this._resolved = { storage: new InMemoryStorage(), key: `${sanitizeName(this.name)}.json` };
|
|
196
201
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
* Loads records from disk on first use; ephemeral stores (and a missing file) start empty. The
|
|
204
|
-
* first call's promise is memoized in {@link _loadPromise} so concurrent callers await one shared
|
|
205
|
-
* read rather than each loading independently and racing to assign the cache.
|
|
206
|
-
*/
|
|
207
|
-
async _load() {
|
|
208
|
-
if (this._records !== undefined)
|
|
209
|
-
return this._records;
|
|
210
|
-
if (this._loadPromise !== undefined)
|
|
211
|
-
return this._loadPromise;
|
|
212
|
-
this._loadPromise = this._readFromDisk();
|
|
213
|
-
try {
|
|
214
|
-
this._records = await this._loadPromise;
|
|
202
|
+
else if (this._explicitPath !== undefined) {
|
|
203
|
+
const path = await import('node:path');
|
|
204
|
+
this._resolved = {
|
|
205
|
+
storage: new LocalFileStorage(path.dirname(this._explicitPath)),
|
|
206
|
+
key: path.basename(this._explicitPath),
|
|
207
|
+
};
|
|
215
208
|
}
|
|
216
|
-
|
|
217
|
-
|
|
209
|
+
else {
|
|
210
|
+
const os = await import('node:os');
|
|
211
|
+
const path = await import('node:path');
|
|
212
|
+
this._resolved = {
|
|
213
|
+
storage: new LocalFileStorage(path.join(os.homedir(), '.strands', 'memory')),
|
|
214
|
+
key: `${sanitizeName(this.name)}.json`,
|
|
215
|
+
};
|
|
218
216
|
}
|
|
219
|
-
return this.
|
|
217
|
+
return this._resolved;
|
|
220
218
|
}
|
|
221
|
-
/**
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
219
|
+
/**
|
|
220
|
+
* Reads and parses the backing file from storage; a missing key (or empty store) starts empty.
|
|
221
|
+
* Reads fresh on every call — there is no in-memory cache, so a search always reflects the
|
|
222
|
+
* latest write.
|
|
223
|
+
*
|
|
224
|
+
* @throws An `Error` if the stored file is not valid JSON, is not an array, or holds a record
|
|
225
|
+
* missing the required string fields. A backend I/O failure surfaces as its own `StorageError`.
|
|
226
|
+
*/
|
|
227
|
+
async _read() {
|
|
228
|
+
const { storage, key } = await this._resolve();
|
|
229
|
+
const bytes = await storage.read(key);
|
|
230
|
+
if (bytes === null)
|
|
225
231
|
return [];
|
|
226
|
-
const
|
|
227
|
-
let
|
|
232
|
+
const rawContent = new TextDecoder().decode(bytes);
|
|
233
|
+
let parsedBlob;
|
|
228
234
|
try {
|
|
229
|
-
|
|
235
|
+
parsedBlob = JSON.parse(rawContent);
|
|
230
236
|
}
|
|
231
237
|
catch (error) {
|
|
232
|
-
|
|
233
|
-
return [];
|
|
234
|
-
throw new Error(`TestMemoryStore: failed to read ${filePath}`, { cause: error });
|
|
238
|
+
throw new Error(`TestMemoryStore: invalid JSON in ${key}`, { cause: error });
|
|
235
239
|
}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
parsedFile = JSON.parse(rawContent);
|
|
240
|
+
if (!Array.isArray(parsedBlob)) {
|
|
241
|
+
throw new Error(`TestMemoryStore: invalid backing file ${key}: expected a JSON array of records`);
|
|
239
242
|
}
|
|
240
|
-
|
|
241
|
-
throw new Error(`TestMemoryStore: invalid JSON in ${filePath}`, { cause: error });
|
|
242
|
-
}
|
|
243
|
-
if (!Array.isArray(parsedFile)) {
|
|
244
|
-
throw new Error(`TestMemoryStore: invalid backing file ${filePath}: expected a JSON array of records`);
|
|
245
|
-
}
|
|
246
|
-
for (const record of parsedFile) {
|
|
243
|
+
for (const record of parsedBlob) {
|
|
247
244
|
if (record === null ||
|
|
248
245
|
typeof record !== 'object' ||
|
|
249
246
|
typeof record.id !== 'string' ||
|
|
250
247
|
typeof record.content !== 'string' ||
|
|
251
248
|
typeof record.createdAt !== 'string') {
|
|
252
|
-
throw new Error(`TestMemoryStore: invalid backing file ${
|
|
249
|
+
throw new Error(`TestMemoryStore: invalid backing file ${key}: ` +
|
|
253
250
|
"each record must have string 'id', 'content', and 'createdAt' fields");
|
|
254
251
|
}
|
|
252
|
+
// A present, non-null metadata must be a plain object. `null` is accepted and treated as
|
|
253
|
+
// absent, matching the Python store (which maps JSON null to None and skips the check).
|
|
254
|
+
if (record.metadata !== undefined &&
|
|
255
|
+
record.metadata !== null &&
|
|
256
|
+
(typeof record.metadata !== 'object' || Array.isArray(record.metadata))) {
|
|
257
|
+
throw new Error(`TestMemoryStore: invalid backing file ${key}: ` +
|
|
258
|
+
"a record's 'metadata', when present, must be a JSON object");
|
|
259
|
+
}
|
|
255
260
|
}
|
|
256
|
-
return
|
|
261
|
+
return parsedBlob;
|
|
257
262
|
}
|
|
258
263
|
/**
|
|
259
|
-
* Persists `records`
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
* `cause`) when the path is unreachable or not writable.
|
|
264
|
+
* Persists `records` as a single JSON file through the storage backend. Callers serialize
|
|
265
|
+
* invocations via {@link _writeChain}; atomicity is the backend's responsibility. A backend I/O
|
|
266
|
+
* failure surfaces as its own `StorageError`, naming the key.
|
|
263
267
|
*/
|
|
264
|
-
async
|
|
265
|
-
const
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
const { mkdir, writeFile, rename } = await import('node:fs/promises');
|
|
269
|
-
const { dirname } = await import('node:path');
|
|
270
|
-
try {
|
|
271
|
-
await mkdir(dirname(filePath), { recursive: true });
|
|
272
|
-
const tmpPath = `${filePath}.tmp`;
|
|
273
|
-
await writeFile(tmpPath, JSON.stringify(records, null, 2), 'utf8');
|
|
274
|
-
await rename(tmpPath, filePath);
|
|
275
|
-
}
|
|
276
|
-
catch (error) {
|
|
277
|
-
throw new Error(`TestMemoryStore: failed to write ${filePath}`, { cause: error });
|
|
278
|
-
}
|
|
268
|
+
async _write(records) {
|
|
269
|
+
const { storage, key } = await this._resolve();
|
|
270
|
+
const bytes = new TextEncoder().encode(JSON.stringify(records, null, 2));
|
|
271
|
+
await storage.write(key, bytes);
|
|
279
272
|
}
|
|
280
273
|
}
|
|
281
274
|
//# sourceMappingURL=store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/vended-memory-stores/test-memory-store/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/vended-memory-stores/test-memory-store/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,36 @@
|
|
|
1
1
|
import type { Plugin } from '../../plugins/plugin.js';
|
|
2
2
|
import type { Tool } from '../../tools/tool.js';
|
|
3
3
|
import type { LocalAgent } from '../../types/agent.js';
|
|
4
|
-
import { type Storage } from './storage.js';
|
|
4
|
+
import { type Storage as OffloaderStorage } from './storage.js';
|
|
5
|
+
import { type Storage } from '../../storage/storage.js';
|
|
5
6
|
/** Configuration for the {@link ContextOffloader} plugin. */
|
|
6
7
|
export interface ContextOffloaderConfig {
|
|
7
|
-
/**
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Storage backend for persisting offloaded content.
|
|
10
|
+
*
|
|
11
|
+
* Accepts either:
|
|
12
|
+
* - A unified `Storage` (from `@strands-agents/sdk/storage`) — each offloaded content block
|
|
13
|
+
* occupies exactly one key (content-type is framed into the stored bytes).
|
|
14
|
+
* - A legacy offloader `Storage` (deprecated, from this module).
|
|
15
|
+
*
|
|
16
|
+
* When a unified `Storage` is provided, the plugin auto-scopes keys under `offloader/`
|
|
17
|
+
* unless the storage is already namespaced. If the resolved storage exposes a
|
|
18
|
+
* `forSandbox(sandbox)` method (as `LocalFileStorage` and its namespace views do),
|
|
19
|
+
* the plugin auto-routes I/O through the agent's sandbox.
|
|
20
|
+
*/
|
|
21
|
+
storage: Storage | OffloaderStorage;
|
|
9
22
|
/** Token threshold above which tool results are offloaded. Defaults to 2,500. */
|
|
10
23
|
maxResultTokens?: number;
|
|
11
24
|
/** Number of tokens to keep as an inline preview. Defaults to 1,000. */
|
|
12
25
|
previewTokens?: number;
|
|
13
26
|
/** Whether to register the `retrieve_offloaded_content` tool. Defaults to true. */
|
|
14
27
|
includeRetrievalTool?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Number of agent loop cycles before an offloaded entry is evicted.
|
|
30
|
+
* Entries stored more than this many cycles ago are deleted.
|
|
31
|
+
* Defaults to 20. Set to `null` to disable eviction.
|
|
32
|
+
*/
|
|
33
|
+
evictAfterCycles?: number | null;
|
|
15
34
|
}
|
|
16
35
|
/**
|
|
17
36
|
* Plugin that offloads oversized tool results to reduce context consumption.
|
|
@@ -20,26 +39,39 @@ export interface ContextOffloaderConfig {
|
|
|
20
39
|
* each content block to a storage backend and replaces the in-context result with
|
|
21
40
|
* a truncated text preview plus per-block storage references.
|
|
22
41
|
*
|
|
42
|
+
* ## Eviction behavior
|
|
43
|
+
*
|
|
44
|
+
* Offloaded entries are evicted after `evictAfterCycles` agent loop cycles (default 20).
|
|
45
|
+
* This applies to both unified `Storage` backends and legacy offloader storage.
|
|
46
|
+
*
|
|
23
47
|
* @example
|
|
24
48
|
* ```typescript
|
|
25
|
-
* import { ContextOffloader
|
|
49
|
+
* import { ContextOffloader } from '@strands-agents/sdk/vended-plugins/context-offloader'
|
|
50
|
+
* import { InMemoryStorage } from '@strands-agents/sdk/storage'
|
|
26
51
|
*
|
|
27
52
|
* const agent = new Agent({
|
|
28
53
|
* model,
|
|
29
|
-
* plugins: [new ContextOffloader({
|
|
54
|
+
* plugins: [new ContextOffloader({
|
|
55
|
+
* storage: new InMemoryStorage(),
|
|
56
|
+
* })],
|
|
30
57
|
* })
|
|
31
58
|
* ```
|
|
32
59
|
*/
|
|
33
60
|
export declare class ContextOffloader implements Plugin {
|
|
34
61
|
readonly name = "strands:context-offloader";
|
|
62
|
+
private static readonly _DEFAULT_EVICT_AFTER_CYCLES;
|
|
63
|
+
private readonly _sandboxableStorage;
|
|
35
64
|
private readonly _storage;
|
|
36
65
|
private readonly _maxResultTokens;
|
|
37
66
|
private readonly _previewTokens;
|
|
38
67
|
private readonly _includeRetrievalTool;
|
|
68
|
+
private readonly _evictAfterCycles;
|
|
39
69
|
private readonly _storageByAgent;
|
|
70
|
+
private readonly _keyStoredAt;
|
|
40
71
|
private _retrievalTool;
|
|
41
72
|
constructor(config: ContextOffloaderConfig);
|
|
42
73
|
initAgent(agent: LocalAgent): void;
|
|
74
|
+
private _evict;
|
|
43
75
|
getTools(): Tool[];
|
|
44
76
|
private _storageForAgent;
|
|
45
77
|
private _storageForToolContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/vended-plugins/context-offloader/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/vended-plugins/context-offloader/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAWtD,OAAO,EAAyD,KAAK,OAAO,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACtH,OAAO,EAAyB,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAwI9E,6DAA6D;AAC7D,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;;OAYG;IACH,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAA;IACnC,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mFAAmF;IACnF,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,QAAQ,CAAC,IAAI,+BAA8B;IAE3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAK;IAExD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuD;IAC3F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAe;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwD;IACxF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,cAAc,CAAkB;gBAE5B,MAAM,EAAE,sBAAsB;IAiC1C,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAiBlC,OAAO,CAAC,MAAM;IAiBd,QAAQ,IAAI,IAAI,EAAE;IAMlB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,oBAAoB;YAmDd,WAAW;IAkCzB,OAAO,CAAC,iBAAiB;YAiCX,iBAAiB;CAkEhC"}
|