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.
Files changed (276) hide show
  1. package/dist/adapter/AcodeSdkAdapter.d.ts +35 -1
  2. package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
  3. package/dist/adapter/AcodeSdkAdapter.js +417 -40
  4. package/dist/adapter/ClaudeSdkAdapter.d.ts +6 -0
  5. package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -1
  6. package/dist/adapter/ClaudeSdkAdapter.js +23 -1
  7. package/dist/adapter/idle-poll-loop.d.ts +2 -1
  8. package/dist/adapter/idle-poll-loop.d.ts.map +1 -1
  9. package/dist/adapter/types.d.ts +65 -3
  10. package/dist/adapter/types.d.ts.map +1 -1
  11. package/dist/adapter/types.js +5 -4
  12. package/dist/index.js +4 -0
  13. package/dist/routes/acode-todos.d.ts +11 -0
  14. package/dist/routes/acode-todos.d.ts.map +1 -0
  15. package/dist/routes/acode-todos.js +75 -0
  16. package/dist/routes/memory.d.ts +1 -1
  17. package/dist/routes/memory.d.ts.map +1 -1
  18. package/dist/routes/memory.js +3 -3
  19. package/dist/routes/pty.d.ts.map +1 -1
  20. package/dist/routes/pty.js +9 -0
  21. package/dist/routes/sub-agents.d.ts +14 -0
  22. package/dist/routes/sub-agents.d.ts.map +1 -0
  23. package/dist/routes/sub-agents.js +253 -0
  24. package/dist/routes/terminal.d.ts +9 -1
  25. package/dist/routes/terminal.d.ts.map +1 -1
  26. package/dist/routes/terminal.js +207 -22
  27. package/dist/services/agent-event-store.d.ts +1 -0
  28. package/dist/services/agent-event-store.d.ts.map +1 -1
  29. package/dist/services/event-delta-pusher.js +4 -4
  30. package/dist/services/session-output.d.ts +3 -0
  31. package/dist/services/session-output.d.ts.map +1 -1
  32. package/dist/services/session-output.js +38 -2
  33. package/dist/services/sub-agent-manager-instance.d.ts +4 -0
  34. package/dist/services/sub-agent-manager-instance.d.ts.map +1 -0
  35. package/dist/services/sub-agent-manager-instance.js +12 -0
  36. package/dist/services/workspace-files.d.ts +1 -0
  37. package/dist/services/workspace-files.d.ts.map +1 -1
  38. package/dist/services/workspace-files.js +57 -1
  39. package/package/acode/dist/ask-user-question-tool.d.ts +47 -0
  40. package/package/acode/dist/ask-user-question-tool.d.ts.map +1 -0
  41. package/package/acode/dist/ask-user-question-tool.js +233 -0
  42. package/package/acode/dist/built-in-file-tools.d.ts +2 -0
  43. package/package/acode/dist/built-in-file-tools.d.ts.map +1 -1
  44. package/package/acode/dist/compaction.d.ts +206 -0
  45. package/package/acode/dist/compaction.d.ts.map +1 -0
  46. package/package/acode/dist/compaction.js +664 -0
  47. package/package/acode/dist/config.d.ts +6 -1
  48. package/package/acode/dist/config.d.ts.map +1 -1
  49. package/package/acode/dist/config.js +27 -2
  50. package/package/acode/dist/index.d.ts +4 -0
  51. package/package/acode/dist/index.d.ts.map +1 -1
  52. package/package/acode/dist/index.js +4 -0
  53. package/package/acode/dist/runtime.d.ts +137 -0
  54. package/package/acode/dist/runtime.d.ts.map +1 -1
  55. package/package/acode/dist/runtime.js +974 -172
  56. package/package/acode/dist/skill-tool.d.ts +30 -0
  57. package/package/acode/dist/skill-tool.d.ts.map +1 -0
  58. package/package/acode/dist/skill-tool.js +174 -0
  59. package/package/acode/dist/sub-agent-manager.d.ts +169 -0
  60. package/package/acode/dist/sub-agent-manager.d.ts.map +1 -0
  61. package/package/acode/dist/sub-agent-manager.js +535 -0
  62. package/package/acode/dist/sub-agent-store.d.ts +33 -0
  63. package/package/acode/dist/sub-agent-store.d.ts.map +1 -0
  64. package/package/acode/dist/sub-agent-store.js +109 -0
  65. package/package/acode/dist/sub-agent-tools.d.ts +72 -0
  66. package/package/acode/dist/sub-agent-tools.d.ts.map +1 -0
  67. package/package/acode/dist/sub-agent-tools.js +429 -0
  68. package/package/acode/dist/sub-agent-types.d.ts +81 -0
  69. package/package/acode/dist/sub-agent-types.d.ts.map +1 -0
  70. package/package/acode/dist/sub-agent-types.js +8 -0
  71. package/package/acode/dist/todo-store.d.ts +42 -0
  72. package/package/acode/dist/todo-store.d.ts.map +1 -0
  73. package/package/acode/dist/todo-store.js +68 -0
  74. package/package/acode/dist/todo-tool.d.ts +6 -0
  75. package/package/acode/dist/todo-tool.d.ts.map +1 -0
  76. package/package/acode/dist/todo-tool.js +138 -0
  77. package/package/acode/dist/types.d.ts +22 -1
  78. package/package/acode/dist/types.d.ts.map +1 -1
  79. package/package/acode/package.json +13 -2
  80. package/package/aws-client-agent-mcp/dist/context-manager.test.js +0 -2
  81. package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +1 -1
  82. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +83 -45
  83. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
  84. package/package/aws-client-agent-mcp/dist/mcp-server.js +451 -325
  85. package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
  86. package/package/aws-client-agent-mcp/dist/mcp-server.test.js +259 -241
  87. package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -1
  88. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +1 -19
  89. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -1
  90. package/package/aws-client-agent-mcp/dist/mcp-tools.js +2 -69
  91. package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -1
  92. package/package/aws-client-agent-mcp/dist/memory-store.d.ts +17 -19
  93. package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -1
  94. package/package/aws-client-agent-mcp/dist/memory-store.js +62 -99
  95. package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -1
  96. package/package/aws-client-agent-mcp/dist/memory-store.test.js +207 -125
  97. package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +1 -1
  98. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +3 -4
  99. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +1 -1
  100. package/package/aws-client-agent-mcp/dist/memory-tools.js +28 -33
  101. package/package/aws-client-agent-mcp/dist/memory-tools.js.map +1 -1
  102. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +27 -9
  103. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +1 -1
  104. package/package/aws-client-agent-mcp/dist/message-buffer.js +100 -23
  105. package/package/aws-client-agent-mcp/dist/message-buffer.js.map +1 -1
  106. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +1 -3
  107. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts.map +1 -1
  108. package/package/aws-client-agent-mcp/dist/server-memory-store.js +7 -11
  109. package/package/aws-client-agent-mcp/dist/server-memory-store.js.map +1 -1
  110. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +1 -1
  111. package/package/aws-client-agent-mcp/dist/status-reporter.js +8 -5
  112. package/package/aws-client-agent-mcp/dist/status-reporter.js.map +1 -1
  113. package/package/aws-client-agent-mcp/dist/status-reporter.test.js +93 -0
  114. package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +1 -1
  115. package/package/aws-client-agent-mcp/dist/types.d.ts +3 -25
  116. package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -1
  117. package/package.json +17 -7
  118. package/dist/adapter/AcodeSdkAdapter.test.d.ts +0 -2
  119. package/dist/adapter/AcodeSdkAdapter.test.d.ts.map +0 -1
  120. package/dist/adapter/AcodeSdkAdapter.test.js +0 -2000
  121. package/dist/adapter/AdapterRegistry.test.d.ts +0 -5
  122. package/dist/adapter/AdapterRegistry.test.d.ts.map +0 -1
  123. package/dist/adapter/AdapterRegistry.test.js +0 -118
  124. package/dist/adapter/ClaudeSdkAdapter.test.d.ts +0 -2
  125. package/dist/adapter/ClaudeSdkAdapter.test.d.ts.map +0 -1
  126. package/dist/adapter/ClaudeSdkAdapter.test.js +0 -311
  127. package/dist/adapter/CodexSdkAdapter.test.d.ts +0 -2
  128. package/dist/adapter/CodexSdkAdapter.test.d.ts.map +0 -1
  129. package/dist/adapter/CodexSdkAdapter.test.js +0 -270
  130. package/dist/adapter/OpencodeSdkAdapter.test.d.ts +0 -2
  131. package/dist/adapter/OpencodeSdkAdapter.test.d.ts.map +0 -1
  132. package/dist/adapter/OpencodeSdkAdapter.test.js +0 -158
  133. package/dist/adapter/acode-tool-names.test.d.ts +0 -2
  134. package/dist/adapter/acode-tool-names.test.d.ts.map +0 -1
  135. package/dist/adapter/acode-tool-names.test.js +0 -28
  136. package/dist/adapter/adapter.test.d.ts +0 -5
  137. package/dist/adapter/adapter.test.d.ts.map +0 -1
  138. package/dist/adapter/adapter.test.js +0 -180
  139. package/dist/adapter/idle-poll-loop.test.d.ts +0 -2
  140. package/dist/adapter/idle-poll-loop.test.d.ts.map +0 -1
  141. package/dist/adapter/idle-poll-loop.test.js +0 -85
  142. package/dist/adapter/types.test.d.ts +0 -2
  143. package/dist/adapter/types.test.d.ts.map +0 -1
  144. package/dist/adapter/types.test.js +0 -50
  145. package/dist/adapters/cc-switch/mcp-acode.test.d.ts +0 -2
  146. package/dist/adapters/cc-switch/mcp-acode.test.d.ts.map +0 -1
  147. package/dist/adapters/cc-switch/mcp-acode.test.js +0 -80
  148. package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts +0 -2
  149. package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts.map +0 -1
  150. package/dist/adapters/cc-switch/mcp-claudecode.test.js +0 -75
  151. package/dist/adapters/cc-switch/mcp-codex.test.d.ts +0 -2
  152. package/dist/adapters/cc-switch/mcp-codex.test.d.ts.map +0 -1
  153. package/dist/adapters/cc-switch/mcp-codex.test.js +0 -126
  154. package/dist/adapters/cc-switch/mcp-opencode.test.d.ts +0 -2
  155. package/dist/adapters/cc-switch/mcp-opencode.test.d.ts.map +0 -1
  156. package/dist/adapters/cc-switch/mcp-opencode.test.js +0 -62
  157. package/dist/adapters/cc-switch/skill-directory.test.d.ts +0 -2
  158. package/dist/adapters/cc-switch/skill-directory.test.d.ts.map +0 -1
  159. package/dist/adapters/cc-switch/skill-directory.test.js +0 -74
  160. package/dist/config.test.d.ts +0 -2
  161. package/dist/config.test.d.ts.map +0 -1
  162. package/dist/config.test.js +0 -107
  163. package/dist/routes/ai-sources.test.d.ts +0 -2
  164. package/dist/routes/ai-sources.test.d.ts.map +0 -1
  165. package/dist/routes/ai-sources.test.js +0 -169
  166. package/dist/routes/file-browser.test.d.ts +0 -5
  167. package/dist/routes/file-browser.test.d.ts.map +0 -1
  168. package/dist/routes/file-browser.test.js +0 -155
  169. package/dist/routes/git.test.d.ts +0 -2
  170. package/dist/routes/git.test.d.ts.map +0 -1
  171. package/dist/routes/git.test.js +0 -330
  172. package/dist/routes/instance.test.d.ts +0 -5
  173. package/dist/routes/instance.test.d.ts.map +0 -1
  174. package/dist/routes/instance.test.js +0 -389
  175. package/dist/routes/mcp.test.d.ts +0 -5
  176. package/dist/routes/mcp.test.d.ts.map +0 -1
  177. package/dist/routes/mcp.test.js +0 -92
  178. package/dist/routes/memory-route-wiring.test.d.ts +0 -2
  179. package/dist/routes/memory-route-wiring.test.d.ts.map +0 -1
  180. package/dist/routes/memory-route-wiring.test.js +0 -15
  181. package/dist/routes/memory.test.d.ts +0 -2
  182. package/dist/routes/memory.test.d.ts.map +0 -1
  183. package/dist/routes/memory.test.js +0 -177
  184. package/dist/routes/properties.test.d.ts +0 -5
  185. package/dist/routes/properties.test.d.ts.map +0 -1
  186. package/dist/routes/properties.test.js +0 -72
  187. package/dist/routes/pty.test.d.ts +0 -2
  188. package/dist/routes/pty.test.d.ts.map +0 -1
  189. package/dist/routes/pty.test.js +0 -82
  190. package/dist/routes/runtime-binding.test.d.ts +0 -2
  191. package/dist/routes/runtime-binding.test.d.ts.map +0 -1
  192. package/dist/routes/runtime-binding.test.js +0 -32
  193. package/dist/routes/sessions.test.d.ts +0 -5
  194. package/dist/routes/sessions.test.d.ts.map +0 -1
  195. package/dist/routes/sessions.test.js +0 -86
  196. package/dist/routes/skills.test.d.ts +0 -5
  197. package/dist/routes/skills.test.d.ts.map +0 -1
  198. package/dist/routes/skills.test.js +0 -50
  199. package/dist/routes/system-metrics.test.d.ts +0 -2
  200. package/dist/routes/system-metrics.test.d.ts.map +0 -1
  201. package/dist/routes/system-metrics.test.js +0 -16
  202. package/dist/routes/terminal.stop-options.test.d.ts +0 -2
  203. package/dist/routes/terminal.stop-options.test.d.ts.map +0 -1
  204. package/dist/routes/terminal.stop-options.test.js +0 -39
  205. package/dist/routes/terminal.test.d.ts +0 -2
  206. package/dist/routes/terminal.test.d.ts.map +0 -1
  207. package/dist/routes/terminal.test.js +0 -746
  208. package/dist/routes/yml.test.d.ts +0 -5
  209. package/dist/routes/yml.test.d.ts.map +0 -1
  210. package/dist/routes/yml.test.js +0 -58
  211. package/dist/services/ai-source-apply.test.d.ts +0 -2
  212. package/dist/services/ai-source-apply.test.d.ts.map +0 -1
  213. package/dist/services/ai-source-apply.test.js +0 -138
  214. package/dist/services/auto-register.test.d.ts +0 -2
  215. package/dist/services/auto-register.test.d.ts.map +0 -1
  216. package/dist/services/auto-register.test.js +0 -184
  217. package/dist/services/aws-client-agent-mcp.test.d.ts +0 -2
  218. package/dist/services/aws-client-agent-mcp.test.d.ts.map +0 -1
  219. package/dist/services/aws-client-agent-mcp.test.js +0 -242
  220. package/dist/services/bridge-package-publish-hooks.test.d.ts +0 -2
  221. package/dist/services/bridge-package-publish-hooks.test.d.ts.map +0 -1
  222. package/dist/services/bridge-package-publish-hooks.test.js +0 -136
  223. package/dist/services/cc-switch-discovery.test.d.ts +0 -2
  224. package/dist/services/cc-switch-discovery.test.d.ts.map +0 -1
  225. package/dist/services/cc-switch-discovery.test.js +0 -56
  226. package/dist/services/cli-commands.test.d.ts +0 -2
  227. package/dist/services/cli-commands.test.d.ts.map +0 -1
  228. package/dist/services/cli-commands.test.js +0 -230
  229. package/dist/services/instance-init-service.test.d.ts +0 -2
  230. package/dist/services/instance-init-service.test.d.ts.map +0 -1
  231. package/dist/services/instance-init-service.test.js +0 -140
  232. package/dist/services/instance-state.test.d.ts +0 -2
  233. package/dist/services/instance-state.test.d.ts.map +0 -1
  234. package/dist/services/instance-state.test.js +0 -245
  235. package/dist/services/mcp-launch-binding-queue.test.d.ts +0 -2
  236. package/dist/services/mcp-launch-binding-queue.test.d.ts.map +0 -1
  237. package/dist/services/mcp-launch-binding-queue.test.js +0 -181
  238. package/dist/services/runtime-binding.test.d.ts +0 -2
  239. package/dist/services/runtime-binding.test.d.ts.map +0 -1
  240. package/dist/services/runtime-binding.test.js +0 -78
  241. package/dist/services/runtime-lifecycle-policy.test.d.ts +0 -2
  242. package/dist/services/runtime-lifecycle-policy.test.d.ts.map +0 -1
  243. package/dist/services/runtime-lifecycle-policy.test.js +0 -41
  244. package/dist/services/session-output.test.d.ts +0 -5
  245. package/dist/services/session-output.test.d.ts.map +0 -1
  246. package/dist/services/session-output.test.js +0 -177
  247. package/dist/services/startup-config-wizard.test.d.ts +0 -2
  248. package/dist/services/startup-config-wizard.test.d.ts.map +0 -1
  249. package/dist/services/startup-config-wizard.test.js +0 -184
  250. package/dist/services/terminal-persistence.test.d.ts +0 -5
  251. package/dist/services/terminal-persistence.test.d.ts.map +0 -1
  252. package/dist/services/terminal-persistence.test.js +0 -159
  253. package/dist/services/tool-installer.test.d.ts +0 -2
  254. package/dist/services/tool-installer.test.d.ts.map +0 -1
  255. package/dist/services/tool-installer.test.js +0 -225
  256. package/dist/services/workspace-files.test.d.ts +0 -2
  257. package/dist/services/workspace-files.test.d.ts.map +0 -1
  258. package/dist/services/workspace-files.test.js +0 -648
  259. package/dist/services/workspace-watch.test.d.ts +0 -2
  260. package/dist/services/workspace-watch.test.d.ts.map +0 -1
  261. package/dist/services/workspace-watch.test.js +0 -38
  262. package/dist/utils/file-utils.test.d.ts +0 -2
  263. package/dist/utils/file-utils.test.d.ts.map +0 -1
  264. package/dist/utils/file-utils.test.js +0 -244
  265. package/dist/utils/logger.test.d.ts +0 -2
  266. package/dist/utils/logger.test.d.ts.map +0 -1
  267. package/dist/utils/logger.test.js +0 -93
  268. package/dist/utils/sdk-package-loader.test.d.ts +0 -2
  269. package/dist/utils/sdk-package-loader.test.d.ts.map +0 -1
  270. package/dist/utils/sdk-package-loader.test.js +0 -84
  271. package/dist/utils/validation.test.d.ts +0 -2
  272. package/dist/utils/validation.test.d.ts.map +0 -1
  273. package/dist/utils/validation.test.js +0 -88
  274. package/dist/utils/yaml-utils.test.d.ts +0 -2
  275. package/dist/utils/yaml-utils.test.d.ts.map +0 -1
  276. 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 { MemoryCapacityError, MemoryStore } from './memory-store.js';
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: 'memory',
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: 'memory' });
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: 'memory',
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: 'memory',
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: 'memory',
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: 'memory',
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: 'memory',
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: 'memory' });
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: 'memory',
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: 'memory' });
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: 'memory' });
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 = ['task_list', 'recently_memory', 'memory'];
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('task_list');
106
+ const taskList = await store.listByType('recently_memory');
107
107
  assert.equal(taskList.length, 1);
