Skip to content

Commit faa3d6f

Browse files
committed
chore: update namespace design for data plane
1 parent 613c995 commit faa3d6f

9 files changed

Lines changed: 458 additions & 47 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,27 +60,27 @@ 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
const res = await listMemoryRecords({
6767
region: memory.region,
6868
memoryId: memory.memoryId,
69-
namespace,
70-
memoryStrategyId: strategyId,
69+
memoryStrategyId: args.strategyId,
70+
...(args.namespace ? { namespace: args.namespace } : { namespacePath: args.namespacePath! }),
7171
});
7272
return res.success ? res : { success: false as const, error: res.error.message };
7373
};
7474

75-
result.onRetrieveMemoryRecords = async (memoryName, namespace, searchQuery, strategyId) => {
76-
const memory = memories.find(m => m.name === memoryName);
77-
if (!memory) return { success: false, error: `Memory "${memoryName}" not found in deployed state` };
75+
result.onRetrieveMemoryRecords = async args => {
76+
const memory = memories.find(m => m.name === args.memoryName);
77+
if (!memory) return { success: false, error: `Memory "${args.memoryName}" not found in deployed state` };
7878
const res = await retrieveMemoryRecords({
7979
region: memory.region,
8080
memoryId: memory.memoryId,
81-
namespace,
82-
searchQuery,
83-
memoryStrategyId: strategyId,
81+
searchQuery: args.searchQuery,
82+
memoryStrategyId: args.strategyId,
83+
...(args.namespace ? { namespace: args.namespace } : { namespacePath: args.namespacePath! }),
8484
});
8585
return res.success ? res : { success: false as const, error: res.error.message };
8686
};
@@ -239,15 +239,15 @@ export async function runBrowserMode(opts: BrowserModeOptions): Promise<void> {
239239
};
240240
}
241241
},
242-
onListMemoryRecords: async (memoryName, namespace, strategyId) => {
242+
onListMemoryRecords: async args => {
243243
const deployed = await resolveDeployedHandlers(baseDir, onLog);
244244
if (!deployed.onListMemoryRecords) return { success: false, error: 'No deployed AgentCore Memory found' };
245-
return deployed.onListMemoryRecords(memoryName, namespace, strategyId);
245+
return deployed.onListMemoryRecords(args);
246246
},
247-
onRetrieveMemoryRecords: async (memoryName, namespace, searchQuery, strategyId) => {
247+
onRetrieveMemoryRecords: async args => {
248248
const deployed = await resolveDeployedHandlers(baseDir, onLog);
249249
if (!deployed.onRetrieveMemoryRecords) return { success: false, error: 'No deployed AgentCore Memory found' };
250-
return deployed.onRetrieveMemoryRecords(memoryName, namespace, searchQuery, strategyId);
250+
return deployed.onRetrieveMemoryRecords(args);
251251
},
252252
},
253253
});

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)