Skip to content

Commit 52cfdee

Browse files
committed
chore: update namespace design for data plane
1 parent 7586092 commit 52cfdee

9 files changed

Lines changed: 455 additions & 45 deletions

File tree

src/cli/commands/dev/browser-mode.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -60,26 +60,26 @@ async function resolveDeployedHandlers(
6060
`Memory browsing enabled for ${memories.length} deployed memory(ies): ${memories.map(m => m.name).join(', ')}`
6161
);
6262

63-
result.onListMemoryRecords = async (memoryName, namespace, strategyId) => {
64-
const memory = memories.find(m => m.name === memoryName);
65-
if (!memory) return { success: false, error: `Memory "${memoryName}" not found in deployed state` };
63+
result.onListMemoryRecords = async args => {
64+
const memory = memories.find(m => m.name === args.memoryName);
65+
if (!memory) return { success: false, error: `Memory "${args.memoryName}" not found in deployed state` };
6666
return listMemoryRecords({
6767
region: memory.region,
6868
memoryId: memory.memoryId,
69-
namespace,
70-
memoryStrategyId: strategyId,
69+
memoryStrategyId: args.strategyId,
70+
...(args.namespace !== undefined ? { namespace: args.namespace } : { namespacePath: args.namespacePath }),
7171
});
7272
};
7373

74-
result.onRetrieveMemoryRecords = async (memoryName, namespace, searchQuery, strategyId) => {
75-
const memory = memories.find(m => m.name === memoryName);
76-
if (!memory) return { success: false, error: `Memory "${memoryName}" not found in deployed state` };
74+
result.onRetrieveMemoryRecords = async args => {
75+
const memory = memories.find(m => m.name === args.memoryName);
76+
if (!memory) return { success: false, error: `Memory "${args.memoryName}" not found in deployed state` };
7777
return retrieveMemoryRecords({
7878
region: memory.region,
7979
memoryId: memory.memoryId,
80-
namespace,
81-
searchQuery,
82-
memoryStrategyId: strategyId,
80+
searchQuery: args.searchQuery,
81+
memoryStrategyId: args.strategyId,
82+
...(args.namespace !== undefined ? { namespace: args.namespace } : { namespacePath: args.namespacePath }),
8383
});
8484
};
8585
}
@@ -235,15 +235,15 @@ export async function runBrowserMode(opts: BrowserModeOptions): Promise<void> {
235235
};
236236
}
237237
},
238-
onListMemoryRecords: async (memoryName, namespace, strategyId) => {
238+
onListMemoryRecords: async args => {
239239
const deployed = await resolveDeployedHandlers(baseDir, onLog);
240240
if (!deployed.onListMemoryRecords) return { success: false, error: 'No deployed AgentCore Memory found' };
241-
return deployed.onListMemoryRecords(memoryName, namespace, strategyId);
241+
return deployed.onListMemoryRecords(args);
242242
},
243-
onRetrieveMemoryRecords: async (memoryName, namespace, searchQuery, strategyId) => {
243+
onRetrieveMemoryRecords: async args => {
244244
const deployed = await resolveDeployedHandlers(baseDir, onLog);
245245
if (!deployed.onRetrieveMemoryRecords) return { success: false, error: 'No deployed AgentCore Memory found' };
246-
return deployed.onRetrieveMemoryRecords(memoryName, namespace, searchQuery, strategyId);
246+
return deployed.onRetrieveMemoryRecords(args);
247247
},
248248
},
249249
});

src/cli/operations/agent/import/__tests__/translator.test.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,29 @@ describe('StrandsTranslator', () => {
8181
expect(result.features.hasMemory).toBe(true);
8282
});
8383

