@strands-agents/sdk 1.5.0 → 1.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/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +3 -0
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/agent/__tests__/agent.context-manager.test.js +0 -1
- package/dist/src/agent/__tests__/agent.context-manager.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.stateful-model.test.js +2 -2
- package/dist/src/agent/__tests__/agent.stateful-model.test.js.map +1 -1
- package/dist/src/agent/agent.d.ts +8 -5
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +60 -33
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/context-manager/modes/agentic/agentic-context.d.ts +19 -0
- package/dist/src/context-manager/modes/agentic/agentic-context.d.ts.map +1 -0
- package/dist/src/context-manager/modes/agentic/agentic-context.js +245 -0
- package/dist/src/context-manager/modes/agentic/agentic-context.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/agentic-context.test.js +332 -0
- package/dist/src/conversation-manager/__tests__/agentic-context.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/context-compression.test.js +176 -0
- package/dist/src/conversation-manager/__tests__/context-compression.test.js.map +1 -0
- package/dist/src/conversation-manager/__tests__/pin.test.js +1 -1
- package/dist/src/conversation-manager/__tests__/pin.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +1 -1
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +1 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts +2 -0
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts.map +1 -0
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js +138 -0
- package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js.map +1 -0
- package/dist/src/conversation-manager/compression/context-compression.d.ts +39 -0
- package/dist/src/conversation-manager/compression/context-compression.d.ts.map +1 -0
- package/dist/src/conversation-manager/compression/context-compression.js +150 -0
- package/dist/src/conversation-manager/compression/context-compression.js.map +1 -0
- package/dist/src/conversation-manager/{pin-message.d.ts → compression/pin-message.d.ts} +1 -1
- package/dist/src/conversation-manager/compression/pin-message.d.ts.map +1 -0
- package/dist/src/conversation-manager/{pin-message.js → compression/pin-message.js} +1 -1
- package/dist/src/conversation-manager/compression/pin-message.js.map +1 -0
- package/dist/src/conversation-manager/conversation-manager.d.ts +2 -0
- package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/conversation-manager.js +2 -2
- package/dist/src/conversation-manager/conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +4 -35
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +0 -19
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.js +4 -107
- package/dist/src/conversation-manager/summarizing-conversation-manager.js.map +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/injection/__tests__/message-injection.test.d.ts +2 -0
- package/dist/src/injection/__tests__/message-injection.test.d.ts.map +1 -0
- package/dist/src/injection/__tests__/message-injection.test.js +200 -0
- package/dist/src/injection/__tests__/message-injection.test.js.map +1 -0
- package/dist/src/injection/index.d.ts +6 -0
- package/dist/src/injection/index.d.ts.map +1 -0
- package/dist/src/injection/index.js +2 -0
- package/dist/src/injection/index.js.map +1 -0
- package/dist/src/injection/message-injection.d.ts +65 -0
- package/dist/src/injection/message-injection.d.ts.map +1 -0
- package/dist/src/injection/message-injection.js +134 -0
- package/dist/src/injection/message-injection.js.map +1 -0
- package/dist/src/injection/types.d.ts +63 -0
- package/dist/src/injection/types.d.ts.map +1 -0
- package/dist/src/injection/types.js +2 -0
- package/dist/src/injection/types.js.map +1 -0
- package/dist/src/injection/xml.d.ts +27 -0
- package/dist/src/injection/xml.d.ts.map +1 -0
- package/dist/src/injection/xml.js +31 -0
- package/dist/src/injection/xml.js.map +1 -0
- package/dist/src/memory/__tests__/memory-manager.test.js +188 -2
- package/dist/src/memory/__tests__/memory-manager.test.js.map +1 -1
- package/dist/src/memory/__tests__/memory-tracing.test.d.ts +2 -0
- package/dist/src/memory/__tests__/memory-tracing.test.d.ts.map +1 -0
- package/dist/src/memory/__tests__/memory-tracing.test.js +250 -0
- package/dist/src/memory/__tests__/memory-tracing.test.js.map +1 -0
- package/dist/src/memory/extraction/__tests__/extraction.test.js +41 -39
- package/dist/src/memory/extraction/__tests__/extraction.test.js.map +1 -1
- package/dist/src/memory/extraction/__tests__/model-extractor.test.js +37 -1
- package/dist/src/memory/extraction/__tests__/model-extractor.test.js.map +1 -1
- package/dist/src/memory/extraction/coordinator.d.ts +6 -1
- package/dist/src/memory/extraction/coordinator.d.ts.map +1 -1
- package/dist/src/memory/extraction/coordinator.js +48 -10
- package/dist/src/memory/extraction/coordinator.js.map +1 -1
- package/dist/src/memory/extraction/model-extractor.d.ts.map +1 -1
- package/dist/src/memory/extraction/model-extractor.js +30 -9
- package/dist/src/memory/extraction/model-extractor.js.map +1 -1
- package/dist/src/memory/extraction/types.d.ts +7 -0
- package/dist/src/memory/extraction/types.d.ts.map +1 -1
- package/dist/src/memory/extraction/types.js.map +1 -1
- package/dist/src/memory/index.d.ts +2 -1
- package/dist/src/memory/index.d.ts.map +1 -1
- package/dist/src/memory/index.js.map +1 -1
- package/dist/src/memory/memory-manager.d.ts +64 -4
- package/dist/src/memory/memory-manager.d.ts.map +1 -1
- package/dist/src/memory/memory-manager.js +236 -36
- package/dist/src/memory/memory-manager.js.map +1 -1
- package/dist/src/memory/types.d.ts +72 -0
- package/dist/src/memory/types.d.ts.map +1 -1
- package/dist/src/middleware/__tests__/agent-middleware.test.js +0 -1
- package/dist/src/middleware/__tests__/agent-middleware.test.js.map +1 -1
- package/dist/src/middleware/__tests__/copy-on-input.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/copy-on-input.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/copy-on-input.test.js +379 -0
- package/dist/src/middleware/__tests__/copy-on-input.test.js.map +1 -0
- package/dist/src/middleware/stages.d.ts +14 -7
- package/dist/src/middleware/stages.d.ts.map +1 -1
- package/dist/src/middleware/stages.js +3 -0
- package/dist/src/middleware/stages.js.map +1 -1
- package/dist/src/models/__tests__/google.test.js +41 -0
- package/dist/src/models/__tests__/google.test.js.map +1 -1
- package/dist/src/models/google/adapters.d.ts.map +1 -1
- package/dist/src/models/google/adapters.js +21 -3
- package/dist/src/models/google/adapters.js.map +1 -1
- package/dist/src/models/openai/__tests__/errors.test.js +9 -0
- package/dist/src/models/openai/__tests__/errors.test.js.map +1 -1
- package/dist/src/models/openai/__tests__/responses.test.js +47 -0
- package/dist/src/models/openai/__tests__/responses.test.js.map +1 -1
- package/dist/src/models/openai/errors.d.ts.map +1 -1
- package/dist/src/models/openai/errors.js +4 -1
- package/dist/src/models/openai/errors.js.map +1 -1
- package/dist/src/models/openai/responses-adapter.d.ts +1 -0
- package/dist/src/models/openai/responses-adapter.d.ts.map +1 -1
- package/dist/src/models/openai/responses-adapter.js +24 -10
- package/dist/src/models/openai/responses-adapter.js.map +1 -1
- package/dist/src/multiagent/__tests__/graph.test.js +22 -1
- package/dist/src/multiagent/__tests__/graph.test.js.map +1 -1
- package/dist/src/multiagent/graph.d.ts.map +1 -1
- package/dist/src/multiagent/graph.js +4 -1
- package/dist/src/multiagent/graph.js.map +1 -1
- package/dist/src/sandbox/__tests__/docker.test.node.js +2 -2
- package/dist/src/sandbox/__tests__/docker.test.node.js.map +1 -1
- package/dist/src/sandbox/__tests__/ssh.test.node.js +2 -2
- package/dist/src/sandbox/__tests__/ssh.test.node.js.map +1 -1
- package/dist/src/sandbox/base.d.ts +0 -5
- package/dist/src/sandbox/base.d.ts.map +1 -1
- package/dist/src/sandbox/base.js +0 -5
- package/dist/src/sandbox/base.js.map +1 -1
- package/dist/src/sandbox/docker.d.ts.map +1 -1
- package/dist/src/sandbox/docker.js +2 -0
- package/dist/src/sandbox/docker.js.map +1 -1
- package/dist/src/sandbox/ssh.d.ts.map +1 -1
- package/dist/src/sandbox/ssh.js +2 -0
- package/dist/src/sandbox/ssh.js.map +1 -1
- package/dist/src/telemetry/__tests__/tracer.test.node.js +207 -9
- package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -1
- package/dist/src/telemetry/tracer.d.ts +82 -2
- package/dist/src/telemetry/tracer.d.ts.map +1 -1
- package/dist/src/telemetry/tracer.js +242 -3
- package/dist/src/telemetry/tracer.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +86 -1
- package/dist/src/telemetry/types.d.ts.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/json.js.map +1 -1
- package/dist/src/types/messages.d.ts +8 -0
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js +13 -1
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts +2 -0
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts.map +1 -0
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js +756 -0
- package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js.map +1 -0
- package/dist/src/vended-interventions/cedar/cedar.d.ts +114 -0
- package/dist/src/vended-interventions/cedar/cedar.d.ts.map +1 -0
- package/dist/src/vended-interventions/cedar/cedar.js +239 -0
- package/dist/src/vended-interventions/cedar/cedar.js.map +1 -0
- package/dist/src/vended-interventions/cedar/index.d.ts +3 -0
- package/dist/src/vended-interventions/cedar/index.d.ts.map +1 -0
- package/dist/src/vended-interventions/cedar/index.js +2 -0
- package/dist/src/vended-interventions/cedar/index.js.map +1 -0
- package/dist/src/vended-interventions/cedar/schema-generator.d.ts +10 -0
- package/dist/src/vended-interventions/cedar/schema-generator.d.ts.map +1 -0
- package/dist/src/vended-interventions/cedar/schema-generator.js +38 -0
- package/dist/src/vended-interventions/cedar/schema-generator.js.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.node.d.ts +2 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.node.d.ts.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/{bedrock-knowledge-base-store.test.js → bedrock-knowledge-base-store.test.node.js} +154 -7
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.node.js.map +1 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts +1 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts.map +1 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js.map +1 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts +57 -0
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts.map +1 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js +86 -11
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js.map +1 -1
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts +2 -0
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js +96 -0
- package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js.map +1 -0
- package/dist/src/vended-plugins/context-injector/index.d.ts +25 -0
- package/dist/src/vended-plugins/context-injector/index.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-injector/index.js +23 -0
- package/dist/src/vended-plugins/context-injector/index.js.map +1 -0
- package/dist/src/vended-plugins/context-injector/plugin.d.ts +55 -0
- package/dist/src/vended-plugins/context-injector/plugin.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-injector/plugin.js +41 -0
- package/dist/src/vended-plugins/context-injector/plugin.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js +43 -4
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js +5 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js +68 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/plugin.js +12 -2
- package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.d.ts +29 -1
- package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -1
- package/dist/src/vended-plugins/context-offloader/storage.js +76 -5
- package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -1
- package/dist/src/vended-plugins/index.d.ts +2 -1
- package/dist/src/vended-plugins/index.d.ts.map +1 -1
- package/dist/src/vended-plugins/index.js +2 -1
- package/dist/src/vended-plugins/index.js.map +1 -1
- package/dist/src/vended-plugins/skills/skill.d.ts.map +1 -1
- package/dist/src/vended-plugins/skills/skill.js +4 -2
- package/dist/src/vended-plugins/skills/skill.js.map +1 -1
- package/dist/src/vended-tools/http-request/http-request.js +1 -1
- package/dist/src/vended-tools/http-request/http-request.js.map +1 -1
- package/package.json +54 -36
- package/dist/src/conversation-manager/pin-message.d.ts.map +0 -1
- package/dist/src/conversation-manager/pin-message.js.map +0 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts +0 -2
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts.map +0 -1
- package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BedrockAgentRuntimeClient, RetrieveCommand } from '@aws-sdk/client-bedrock-agent-runtime';
|
|
2
|
-
import { BedrockAgentClient, IngestKnowledgeBaseDocumentsCommand, } from '@aws-sdk/client-bedrock-agent';
|
|
1
|
+
import { BedrockAgentRuntimeClient, RetrieveCommand, } from '@aws-sdk/client-bedrock-agent-runtime';
|
|
2
|
+
import { BedrockAgentClient, GetKnowledgeBaseCommand, IngestKnowledgeBaseDocumentsCommand, } from '@aws-sdk/client-bedrock-agent';
|
|
3
3
|
import { v7 as uuidv7 } from 'uuid';
|
|
4
4
|
import { logger } from '../../logging/logger.js';
|
|
5
5
|
const DEFAULT_MAX_SEARCH_RESULTS = 10;
|
|
@@ -20,6 +20,12 @@ function toAttributeValue(value) {
|
|
|
20
20
|
* A {@link MemoryStore} backed by Amazon Bedrock Knowledge Bases. Supports semantic search via
|
|
21
21
|
* Retrieve and document ingestion via IngestKnowledgeBaseDocuments for CUSTOM and S3 data sources.
|
|
22
22
|
*
|
|
23
|
+
* Works with all knowledge base types (MANAGED, VECTOR, KENDRA, SQL); the type is detected via
|
|
24
|
+
* `GetKnowledgeBase` during {@link initialize} and determines whether Retrieve uses
|
|
25
|
+
* `managedSearchConfiguration` or `vectorSearchConfiguration`. Detection requires the
|
|
26
|
+
* `bedrock:GetKnowledgeBase` permission; a failure raises at agent construction (via MemoryManager)
|
|
27
|
+
* or on first `search()` standalone. To skip detection, provide `knowledgeBaseType` in the config.
|
|
28
|
+
*
|
|
23
29
|
* @example
|
|
24
30
|
* ```typescript
|
|
25
31
|
* import { BedrockKnowledgeBaseStore } from '@strands-agents/sdk/vended-memory-stores/bedrock-knowledge-base'
|
|
@@ -51,6 +57,8 @@ export class BedrockKnowledgeBaseStore {
|
|
|
51
57
|
_knowledgeBaseId;
|
|
52
58
|
_dataSourceType;
|
|
53
59
|
_dataSourceId;
|
|
60
|
+
/** The knowledge base type, resolved eagerly in {@link initialize} via `GetKnowledgeBase`. */
|
|
61
|
+
_kbType;
|
|
54
62
|
/**
|
|
55
63
|
* Logical namespace isolating documents: applied as a metadata filter on {@link search} and stamped
|
|
56
64
|
* on writes via {@link add}. Unlike {@link name}, it is not a store-identity field, so it never
|
|
@@ -65,8 +73,10 @@ export class BedrockKnowledgeBaseStore {
|
|
|
65
73
|
* Note the asymmetry: an explicit filter affects search only; writes always scope by {@link scope}.
|
|
66
74
|
*/
|
|
67
75
|
filter;
|
|
76
|
+
/** Document-level access control entries stamped on every write, for ACL-aware data sources. */
|
|
77
|
+
accessControlList;
|
|
68
78
|
constructor(options) {
|
|
69
|
-
const { config, scope, name, description, writable, maxSearchResults, filter, extraction } = options;
|
|
79
|
+
const { config, scope, name, description, writable, maxSearchResults, filter, extraction, accessControlList } = options;
|
|
70
80
|
this.name = name;
|
|
71
81
|
if (description !== undefined)
|
|
72
82
|
this.description = description;
|
|
@@ -84,6 +94,7 @@ export class BedrockKnowledgeBaseStore {
|
|
|
84
94
|
this._s3Client = config.s3?.client;
|
|
85
95
|
this._s3Config = config.s3;
|
|
86
96
|
this._knowledgeBaseId = config.knowledgeBaseId;
|
|
97
|
+
this._kbType = config.knowledgeBaseType;
|
|
87
98
|
this._dataSourceType = config.dataSourceType;
|
|
88
99
|
this._dataSourceId = config.dataSourceId;
|
|
89
100
|
if (this.writable)
|
|
@@ -91,6 +102,7 @@ export class BedrockKnowledgeBaseStore {
|
|
|
91
102
|
this.scope = scope;
|
|
92
103
|
this.scopeMetadataKey = config.scopeMetadataKey ?? 'namespace';
|
|
93
104
|
this.filter = filter;
|
|
105
|
+
this.accessControlList = accessControlList;
|
|
94
106
|
}
|
|
95
107
|
/**
|
|
96
108
|
* Resolves the effective retrieval filter for a search: an explicit {@link filter} wins; otherwise
|
|
@@ -103,6 +115,27 @@ export class BedrockKnowledgeBaseStore {
|
|
|
103
115
|
return { equals: { key: this.scopeMetadataKey, value: this.scope } };
|
|
104
116
|
return undefined;
|
|
105
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Resolve the knowledge base type via `GetKnowledgeBase` and cache the result.
|
|
120
|
+
*
|
|
121
|
+
* Idempotent: subsequent calls return immediately. When the store is registered with a
|
|
122
|
+
* `MemoryManager`, this runs at agent construction so permission or connectivity issues surface
|
|
123
|
+
* early. Standalone callers get the same check on first `search()`.
|
|
124
|
+
*
|
|
125
|
+
* @throws Error if the `GetKnowledgeBase` call fails for any reason.
|
|
126
|
+
*/
|
|
127
|
+
async initialize() {
|
|
128
|
+
if (this._kbType !== undefined)
|
|
129
|
+
return;
|
|
130
|
+
try {
|
|
131
|
+
const response = await this._getAgentClient().send(new GetKnowledgeBaseCommand({ knowledgeBaseId: this._knowledgeBaseId }));
|
|
132
|
+
this._kbType = response.knowledgeBase.knowledgeBaseConfiguration.type;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
logger.error(`store=<${this.name}>, knowledgeBaseId=<${this._knowledgeBaseId}>, error=<${error}> | knowledge base type detection failed`);
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
106
139
|
/**
|
|
107
140
|
* Searches the knowledge base for entries matching the query.
|
|
108
141
|
*
|
|
@@ -118,17 +151,20 @@ export class BedrockKnowledgeBaseStore {
|
|
|
118
151
|
}
|
|
119
152
|
const limit = options?.maxSearchResults || this.maxSearchResults || DEFAULT_MAX_SEARCH_RESULTS;
|
|
120
153
|
const filter = this._resolveFilter();
|
|
154
|
+
const searchConfiguration = { numberOfResults: limit, ...(filter && { filter }) };
|
|
155
|
+
// A managed knowledge base takes `managedSearchConfiguration`, a vector one
|
|
156
|
+
// `vectorSearchConfiguration`; both accept the same fields, so only the wrapping key differs.
|
|
157
|
+
await this.initialize();
|
|
158
|
+
const managed = this._kbType === 'MANAGED';
|
|
159
|
+
const retrievalConfiguration = managed
|
|
160
|
+
? { managedSearchConfiguration: searchConfiguration }
|
|
161
|
+
: { vectorSearchConfiguration: searchConfiguration };
|
|
121
162
|
let response;
|
|
122
163
|
try {
|
|
123
164
|
response = await this._runtimeClient.send(new RetrieveCommand({
|
|
124
165
|
knowledgeBaseId: this._knowledgeBaseId,
|
|
125
166
|
retrievalQuery: { text: query },
|
|
126
|
-
retrievalConfiguration
|
|
127
|
-
vectorSearchConfiguration: {
|
|
128
|
-
numberOfResults: limit,
|
|
129
|
-
...(filter && { filter }),
|
|
130
|
-
},
|
|
131
|
-
},
|
|
167
|
+
retrievalConfiguration,
|
|
132
168
|
}));
|
|
133
169
|
}
|
|
134
170
|
catch (error) {
|
|
@@ -198,10 +234,24 @@ export class BedrockKnowledgeBaseStore {
|
|
|
198
234
|
}
|
|
199
235
|
catch (error) {
|
|
200
236
|
logger.error(`store=<${this.name}>, knowledgeBaseId=<${this._knowledgeBaseId}>, dataSourceId=<${dataSourceId}>, dataSourceType=<${dataSourceType}>, error=<${error}> | knowledge base document ingestion failed`, error);
|
|
237
|
+
if (this._isMissingAclError(error)) {
|
|
238
|
+
throw new Error('BedrockKnowledgeBaseStore: ingestion was rejected because the data source has ACL awareness ' +
|
|
239
|
+
'enabled but this store has no accessControlList configured. Set accessControlList in the store ' +
|
|
240
|
+
'config to write to an ACL-enabled data source.', { cause: error });
|
|
241
|
+
}
|
|
201
242
|
throw error;
|
|
202
243
|
}
|
|
203
244
|
return { documentId };
|
|
204
245
|
}
|
|
246
|
+
_isMissingAclError(error) {
|
|
247
|
+
if (this.accessControlList != null)
|
|
248
|
+
return false;
|
|
249
|
+
if (!(error instanceof Error))
|
|
250
|
+
return false;
|
|
251
|
+
if (error.name !== 'ValidationException')
|
|
252
|
+
return false;
|
|
253
|
+
return error.message.toLowerCase().includes('accesscontrollist');
|
|
254
|
+
}
|
|
205
255
|
/**
|
|
206
256
|
* Uploads the objects that back one S3 ingestion and returns their `s3://` URIs.
|
|
207
257
|
*
|
|
@@ -224,11 +274,17 @@ export class BedrockKnowledgeBaseStore {
|
|
|
224
274
|
const key = `${prefix}${uuidv7()}.txt`;
|
|
225
275
|
const contentUri = await this._putObject(s3, key, content, 'text/plain; charset=utf-8');
|
|
226
276
|
const attributes = this._buildS3SidecarAttributes(metadata);
|
|
227
|
-
|
|
277
|
+
const sidecarAcl = this._buildS3SidecarAcl();
|
|
278
|
+
// A sidecar is written only when there is something to put in it: scope/metadata attributes,
|
|
279
|
+
// an ACL, or both.
|
|
280
|
+
if (Object.keys(attributes).length === 0 && sidecarAcl.length === 0) {
|
|
228
281
|
return { contentUri };
|
|
229
282
|
}
|
|
230
283
|
// The sidecar must sit beside the source object and be named `<object-key>.metadata.json`.
|
|
231
|
-
const
|
|
284
|
+
const sidecarBody = { metadataAttributes: attributes };
|
|
285
|
+
if (sidecarAcl.length > 0)
|
|
286
|
+
sidecarBody.accessControlList = sidecarAcl;
|
|
287
|
+
const sidecar = JSON.stringify(sidecarBody);
|
|
232
288
|
const sidecarUri = await this._putObject(s3, `${key}.metadata.json`, sidecar, 'application/json');
|
|
233
289
|
return { contentUri, sidecarUri };
|
|
234
290
|
}
|
|
@@ -304,6 +360,12 @@ export class BedrockKnowledgeBaseStore {
|
|
|
304
360
|
*/
|
|
305
361
|
_buildCustomDocument(documentId, content, metadata) {
|
|
306
362
|
const attrs = this._resolveAttributes(metadata);
|
|
363
|
+
// An inline ACL rides on IN_LINE_ATTRIBUTE metadata, which Bedrock requires to carry at least
|
|
364
|
+
// one attribute; an ACL with no scope/metadata has no valid inline shape.
|
|
365
|
+
if (this.accessControlList && attrs.length === 0) {
|
|
366
|
+
throw new Error('BedrockKnowledgeBaseStore: an inline accessControlList requires at least one metadata ' +
|
|
367
|
+
'attribute, but this CUSTOM write has none. Set a scope or pass metadata to add().');
|
|
368
|
+
}
|
|
307
369
|
const document = {
|
|
308
370
|
content: {
|
|
309
371
|
dataSourceType: 'CUSTOM',
|
|
@@ -321,6 +383,9 @@ export class BedrockKnowledgeBaseStore {
|
|
|
321
383
|
document.metadata = {
|
|
322
384
|
type: 'IN_LINE_ATTRIBUTE',
|
|
323
385
|
inlineAttributes: attrs.map(({ key, value }) => ({ key, value })),
|
|
386
|
+
...(this.accessControlList && {
|
|
387
|
+
accessControlList: this.accessControlList,
|
|
388
|
+
}),
|
|
324
389
|
};
|
|
325
390
|
}
|
|
326
391
|
return document;
|
|
@@ -338,6 +403,16 @@ export class BedrockKnowledgeBaseStore {
|
|
|
338
403
|
}
|
|
339
404
|
return attributes;
|
|
340
405
|
}
|
|
406
|
+
/**
|
|
407
|
+
* Builds the `accessControlList` array for an S3 `.metadata.json` sidecar. The sidecar uses
|
|
408
|
+
* capitalized field names (`Name`/`Type`/`Access`), unlike the lowercase keys the `CUSTOM` inline
|
|
409
|
+
* document takes, so entries are translated here.
|
|
410
|
+
*/
|
|
411
|
+
_buildS3SidecarAcl() {
|
|
412
|
+
if (!this.accessControlList)
|
|
413
|
+
return [];
|
|
414
|
+
return this.accessControlList.map((entry) => ({ Name: entry.name, Type: entry.type, Access: entry.access }));
|
|
415
|
+
}
|
|
341
416
|
_validateWriteConfig() {
|
|
342
417
|
if (this._dataSourceType !== 'CUSTOM' && this._dataSourceType !== 'S3') {
|
|
343
418
|
throw new Error(`BedrockKnowledgeBaseStore: add requires dataSourceType 'CUSTOM' or 'S3', but it is '${this._dataSourceType ?? 'undefined'}'. ` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/vended-memory-stores/bedrock-knowledge-base/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/vended-memory-stores/bedrock-knowledge-base/store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,eAAe,GAGhB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EAIvB,mCAAmC,GACpC,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAA;AAKnC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,MAAM,0BAA0B,GAAG,EAAE,CAAA;AAgBrC,sGAAsG;AACtG,SAAS,gBAAgB,CAAC,KAAgB;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;IAC5E,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;IAC5E,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QAChG,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,EAAE,CAAA;IACxD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AA4HD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,OAAO,yBAAyB;IAC3B,IAAI,CAAQ;IACZ,WAAW,CAAS;IACpB,gBAAgB,CAAS;IACzB,QAAQ,CAAS;IACjB,UAAU,CAA6B;IAE/B,cAAc,CAA2B;IAClD,YAAY,CAAgC;IAC5C,SAAS,CAAsB;IACtB,SAAS,CAA0C;IACnD,gBAAgB,CAAQ;IACxB,eAAe,CAAuC;IACtD,aAAa,CAAoB;IAClD,8FAA8F;IACtF,OAAO,CAAoB;IAEnC;;;;;OAKG;IACa,KAAK,CAAoB;IACzC,6DAA6D;IAC7C,gBAAgB,CAAQ;IACxC;;;OAGG;IACa,MAAM,CAA6B;IACnD,gGAAgG;IAChF,iBAAiB,CAAsD;IAEvF,YAAY,OAAwC;QAClD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAC3G,OAAO,CAAA;QAET,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC7D,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;YACpF,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QAC1C,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,KAAK,CAAA;QACjC,IAAI,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE1D,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,yBAAyB,CAAC,EAAE,CAAC,CAAA;QAC/E,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAA;QACtC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,EAAE,MAAM,CAAA;QAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAA;QAC1B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAA;QAC9C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAA;QACvC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,CAAA;QAC5C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,YAAY,CAAA;QAExC,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAE9C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,WAAW,CAAA;QAC9D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;IAC5C,CAAC;IAED;;;OAGG;IACK,cAAc;QACpB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAA;QACnC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAA;QACpF,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAM;QAEtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAChD,IAAI,uBAAuB,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CACxE,CAAA;YACD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAc,CAAC,0BAA2B,CAAC,IAAc,CAAA;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,UAAU,IAAI,CAAC,IAAI,uBAAuB,IAAI,CAAC,gBAAgB,aAAa,KAAK,0CAA0C,CAC5H,CAAA;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAuB;QACjD,IAAI,OAAO,EAAE,gBAAgB,KAAK,SAAS,IAAI,OAAO,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;QACpF,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,EAAE,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,IAAI,0BAA0B,CAAA;QAC9F,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QAEpC,MAAM,mBAAmB,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;QACjF,4EAA4E;QAC5E,8FAA8F;QAC9F,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,CAAA;QAC1C,MAAM,sBAAsB,GAAwC,OAAO;YACzE,CAAC,CAAC,EAAE,0BAA0B,EAAE,mBAAmB,EAAE;YACrD,CAAC,CAAC,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,CAAA;QAEtD,IAAI,QAAQ,CAAA;QACZ,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CACvC,IAAI,eAAe,CAAC;gBAClB,eAAe,EAAE,IAAI,CAAC,gBAAgB;gBACtC,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;gBAC/B,sBAAsB;aACvB,CAAC,CACH,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,UAAU,IAAI,CAAC,IAAI,uBAAuB,IAAI,CAAC,gBAAgB,aAAa,KAAK,oCAAoC,EACrH,KAAK,CACN,CAAA;YACD,MAAM,KAAK,CAAA;QACb,CAAC;QAED,OAAO,CAAC,QAAQ,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACtD,MAAM,QAAQ,GAA8B,EAAE,CAAA;YAC9C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3D,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAkB,CAAA;gBACpC,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,QAAQ,CAAC,eAAe,GAAG,MAAM,CAAC,QAAgC,CAAA;YACpE,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,QAAQ,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,CAAA;YACzC,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE;gBACnC,QAAQ;aACT,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,QAAoC;QAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAA;QACpH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;QAC1E,CAAC;QACD,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAEpE,8FAA8F;QAC9F,+FAA+F;QAC/F,+FAA+F;QAC/F,wFAAwF;QACxF,IAAI,QAA+B,CAAA;QACnC,IAAI,UAAkB,CAAA;QACtB,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YACjE,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;YAC5C,UAAU,GAAG,UAAU,CAAC,UAAU,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,MAAM,EAAE,CAAA;YACrB,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QACrE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAC/B,IAAI,mCAAmC,CAAC;gBACtC,eAAe,EAAE,IAAI,CAAC,gBAAgB;gBACtC,YAAY;gBACZ,SAAS,EAAE,CAAC,QAAQ,CAAC;aACtB,CAAC,CACH,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,UAAU,IAAI,CAAC,IAAI,uBAAuB,IAAI,CAAC,gBAAgB,oBAAoB,YAAY,sBAAsB,cAAc,aAAa,KAAK,8CAA8C,EACnM,KAAK,CACN,CAAA;YACD,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,8FAA8F;oBAC5F,iGAAiG;oBACjG,gDAAgD,EAClD,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;YACH,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,CAAA;IACvB,CAAC;IAEO,kBAAkB,CAAC,KAAc;QACvC,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI;YAAE,OAAO,KAAK,CAAA;QAChD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;QAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB;YAAE,OAAO,KAAK,CAAA;QACtD,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IAClE,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACK,KAAK,CAAC,gBAAgB,CAC5B,OAAe,EACf,QAAoC;QAEpC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAU,CAAA;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAA;QACpE,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,CAAA;QAEtC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,2BAA2B,CAAC,CAAA;QAEvF,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAA;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC5C,6FAA6F;QAC7F,mBAAmB;QACnB,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpE,OAAO,EAAE,UAAU,EAAE,CAAA;QACvB,CAAC;QAED,2FAA2F;QAC3F,MAAM,WAAW,GAA4B,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAA;QAC/E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,WAAW,CAAC,iBAAiB,GAAG,UAAU,CAAA;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAC3C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,GAAG,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAA;QACjG,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;IACnC,CAAC;IAED,oFAAoF;IAC5E,KAAK,CAAC,UAAU,CACtB,EAAgC,EAChC,GAAW,EACX,IAAY,EACZ,WAAmB;QAEnB,IAAI,CAAC;YACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;YAC/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;YACxC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QAChH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,UAAU,IAAI,CAAC,IAAI,gBAAgB,EAAE,CAAC,MAAM,IAAI,GAAG,aAAa,KAAK,uCAAuC,EAC5G,KAAK,CACN,CAAA;YACD,MAAM,KAAK,CAAA;QACb,CAAC;QACD,OAAO,QAAQ,EAAE,CAAC,MAAM,IAAI,GAAG,EAAE,CAAA;IACnC,CAAC;IAED;;;;;;;;OAQG;IACK,gBAAgB,CAAC,EACvB,UAAU,EACV,UAAU,GAIX;QACC,MAAM,QAAQ,GAA0B;YACtC,OAAO,EAAE;gBACP,cAAc,EAAE,IAAI;gBACpB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE;aACxC;SACF,CAAA;QAED,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,QAAQ,GAAG;gBAClB,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE;aAChC,CAAA;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;;OAIG;IACK,kBAAkB,CACxB,QAAoC;QAEpC,MAAM,KAAK,GAA0D,EAAE,CAAA;QAEvE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAChG,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpD,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAChD,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,WAAW,GAAG,+DAA+D,CAAC,CAAA;oBAC7G,SAAQ;gBACV,CAAC;gBACD,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;gBAC9C,IAAI,cAAc,EAAE,CAAC;oBACnB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAA;gBAC5C,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,WAAW,GAAG,iDAAiD,CAAC,CAAA;gBAClG,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACK,oBAAoB,CAC1B,UAAkB,EAClB,OAAe,EACf,QAAoC;QAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAE/C,8FAA8F;QAC9F,0EAA0E;QAC1E,IAAI,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CACb,wFAAwF;gBACtF,mFAAmF,CACtF,CAAA;QACH,CAAC;QAED,MAAM,QAAQ,GAA0B;YACtC,OAAO,EAAE;gBACP,cAAc,EAAE,QAAQ;gBACxB,MAAM,EAAE;oBACN,wBAAwB,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE;oBAC5C,UAAU,EAAE,SAAS;oBACrB,aAAa,EAAE;wBACb,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;qBAC/B;iBACF;aACF;SACF,CAAA;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,QAAQ,CAAC,QAAQ,GAAG;gBAClB,IAAI,EAAE,mBAAmB;gBACzB,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;gBACjE,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI;oBAC5B,iBAAiB,EAAE,IAAI,CAAC,iBAAiD;iBAC1E,CAAC;aACH,CAAA;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;;OAIG;IACK,yBAAyB,CAAC,QAAoC;QACpE,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAuC,EAAE,CAAA;QACzD,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;YACnC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAA;QACzD,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED;;;;OAIG;IACK,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO,EAAE,CAAA;QACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC9G,CAAC;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,eAAe,KAAK,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CACb,uFAAuF,IAAI,CAAC,eAAe,IAAI,WAAW,KAAK;gBAC7H,iCAAiC,CACpC,CAAA;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,4EAA4E;gBAC1E,2CAA2C,CAC9C,CAAA;QACH,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,gFAAgF;gBAC9E,4CAA4C,CAC/C,CAAA;QACH,CAAC;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,CAAA;IACnF,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;YACrE,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAA;QACvC,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.test.d.ts","sourceRoot":"","sources":["../../../../../src/vended-plugins/context-injector/__tests__/plugin.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { ContextInjector } from '../plugin.js';
|
|
3
|
+
import { InvokeModelStage } from '../../../middleware/index.js';
|
|
4
|
+
import { Message, TextBlock } from '../../../types/messages.js';
|
|
5
|
+
import { createMockAgent } from '../../../__fixtures__/agent-helpers.js';
|
|
6
|
+
const user = (text) => new Message({ role: 'user', content: [new TextBlock(text)] });
|
|
7
|
+
const assistant = (text) => new Message({ role: 'assistant', content: [new TextBlock(text)] });
|
|
8
|
+
// Builds a mock agent that captures addMiddleware registrations, with a real appState/cancelSignal.
|
|
9
|
+
function makeAgent() {
|
|
10
|
+
const addMiddleware = vi.fn();
|
|
11
|
+
const agent = createMockAgent({ extra: { addMiddleware } });
|
|
12
|
+
return { agent, addMiddleware };
|
|
13
|
+
}
|
|
14
|
+
describe('ContextInjector', () => {
|
|
15
|
+
describe('plugin interface', () => {
|
|
16
|
+
it('defaults to the strands:context-injector name', () => {
|
|
17
|
+
expect(new ContextInjector({ renderContent: async () => 'x' }).name).toBe('strands:context-injector');
|
|
18
|
+
});
|
|
19
|
+
it('honors a custom name (so multiple injectors can be told apart)', () => {
|
|
20
|
+
expect(new ContextInjector({ name: 'now', renderContent: async () => 'x' }).name).toBe('now');
|
|
21
|
+
});
|
|
22
|
+
it('registers an InvokeModelStage input middleware on initAgent', () => {
|
|
23
|
+
const { agent, addMiddleware } = makeAgent();
|
|
24
|
+
new ContextInjector({ renderContent: async () => 'x' }).initAgent(agent);
|
|
25
|
+
expect(addMiddleware).toHaveBeenCalledTimes(1);
|
|
26
|
+
expect(addMiddleware.mock.calls[0][0]).toBe(InvokeModelStage.Input);
|
|
27
|
+
expect(typeof addMiddleware.mock.calls[0][1]).toBe('function');
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe('registered handler', () => {
|
|
31
|
+
// Runs the handler the plugin registered, with a context backed by the mock agent.
|
|
32
|
+
async function run(plugin, messages) {
|
|
33
|
+
const { agent, addMiddleware } = makeAgent();
|
|
34
|
+
plugin.initAgent(agent);
|
|
35
|
+
const handler = addMiddleware.mock.calls[0][1];
|
|
36
|
+
return handler({ messages, agent });
|
|
37
|
+
}
|
|
38
|
+
it('folds renderContent() text into the latest user message', async () => {
|
|
39
|
+
const result = await run(new ContextInjector({ renderContent: async () => 'INJECTED' }), [
|
|
40
|
+
assistant('prior'),
|
|
41
|
+
user('ask'),
|
|
42
|
+
]);
|
|
43
|
+
expect(result.messages.map((m) => m.toJSON())).toStrictEqual([
|
|
44
|
+
{ role: 'assistant', content: [{ text: 'prior' }] },
|
|
45
|
+
{ role: 'user', content: [{ text: 'INJECTED' }, { text: 'ask' }] },
|
|
46
|
+
]);
|
|
47
|
+
});
|
|
48
|
+
it('skips on a non-user turn by default (userTurn trigger)', async () => {
|
|
49
|
+
const renderContent = vi.fn(async () => 'x');
|
|
50
|
+
const input = [user('ask'), assistant('reply')];
|
|
51
|
+
const result = await run(new ContextInjector({ renderContent }), input);
|
|
52
|
+
expect(renderContent).not.toHaveBeenCalled();
|
|
53
|
+
expect(result.messages).toBe(input);
|
|
54
|
+
});
|
|
55
|
+
it("'everyTurn' injects regardless of the latest role", async () => {
|
|
56
|
+
const result = await run(new ContextInjector({ trigger: 'everyTurn', renderContent: async () => 'INJECTED' }), [
|
|
57
|
+
user('ask'),
|
|
58
|
+
assistant('reply'),
|
|
59
|
+
]);
|
|
60
|
+
// No later user message than index 0, so the fold targets it.
|
|
61
|
+
expect(result.messages.map((m) => m.toJSON())).toStrictEqual([
|
|
62
|
+
{ role: 'user', content: [{ text: 'INJECTED' }, { text: 'ask' }] },
|
|
63
|
+
{ role: 'assistant', content: [{ text: 'reply' }] },
|
|
64
|
+
]);
|
|
65
|
+
});
|
|
66
|
+
it('exposes appState and the agent to renderContent', async () => {
|
|
67
|
+
const { agent, addMiddleware } = makeAgent();
|
|
68
|
+
let sawAgent = false;
|
|
69
|
+
let sawAppState = false;
|
|
70
|
+
new ContextInjector({
|
|
71
|
+
renderContent: async (ctx) => {
|
|
72
|
+
sawAgent = ctx.agent === agent;
|
|
73
|
+
sawAppState = ctx.appState === agent.appState;
|
|
74
|
+
return undefined;
|
|
75
|
+
},
|
|
76
|
+
}).initAgent(agent);
|
|
77
|
+
const handler = addMiddleware.mock.calls[0][1];
|
|
78
|
+
await handler({ messages: [user('ask')], agent });
|
|
79
|
+
expect(sawAgent).toBe(true);
|
|
80
|
+
expect(sawAppState).toBe(true);
|
|
81
|
+
});
|
|
82
|
+
it('fails open (passes context through) when renderContent throws', async () => {
|
|
83
|
+
const result = await run(new ContextInjector({
|
|
84
|
+
renderContent: async () => {
|
|
85
|
+
throw new Error('boom');
|
|
86
|
+
},
|
|
87
|
+
}), [assistant('prior'), user('ask')]);
|
|
88
|
+
// Unchanged: the original messages, no injected block.
|
|
89
|
+
expect(result.messages.map((m) => m.toJSON())).toStrictEqual([
|
|
90
|
+
{ role: 'assistant', content: [{ text: 'prior' }] },
|
|
91
|
+
{ role: 'user', content: [{ text: 'ask' }] },
|
|
92
|
+
]);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=plugin.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.test.js","sourceRoot":"","sources":["../../../../../src/vended-plugins/context-injector/__tests__/plugin.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-injection plugin for Strands Agents.
|
|
3
|
+
*
|
|
4
|
+
* Provides the {@link ContextInjector} plugin, which folds just-in-time text into the model input
|
|
5
|
+
* before each call without touching durable history.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { Agent } from '@strands-agents/sdk'
|
|
10
|
+
* import { ContextInjector } from '@strands-agents/sdk/vended-plugins/context-injector'
|
|
11
|
+
*
|
|
12
|
+
* const agent = new Agent({
|
|
13
|
+
* model,
|
|
14
|
+
* plugins: [
|
|
15
|
+
* new ContextInjector({
|
|
16
|
+
* renderContent: async ({ messages }) => `<context>${derive(messages)}</context>`,
|
|
17
|
+
* }),
|
|
18
|
+
* ],
|
|
19
|
+
* })
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export { ContextInjector } from './plugin.js';
|
|
23
|
+
export type { ContextInjectorConfig } from './plugin.js';
|
|
24
|
+
export type { InjectionTrigger, InjectionContext } from '../../injection/types.js';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/vended-plugins/context-injector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-injection plugin for Strands Agents.
|
|
3
|
+
*
|
|
4
|
+
* Provides the {@link ContextInjector} plugin, which folds just-in-time text into the model input
|
|
5
|
+
* before each call without touching durable history.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { Agent } from '@strands-agents/sdk'
|
|
10
|
+
* import { ContextInjector } from '@strands-agents/sdk/vended-plugins/context-injector'
|
|
11
|
+
*
|
|
12
|
+
* const agent = new Agent({
|
|
13
|
+
* model,
|
|
14
|
+
* plugins: [
|
|
15
|
+
* new ContextInjector({
|
|
16
|
+
* renderContent: async ({ messages }) => `<context>${derive(messages)}</context>`,
|
|
17
|
+
* }),
|
|
18
|
+
* ],
|
|
19
|
+
* })
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export { ContextInjector } from './plugin.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/vended-plugins/context-injector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { Plugin } from '../../plugins/plugin.js';
|
|
2
|
+
import type { LocalAgent } from '../../types/agent.js';
|
|
3
|
+
import type { InjectionTrigger, InjectionContext } from '../../injection/types.js';
|
|
4
|
+
/** Configuration for the {@link ContextInjector} plugin. */
|
|
5
|
+
export interface ContextInjectorConfig {
|
|
6
|
+
/**
|
|
7
|
+
* Plugin name, for logging and duplicate detection. Defaults to `'strands:context-injector'`. Set a
|
|
8
|
+
* distinct name when registering more than one injector so they can be told apart.
|
|
9
|
+
*/
|
|
10
|
+
name?: string;
|
|
11
|
+
/**
|
|
12
|
+
* When to inject. An {@link InjectionTrigger} name selects a built-in policy (`'userTurn'` —
|
|
13
|
+
* default — or `'everyTurn'`); a predicate over the {@link InjectionContext} is the escape hatch. A
|
|
14
|
+
* predicate that throws fails open (injection is skipped).
|
|
15
|
+
*
|
|
16
|
+
* @defaultValue 'userTurn'
|
|
17
|
+
*/
|
|
18
|
+
trigger?: InjectionTrigger | ((context: InjectionContext) => boolean);
|
|
19
|
+
/**
|
|
20
|
+
* Renders the text to inject for this call, or `undefined`/`''` to skip. The text reaches the model
|
|
21
|
+
* verbatim, so it is a prompt-injection surface: escape any attacker-influenced fields yourself. A
|
|
22
|
+
* callback that throws fails open (injection is skipped, the model call proceeds).
|
|
23
|
+
*/
|
|
24
|
+
renderContent: (context: InjectionContext) => Promise<string | undefined>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Plugin that injects just-in-time context into the model input before each call.
|
|
28
|
+
*
|
|
29
|
+
* Before each model call, the plugin asks {@link ContextInjectorConfig.renderContent} for text and
|
|
30
|
+
* makes it available to the model for that call, gated by {@link ContextInjectorConfig.trigger}. The
|
|
31
|
+
* injected text is ephemeral: it augments the model input for that one call and never persists into the
|
|
32
|
+
* durable conversation or session.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* import { Agent } from '@strands-agents/sdk'
|
|
37
|
+
* import { ContextInjector } from '@strands-agents/sdk/vended-plugins/context-injector'
|
|
38
|
+
*
|
|
39
|
+
* const agent = new Agent({
|
|
40
|
+
* model,
|
|
41
|
+
* plugins: [new ContextInjector({ renderContent: async () => `<now>${new Date().toISOString()}</now>` })],
|
|
42
|
+
* })
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @remarks
|
|
46
|
+
* Multiple injectors may be registered; each contributes its text independently, in plugin-registration
|
|
47
|
+
* order.
|
|
48
|
+
*/
|
|
49
|
+
export declare class ContextInjector implements Plugin {
|
|
50
|
+
readonly name: string;
|
|
51
|
+
private readonly _config;
|
|
52
|
+
constructor(config: ContextInjectorConfig);
|
|
53
|
+
initAgent(agent: LocalAgent): void;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/vended-plugins/context-injector/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAElF,4DAA4D;AAC5D,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAA;IACrE;;;;OAIG;IACH,aAAa,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAC1E;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,eAAgB,YAAW,MAAM;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;gBAEnC,MAAM,EAAE,qBAAqB;IAKzC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAUnC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { InvokeModelStage } from '../../middleware/index.js';
|
|
2
|
+
import { createInjectionMiddleware } from '../../injection/message-injection.js';
|
|
3
|
+
/**
|
|
4
|
+
* Plugin that injects just-in-time context into the model input before each call.
|
|
5
|
+
*
|
|
6
|
+
* Before each model call, the plugin asks {@link ContextInjectorConfig.renderContent} for text and
|
|
7
|
+
* makes it available to the model for that call, gated by {@link ContextInjectorConfig.trigger}. The
|
|
8
|
+
* injected text is ephemeral: it augments the model input for that one call and never persists into the
|
|
9
|
+
* durable conversation or session.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { Agent } from '@strands-agents/sdk'
|
|
14
|
+
* import { ContextInjector } from '@strands-agents/sdk/vended-plugins/context-injector'
|
|
15
|
+
*
|
|
16
|
+
* const agent = new Agent({
|
|
17
|
+
* model,
|
|
18
|
+
* plugins: [new ContextInjector({ renderContent: async () => `<now>${new Date().toISOString()}</now>` })],
|
|
19
|
+
* })
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @remarks
|
|
23
|
+
* Multiple injectors may be registered; each contributes its text independently, in plugin-registration
|
|
24
|
+
* order.
|
|
25
|
+
*/
|
|
26
|
+
export class ContextInjector {
|
|
27
|
+
name;
|
|
28
|
+
_config;
|
|
29
|
+
constructor(config) {
|
|
30
|
+
this.name = config.name ?? 'strands:context-injector';
|
|
31
|
+
this._config = config;
|
|
32
|
+
}
|
|
33
|
+
initAgent(agent) {
|
|
34
|
+
const config = this._config;
|
|
35
|
+
agent.addMiddleware(InvokeModelStage.Input, createInjectionMiddleware({
|
|
36
|
+
...(config.trigger !== undefined && { trigger: config.trigger }),
|
|
37
|
+
renderContent: config.renderContent,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../../src/vended-plugins/context-injector/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AA0BhF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,eAAe;IACjB,IAAI,CAAQ;IAEJ,OAAO,CAAuB;IAE/C,YAAY,MAA6B;QACvC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,0BAA0B,CAAA;QACrD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,CAAC;IAED,SAAS,CAAC,KAAiB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,KAAK,CAAC,aAAa,CACjB,gBAAgB,CAAC,KAAK,EACtB,yBAAyB,CAAC;YACxB,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YAChE,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CACH,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
2
|
import { ContextOffloader } from '../plugin.js';
|
|
3
3
|
import { InMemoryStorage } from '../storage.js';
|
|
4
|
-
import { AfterToolCallEvent } from '../../../hooks/events.js';
|
|
4
|
+
import { AfterToolCallEvent, BeforeModelCallEvent } from '../../../hooks/events.js';
|
|
5
5
|
import { TextBlock, JsonBlock, ToolResultBlock } from '../../../types/messages.js';
|
|
6
6
|
import { ImageBlock, VideoBlock, DocumentBlock } from '../../../types/media.js';
|
|
7
7
|
import { createMockAgent, invokeTrackedHook } from '../../../__fixtures__/agent-helpers.js';
|
|
@@ -42,12 +42,14 @@ describe('ContextOffloader', () => {
|
|
|
42
42
|
const plugin = new ContextOffloader({ storage: new InMemoryStorage() });
|
|
43
43
|
expect(plugin.name).toBe('strands:context-offloader');
|
|
44
44
|
});
|
|
45
|
-
it('registers
|
|
45
|
+
it('registers hooks', () => {
|
|
46
46
|
const plugin = new ContextOffloader({ storage: new InMemoryStorage() });
|
|
47
47
|
const agent = createMockAgent();
|
|
48
48
|
plugin.initAgent(agent);
|
|
49
|
-
expect(agent.trackedHooks).toHaveLength(
|
|
50
|
-
|
|
49
|
+
expect(agent.trackedHooks).toHaveLength(2);
|
|
50
|
+
const eventTypes = agent.trackedHooks.map((h) => h.eventType);
|
|
51
|
+
expect(eventTypes).toContain(AfterToolCallEvent);
|
|
52
|
+
expect(eventTypes).toContain(BeforeModelCallEvent);
|
|
51
53
|
});
|
|
52
54
|
it('returns retrieval tool by default', () => {
|
|
53
55
|
const plugin = new ContextOffloader({ storage: new InMemoryStorage() });
|
|
@@ -496,5 +498,42 @@ describe('ContextOffloader', () => {
|
|
|
496
498
|
expect(result).not.toContain('line 2');
|
|
497
499
|
});
|
|
498
500
|
});
|
|
501
|
+
describe('eviction via BeforeModelCallEvent', () => {
|
|
502
|
+
it('calls _evict on storage with incrementing cycle count', () => {
|
|
503
|
+
const storage = new InMemoryStorage(5);
|
|
504
|
+
const plugin = new ContextOffloader({ storage, maxResultTokens: 10, previewTokens: 5 });
|
|
505
|
+
const agent = createMockAgent();
|
|
506
|
+
plugin.initAgent(agent);
|
|
507
|
+
const hook = agent.trackedHooks.find((h) => h.eventType === BeforeModelCallEvent);
|
|
508
|
+
const event = new BeforeModelCallEvent({ agent, model: mockModel, invocationState: {} });
|
|
509
|
+
hook.callback(event);
|
|
510
|
+
expect(storage._currentCycle).toBe(1);
|
|
511
|
+
hook.callback(event);
|
|
512
|
+
expect(storage._currentCycle).toBe(2);
|
|
513
|
+
});
|
|
514
|
+
it('evicts stale entries on BeforeModelCallEvent', async () => {
|
|
515
|
+
const storage = new InMemoryStorage(2);
|
|
516
|
+
const plugin = new ContextOffloader({ storage, maxResultTokens: 10, previewTokens: 5 });
|
|
517
|
+
const agent = createMockAgent();
|
|
518
|
+
plugin.initAgent(agent);
|
|
519
|
+
const ref = await storage.store('key1', new TextEncoder().encode('test'));
|
|
520
|
+
const hook = agent.trackedHooks.find((h) => h.eventType === BeforeModelCallEvent);
|
|
521
|
+
const event = new BeforeModelCallEvent({ agent, model: mockModel, invocationState: {} });
|
|
522
|
+
// Advance 3 cycles: threshold = 3 - 2 = 1, stored at 0, 0 < 1 → evicted
|
|
523
|
+
hook.callback(event);
|
|
524
|
+
hook.callback(event);
|
|
525
|
+
hook.callback(event);
|
|
526
|
+
await expect(storage.retrieve(ref)).rejects.toThrow('Reference not found');
|
|
527
|
+
});
|
|
528
|
+
it('does not crash when storage lacks _evict', () => {
|
|
529
|
+
const storage = { store: vi.fn(), retrieve: vi.fn() };
|
|
530
|
+
const plugin = new ContextOffloader({ storage, maxResultTokens: 10, previewTokens: 5 });
|
|
531
|
+
const agent = createMockAgent();
|
|
532
|
+
plugin.initAgent(agent);
|
|
533
|
+
const hook = agent.trackedHooks.find((h) => h.eventType === BeforeModelCallEvent);
|
|
534
|
+
const event = new BeforeModelCallEvent({ agent, model: mockModel, invocationState: {} });
|
|
535
|
+
expect(() => hook.callback(event)).not.toThrow();
|
|
536
|
+
});
|
|
537
|
+
});
|
|
499
538
|
});
|
|
500
539
|
//# sourceMappingURL=plugin.test.js.map
|