aws-runtime-bridge 1.9.32 → 1.9.40
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/adapter/AcodeSdkAdapter.d.ts +35 -1
- package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/AcodeSdkAdapter.js +417 -40
- package/dist/adapter/ClaudeSdkAdapter.d.ts +6 -0
- package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -1
- package/dist/adapter/ClaudeSdkAdapter.js +23 -1
- package/dist/adapter/idle-poll-loop.d.ts +2 -1
- package/dist/adapter/idle-poll-loop.d.ts.map +1 -1
- package/dist/adapter/types.d.ts +65 -3
- package/dist/adapter/types.d.ts.map +1 -1
- package/dist/adapter/types.js +5 -4
- package/dist/index.js +4 -0
- package/dist/routes/acode-todos.d.ts +11 -0
- package/dist/routes/acode-todos.d.ts.map +1 -0
- package/dist/routes/acode-todos.js +75 -0
- package/dist/routes/memory.d.ts +1 -1
- package/dist/routes/memory.d.ts.map +1 -1
- package/dist/routes/memory.js +3 -3
- package/dist/routes/pty.d.ts.map +1 -1
- package/dist/routes/pty.js +9 -0
- package/dist/routes/sub-agents.d.ts +14 -0
- package/dist/routes/sub-agents.d.ts.map +1 -0
- package/dist/routes/sub-agents.js +253 -0
- package/dist/routes/terminal.d.ts +9 -1
- package/dist/routes/terminal.d.ts.map +1 -1
- package/dist/routes/terminal.js +207 -22
- package/dist/services/agent-event-store.d.ts +1 -0
- package/dist/services/agent-event-store.d.ts.map +1 -1
- package/dist/services/event-delta-pusher.js +4 -4
- package/dist/services/session-output.d.ts +3 -0
- package/dist/services/session-output.d.ts.map +1 -1
- package/dist/services/session-output.js +38 -2
- package/dist/services/sub-agent-manager-instance.d.ts +4 -0
- package/dist/services/sub-agent-manager-instance.d.ts.map +1 -0
- package/dist/services/sub-agent-manager-instance.js +12 -0
- package/dist/services/workspace-files.d.ts +1 -0
- package/dist/services/workspace-files.d.ts.map +1 -1
- package/dist/services/workspace-files.js +57 -1
- package/package/acode/dist/ask-user-question-tool.d.ts +47 -0
- package/package/acode/dist/ask-user-question-tool.d.ts.map +1 -0
- package/package/acode/dist/ask-user-question-tool.js +233 -0
- package/package/acode/dist/built-in-file-tools.d.ts +2 -0
- package/package/acode/dist/built-in-file-tools.d.ts.map +1 -1
- package/package/acode/dist/compaction.d.ts +206 -0
- package/package/acode/dist/compaction.d.ts.map +1 -0
- package/package/acode/dist/compaction.js +664 -0
- package/package/acode/dist/config.d.ts +6 -1
- package/package/acode/dist/config.d.ts.map +1 -1
- package/package/acode/dist/config.js +27 -2
- package/package/acode/dist/index.d.ts +4 -0
- package/package/acode/dist/index.d.ts.map +1 -1
- package/package/acode/dist/index.js +4 -0
- package/package/acode/dist/runtime.d.ts +137 -0
- package/package/acode/dist/runtime.d.ts.map +1 -1
- package/package/acode/dist/runtime.js +974 -172
- package/package/acode/dist/skill-tool.d.ts +30 -0
- package/package/acode/dist/skill-tool.d.ts.map +1 -0
- package/package/acode/dist/skill-tool.js +174 -0
- package/package/acode/dist/sub-agent-manager.d.ts +169 -0
- package/package/acode/dist/sub-agent-manager.d.ts.map +1 -0
- package/package/acode/dist/sub-agent-manager.js +535 -0
- package/package/acode/dist/sub-agent-store.d.ts +33 -0
- package/package/acode/dist/sub-agent-store.d.ts.map +1 -0
- package/package/acode/dist/sub-agent-store.js +109 -0
- package/package/acode/dist/sub-agent-tools.d.ts +72 -0
- package/package/acode/dist/sub-agent-tools.d.ts.map +1 -0
- package/package/acode/dist/sub-agent-tools.js +429 -0
- package/package/acode/dist/sub-agent-types.d.ts +81 -0
- package/package/acode/dist/sub-agent-types.d.ts.map +1 -0
- package/package/acode/dist/sub-agent-types.js +8 -0
- package/package/acode/dist/todo-store.d.ts +42 -0
- package/package/acode/dist/todo-store.d.ts.map +1 -0
- package/package/acode/dist/todo-store.js +68 -0
- package/package/acode/dist/todo-tool.d.ts +6 -0
- package/package/acode/dist/todo-tool.d.ts.map +1 -0
- package/package/acode/dist/todo-tool.js +138 -0
- package/package/acode/dist/types.d.ts +22 -1
- package/package/acode/dist/types.d.ts.map +1 -1
- package/package/acode/package.json +13 -2
- package/package/aws-client-agent-mcp/dist/context-manager.test.js +0 -2
- package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +83 -45
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.js +451 -325
- package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js +259 -241
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +1 -19
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/mcp-tools.js +2 -69
- package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts +17 -19
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.js +62 -99
- package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-store.test.js +207 -125
- package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +3 -4
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/memory-tools.js +28 -33
- package/package/aws-client-agent-mcp/dist/memory-tools.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +27 -9
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/message-buffer.js +100 -23
- package/package/aws-client-agent-mcp/dist/message-buffer.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +1 -3
- package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/server-memory-store.js +7 -11
- package/package/aws-client-agent-mcp/dist/server-memory-store.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +1 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.js +8 -5
- package/package/aws-client-agent-mcp/dist/status-reporter.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/status-reporter.test.js +93 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +1 -1
- package/package/aws-client-agent-mcp/dist/types.d.ts +3 -25
- package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -1
- package/package.json +17 -7
- package/dist/adapter/AcodeSdkAdapter.test.d.ts +0 -2
- package/dist/adapter/AcodeSdkAdapter.test.d.ts.map +0 -1
- package/dist/adapter/AcodeSdkAdapter.test.js +0 -2000
- package/dist/adapter/AdapterRegistry.test.d.ts +0 -5
- package/dist/adapter/AdapterRegistry.test.d.ts.map +0 -1
- package/dist/adapter/AdapterRegistry.test.js +0 -118
- package/dist/adapter/ClaudeSdkAdapter.test.d.ts +0 -2
- package/dist/adapter/ClaudeSdkAdapter.test.d.ts.map +0 -1
- package/dist/adapter/ClaudeSdkAdapter.test.js +0 -311
- package/dist/adapter/CodexSdkAdapter.test.d.ts +0 -2
- package/dist/adapter/CodexSdkAdapter.test.d.ts.map +0 -1
- package/dist/adapter/CodexSdkAdapter.test.js +0 -270
- package/dist/adapter/OpencodeSdkAdapter.test.d.ts +0 -2
- package/dist/adapter/OpencodeSdkAdapter.test.d.ts.map +0 -1
- package/dist/adapter/OpencodeSdkAdapter.test.js +0 -158
- package/dist/adapter/acode-tool-names.test.d.ts +0 -2
- package/dist/adapter/acode-tool-names.test.d.ts.map +0 -1
- package/dist/adapter/acode-tool-names.test.js +0 -28
- package/dist/adapter/adapter.test.d.ts +0 -5
- package/dist/adapter/adapter.test.d.ts.map +0 -1
- package/dist/adapter/adapter.test.js +0 -180
- package/dist/adapter/idle-poll-loop.test.d.ts +0 -2
- package/dist/adapter/idle-poll-loop.test.d.ts.map +0 -1
- package/dist/adapter/idle-poll-loop.test.js +0 -85
- package/dist/adapter/types.test.d.ts +0 -2
- package/dist/adapter/types.test.d.ts.map +0 -1
- package/dist/adapter/types.test.js +0 -50
- package/dist/adapters/cc-switch/mcp-acode.test.d.ts +0 -2
- package/dist/adapters/cc-switch/mcp-acode.test.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-acode.test.js +0 -80
- package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts +0 -2
- package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-claudecode.test.js +0 -75
- package/dist/adapters/cc-switch/mcp-codex.test.d.ts +0 -2
- package/dist/adapters/cc-switch/mcp-codex.test.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-codex.test.js +0 -126
- package/dist/adapters/cc-switch/mcp-opencode.test.d.ts +0 -2
- package/dist/adapters/cc-switch/mcp-opencode.test.d.ts.map +0 -1
- package/dist/adapters/cc-switch/mcp-opencode.test.js +0 -62
- package/dist/adapters/cc-switch/skill-directory.test.d.ts +0 -2
- package/dist/adapters/cc-switch/skill-directory.test.d.ts.map +0 -1
- package/dist/adapters/cc-switch/skill-directory.test.js +0 -74
- package/dist/config.test.d.ts +0 -2
- package/dist/config.test.d.ts.map +0 -1
- package/dist/config.test.js +0 -107
- package/dist/routes/ai-sources.test.d.ts +0 -2
- package/dist/routes/ai-sources.test.d.ts.map +0 -1
- package/dist/routes/ai-sources.test.js +0 -169
- package/dist/routes/file-browser.test.d.ts +0 -5
- package/dist/routes/file-browser.test.d.ts.map +0 -1
- package/dist/routes/file-browser.test.js +0 -155
- package/dist/routes/git.test.d.ts +0 -2
- package/dist/routes/git.test.d.ts.map +0 -1
- package/dist/routes/git.test.js +0 -330
- package/dist/routes/instance.test.d.ts +0 -5
- package/dist/routes/instance.test.d.ts.map +0 -1
- package/dist/routes/instance.test.js +0 -389
- package/dist/routes/mcp.test.d.ts +0 -5
- package/dist/routes/mcp.test.d.ts.map +0 -1
- package/dist/routes/mcp.test.js +0 -92
- package/dist/routes/memory-route-wiring.test.d.ts +0 -2
- package/dist/routes/memory-route-wiring.test.d.ts.map +0 -1
- package/dist/routes/memory-route-wiring.test.js +0 -15
- package/dist/routes/memory.test.d.ts +0 -2
- package/dist/routes/memory.test.d.ts.map +0 -1
- package/dist/routes/memory.test.js +0 -177
- package/dist/routes/properties.test.d.ts +0 -5
- package/dist/routes/properties.test.d.ts.map +0 -1
- package/dist/routes/properties.test.js +0 -72
- package/dist/routes/pty.test.d.ts +0 -2
- package/dist/routes/pty.test.d.ts.map +0 -1
- package/dist/routes/pty.test.js +0 -82
- package/dist/routes/runtime-binding.test.d.ts +0 -2
- package/dist/routes/runtime-binding.test.d.ts.map +0 -1
- package/dist/routes/runtime-binding.test.js +0 -32
- package/dist/routes/sessions.test.d.ts +0 -5
- package/dist/routes/sessions.test.d.ts.map +0 -1
- package/dist/routes/sessions.test.js +0 -86
- package/dist/routes/skills.test.d.ts +0 -5
- package/dist/routes/skills.test.d.ts.map +0 -1
- package/dist/routes/skills.test.js +0 -50
- package/dist/routes/system-metrics.test.d.ts +0 -2
- package/dist/routes/system-metrics.test.d.ts.map +0 -1
- package/dist/routes/system-metrics.test.js +0 -16
- package/dist/routes/terminal.stop-options.test.d.ts +0 -2
- package/dist/routes/terminal.stop-options.test.d.ts.map +0 -1
- package/dist/routes/terminal.stop-options.test.js +0 -39
- package/dist/routes/terminal.test.d.ts +0 -2
- package/dist/routes/terminal.test.d.ts.map +0 -1
- package/dist/routes/terminal.test.js +0 -746
- package/dist/routes/yml.test.d.ts +0 -5
- package/dist/routes/yml.test.d.ts.map +0 -1
- package/dist/routes/yml.test.js +0 -58
- package/dist/services/ai-source-apply.test.d.ts +0 -2
- package/dist/services/ai-source-apply.test.d.ts.map +0 -1
- package/dist/services/ai-source-apply.test.js +0 -138
- package/dist/services/auto-register.test.d.ts +0 -2
- package/dist/services/auto-register.test.d.ts.map +0 -1
- package/dist/services/auto-register.test.js +0 -184
- package/dist/services/aws-client-agent-mcp.test.d.ts +0 -2
- package/dist/services/aws-client-agent-mcp.test.d.ts.map +0 -1
- package/dist/services/aws-client-agent-mcp.test.js +0 -242
- package/dist/services/bridge-package-publish-hooks.test.d.ts +0 -2
- package/dist/services/bridge-package-publish-hooks.test.d.ts.map +0 -1
- package/dist/services/bridge-package-publish-hooks.test.js +0 -136
- package/dist/services/cc-switch-discovery.test.d.ts +0 -2
- package/dist/services/cc-switch-discovery.test.d.ts.map +0 -1
- package/dist/services/cc-switch-discovery.test.js +0 -56
- package/dist/services/cli-commands.test.d.ts +0 -2
- package/dist/services/cli-commands.test.d.ts.map +0 -1
- package/dist/services/cli-commands.test.js +0 -230
- package/dist/services/instance-init-service.test.d.ts +0 -2
- package/dist/services/instance-init-service.test.d.ts.map +0 -1
- package/dist/services/instance-init-service.test.js +0 -140
- package/dist/services/instance-state.test.d.ts +0 -2
- package/dist/services/instance-state.test.d.ts.map +0 -1
- package/dist/services/instance-state.test.js +0 -245
- package/dist/services/mcp-launch-binding-queue.test.d.ts +0 -2
- package/dist/services/mcp-launch-binding-queue.test.d.ts.map +0 -1
- package/dist/services/mcp-launch-binding-queue.test.js +0 -181
- package/dist/services/runtime-binding.test.d.ts +0 -2
- package/dist/services/runtime-binding.test.d.ts.map +0 -1
- package/dist/services/runtime-binding.test.js +0 -78
- package/dist/services/runtime-lifecycle-policy.test.d.ts +0 -2
- package/dist/services/runtime-lifecycle-policy.test.d.ts.map +0 -1
- package/dist/services/runtime-lifecycle-policy.test.js +0 -41
- package/dist/services/session-output.test.d.ts +0 -5
- package/dist/services/session-output.test.d.ts.map +0 -1
- package/dist/services/session-output.test.js +0 -177
- package/dist/services/startup-config-wizard.test.d.ts +0 -2
- package/dist/services/startup-config-wizard.test.d.ts.map +0 -1
- package/dist/services/startup-config-wizard.test.js +0 -184
- package/dist/services/terminal-persistence.test.d.ts +0 -5
- package/dist/services/terminal-persistence.test.d.ts.map +0 -1
- package/dist/services/terminal-persistence.test.js +0 -159
- package/dist/services/tool-installer.test.d.ts +0 -2
- package/dist/services/tool-installer.test.d.ts.map +0 -1
- package/dist/services/tool-installer.test.js +0 -225
- package/dist/services/workspace-files.test.d.ts +0 -2
- package/dist/services/workspace-files.test.d.ts.map +0 -1
- package/dist/services/workspace-files.test.js +0 -648
- package/dist/services/workspace-watch.test.d.ts +0 -2
- package/dist/services/workspace-watch.test.d.ts.map +0 -1
- package/dist/services/workspace-watch.test.js +0 -38
- package/dist/utils/file-utils.test.d.ts +0 -2
- package/dist/utils/file-utils.test.d.ts.map +0 -1
- package/dist/utils/file-utils.test.js +0 -244
- package/dist/utils/logger.test.d.ts +0 -2
- package/dist/utils/logger.test.d.ts.map +0 -1
- package/dist/utils/logger.test.js +0 -93
- package/dist/utils/sdk-package-loader.test.d.ts +0 -2
- package/dist/utils/sdk-package-loader.test.d.ts.map +0 -1
- package/dist/utils/sdk-package-loader.test.js +0 -84
- package/dist/utils/validation.test.d.ts +0 -2
- package/dist/utils/validation.test.d.ts.map +0 -1
- package/dist/utils/validation.test.js +0 -88
- package/dist/utils/yaml-utils.test.d.ts +0 -2
- package/dist/utils/yaml-utils.test.d.ts.map +0 -1
- package/dist/utils/yaml-utils.test.js +0 -363
|
@@ -3,7 +3,7 @@ import { mkdtemp, readdir, readFile, rm } from 'node:fs/promises';
|
|
|
3
3
|
import os from 'node:os';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { describe, it } from 'node:test';
|
|
6
|
-
import {
|
|
6
|
+
import { MemoryStore, normalizeBoundFilePath } from './memory-store.js';
|
|
7
7
|
describe('MemoryStore', () => {
|
|
8
8
|
it('creates and reads memory by uri', async () => {
|
|
9
9
|
const dir = await mkdtemp(path.join(os.tmpdir(), 'aws-memory-store-'));
|
|
@@ -11,12 +11,12 @@ describe('MemoryStore', () => {
|
|
|
11
11
|
const store = new MemoryStore(storePath);
|
|
12
12
|
try {
|
|
13
13
|
const created = await store.createMemory({
|
|
14
|
-
memory_type: '
|
|
14
|
+
memory_type: 'project_memory',
|
|
15
15
|
uri: 'core://agent/profile',
|
|
16
16
|
content: 'I am a backend expert.'
|
|
17
17
|
});
|
|
18
18
|
assert.equal(created.uri, 'core://agent/profile');
|
|
19
|
-
const loaded = await store.readMemory({ uri: 'core://agent/profile', memory_type: '
|
|
19
|
+
const loaded = await store.readMemory({ uri: 'core://agent/profile', memory_type: 'project_memory' });
|
|
20
20
|
assert.ok(loaded);
|
|
21
21
|
assert.equal(loaded?.content, 'I am a backend expert.');
|
|
22
22
|
}
|
|
@@ -30,19 +30,19 @@ describe('MemoryStore', () => {
|
|
|
30
30
|
const store = new MemoryStore(storePath);
|
|
31
31
|
try {
|
|
32
32
|
await store.createMemory({
|
|
33
|
-
memory_type: '
|
|
33
|
+
memory_type: 'project_memory',
|
|
34
34
|
uri: 'notes://project/todo',
|
|
35
35
|
content: 'finish api docs'
|
|
36
36
|
});
|
|
37
37
|
const replaced = await store.updateMemory({
|
|
38
|
-
memory_type: '
|
|
38
|
+
memory_type: 'project_memory',
|
|
39
39
|
uri: 'notes://project/todo',
|
|
40
40
|
old_string: 'api docs',
|
|
41
41
|
new_string: 'API docs v2'
|
|
42
42
|
});
|
|
43
43
|
assert.equal(replaced.content, 'finish API docs v2');
|
|
44
44
|
const appended = await store.updateMemory({
|
|
45
|
-
memory_type: '
|
|
45
|
+
memory_type: 'project_memory',
|
|
46
46
|
uri: 'notes://project/todo',
|
|
47
47
|
append: '\n- add memory tests'
|
|
48
48
|
});
|
|
@@ -58,16 +58,16 @@ describe('MemoryStore', () => {
|
|
|
58
58
|
const store = new MemoryStore(storePath);
|
|
59
59
|
try {
|
|
60
60
|
await store.createMemory({
|
|
61
|
-
memory_type: '
|
|
61
|
+
memory_type: 'project_memory',
|
|
62
62
|
uri: 'core://agent/skills',
|
|
63
63
|
content: 'java spring boot mysql'
|
|
64
64
|
});
|
|
65
65
|
await store.createMemory({
|
|
66
|
-
memory_type: '
|
|
66
|
+
memory_type: 'project_memory',
|
|
67
67
|
uri: 'notes://project/readme',
|
|
68
68
|
content: 'project setup and architecture'
|
|
69
69
|
});
|
|
70
|
-
const result = await store.searchMemory({ query: 'project', limit: 1, memory_type: '
|
|
70
|
+
const result = await store.searchMemory({ query: 'project', limit: 1, memory_type: 'project_memory' });
|
|
71
71
|
assert.equal(result.results.length, 1);
|
|
72
72
|
assert.equal(result.results[0]?.uri, 'notes://project/readme');
|
|
73
73
|
}
|
|
@@ -81,13 +81,13 @@ describe('MemoryStore', () => {
|
|
|
81
81
|
const store = new MemoryStore(storePath);
|
|
82
82
|
try {
|
|
83
83
|
await store.createMemory({
|
|
84
|
-
memory_type: '
|
|
84
|
+
memory_type: 'project_memory',
|
|
85
85
|
uri: 'core://agent/temp',
|
|
86
86
|
content: 'temporary memory'
|
|
87
87
|
});
|
|
88
|
-
const deleted = await store.deleteMemory({ uri: 'core://agent/temp', memory_type: '
|
|
88
|
+
const deleted = await store.deleteMemory({ uri: 'core://agent/temp', memory_type: 'project_memory' });
|
|
89
89
|
assert.equal(deleted, true);
|
|
90
|
-
const loaded = await store.readMemory({ uri: 'core://agent/temp', memory_type: '
|
|
90
|
+
const loaded = await store.readMemory({ uri: 'core://agent/temp', memory_type: 'project_memory' });
|
|
91
91
|
assert.equal(loaded, null);
|
|
92
92
|
}
|
|
93
93
|
finally {
|
|
@@ -99,17 +99,17 @@ describe('MemoryStore', () => {
|
|
|
99
99
|
const storePath = path.join(dir, 'memory');
|
|
100
100
|
const store = new MemoryStore(storePath);
|
|
101
101
|
try {
|
|
102
|
-
const types = ['
|
|
102
|
+
const types = ['recently_memory', 'agent_memory', 'project_memory'];
|
|
103
103
|
await store.createMemory({ memory_type: types[0], uri: 'task://todo/1', content: 'fix tests' });
|
|
104
104
|
await store.createMemory({ memory_type: types[1], uri: 'recent://ctx/1', content: 'just discussed API design' });
|
|
105
105
|
await store.createMemory({ memory_type: types[2], uri: 'core://archive/1', content: 'long-term architecture decision' });
|
|
106
|
-
const taskList = await store.listByType('
|
|
106
|
+
const taskList = await store.listByType('recently_memory');
|
|
107
107
|
assert.equal(taskList.length, 1);
|
|
108
|
-
assert.equal(taskList[0]?.memory_type, '
|
|
109
|
-
const recentList = await store.listByType('
|
|
108
|
+
assert.equal(taskList[0]?.memory_type, 'recently_memory');
|
|
109
|
+
const recentList = await store.listByType('agent_memory');
|
|
110
110
|
assert.equal(recentList.length, 1);
|
|
111
|
-
assert.equal(recentList[0]?.memory_type, '
|
|
112
|
-
await assert.rejects(() => store.listByType('
|
|
111
|
+
assert.equal(recentList[0]?.memory_type, 'agent_memory');
|
|
112
|
+
await assert.rejects(() => store.listByType('project_memory'), /Invalid memory_type/);
|
|
113
113
|
}
|
|
114
114
|
finally {
|
|
115
115
|
await rm(dir, { recursive: true, force: true });
|
|
@@ -120,8 +120,8 @@ describe('MemoryStore', () => {
|
|
|
120
120
|
const storePath = path.join(dir, 'memory');
|
|
121
121
|
const store = new MemoryStore(storePath);
|
|
122
122
|
try {
|
|
123
|
-
await store.createMemory({ memory_type: '
|
|
124
|
-
const deleted = await store.deleteMemory({ uri: 'task://todo/remove-1', memory_type: '
|
|
123
|
+
await store.createMemory({ memory_type: 'recently_memory', uri: 'task://todo/remove-1', content: 'to be removed' });
|
|
124
|
+
const deleted = await store.deleteMemory({ uri: 'task://todo/remove-1', memory_type: 'recently_memory' });
|
|
125
125
|
assert.equal(deleted, true);
|
|
126
126
|
assert.equal(await store.readMemory({ uri: 'task://todo/remove-1' }), null);
|
|
127
127
|
}
|
|
@@ -129,47 +129,29 @@ describe('MemoryStore', () => {
|
|
|
129
129
|
await rm(dir, { recursive: true, force: true });
|
|
130
130
|
}
|
|
131
131
|
});
|
|
132
|
-
it('archives recently_memory into memory', async () => {
|
|
133
|
-
const dir = await mkdtemp(path.join(os.tmpdir(), 'aws-memory-store-'));
|
|
134
|
-
const storePath = path.join(dir, 'memory');
|
|
135
|
-
const store = new MemoryStore(storePath);
|
|
136
|
-
try {
|
|
137
|
-
await store.createMemory({ memory_type: 'recently_memory', uri: 'recent://note/1', content: 'hot memory' });
|
|
138
|
-
const archived = await store.archiveRecentlyMemory('recent://note/1');
|
|
139
|
-
assert.equal(archived.memory_type, 'memory');
|
|
140
|
-
const loaded = await store.readMemory({ uri: 'recent://note/1', memory_type: 'memory' });
|
|
141
|
-
assert.ok(loaded);
|
|
142
|
-
assert.equal(loaded?.memory_type, 'memory');
|
|
143
|
-
await store.createMemory({ memory_type: 'memory', uri: 'core://cold/2', content: 'cold memory' });
|
|
144
|
-
await assert.rejects(() => store.archiveRecentlyMemory('core://cold/2'), /recently_memory_archive/);
|
|
145
|
-
}
|
|
146
|
-
finally {
|
|
147
|
-
await rm(dir, { recursive: true, force: true });
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
132
|
it('reports memory stats with top-level counts and per-domain occupancy', async () => {
|
|
151
133
|
const dir = await mkdtemp(path.join(os.tmpdir(), 'aws-memory-store-'));
|
|
152
134
|
const storePath = path.join(dir, 'memory');
|
|
153
135
|
const store = new MemoryStore(storePath);
|
|
154
136
|
try {
|
|
155
|
-
await store.createMemory({ memory_type: '
|
|
156
|
-
await store.createMemory({ memory_type: '
|
|
157
|
-
await store.createMemory({ memory_type: '
|
|
158
|
-
await store.createMemory({ memory_type: '
|
|
159
|
-
await store.createMemory({ memory_type: '
|
|
137
|
+
await store.createMemory({ memory_type: 'recently_memory', uri: 'task://todo/stats', content: 'task' });
|
|
138
|
+
await store.createMemory({ memory_type: 'recently_memory', uri: 'task://todo/other', content: 'another task' });
|
|
139
|
+
await store.createMemory({ memory_type: 'agent_memory', uri: 'recent://ctx/stats', content: 'recent' });
|
|
140
|
+
await store.createMemory({ memory_type: 'agent_memory', uri: 'note://ctx/stats', content: 'recent note' });
|
|
141
|
+
await store.createMemory({ memory_type: 'project_memory', uri: 'core://stats/long-term', content: 'long term' });
|
|
160
142
|
const stats = await store.getStats();
|
|
161
143
|
assert.equal(stats.total, 5);
|
|
162
144
|
assert.deepEqual(stats.listable, { count: 4, limit: 64, hardLimit: 128, exceeded: false, hardExceeded: false });
|
|
163
|
-
assert.equal(stats.by_type.task_list.count, 2);
|
|
164
|
-
assert.equal(stats.by_type.task_list.domainCount, 1);
|
|
165
|
-
assert.equal(stats.by_type.task_list.by_domain.task?.count, 2);
|
|
166
145
|
assert.equal(stats.by_type.recently_memory.count, 2);
|
|
167
|
-
assert.equal(stats.by_type.recently_memory.domainCount,
|
|
168
|
-
assert.equal(stats.by_type.recently_memory.by_domain.
|
|
169
|
-
assert.equal(stats.by_type.
|
|
170
|
-
assert.equal(stats.by_type.
|
|
171
|
-
assert.equal(stats.by_type.
|
|
172
|
-
assert.equal(stats.by_type.
|
|
146
|
+
assert.equal(stats.by_type.recently_memory.domainCount, 1);
|
|
147
|
+
assert.equal(stats.by_type.recently_memory.by_domain.task?.count, 2);
|
|
148
|
+
assert.equal(stats.by_type.agent_memory.count, 2);
|
|
149
|
+
assert.equal(stats.by_type.agent_memory.domainCount, 2);
|
|
150
|
+
assert.equal(stats.by_type.agent_memory.by_domain.recent?.count, 1);
|
|
151
|
+
assert.equal(stats.by_type.agent_memory.by_domain.note?.count, 1);
|
|
152
|
+
assert.equal(stats.by_type.project_memory.count, 1);
|
|
153
|
+
assert.equal(stats.by_type.project_memory.domainCount, 1);
|
|
154
|
+
assert.equal(stats.by_type.project_memory.by_domain.core?.count, 1);
|
|
173
155
|
}
|
|
174
156
|
finally {
|
|
175
157
|
await rm(dir, { recursive: true, force: true });
|
|
@@ -180,7 +162,7 @@ describe('MemoryStore', () => {
|
|
|
180
162
|
const storePath = path.join(dir, 'memory');
|
|
181
163
|
const store = new MemoryStore(storePath);
|
|
182
164
|
try {
|
|
183
|
-
await store.createMemory({ memory_type: '
|
|
165
|
+
await store.createMemory({ memory_type: 'project_memory', uri: 'core://atomic/write', content: 'persisted' });
|
|
184
166
|
const files = await readdir(storePath);
|
|
185
167
|
assert.deepEqual(files, ['core.json']);
|
|
186
168
|
}
|
|
@@ -193,14 +175,14 @@ describe('MemoryStore', () => {
|
|
|
193
175
|
const storePath = path.join(dir, 'memory');
|
|
194
176
|
const store = new MemoryStore(storePath);
|
|
195
177
|
try {
|
|
196
|
-
await store.createMemory({ memory_type: '
|
|
197
|
-
await store.createMemory({ memory_type: '
|
|
178
|
+
await store.createMemory({ memory_type: 'project_memory', uri: 'core://agent/profile', content: 'profile' });
|
|
179
|
+
await store.createMemory({ memory_type: 'project_memory', uri: 'notes://project/readme', content: 'readme' });
|
|
198
180
|
assert.deepEqual((await readdir(storePath)).sort(), ['core.json', 'notes.json']);
|
|
199
181
|
const coreRaw = JSON.parse(await readFile(path.join(storePath, 'core.json'), 'utf-8'));
|
|
200
182
|
const notesRaw = JSON.parse(await readFile(path.join(storePath, 'notes.json'), 'utf-8'));
|
|
201
183
|
assert.equal(coreRaw.by_uri['core://agent/profile']?.content, 'profile');
|
|
202
184
|
assert.equal(notesRaw.by_uri['notes://project/readme']?.content, 'readme');
|
|
203
|
-
const searched = await store.searchMemory({ query: 'readme', memory_type: '
|
|
185
|
+
const searched = await store.searchMemory({ query: 'readme', memory_type: 'project_memory' });
|
|
204
186
|
assert.equal(searched.results[0]?.uri, 'notes://project/readme');
|
|
205
187
|
}
|
|
206
188
|
finally {
|
|
@@ -212,54 +194,11 @@ describe('MemoryStore', () => {
|
|
|
212
194
|
const storePath = path.join(dir, 'memory');
|
|
213
195
|
const store = new MemoryStore(storePath);
|
|
214
196
|
try {
|
|
215
|
-
await store.createMemory({ memory_type: '
|
|
216
|
-
await store.createMemory({ memory_type: '
|
|
217
|
-
assert.equal(await store.deleteMemory({ uri: 'notes://project/readme', memory_type: '
|
|
197
|
+
await store.createMemory({ memory_type: 'project_memory', uri: 'core://agent/profile', content: 'profile' });
|
|
198
|
+
await store.createMemory({ memory_type: 'project_memory', uri: 'notes://project/readme', content: 'readme' });
|
|
199
|
+
assert.equal(await store.deleteMemory({ uri: 'notes://project/readme', memory_type: 'project_memory' }), true);
|
|
218
200
|
assert.deepEqual(await readdir(storePath), ['core.json']);
|
|
219
|
-
assert.equal(await store.readMemory({ uri: 'notes://project/readme', memory_type: '
|
|
220
|
-
}
|
|
221
|
-
finally {
|
|
222
|
-
await rm(dir, { recursive: true, force: true });
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
it('allows listable memory beyond soft limits and rejects at the doubled hard type limit', async () => {
|
|
226
|
-
const dir = await mkdtemp(path.join(os.tmpdir(), 'aws-memory-store-'));
|
|
227
|
-
const storePath = path.join(dir, 'memory');
|
|
228
|
-
const store = new MemoryStore(storePath);
|
|
229
|
-
try {
|
|
230
|
-
for (let index = 0; index < 64; index += 1) {
|
|
231
|
-
await store.createMemory({
|
|
232
|
-
memory_type: 'recently_memory',
|
|
233
|
-
uri: `recent://ctx/${index}`,
|
|
234
|
-
content: `recent context ${index}`
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
await assert.rejects(async () => {
|
|
238
|
-
await store.createMemory({
|
|
239
|
-
memory_type: 'recently_memory',
|
|
240
|
-
uri: 'recent://ctx/overflow',
|
|
241
|
-
content: 'overflow context'
|
|
242
|
-
});
|
|
243
|
-
}, (error) => {
|
|
244
|
-
assert.ok(error instanceof MemoryCapacityError);
|
|
245
|
-
assert.equal(error.details.code, 'MEMORY_TYPE_LIMIT_REACHED');
|
|
246
|
-
assert.equal(error.details.memory_type, 'recently_memory');
|
|
247
|
-
assert.equal(error.details.domain, 'recent');
|
|
248
|
-
assert.equal(error.details.limit, 64);
|
|
249
|
-
assert.equal(error.details.current, 64);
|
|
250
|
-
assert.ok(error.details.recommended_actions.includes('archive_recently_memory({ uri })'));
|
|
251
|
-
assert.match(error.message, /hard memory limit 64 reached under domain recent/s);
|
|
252
|
-
return true;
|
|
253
|
-
});
|
|
254
|
-
await store.archiveRecentlyMemory('recent://ctx/0');
|
|
255
|
-
const createdAfterArchive = await store.createMemory({
|
|
256
|
-
memory_type: 'recently_memory',
|
|
257
|
-
uri: 'recent://ctx/after-archive',
|
|
258
|
-
content: 'capacity restored by archive'
|
|
259
|
-
});
|
|
260
|
-
assert.equal(createdAfterArchive.memory_type, 'recently_memory');
|
|
261
|
-
const recentList = await store.listByType('recently_memory');
|
|
262
|
-
assert.equal(recentList.length, 64);
|
|
201
|
+
assert.equal(await store.readMemory({ uri: 'notes://project/readme', memory_type: 'project_memory' }), null);
|
|
263
202
|
}
|
|
264
203
|
finally {
|
|
265
204
|
await rm(dir, { recursive: true, force: true });
|
|
@@ -272,38 +211,38 @@ describe('MemoryStore', () => {
|
|
|
272
211
|
try {
|
|
273
212
|
for (let index = 0; index < 32; index += 1) {
|
|
274
213
|
await store.createMemory({
|
|
275
|
-
memory_type: '
|
|
214
|
+
memory_type: 'recently_memory',
|
|
276
215
|
uri: `task://todo/${index}`,
|
|
277
216
|
content: `task ${index}`
|
|
278
217
|
});
|
|
279
218
|
await store.createMemory({
|
|
280
|
-
memory_type: '
|
|
219
|
+
memory_type: 'agent_memory',
|
|
281
220
|
uri: `recent://ctx/${index}`,
|
|
282
221
|
content: `recent context ${index}`
|
|
283
222
|
});
|
|
284
223
|
}
|
|
285
224
|
const longTermMemory = await store.createMemory({
|
|
286
|
-
memory_type: '
|
|
225
|
+
memory_type: 'project_memory',
|
|
287
226
|
uri: 'core://long-term/not-listable',
|
|
288
227
|
content: 'long-term memories are not constrained by listable limits'
|
|
289
228
|
});
|
|
290
|
-
assert.equal(longTermMemory.memory_type, '
|
|
229
|
+
assert.equal(longTermMemory.memory_type, 'project_memory');
|
|
291
230
|
const stats = await store.getStats();
|
|
292
231
|
assert.equal(stats.listable.count, 64);
|
|
293
232
|
assert.equal(stats.listable.exceeded, false);
|
|
294
233
|
assert.equal(stats.listable.hardExceeded, false);
|
|
295
|
-
assert.equal(stats.by_type.task_list.exceeded, false);
|
|
296
234
|
assert.equal(stats.by_type.recently_memory.exceeded, false);
|
|
235
|
+
assert.equal(stats.by_type.agent_memory.exceeded, false);
|
|
297
236
|
const allowedBeyondSoftLimit = await store.createMemory({
|
|
298
|
-
memory_type: '
|
|
237
|
+
memory_type: 'recently_memory',
|
|
299
238
|
uri: 'task://todo/beyond-soft-limit',
|
|
300
239
|
content: 'allowed beyond soft limit until hard limit'
|
|
301
240
|
});
|
|
302
|
-
assert.equal(allowedBeyondSoftLimit.memory_type, '
|
|
241
|
+
assert.equal(allowedBeyondSoftLimit.memory_type, 'recently_memory');
|
|
303
242
|
const exceededStats = await store.getStats();
|
|
304
243
|
assert.equal(exceededStats.listable.exceeded, true);
|
|
305
|
-
assert.equal(exceededStats.by_type.
|
|
306
|
-
assert.equal(exceededStats.by_type.
|
|
244
|
+
assert.equal(exceededStats.by_type.recently_memory.exceeded, false);
|
|
245
|
+
assert.equal(exceededStats.by_type.recently_memory.by_domain.task?.exceeded, true);
|
|
307
246
|
}
|
|
308
247
|
finally {
|
|
309
248
|
await rm(dir, { recursive: true, force: true });
|
|
@@ -316,26 +255,26 @@ describe('MemoryStore', () => {
|
|
|
316
255
|
try {
|
|
317
256
|
for (let index = 0; index < 64; index += 1) {
|
|
318
257
|
await store.createMemory({
|
|
319
|
-
memory_type: '
|
|
258
|
+
memory_type: 'recently_memory',
|
|
320
259
|
uri: `task${index}://todo/current`,
|
|
321
260
|
content: `task ${index}`
|
|
322
261
|
});
|
|
323
262
|
await store.createMemory({
|
|
324
|
-
memory_type: '
|
|
263
|
+
memory_type: 'agent_memory',
|
|
325
264
|
uri: `recent${index}://ctx/current`,
|
|
326
265
|
content: `recent ${index}`
|
|
327
266
|
});
|
|
328
267
|
}
|
|
329
268
|
const created = await store.createMemory({
|
|
330
|
-
memory_type: '
|
|
269
|
+
memory_type: 'recently_memory',
|
|
331
270
|
uri: 'task0://todo/extra',
|
|
332
271
|
content: 'same domain remains below item hard limit'
|
|
333
272
|
});
|
|
334
|
-
assert.equal(created.memory_type, '
|
|
273
|
+
assert.equal(created.memory_type, 'recently_memory');
|
|
335
274
|
const stats = await store.getStats();
|
|
336
275
|
assert.equal(stats.listable.hardExceeded, true);
|
|
337
|
-
assert.equal(stats.by_type.
|
|
338
|
-
assert.equal(stats.by_type.
|
|
276
|
+
assert.equal(stats.by_type.recently_memory.hardExceeded, true);
|
|
277
|
+
assert.equal(stats.by_type.recently_memory.by_domain.task0?.count, 2);
|
|
339
278
|
}
|
|
340
279
|
finally {
|
|
341
280
|
await rm(dir, { recursive: true, force: true });
|
|
@@ -358,7 +297,7 @@ describe('MemoryStore', () => {
|
|
|
358
297
|
const store = new MemoryStore(storePath);
|
|
359
298
|
try {
|
|
360
299
|
const created = await store.createMemory({
|
|
361
|
-
memory_type: '
|
|
300
|
+
memory_type: 'agent_memory',
|
|
362
301
|
uri: 'recent://expire/test1',
|
|
363
302
|
content: 'test expiration'
|
|
364
303
|
});
|
|
@@ -366,11 +305,11 @@ describe('MemoryStore', () => {
|
|
|
366
305
|
const expiresDate = new Date(created.expiresAt);
|
|
367
306
|
const now = new Date();
|
|
368
307
|
const diffHours = (expiresDate.getTime() - now.getTime()) / (60 * 60 * 1000);
|
|
369
|
-
// Should be approximately
|
|
370
|
-
assert.ok(diffHours >
|
|
308
|
+
// Should be approximately 12 hours from now (initial TTL)
|
|
309
|
+
assert.ok(diffHours > 11 && diffHours < 13, `expiresAt should be ~12h from now, got ${diffHours}h`);
|
|
371
310
|
// memory type should NOT have expiresAt
|
|
372
311
|
const memoryCreated = await store.createMemory({
|
|
373
|
-
memory_type: '
|
|
312
|
+
memory_type: 'project_memory',
|
|
374
313
|
uri: 'core://perm/test1',
|
|
375
314
|
content: 'permanent'
|
|
376
315
|
});
|
|
@@ -386,7 +325,7 @@ describe('MemoryStore', () => {
|
|
|
386
325
|
const store = new MemoryStore(storePath);
|
|
387
326
|
try {
|
|
388
327
|
const created = await store.createMemory({
|
|
389
|
-
memory_type: '
|
|
328
|
+
memory_type: 'agent_memory',
|
|
390
329
|
uri: 'recent://expire/test2',
|
|
391
330
|
content: 'original content'
|
|
392
331
|
});
|
|
@@ -412,14 +351,14 @@ describe('MemoryStore', () => {
|
|
|
412
351
|
try {
|
|
413
352
|
// Already expired (pass expiresAt in the past)
|
|
414
353
|
await store.createMemory({
|
|
415
|
-
memory_type: '
|
|
354
|
+
memory_type: 'agent_memory',
|
|
416
355
|
uri: 'recent://expire/past1',
|
|
417
356
|
content: 'already expired',
|
|
418
357
|
expiresAt: new Date(Date.now() - 60_000).toISOString(), // 1 minute ago
|
|
419
358
|
});
|
|
420
359
|
// Future expiration
|
|
421
360
|
await store.createMemory({
|
|
422
|
-
memory_type: '
|
|
361
|
+
memory_type: 'agent_memory',
|
|
423
362
|
uri: 'recent://expire/future1',
|
|
424
363
|
content: 'not expired yet',
|
|
425
364
|
});
|
|
@@ -432,4 +371,147 @@ describe('MemoryStore', () => {
|
|
|
432
371
|
}
|
|
433
372
|
});
|
|
434
373
|
});
|
|
374
|
+
// ========== listByFile 与 normalizeBoundFilePath 测试 ==========
|
|
375
|
+
describe('normalizeBoundFilePath', () => {
|
|
376
|
+
it('normalizes @/ prefix to ./', () => {
|
|
377
|
+
assert.equal(normalizeBoundFilePath('@/src/main.ts'), './src/main.ts');
|
|
378
|
+
});
|
|
379
|
+
it('normalizes / prefix to ./', () => {
|
|
380
|
+
assert.equal(normalizeBoundFilePath('/src/main.ts'), './src/main.ts');
|
|
381
|
+
});
|
|
382
|
+
it('normalizes bare path to ./', () => {
|
|
383
|
+
assert.equal(normalizeBoundFilePath('src/main.ts'), './src/main.ts');
|
|
384
|
+
});
|
|
385
|
+
it('keeps ./ prefix as-is', () => {
|
|
386
|
+
assert.equal(normalizeBoundFilePath('./src/main.ts'), './src/main.ts');
|
|
387
|
+
});
|
|
388
|
+
it('trims whitespace', () => {
|
|
389
|
+
assert.equal(normalizeBoundFilePath(' ./src/main.ts '), './src/main.ts');
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
describe('MemoryStore listByFile', () => {
|
|
393
|
+
it('finds memories by exact bound_files match', async () => {
|
|
394
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), 'aws-memory-listbyfile-'));
|
|
395
|
+
const storePath = path.join(dir, 'memory');
|
|
396
|
+
const store = new MemoryStore(storePath);
|
|
397
|
+
try {
|
|
398
|
+
await store.createMemory({
|
|
399
|
+
memory_type: 'project_memory',
|
|
400
|
+
uri: 'core://file/notes',
|
|
401
|
+
content: 'Notes about main.ts',
|
|
402
|
+
bound_files: ['./src/main.ts'],
|
|
403
|
+
});
|
|
404
|
+
await store.createMemory({
|
|
405
|
+
memory_type: 'project_memory',
|
|
406
|
+
uri: 'core://other/entry',
|
|
407
|
+
content: 'Unrelated memory',
|
|
408
|
+
bound_files: ['./src/utils.ts'],
|
|
409
|
+
});
|
|
410
|
+
const results = await store.listByFile('./src/main.ts');
|
|
411
|
+
assert.equal(results.length, 1);
|
|
412
|
+
assert.equal(results[0]?.uri, 'core://file/notes');
|
|
413
|
+
}
|
|
414
|
+
finally {
|
|
415
|
+
await rm(dir, { recursive: true, force: true });
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
it('normalizes file path before matching', async () => {
|
|
419
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), 'aws-memory-listbyfile-'));
|
|
420
|
+
const storePath = path.join(dir, 'memory');
|
|
421
|
+
const store = new MemoryStore(storePath);
|
|
422
|
+
try {
|
|
423
|
+
await store.createMemory({
|
|
424
|
+
memory_type: 'project_memory',
|
|
425
|
+
uri: 'core://file/notes',
|
|
426
|
+
content: 'Notes',
|
|
427
|
+
bound_files: ['./src/main.ts'],
|
|
428
|
+
});
|
|
429
|
+
// Search with @/ prefix should normalize to ./src/main.ts
|
|
430
|
+
const results = await store.listByFile('@/src/main.ts');
|
|
431
|
+
assert.equal(results.length, 1);
|
|
432
|
+
assert.equal(results[0]?.uri, 'core://file/notes');
|
|
433
|
+
// Search with bare path should also match
|
|
434
|
+
const results2 = await store.listByFile('src/main.ts');
|
|
435
|
+
assert.equal(results2.length, 1);
|
|
436
|
+
// Search with / prefix should also match
|
|
437
|
+
const results3 = await store.listByFile('/src/main.ts');
|
|
438
|
+
assert.equal(results3.length, 1);
|
|
439
|
+
}
|
|
440
|
+
finally {
|
|
441
|
+
await rm(dir, { recursive: true, force: true });
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
it('returns empty when no bound_files match', async () => {
|
|
445
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), 'aws-memory-listbyfile-'));
|
|
446
|
+
const storePath = path.join(dir, 'memory');
|
|
447
|
+
const store = new MemoryStore(storePath);
|
|
448
|
+
try {
|
|
449
|
+
await store.createMemory({
|
|
450
|
+
memory_type: 'project_memory',
|
|
451
|
+
uri: 'core://other/entry',
|
|
452
|
+
content: 'No files bound',
|
|
453
|
+
});
|
|
454
|
+
const results = await store.listByFile('./src/main.ts');
|
|
455
|
+
assert.equal(results.length, 0);
|
|
456
|
+
}
|
|
457
|
+
finally {
|
|
458
|
+
await rm(dir, { recursive: true, force: true });
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
it('matches memories with multiple bound_files', async () => {
|
|
462
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), 'aws-memory-listbyfile-'));
|
|
463
|
+
const storePath = path.join(dir, 'memory');
|
|
464
|
+
const store = new MemoryStore(storePath);
|
|
465
|
+
try {
|
|
466
|
+
await store.createMemory({
|
|
467
|
+
memory_type: 'project_memory',
|
|
468
|
+
uri: 'core://multi/file',
|
|
469
|
+
content: 'Multi-file memory',
|
|
470
|
+
bound_files: ['./src/main.ts', './src/utils.ts'],
|
|
471
|
+
});
|
|
472
|
+
const results1 = await store.listByFile('./src/main.ts');
|
|
473
|
+
assert.equal(results1.length, 1);
|
|
474
|
+
const results2 = await store.listByFile('./src/utils.ts');
|
|
475
|
+
assert.equal(results2.length, 1);
|
|
476
|
+
const results3 = await store.listByFile('./src/other.ts');
|
|
477
|
+
assert.equal(results3.length, 0);
|
|
478
|
+
}
|
|
479
|
+
finally {
|
|
480
|
+
await rm(dir, { recursive: true, force: true });
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
it('filters by memory_type when provided', async () => {
|
|
484
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), 'aws-memory-listbyfile-'));
|
|
485
|
+
const storePath = path.join(dir, 'memory');
|
|
486
|
+
const store = new MemoryStore(storePath);
|
|
487
|
+
try {
|
|
488
|
+
await store.createMemory({
|
|
489
|
+
memory_type: 'project_memory',
|
|
490
|
+
uri: 'core://permanent/notes',
|
|
491
|
+
content: 'Permanent notes',
|
|
492
|
+
bound_files: ['./src/main.ts'],
|
|
493
|
+
});
|
|
494
|
+
await store.createMemory({
|
|
495
|
+
memory_type: 'agent_memory',
|
|
496
|
+
uri: 'recent://temp/notes',
|
|
497
|
+
content: 'Temporary notes',
|
|
498
|
+
bound_files: ['./src/main.ts'],
|
|
499
|
+
});
|
|
500
|
+
// Both types match without filter
|
|
501
|
+
const allResults = await store.listByFile('./src/main.ts');
|
|
502
|
+
assert.equal(allResults.length, 2);
|
|
503
|
+
// Filter by memory type
|
|
504
|
+
const memResults = await store.listByFile('./src/main.ts', 'project_memory');
|
|
505
|
+
assert.equal(memResults.length, 1);
|
|
506
|
+
assert.equal(memResults[0]?.memory_type, 'project_memory');
|
|
507
|
+
// Filter with options object
|
|
508
|
+
const recentResults = await store.listByFile('./src/main.ts', { memory_type: 'agent_memory' });
|
|
509
|
+
assert.equal(recentResults.length, 1);
|
|
510
|
+
assert.equal(recentResults[0]?.memory_type, 'agent_memory');
|
|
511
|
+
}
|
|
512
|
+
finally {
|
|
513
|
+
await rm(dir, { recursive: true, force: true });
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
});
|
|
435
517
|
//# sourceMappingURL=memory-store.test.js.map
|