84+
it('emits namespace_path (not namespace) in retrieve_memories calls for longAndShortTerm memory', () => {
85+
const config = makeSimpleAgentConfig({
86+
agent: {
87+
...makeSimpleAgentConfig().agent,
88+
memoryConfiguration: { enabledMemoryTypes: ['SESSION_SUMMARY'] },
89+
},
90+
});
91+
const translator = new StrandsTranslator(config, {
92+
agentConfig: config,
93+
enableMemory: true,
94+
memoryOption: 'longAndShortTerm',
95+
enableObservability: false,
96+
});
97+
const result = translator.translate();
98+
99+
// All three retrieval calls should use the new namespace_path kwarg
100+
expect(result.mainPyContent).toContain("namespace_path=f'/users/{user_id}/facts'");
101+
expect(result.mainPyContent).toContain("namespace_path=f'/users/{user_id}/preferences'");
102+
expect(result.mainPyContent).toContain("namespace_path=f'/summaries/{user_id}/'");
103+
// The deprecated kwarg form must not appear for longAndShortTerm retrievals
104+
expect(result.mainPyContent).not.toMatch(/retrieve_memories\([^)]*\bnamespace=/);
105+
});
106+
84107
it('generates action group tools for function-schema action groups', () => {
85108
const config = makeSimpleAgentConfig({
86109
action_groups: [
@@ -221,6 +244,29 @@ describe('LangGraphTranslator', () => {
221244
expect(result.mainPyContent).toContain('gr-123');
222245
expect(result.features.hasGuardrails).toBe(true);
223246
});
247+
248+
it('emits namespace_path (not namespace) in retrieve_memories calls for longAndShortTerm memory', () => {
249+
const config = makeSimpleAgentConfig({
250+
agent: {
251+
...makeSimpleAgentConfig().agent,
252+
memoryConfiguration: { enabledMemoryTypes: ['SESSION_SUMMARY'] },
253+
},
254+
});
255+
const translator = new LangGraphTranslator(config, {
256+
agentConfig: config,
257+
enableMemory: true,
258+
memoryOption: 'longAndShortTerm',
259+
enableObservability: false,
260+
});
261+
const result = translator.translate();
262+
263+
// All three retrieval calls should use the new namespace_path kwarg
264+
expect(result.mainPyContent).toContain("namespace_path=f'/users/{user_id}/facts'");
265+
expect(result.mainPyContent).toContain("namespace_path=f'/users/{user_id}/preferences'");
266+
expect(result.mainPyContent).toContain("namespace_path=f'/summaries/{user_id}/'");
267+
// The deprecated kwarg form must not appear for longAndShortTerm retrievals
268+
expect(result.mainPyContent).not.toMatch(/retrieve_memories\([^)]*\bnamespace=/);
269+
});
224270
});
225271

226272
describe('generatePyprojectToml', () => {

src/cli/operations/agent/import/langgraph-translator.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,9 +209,9 @@ def invoke_${collabName}(query: str, state: Annotated[dict, InjectedState]) -> s
209209
const memoryRetrieveCode =
210210
this.agentcoreMemoryEnabled && this.hasLongTermStrategies
211211
? `
212-
semantic_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f'/users/{user_id}/facts', query="Retrieve relevant facts.", actor_id=user_id, top_k=3)
213-
pref_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f'/users/{user_id}/preferences', query="Retrieve user preferences.", actor_id=user_id, top_k=3)
214-
summary_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f'/summaries/{user_id}/', query="Retrieve the most recent session summaries.", actor_id=user_id, top_k=3)
212+
semantic_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace_path=f'/users/{user_id}/facts', query="Retrieve relevant facts.", actor_id=user_id, top_k=3)
213+
pref_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace_path=f'/users/{user_id}/preferences', query="Retrieve user preferences.", actor_id=user_id, top_k=3)
214+
summary_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace_path=f'/summaries/{user_id}/', query="Retrieve the most recent session summaries.", actor_id=user_id, top_k=3)
215215
all_memories = semantic_memories + pref_memories + summary_memories
216216
memory_synopsis = "\\n".join([m.get("content", {}).get("text", "") for m in all_memories])`
217217
: this.memoryEnabled

src/cli/operations/agent/import/strands-translator.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,9 @@ def invoke_${collabName}(query: str) -> str:
185185
const memoryRetrieveLines =
186186
this.agentcoreMemoryEnabled && this.hasLongTermStrategies
187187
? [
188-
' semantic_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f\'/users/{user_id}/facts\', query="Retrieve relevant facts.", actor_id=user_id, top_k=3)',
189-
' pref_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f\'/users/{user_id}/preferences\', query="Retrieve user preferences.", actor_id=user_id, top_k=3)',
190-
' summary_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f\'/summaries/{user_id}/\', query="Retrieve the most recent session summaries.", actor_id=user_id, top_k=3)',
188+
' semantic_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace_path=f\'/users/{user_id}/facts\', query="Retrieve relevant facts.", actor_id=user_id, top_k=3)',
189+
' pref_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace_path=f\'/users/{user_id}/preferences\', query="Retrieve user preferences.", actor_id=user_id, top_k=3)',
190+
' summary_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace_path=f\'/summaries/{user_id}/\', query="Retrieve the most recent session summaries.", actor_id=user_id, top_k=3)',
191191
' all_memories = semantic_memories + pref_memories + summary_memories',
192192
' memory_synopsis = "\\n".join([m.get("content", {}).get("text", "") for m in all_memories])',
193193
]

0 commit comments

Comments
 (0)