108
- assert.equal(taskList[0]?.memory_type, 'task_list');
109
- const recentList = await store.listByType('recently_memory');
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, 'recently_memory');
112
- await assert.rejects(() => store.listByType('memory'), /Invalid memory_type/);
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: 'task_list', uri: 'task://todo/remove-1', content: 'to be removed' });
124
- const deleted = await store.deleteMemory({ uri: 'task://todo/remove-1', memory_type: 'task_list' });
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: 'task_list', uri: 'task://todo/stats', content: 'task' });
156
- await store.createMemory({ memory_type: 'task_list', uri: 'task://todo/other', content: 'another task' });
157
- await store.createMemory({ memory_type: 'recently_memory', uri: 'recent://ctx/stats', content: 'recent' });
158
- await store.createMemory({ memory_type: 'recently_memory', uri: 'note://ctx/stats', content: 'recent note' });
159
- await store.createMemory({ memory_type: 'memory', uri: 'core://stats/long-term', content: 'long term' });
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, 2);
168
- assert.equal(stats.by_type.recently_memory.by_domain.recent?.count, 1);
169
- assert.equal(stats.by_type.recently_memory.by_domain.note?.count, 1);
170
- assert.equal(stats.by_type.memory.count, 1);
171
- assert.equal(stats.by_type.memory.domainCount, 1);
172
- assert.equal(stats.by_type.memory.by_domain.core?.count, 1);
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: 'memory', uri: 'core://atomic/write', content: 'persisted' });
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: 'memory', uri: 'core://agent/profile', content: 'profile' });
197
- await store.createMemory({ memory_type: 'memory', uri: 'notes://project/readme', content: 'readme' });
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: 'memory' });
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: 'memory', uri: 'core://agent/profile', content: 'profile' });
216
- await store.createMemory({ memory_type: 'memory', uri: 'notes://project/readme', content: 'readme' });
217
- assert.equal(await store.deleteMemory({ uri: 'notes://project/readme', memory_type: 'memory' }), true);
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: 'memory' }), null);
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: 'task_list',
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: 'recently_memory',
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: 'memory',
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, 'memory');
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: 'task_list',
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, 'task_list');
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.task_list.exceeded, false);
306
- assert.equal(exceededStats.by_type.task_list.by_domain.task?.exceeded, true);
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: 'task_list',
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: 'recently_memory',
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: 'task_list',
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, 'task_list');
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.task_list.hardExceeded, true);
338
- assert.equal(stats.by_type.task_list.by_domain.task0?.count, 2);
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: 'recently_memory',
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 24 hours from now
370
- assert.ok(diffHours > 23 && diffHours < 25, `expiresAt should be ~24h from now, got ${diffHours}h`);
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: 'memory',
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: 'recently_memory',
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: 'recently_memory',
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: 'recently_memory',
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