aws-runtime-bridge 1.9.33 → 1.9.41

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 (324) hide show
  1. package/dist/adapter/AcodeSdkAdapter.d.ts +66 -5
  2. package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
  3. package/dist/adapter/AcodeSdkAdapter.js +771 -69
  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 +24 -1
  7. package/dist/adapter/OpencodeSdkAdapter.d.ts +19 -0
  8. package/dist/adapter/OpencodeSdkAdapter.d.ts.map +1 -1
  9. package/dist/adapter/OpencodeSdkAdapter.js +62 -0
  10. package/dist/adapter/idle-poll-loop.d.ts +2 -1
  11. package/dist/adapter/idle-poll-loop.d.ts.map +1 -1
  12. package/dist/adapter/types.d.ts +86 -9
  13. package/dist/adapter/types.d.ts.map +1 -1
  14. package/dist/adapter/types.js +15 -5
  15. package/dist/index.js +15 -0
  16. package/dist/routes/acode-todos.d.ts +11 -0
  17. package/dist/routes/acode-todos.d.ts.map +1 -0
  18. package/dist/routes/acode-todos.js +75 -0
  19. package/dist/routes/ai-sources.js +4 -1
  20. package/dist/routes/dashboard.d.ts.map +1 -1
  21. package/dist/routes/dashboard.js +1 -1
  22. package/dist/routes/memory.d.ts +1 -1
  23. package/dist/routes/memory.d.ts.map +1 -1
  24. package/dist/routes/memory.js +3 -3
  25. package/dist/routes/pty.d.ts.map +1 -1
  26. package/dist/routes/pty.js +9 -0
  27. package/dist/routes/runtime-binding.d.ts.map +1 -1
  28. package/dist/routes/runtime-binding.js +6 -3
  29. package/dist/routes/sessions.js +89 -4
  30. package/dist/routes/sub-agents.d.ts +14 -0
  31. package/dist/routes/sub-agents.d.ts.map +1 -0
  32. package/dist/routes/sub-agents.js +267 -0
  33. package/dist/routes/terminal.d.ts +12 -1
  34. package/dist/routes/terminal.d.ts.map +1 -1
  35. package/dist/routes/terminal.js +326 -24
  36. package/dist/services/acode-package.d.ts +8 -1
  37. package/dist/services/acode-package.d.ts.map +1 -1
  38. package/dist/services/acode-package.js +33 -4
  39. package/dist/services/agent-event-store.d.ts +1 -0
  40. package/dist/services/agent-event-store.d.ts.map +1 -1
  41. package/dist/services/aws-client-agent-mcp.d.ts.map +1 -1
  42. package/dist/services/aws-client-agent-mcp.js +11 -4
  43. package/dist/services/event-delta-pusher.js +4 -4
  44. package/dist/services/fileSnapshotStore.js +1 -1
  45. package/dist/services/legacy-path-migration.d.ts +3 -0
  46. package/dist/services/legacy-path-migration.d.ts.map +1 -0
  47. package/dist/services/legacy-path-migration.js +66 -0
  48. package/dist/services/lifecycle-state.d.ts.map +1 -1
  49. package/dist/services/lifecycle-state.js +1 -1
  50. package/dist/services/runtime-binding.d.ts +5 -0
  51. package/dist/services/runtime-binding.d.ts.map +1 -1
  52. package/dist/services/runtime-binding.js +33 -1
  53. package/dist/services/session-output.d.ts +10 -1
  54. package/dist/services/session-output.d.ts.map +1 -1
  55. package/dist/services/session-output.js +54 -4
  56. package/dist/services/sub-agent-manager-instance.d.ts +4 -0
  57. package/dist/services/sub-agent-manager-instance.d.ts.map +1 -0
  58. package/dist/services/sub-agent-manager-instance.js +12 -0
  59. package/dist/services/workspace-files.d.ts +1 -0
  60. package/dist/services/workspace-files.d.ts.map +1 -1
  61. package/dist/services/workspace-files.js +57 -1
  62. package/package/acode/dist/ask-user-question-tool.d.ts +47 -0
  63. package/package/acode/dist/ask-user-question-tool.d.ts.map +1 -0
  64. package/package/acode/dist/ask-user-question-tool.js +233 -0
  65. package/package/acode/dist/built-in-file-tools.d.ts +2 -0
  66. package/package/acode/dist/built-in-file-tools.d.ts.map +1 -1
  67. package/package/acode/dist/built-in-file-tools.js +504 -3
  68. package/package/acode/dist/compaction.d.ts +242 -0
  69. package/package/acode/dist/compaction.d.ts.map +1 -0
  70. package/package/acode/dist/compaction.js +919 -0
  71. package/package/acode/dist/config.d.ts +6 -1
  72. package/package/acode/dist/config.d.ts.map +1 -1
  73. package/package/acode/dist/config.js +27 -2
  74. package/package/acode/dist/index.d.ts +4 -0
  75. package/package/acode/dist/index.d.ts.map +1 -1
  76. package/package/acode/dist/index.js +4 -0
  77. package/package/acode/dist/runtime.d.ts +257 -0
  78. package/package/acode/dist/runtime.d.ts.map +1 -1
  79. package/package/acode/dist/runtime.js +1843 -191
  80. package/package/acode/dist/skill-tool.d.ts +30 -0
  81. package/package/acode/dist/skill-tool.d.ts.map +1 -0
  82. package/package/acode/dist/skill-tool.js +174 -0
  83. package/package/acode/dist/sub-agent-manager.d.ts +264 -0
  84. package/package/acode/dist/sub-agent-manager.d.ts.map +1 -0
  85. package/package/acode/dist/sub-agent-manager.js +825 -0
  86. package/package/acode/dist/sub-agent-store.d.ts +40 -0
  87. package/package/acode/dist/sub-agent-store.d.ts.map +1 -0
  88. package/package/acode/dist/sub-agent-store.js +164 -0
  89. package/package/acode/dist/sub-agent-tools.d.ts +72 -0
  90. package/package/acode/dist/sub-agent-tools.d.ts.map +1 -0
  91. package/package/acode/dist/sub-agent-tools.js +429 -0
  92. package/package/acode/dist/sub-agent-types.d.ts +85 -0
  93. package/package/acode/dist/sub-agent-types.d.ts.map +1 -0
  94. package/package/acode/dist/sub-agent-types.js +8 -0
  95. package/package/acode/dist/todo-store.d.ts +42 -0
  96. package/package/acode/dist/todo-store.d.ts.map +1 -0
  97. package/package/acode/dist/todo-store.js +68 -0
  98. package/package/acode/dist/todo-tool.d.ts +6 -0
  99. package/package/acode/dist/todo-tool.d.ts.map +1 -0
  100. package/package/acode/dist/todo-tool.js +138 -0
  101. package/package/acode/dist/types.d.ts +41 -1
  102. package/package/acode/dist/types.d.ts.map +1 -1
  103. package/package/acode/package.json +13 -2
  104. package/package/aws-client-agent-mcp/dist/agent-client.d.ts +9 -0
  105. package/package/aws-client-agent-mcp/dist/agent-client.d.ts.map +1 -1
  106. package/package/aws-client-agent-mcp/dist/agent-client.js +69 -10
  107. package/package/aws-client-agent-mcp/dist/agent-client.js.map +1 -1
  108. package/package/aws-client-agent-mcp/dist/config.d.ts.map +1 -1
  109. package/package/aws-client-agent-mcp/dist/config.js +4 -0
  110. package/package/aws-client-agent-mcp/dist/config.js.map +1 -1
  111. package/package/aws-client-agent-mcp/dist/constants.d.ts +2 -0
  112. package/package/aws-client-agent-mcp/dist/constants.d.ts.map +1 -1
  113. package/package/aws-client-agent-mcp/dist/constants.js +3 -1
  114. package/package/aws-client-agent-mcp/dist/constants.js.map +1 -1
  115. package/package/aws-client-agent-mcp/dist/context-manager.d.ts +4 -1
  116. package/package/aws-client-agent-mcp/dist/context-manager.d.ts.map +1 -1
  117. package/package/aws-client-agent-mcp/dist/context-manager.js +6 -2
  118. package/package/aws-client-agent-mcp/dist/context-manager.js.map +1 -1
  119. package/package/aws-client-agent-mcp/dist/context-manager.test.js +5 -3
  120. package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +1 -1
  121. package/package/aws-client-agent-mcp/dist/http-client.d.ts +5 -0
  122. package/package/aws-client-agent-mcp/dist/http-client.d.ts.map +1 -1
  123. package/package/aws-client-agent-mcp/dist/http-client.js +15 -1
  124. package/package/aws-client-agent-mcp/dist/http-client.js.map +1 -1
  125. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +162 -71
  126. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
  127. package/package/aws-client-agent-mcp/dist/mcp-server.js +1007 -504
  128. package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
  129. package/package/aws-client-agent-mcp/dist/mcp-server.test.js +371 -253
  130. package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -1
  131. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +6 -17
  132. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -1
  133. package/package/aws-client-agent-mcp/dist/mcp-tools.js +20 -75
  134. package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -1
  135. package/package/aws-client-agent-mcp/dist/memory-store.d.ts +45 -45
  136. package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -1
  137. package/package/aws-client-agent-mcp/dist/memory-store.js +114 -162
  138. package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -1
  139. package/package/aws-client-agent-mcp/dist/memory-store.test.js +175 -164
  140. package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +1 -1
  141. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +3 -9
  142. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +1 -1
  143. package/package/aws-client-agent-mcp/dist/memory-tools.js +31 -58
  144. package/package/aws-client-agent-mcp/dist/memory-tools.js.map +1 -1
  145. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +40 -9
  146. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +1 -1
  147. package/package/aws-client-agent-mcp/dist/message-buffer.js +123 -23
  148. package/package/aws-client-agent-mcp/dist/message-buffer.js.map +1 -1
  149. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +13 -13
  150. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts.map +1 -1
  151. package/package/aws-client-agent-mcp/dist/server-memory-store.js +23 -16
  152. package/package/aws-client-agent-mcp/dist/server-memory-store.js.map +1 -1
  153. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +1 -1
  154. package/package/aws-client-agent-mcp/dist/status-reporter.js +8 -5
  155. package/package/aws-client-agent-mcp/dist/status-reporter.js.map +1 -1
  156. package/package/aws-client-agent-mcp/dist/status-reporter.test.js +93 -0
  157. package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +1 -1
  158. package/package/aws-client-agent-mcp/dist/types.d.ts +12 -25
  159. package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -1
  160. package/package/aws-client-agent-mcp/dist/types.js.map +1 -1
  161. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +34 -1
  162. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts.map +1 -1
  163. package/package/aws-client-agent-mcp/dist/websocket-client.js +146 -18
  164. package/package/aws-client-agent-mcp/dist/websocket-client.js.map +1 -1
  165. package/package.json +17 -7
  166. package/dist/adapter/AcodeSdkAdapter.test.d.ts +0 -2
  167. package/dist/adapter/AcodeSdkAdapter.test.d.ts.map +0 -1
  168. package/dist/adapter/AcodeSdkAdapter.test.js +0 -2000
  169. package/dist/adapter/AdapterRegistry.test.d.ts +0 -5
  170. package/dist/adapter/AdapterRegistry.test.d.ts.map +0 -1
  171. package/dist/adapter/AdapterRegistry.test.js +0 -118
  172. package/dist/adapter/ClaudeSdkAdapter.test.d.ts +0 -2
  173. package/dist/adapter/ClaudeSdkAdapter.test.d.ts.map +0 -1
  174. package/dist/adapter/ClaudeSdkAdapter.test.js +0 -311
  175. package/dist/adapter/CodexSdkAdapter.test.d.ts +0 -2
  176. package/dist/adapter/CodexSdkAdapter.test.d.ts.map +0 -1
  177. package/dist/adapter/CodexSdkAdapter.test.js +0 -270
  178. package/dist/adapter/OpencodeSdkAdapter.test.d.ts +0 -2
  179. package/dist/adapter/OpencodeSdkAdapter.test.d.ts.map +0 -1
  180. package/dist/adapter/OpencodeSdkAdapter.test.js +0 -158
  181. package/dist/adapter/acode-tool-names.test.d.ts +0 -2
  182. package/dist/adapter/acode-tool-names.test.d.ts.map +0 -1
  183. package/dist/adapter/acode-tool-names.test.js +0 -28
  184. package/dist/adapter/adapter.test.d.ts +0 -5
  185. package/dist/adapter/adapter.test.d.ts.map +0 -1
  186. package/dist/adapter/adapter.test.js +0 -180
  187. package/dist/adapter/idle-poll-loop.test.d.ts +0 -2
  188. package/dist/adapter/idle-poll-loop.test.d.ts.map +0 -1
  189. package/dist/adapter/idle-poll-loop.test.js +0 -85
  190. package/dist/adapter/types.test.d.ts +0 -2
  191. package/dist/adapter/types.test.d.ts.map +0 -1
  192. package/dist/adapter/types.test.js +0 -50
  193. package/dist/adapters/cc-switch/mcp-acode.test.d.ts +0 -2
  194. package/dist/adapters/cc-switch/mcp-acode.test.d.ts.map +0 -1
  195. package/dist/adapters/cc-switch/mcp-acode.test.js +0 -80
  196. package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts +0 -2
  197. package/dist/adapters/cc-switch/mcp-claudecode.test.d.ts.map +0 -1
  198. package/dist/adapters/cc-switch/mcp-claudecode.test.js +0 -75
  199. package/dist/adapters/cc-switch/mcp-codex.test.d.ts +0 -2
  200. package/dist/adapters/cc-switch/mcp-codex.test.d.ts.map +0 -1
  201. package/dist/adapters/cc-switch/mcp-codex.test.js +0 -126
  202. package/dist/adapters/cc-switch/mcp-opencode.test.d.ts +0 -2
  203. package/dist/adapters/cc-switch/mcp-opencode.test.d.ts.map +0 -1
  204. package/dist/adapters/cc-switch/mcp-opencode.test.js +0 -62
  205. package/dist/adapters/cc-switch/skill-directory.test.d.ts +0 -2
  206. package/dist/adapters/cc-switch/skill-directory.test.d.ts.map +0 -1
  207. package/dist/adapters/cc-switch/skill-directory.test.js +0 -74
  208. package/dist/config.test.d.ts +0 -2
  209. package/dist/config.test.d.ts.map +0 -1
  210. package/dist/config.test.js +0 -107
  211. package/dist/routes/ai-sources.test.d.ts +0 -2
  212. package/dist/routes/ai-sources.test.d.ts.map +0 -1
  213. package/dist/routes/ai-sources.test.js +0 -169
  214. package/dist/routes/file-browser.test.d.ts +0 -5
  215. package/dist/routes/file-browser.test.d.ts.map +0 -1
  216. package/dist/routes/file-browser.test.js +0 -155
  217. package/dist/routes/git.test.d.ts +0 -2
  218. package/dist/routes/git.test.d.ts.map +0 -1
  219. package/dist/routes/git.test.js +0 -330
  220. package/dist/routes/instance.test.d.ts +0 -5
  221. package/dist/routes/instance.test.d.ts.map +0 -1
  222. package/dist/routes/instance.test.js +0 -389
  223. package/dist/routes/mcp.test.d.ts +0 -5
  224. package/dist/routes/mcp.test.d.ts.map +0 -1
  225. package/dist/routes/mcp.test.js +0 -92
  226. package/dist/routes/memory-route-wiring.test.d.ts +0 -2
  227. package/dist/routes/memory-route-wiring.test.d.ts.map +0 -1
  228. package/dist/routes/memory-route-wiring.test.js +0 -15
  229. package/dist/routes/memory.test.d.ts +0 -2
  230. package/dist/routes/memory.test.d.ts.map +0 -1
  231. package/dist/routes/memory.test.js +0 -177
  232. package/dist/routes/properties.test.d.ts +0 -5
  233. package/dist/routes/properties.test.d.ts.map +0 -1
  234. package/dist/routes/properties.test.js +0 -72
  235. package/dist/routes/pty.test.d.ts +0 -2
  236. package/dist/routes/pty.test.d.ts.map +0 -1
  237. package/dist/routes/pty.test.js +0 -82
  238. package/dist/routes/runtime-binding.test.d.ts +0 -2
  239. package/dist/routes/runtime-binding.test.d.ts.map +0 -1
  240. package/dist/routes/runtime-binding.test.js +0 -32
  241. package/dist/routes/sessions.test.d.ts +0 -5
  242. package/dist/routes/sessions.test.d.ts.map +0 -1
  243. package/dist/routes/sessions.test.js +0 -86
  244. package/dist/routes/skills.test.d.ts +0 -5
  245. package/dist/routes/skills.test.d.ts.map +0 -1
  246. package/dist/routes/skills.test.js +0 -50
  247. package/dist/routes/system-metrics.test.d.ts +0 -2
  248. package/dist/routes/system-metrics.test.d.ts.map +0 -1
  249. package/dist/routes/system-metrics.test.js +0 -16
  250. package/dist/routes/terminal.stop-options.test.d.ts +0 -2
  251. package/dist/routes/terminal.stop-options.test.d.ts.map +0 -1
  252. package/dist/routes/terminal.stop-options.test.js +0 -39
  253. package/dist/routes/terminal.test.d.ts +0 -2
  254. package/dist/routes/terminal.test.d.ts.map +0 -1
  255. package/dist/routes/terminal.test.js +0 -746
  256. package/dist/routes/yml.test.d.ts +0 -5
  257. package/dist/routes/yml.test.d.ts.map +0 -1
  258. package/dist/routes/yml.test.js +0 -58
  259. package/dist/services/ai-source-apply.test.d.ts +0 -2
  260. package/dist/services/ai-source-apply.test.d.ts.map +0 -1
  261. package/dist/services/ai-source-apply.test.js +0 -138
  262. package/dist/services/auto-register.test.d.ts +0 -2
  263. package/dist/services/auto-register.test.d.ts.map +0 -1
  264. package/dist/services/auto-register.test.js +0 -184
  265. package/dist/services/aws-client-agent-mcp.test.d.ts +0 -2
  266. package/dist/services/aws-client-agent-mcp.test.d.ts.map +0 -1
  267. package/dist/services/aws-client-agent-mcp.test.js +0 -242
  268. package/dist/services/bridge-package-publish-hooks.test.d.ts +0 -2
  269. package/dist/services/bridge-package-publish-hooks.test.d.ts.map +0 -1
  270. package/dist/services/bridge-package-publish-hooks.test.js +0 -136
  271. package/dist/services/cc-switch-discovery.test.d.ts +0 -2
  272. package/dist/services/cc-switch-discovery.test.d.ts.map +0 -1
  273. package/dist/services/cc-switch-discovery.test.js +0 -56
  274. package/dist/services/cli-commands.test.d.ts +0 -2
  275. package/dist/services/cli-commands.test.d.ts.map +0 -1
  276. package/dist/services/cli-commands.test.js +0 -230
  277. package/dist/services/instance-init-service.test.d.ts +0 -2
  278. package/dist/services/instance-init-service.test.d.ts.map +0 -1
  279. package/dist/services/instance-init-service.test.js +0 -140
  280. package/dist/services/instance-state.test.d.ts +0 -2
  281. package/dist/services/instance-state.test.d.ts.map +0 -1
  282. package/dist/services/instance-state.test.js +0 -245
  283. package/dist/services/mcp-launch-binding-queue.test.d.ts +0 -2
  284. package/dist/services/mcp-launch-binding-queue.test.d.ts.map +0 -1
  285. package/dist/services/mcp-launch-binding-queue.test.js +0 -181
  286. package/dist/services/runtime-binding.test.d.ts +0 -2
  287. package/dist/services/runtime-binding.test.d.ts.map +0 -1
  288. package/dist/services/runtime-binding.test.js +0 -78
  289. package/dist/services/runtime-lifecycle-policy.test.d.ts +0 -2
  290. package/dist/services/runtime-lifecycle-policy.test.d.ts.map +0 -1
  291. package/dist/services/runtime-lifecycle-policy.test.js +0 -41
  292. package/dist/services/session-output.test.d.ts +0 -5
  293. package/dist/services/session-output.test.d.ts.map +0 -1
  294. package/dist/services/session-output.test.js +0 -177
  295. package/dist/services/startup-config-wizard.test.d.ts +0 -2
  296. package/dist/services/startup-config-wizard.test.d.ts.map +0 -1
  297. package/dist/services/startup-config-wizard.test.js +0 -184
  298. package/dist/services/terminal-persistence.test.d.ts +0 -5
  299. package/dist/services/terminal-persistence.test.d.ts.map +0 -1
  300. package/dist/services/terminal-persistence.test.js +0 -159
  301. package/dist/services/tool-installer.test.d.ts +0 -2
  302. package/dist/services/tool-installer.test.d.ts.map +0 -1
  303. package/dist/services/tool-installer.test.js +0 -225
  304. package/dist/services/workspace-files.test.d.ts +0 -2
  305. package/dist/services/workspace-files.test.d.ts.map +0 -1
  306. package/dist/services/workspace-files.test.js +0 -648
  307. package/dist/services/workspace-watch.test.d.ts +0 -2
  308. package/dist/services/workspace-watch.test.d.ts.map +0 -1
  309. package/dist/services/workspace-watch.test.js +0 -38
  310. package/dist/utils/file-utils.test.d.ts +0 -2
  311. package/dist/utils/file-utils.test.d.ts.map +0 -1
  312. package/dist/utils/file-utils.test.js +0 -244
  313. package/dist/utils/logger.test.d.ts +0 -2
  314. package/dist/utils/logger.test.d.ts.map +0 -1
  315. package/dist/utils/logger.test.js +0 -93
  316. package/dist/utils/sdk-package-loader.test.d.ts +0 -2
  317. package/dist/utils/sdk-package-loader.test.d.ts.map +0 -1
  318. package/dist/utils/sdk-package-loader.test.js +0 -84
  319. package/dist/utils/validation.test.d.ts +0 -2
  320. package/dist/utils/validation.test.d.ts.map +0 -1
  321. package/dist/utils/validation.test.js +0 -88
  322. package/dist/utils/yaml-utils.test.d.ts +0 -2
  323. package/dist/utils/yaml-utils.test.d.ts.map +0 -1
  324. package/dist/utils/yaml-utils.test.js +0 -363
@@ -1,245 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { promises as fs } from 'node:fs';
3
- import os from 'node:os';
4
- import path from 'node:path';
5
- import { getInstanceStateFile, loadInstanceState, saveInstanceState, getAgentInitRoot, } from './instance-state.js';
6
- describe('instance-state service', () => {
7
- const testAgentId = 'test-agent-123';
8
- const originalRuntimeHomeDir = process.env.AWS_RUNTIME_HOME_DIR;
9
- const testRuntimeHomeDir = path.join(os.tmpdir(), `aws-instance-state-home-${Date.now()}`);
10
- function getCurrentStateFilePath() {
11
- return getInstanceStateFile(testAgentId);
12
- }
13
- beforeEach(async () => {
14
- process.env.AWS_RUNTIME_HOME_DIR = testRuntimeHomeDir;
15
- // 清理测试文件
16
- try {
17
- await fs.rm(testRuntimeHomeDir, { recursive: true, force: true });
18
- await fs.rm(path.join(os.tmpdir(), 'agentswork-runtime-init', testAgentId), { recursive: true, force: true });
19
- }
20
- catch {
21
- // 目录不存在,忽略
22
- }
23
- });
24
- afterEach(async () => {
25
- if (originalRuntimeHomeDir === undefined) {
26
- delete process.env.AWS_RUNTIME_HOME_DIR;
27
- }
28
- else {
29
- process.env.AWS_RUNTIME_HOME_DIR = originalRuntimeHomeDir;
30
- }
31
- // 清理测试文件
32
- try {
33
- await fs.rm(testRuntimeHomeDir, { recursive: true, force: true });
34
- await fs.rm(path.join(os.tmpdir(), 'agentswork-runtime-init', testAgentId), { recursive: true, force: true });
35
- }
36
- catch {
37
- // 目录不存在,忽略
38
- }
39
- });
40
- describe('getInstanceStateFile', () => {
41
- it('should return correct path in runtime home directory', () => {
42
- const result = getInstanceStateFile(testAgentId);
43
- const expected = path.join(testRuntimeHomeDir, '.aws-bridge', 'instances', testAgentId, 'state.json');
44
- expect(result).toBe(expected);
45
- });
46
- it('should handle agentId with special characters', () => {
47
- const specialAgentId = 'agent-with-dashes_and_underscores';
48
- const result = getInstanceStateFile(specialAgentId);
49
- expect(result).toContain(specialAgentId);
50
- expect(result).toContain('state.json');
51
- });
52
- it('should convert numeric agentId to string', () => {
53
- const numericId = 12345;
54
- const result = getInstanceStateFile(numericId);
55
- expect(result).toContain('12345');
56
- });
57
- });
58
- describe('getAgentInitRoot', () => {
59
- it('should return correct init root directory', () => {
60
- const result = getAgentInitRoot(testAgentId);
61
- const expected = path.join(testRuntimeHomeDir, '.aws-bridge', 'instances', testAgentId);
62
- expect(result).toBe(expected);
63
- });
64
- });
65
- describe('loadInstanceState', () => {
66
- it('should return default state when file does not exist', async () => {
67
- const state = await loadInstanceState('non-existent-agent-id');
68
- expect(state.initialized).toBe(false);
69
- expect(state.skills).toEqual([]);
70
- expect(state.mcpServers).toEqual([]);
71
- expect(state.enabledTools).toEqual(['acode', 'claude', 'opencode', 'codex']);
72
- expect(state.toolStatus).toEqual({});
73
- expect(state.skillEnabled).toBe(true);
74
- expect(state.mcpEnabled).toBe(true);
75
- expect(state.updatedAt).toBeNull();
76
- });
77
- it('should load existing state from file', async () => {
78
- // 先保存一个状态
79
- const savedState = {
80
- initialized: true,
81
- skills: [
82
- {
83
- id: 'skill-1',
84
- name: 'test-skill',
85
- fileName: 'test.zip',
86
- filePath: '/path/to/test.zip',
87
- bytes: 1024,
88
- installedAt: '2024-01-01T00:00:00Z',
89
- },
90
- ],
91
- enabledTools: ['claude', 'gemini'],
92
- skillEnabled: false,
93
- mcpEnabled: true,
94
- };
95
- await saveInstanceState(testAgentId, savedState);
96
- // 然后加载
97
- const loadedState = await loadInstanceState(testAgentId);
98
- expect(loadedState.initialized).toBe(true);
99
- expect(loadedState.skills).toHaveLength(1);
100
- expect(loadedState.skills[0].name).toBe('test-skill');
101
- expect(loadedState.enabledTools).toEqual(['claude', 'gemini']);
102
- expect(loadedState.skillEnabled).toBe(false);
103
- expect(loadedState.mcpEnabled).toBe(true);
104
- expect(loadedState.updatedAt).not.toBeNull();
105
- });
106
- it('should handle corrupted JSON file gracefully', async () => {
107
- // 创建损坏的 JSON 文件
108
- const stateFilePath = getCurrentStateFilePath();
109
- await fs.mkdir(path.dirname(stateFilePath), { recursive: true });
110
- await fs.writeFile(stateFilePath, '{ invalid json }', 'utf-8');
111
- const state = await loadInstanceState(testAgentId);
112
- // 应该返回默认状态
113
- expect(state.initialized).toBe(false);
114
- expect(state.skills).toEqual([]);
115
- });
116
- it('should migrate readable legacy temp state into runtime home', async () => {
117
- const legacyFilePath = path.join(os.tmpdir(), 'agentswork-runtime-init', testAgentId, 'state.json');
118
- const legacyState = {
119
- initialized: true,
120
- skills: [],
121
- mcpServers: [],
122
- enabledTools: ['claude'],
123
- toolStatus: {},
124
- skillEnabled: true,
125
- mcpEnabled: false,
126
- updatedAt: '2026-01-01T00:00:00.000Z',
127
- };
128
- await fs.mkdir(path.dirname(legacyFilePath), { recursive: true });
129
- await fs.writeFile(legacyFilePath, JSON.stringify(legacyState), 'utf-8');
130
- const state = await loadInstanceState(testAgentId);
131
- expect(state).toEqual(legacyState);
132
- expect(JSON.parse(await fs.readFile(getInstanceStateFile(testAgentId), 'utf-8'))).toEqual(legacyState);
133
- });
134
- });
135
- describe('saveInstanceState', () => {
136
- it('should save complete state with all fields', async () => {
137
- const partialState = {
138
- initialized: true,
139
- skills: [],
140
- mcpServers: [],
141
- enabledTools: ['opencode'],
142
- toolStatus: {
143
- claude: {
144
- tool: 'claude',
145
- installed: true,
146
- executable: '/usr/local/bin/claude',
147
- version: '1.0.0',
148
- installing: false,
149
- error: null,
150
- },
151
- },
152
- skillEnabled: false,
153
- mcpEnabled: true,
154
- };
155
- const result = await saveInstanceState(testAgentId, partialState);
156
- expect(result.initialized).toBe(true);
157
- expect(result.enabledTools).toEqual(['opencode']);
158
- expect(result.toolStatus.claude.installed).toBe(true);
159
- expect(result.skillEnabled).toBe(false);
160
- expect(result.mcpEnabled).toBe(true);
161
- expect(result.updatedAt).not.toBeNull();
162
- // 验证文件已创建
163
- const fileContent = await fs.readFile(getCurrentStateFilePath(), 'utf-8');
164
- const parsed = JSON.parse(fileContent);
165
- expect(parsed.initialized).toBe(true);
166
- });
167
- it('should use default values for missing arrays', async () => {
168
- const partialState = {
169
- initialized: true,
170
- };
171
- const result = await saveInstanceState(testAgentId, partialState);
172
- expect(result.skills).toEqual([]);
173
- expect(result.mcpServers).toEqual([]);
174
- expect(result.enabledTools).toEqual(['acode', 'claude', 'opencode', 'codex']);
175
- });
176
- it('should handle empty state object', async () => {
177
- const result = await saveInstanceState(testAgentId, {});
178
- expect(result.initialized).toBe(false);
179
- expect(result.skills).toEqual([]);
180
- expect(result.mcpServers).toEqual([]);
181
- expect(result.enabledTools).toEqual(['acode', 'claude', 'opencode', 'codex']);
182
- expect(result.toolStatus).toEqual({});
183
- expect(result.skillEnabled).toBe(true);
184
- expect(result.mcpEnabled).toBe(true);
185
- });
186
- it('should handle null/undefined values', async () => {
187
- const partialState = {
188
- initialized: undefined,
189
- skills: null,
190
- mcpServers: undefined,
191
- enabledTools: null,
192
- toolStatus: null,
193
- skillEnabled: undefined,
194
- mcpEnabled: null,
195
- };
196
- const result = await saveInstanceState(testAgentId, partialState);
197
- expect(result.initialized).toBe(false);
198
- expect(result.skills).toEqual([]);
199
- expect(result.mcpServers).toEqual([]);
200
- expect(result.enabledTools).toEqual(['acode', 'claude', 'opencode', 'codex']);
201
- expect(result.toolStatus).toEqual({});
202
- expect(result.skillEnabled).toBe(true);
203
- expect(result.mcpEnabled).toBe(true);
204
- });
205
- it('should handle invalid toolStatus type', async () => {
206
- const partialState = {
207
- toolStatus: 'invalid',
208
- };
209
- const result = await saveInstanceState(testAgentId, partialState);
210
- expect(result.toolStatus).toEqual({});
211
- });
212
- it('should handle array as toolStatus', async () => {
213
- const partialState = {
214
- toolStatus: [],
215
- };
216
- const result = await saveInstanceState(testAgentId, partialState);
217
- expect(result.toolStatus).toEqual({});
218
- });
219
- it('should deduplicate and normalize enabledTools', async () => {
220
- const partialState = {
221
- enabledTools: ['CLAUDE', 'claude', 'OpenCode', ' gemini ', ''],
222
- };
223
- const result = await saveInstanceState(testAgentId, partialState);
224
- expect(result.enabledTools).toEqual(['claude', 'opencode', 'gemini']);
225
- });
226
- it('should overwrite existing state', async () => {
227
- // 第一次保存
228
- await saveInstanceState(testAgentId, { initialized: true });
229
- // 第二次保存
230
- const result = await saveInstanceState(testAgentId, { initialized: false });
231
- expect(result.initialized).toBe(false);
232
- // 验证文件内容
233
- const fileContent = await fs.readFile(getCurrentStateFilePath(), 'utf-8');
234
- const parsed = JSON.parse(fileContent);
235
- expect(parsed.initialized).toBe(false);
236
- });
237
- it('should update updatedAt timestamp on each save', async () => {
238
- const first = await saveInstanceState(testAgentId, { initialized: true });
239
- // 等待一小段时间确保时间戳不同
240
- await new Promise((resolve) => setTimeout(resolve, 10));
241
- const second = await saveInstanceState(testAgentId, { initialized: false });
242
- expect(second.updatedAt).not.toBe(first.updatedAt);
243
- });
244
- });
245
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mcp-launch-binding-queue.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-launch-binding-queue.test.d.ts","sourceRoot":"","sources":["../../src/services/mcp-launch-binding-queue.test.ts"],"names":[],"mappings":""}
@@ -1,181 +0,0 @@
1
- import { afterEach, describe, expect, it } from 'vitest';
2
- import { claimMcpLaunchBinding, clearMcpLaunchBindingQueues, enqueueMcpLaunchBinding, getMcpLaunchQueueSize, removeMcpLaunchBinding, } from './mcp-launch-binding-queue.js';
3
- describe('mcp launch binding queue', () => {
4
- afterEach(() => {
5
- clearMcpLaunchBindingQueues();
6
- });
7
- it('claims same-workspace same-server bindings by agent id', () => {
8
- const firstBinding = enqueueMcpLaunchBinding({
9
- agentId: 'agent-a',
10
- workspacePath: 'C:/repo/demo',
11
- serverUrl: 'ws://server-a:7380/ws/agent',
12
- runtimeAccessToken: 'token-a',
13
- userId: 'user-a',
14
- schedulerBaseUrl: 'http://server-a:7380',
15
- });
16
- const secondBinding = enqueueMcpLaunchBinding({
17
- agentId: 'agent-b',
18
- workspacePath: 'C:/repo/demo',
19
- serverUrl: 'ws://server-a:7380/ws/agent',
20
- runtimeAccessToken: 'token-b',
21
- userId: 'user-b',
22
- schedulerBaseUrl: 'http://server-a:7380',
23
- });
24
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(2);
25
- const first = claimMcpLaunchBinding({
26
- agentId: 'agent-a',
27
- workspacePath: 'C:/repo/demo',
28
- serverUrl: 'ws://server-a:7380/ws/agent',
29
- });
30
- const second = claimMcpLaunchBinding({
31
- agentId: 'agent-b',
32
- workspacePath: 'C:/repo/demo',
33
- serverUrl: 'ws://server-a:7380/ws/agent',
34
- });
35
- expect(first?.agentId).toBe('agent-a');
36
- expect(first?.runtimeAccessToken).toBe('token-a');
37
- expect(second?.agentId).toBe('agent-b');
38
- expect(second?.runtimeAccessToken).toBe('token-b');
39
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(0);
40
- });
41
- it('does not claim another agent token from the same workspace and server', () => {
42
- const binding = enqueueMcpLaunchBinding({
43
- agentId: 'agent-a',
44
- workspacePath: 'C:/repo/demo',
45
- serverUrl: 'ws://server:7380/ws/agent',
46
- });
47
- expect(claimMcpLaunchBinding({
48
- agentId: 'agent-b',
49
- workspacePath: 'C:/repo/demo',
50
- serverUrl: 'ws://server:7380/ws/agent',
51
- })).toBeNull();
52
- expect(binding?.agentId).toBe('agent-a');
53
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(1);
54
- });
55
- it('skips older same-workspace bindings when claiming a later agent token', () => {
56
- enqueueMcpLaunchBinding({
57
- agentId: 'agent-a',
58
- workspacePath: 'C:/repo/demo',
59
- serverUrl: 'ws://server:7380/ws/agent',
60
- runtimeAccessToken: 'token-a',
61
- });
62
- enqueueMcpLaunchBinding({
63
- agentId: 'agent-b',
64
- workspacePath: 'C:/repo/demo',
65
- serverUrl: 'ws://server:7380/ws/agent',
66
- runtimeAccessToken: 'token-b',
67
- });
68
- const claimed = claimMcpLaunchBinding({
69
- agentId: 'agent-b',
70
- workspacePath: 'C:/repo/demo',
71
- serverUrl: 'ws://server:7380/ws/agent',
72
- });
73
- expect(claimed?.agentId).toBe('agent-b');
74
- expect(claimed?.runtimeAccessToken).toBe('token-b');
75
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(1);
76
- });
77
- it('allows legacy claim without agent id only when one binding matches', () => {
78
- const binding = enqueueMcpLaunchBinding({
79
- agentId: 'agent-a',
80
- workspacePath: 'C:/repo/demo',
81
- serverUrl: 'ws://server:7380/ws/agent',
82
- });
83
- expect(claimMcpLaunchBinding({
84
- workspacePath: 'C:/repo/demo',
85
- serverUrl: 'ws://server:7380/ws/agent',
86
- })?.agentId).toBe('agent-a');
87
- expect(binding?.id).toBeTruthy();
88
- });
89
- it('rejects legacy claim without agent id when same-workspace same-server bindings are ambiguous', () => {
90
- enqueueMcpLaunchBinding({
91
- agentId: 'agent-a',
92
- workspacePath: 'C:/repo/demo',
93
- serverUrl: 'ws://server:7380/ws/agent',
94
- });
95
- enqueueMcpLaunchBinding({
96
- agentId: 'agent-b',
97
- workspacePath: 'C:/repo/demo',
98
- serverUrl: 'ws://server:7380/ws/agent',
99
- });
100
- expect(claimMcpLaunchBinding({
101
- workspacePath: 'C:/repo/demo',
102
- serverUrl: 'ws://server:7380/ws/agent',
103
- })).toBeNull();
104
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(2);
105
- });
106
- it('matches by server URL as well as workspace path', () => {
107
- const firstBinding = enqueueMcpLaunchBinding({ agentId: 'agent-a', workspacePath: 'C:/repo/demo', serverUrl: 'ws://server-a:7380/ws/agent' });
108
- const secondBinding = enqueueMcpLaunchBinding({ agentId: 'agent-b', workspacePath: 'C:/repo/demo', serverUrl: 'ws://server-b:7380/ws/agent' });
109
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/demo', serverUrl: 'ws://server-b:7380/ws/agent' })?.agentId).toBe('agent-b');
110
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/demo', serverUrl: 'ws://server-a:7380/ws/agent' })?.agentId).toBe('agent-a');
111
- });
112
- it('matches http scheduler URLs and websocket agent URLs by scheduler origin', () => {
113
- enqueueMcpLaunchBinding({ agentId: 'agent-a', workspacePath: 'C:/repo/demo', schedulerBaseUrl: 'http://server-a:7380' });
114
- expect(claimMcpLaunchBinding({
115
- workspacePath: 'C:/repo/demo',
116
- serverUrl: 'ws://server-a:7380/ws/agent',
117
- })?.agentId).toBe('agent-a');
118
- });
119
- it('repairs duplicated scheduler ports when enqueuing launch bindings', () => {
120
- const binding = enqueueMcpLaunchBinding({
121
- agentId: 'agent-a',
122
- workspacePath: 'C:/repo/demo',
123
- schedulerBaseUrl: 'http://127.0.0.1:8080:8080',
124
- });
125
- expect(binding?.serverUrl).toBe('http://127.0.0.1:8080');
126
- expect(binding?.schedulerBaseUrl).toBe('http://127.0.0.1:8080');
127
- expect(claimMcpLaunchBinding({
128
- workspacePath: 'C:/repo/demo',
129
- serverUrl: 'ws://127.0.0.1:8080/ws/agent',
130
- })?.schedulerBaseUrl).toBe('http://127.0.0.1:8080');
131
- });
132
- it('matches localhost and 127.0.0.1 launch binding scheduler aliases', () => {
133
- enqueueMcpLaunchBinding({
134
- agentId: 'agent-a',
135
- workspacePath: 'C:/repo/demo',
136
- serverUrl: 'ws://localhost:8080/ws/agent',
137
- });
138
- expect(claimMcpLaunchBinding({
139
- workspacePath: 'C:/repo/demo',
140
- serverUrl: 'ws://127.0.0.1:8080/ws/agent',
141
- })?.agentId).toBe('agent-a');
142
- });
143
- it('falls back to the only same-workspace binding when scheduler URLs differ', () => {
144
- enqueueMcpLaunchBinding({
145
- agentId: 'agent-a',
146
- workspacePath: 'C:/repo/demo',
147
- serverUrl: 'ws://127.0.0.1:7380/ws/agent',
148
- });
149
- expect(claimMcpLaunchBinding({
150
- workspacePath: 'C:/repo/demo',
151
- serverUrl: 'ws://101.42.200.84:7380/ws/agent',
152
- })?.agentId).toBe('agent-a');
153
- });
154
- it('does not mix different workspace paths', () => {
155
- const firstBinding = enqueueMcpLaunchBinding({ agentId: 'agent-a', workspacePath: 'C:/repo/a', serverUrl: 'ws://server:7380/ws/agent' });
156
- const secondBinding = enqueueMcpLaunchBinding({ agentId: 'agent-b', workspacePath: 'C:/repo/b', serverUrl: 'ws://server:7380/ws/agent' });
157
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/b', serverUrl: 'ws://server:7380/ws/agent' })?.agentId).toBe('agent-b');
158
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/a', serverUrl: 'ws://server:7380/ws/agent' })?.agentId).toBe('agent-a');
159
- });
160
- it('removes a stale launch binding by id after a failed start', () => {
161
- const binding = enqueueMcpLaunchBinding({
162
- agentId: 'agent-a',
163
- workspacePath: 'C:/repo/demo',
164
- serverUrl: 'ws://server:7380/ws/agent',
165
- });
166
- expect(binding).not.toBeNull();
167
- expect(removeMcpLaunchBinding(binding?.id || '')).toBe(true);
168
- expect(claimMcpLaunchBinding({
169
- agentId: 'agent-a',
170
- workspacePath: 'C:/repo/demo',
171
- serverUrl: 'ws://server:7380/ws/agent',
172
- })).toBeNull();
173
- expect(getMcpLaunchQueueSize('C:/repo/demo')).toBe(0);
174
- });
175
- it('returns null for missing or invalid workspaces', () => {
176
- expect(enqueueMcpLaunchBinding({ agentId: '', workspacePath: 'C:/repo/demo' })).toBeNull();
177
- expect(enqueueMcpLaunchBinding({ agentId: 'agent-a', workspacePath: '' })).toBeNull();
178
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/missing', serverUrl: 'ws://server:7380/ws/agent' })).toBeNull();
179
- expect(claimMcpLaunchBinding({ workspacePath: 'C:/repo/demo' })).toBeNull();
180
- });
181
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=runtime-binding.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-binding.test.d.ts","sourceRoot":"","sources":["../../src/services/runtime-binding.test.ts"],"names":[],"mappings":""}
@@ -1,78 +0,0 @@
1
- import { mkdirSync, mkdtempSync, rmSync } from "node:fs";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { afterEach, describe, expect, it } from "vitest";
5
- import { buildRuntimeTokenKey, clearScopedRuntimeAccessToken, getRuntimeAccessToken, getScopedRuntimeAccessToken, normalizeSchedulerBaseUrl, saveScopedRuntimeAccessToken, } from "./runtime-binding.js";
6
- const originalEnv = { ...process.env };
7
- const tempRoots = [];
8
- function useRuntimeHome() {
9
- const runtimeHome = mkdtempSync(path.join(os.tmpdir(), "aws-runtime-binding-"));
10
- tempRoots.push(runtimeHome);
11
- mkdirSync(runtimeHome, { recursive: true });
12
- process.env.AWS_RUNTIME_HOME_DIR = runtimeHome;
13
- process.env.HOME = runtimeHome;
14
- process.env.USERPROFILE = runtimeHome;
15
- return runtimeHome;
16
- }
17
- afterEach(() => {
18
- process.env = { ...originalEnv };
19
- for (const root of tempRoots.splice(0)) {
20
- rmSync(root, { recursive: true, force: true });
21
- }
22
- });
23
- describe('runtime binding scheduler URL normalization', () => {
24
- it('repairs duplicated scheduler ports', () => {
25
- expect(normalizeSchedulerBaseUrl('http://127.0.0.1:8080:8080')).toBe('http://127.0.0.1:8080');
26
- });
27
- it('normalizes websocket agent URLs to scheduler HTTP origins', () => {
28
- expect(normalizeSchedulerBaseUrl('ws://127.0.0.1:8080/ws/agent')).toBe('http://127.0.0.1:8080');
29
- expect(normalizeSchedulerBaseUrl('wss://example.com/ws/agent')).toBe('https://example.com');
30
- });
31
- it('canonicalizes loopback scheduler aliases to one origin', () => {
32
- expect(normalizeSchedulerBaseUrl('ws://localhost:8080/ws/agent')).toBe('http://127.0.0.1:8080');
33
- expect(normalizeSchedulerBaseUrl('http://localhost:8080')).toBe('http://127.0.0.1:8080');
34
- });
35
- it("returns paired binding token only when requested scheduler URL matches", async () => {
36
- useRuntimeHome();
37
- const { saveRuntimeBinding } = await import("./runtime-binding.js");
38
- saveRuntimeBinding({
39
- accessToken: "paired-runtime-token-123456",
40
- instanceId: "bridge-1",
41
- userId: "user-a",
42
- schedulerBaseUrl: "http://scheduler.local:7380",
43
- });
44
- expect(getRuntimeAccessToken(undefined, "http://scheduler.local:7380/api")).toBe("paired-runtime-token-123456");
45
- expect(getRuntimeAccessToken(undefined, "http://scheduler.local:8080")).toBeUndefined();
46
- });
47
- it("scopes runtime tokens by user and full scheduler origin", () => {
48
- useRuntimeHome();
49
- const key7380 = saveScopedRuntimeAccessToken({
50
- userId: "user-a",
51
- serverBaseUrl: "http://scheduler.local:7380",
52
- accessToken: "runtime-token-7380-123456",
53
- });
54
- const key8080 = saveScopedRuntimeAccessToken({
55
- userId: "user-a",
56
- serverBaseUrl: "http://scheduler.local:8080",
57
- accessToken: "runtime-token-8080-123456",
58
- });
59
- expect(key7380).not.toBe(key8080);
60
- expect(buildRuntimeTokenKey("user-a", "http://scheduler.local:7380/api")).toBe(key7380);
61
- expect(getScopedRuntimeAccessToken("user-a", "http://scheduler.local:7380")).toBe("runtime-token-7380-123456");
62
- expect(getScopedRuntimeAccessToken("user-a", "http://scheduler.local:8080")).toBe("runtime-token-8080-123456");
63
- expect(clearScopedRuntimeAccessToken("user-a", "http://scheduler.local:7380")).toBe(true);
64
- expect(getScopedRuntimeAccessToken("user-a", "http://scheduler.local:7380")).toBeUndefined();
65
- expect(getScopedRuntimeAccessToken("user-a", "http://scheduler.local:8080")).toBe("runtime-token-8080-123456");
66
- });
67
- it("uses the same scoped runtime token for localhost and 127.0.0.1", () => {
68
- useRuntimeHome();
69
- const key = saveScopedRuntimeAccessToken({
70
- userId: "user-a",
71
- serverBaseUrl: "http://localhost:8080",
72
- accessToken: "runtime-token-loopback-123456",
73
- });
74
- expect(buildRuntimeTokenKey("user-a", "ws://127.0.0.1:8080/ws/agent")).toBe(key);
75
- expect(getScopedRuntimeAccessToken("user-a", "http://127.0.0.1:8080")).toBe("runtime-token-loopback-123456");
76
- expect(getRuntimeAccessToken("user-a", "ws://localhost:8080/ws/agent")).toBe("runtime-token-loopback-123456");
77
- });
78
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=runtime-lifecycle-policy.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-lifecycle-policy.test.d.ts","sourceRoot":"","sources":["../../src/services/runtime-lifecycle-policy.test.ts"],"names":[],"mappings":""}
@@ -1,41 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { buildGracefulShutdownPlan, shouldAutoCleanOrphanProcesses, shouldCleanupPersistedSessionsOnStartup, } from "./runtime-lifecycle-policy.js";
3
- describe("runtime lifecycle policy", () => {
4
- it("keeps agent processes and persisted state during scheduler restart preservation", () => {
5
- expect(buildGracefulShutdownPlan(true)).toEqual({
6
- terminateSdkSessions: false,
7
- closePtySessions: false,
8
- terminateResidualProcesses: false,
9
- unregisterInstance: false,
10
- clearPersistedSessions: false,
11
- });
12
- });
13
- it("cleans runtime state for explicit bridge shutdown", () => {
14
- expect(buildGracefulShutdownPlan(false)).toEqual({
15
- terminateSdkSessions: true,
16
- closePtySessions: true,
17
- terminateResidualProcesses: true,
18
- unregisterInstance: true,
19
- clearPersistedSessions: true,
20
- });
21
- });
22
- it("does not destructively clean persisted sessions on startup unless explicitly enabled", () => {
23
- expect(shouldCleanupPersistedSessionsOnStartup(false, {})).toBe(false);
24
- expect(shouldCleanupPersistedSessionsOnStartup(false, {
25
- AWS_BRIDGE_CLEAN_ORPHANS_ON_STARTUP: "true",
26
- })).toBe(true);
27
- expect(shouldCleanupPersistedSessionsOnStartup(true, {
28
- AWS_BRIDGE_CLEAN_ORPHANS_ON_STARTUP: "true",
29
- })).toBe(false);
30
- });
31
- it("does not let orphan monitor terminate preserved sessions unless cleanup is explicit", () => {
32
- expect(shouldAutoCleanOrphanProcesses({})).toBe(false);
33
- expect(shouldAutoCleanOrphanProcesses({
34
- AWS_ORPHAN_AUTO_CLEAN_MODE: "auto",
35
- })).toBe(false);
36
- expect(shouldAutoCleanOrphanProcesses({
37
- AWS_ORPHAN_AUTO_CLEAN_MODE: "auto",
38
- AWS_BRIDGE_CLEAN_ORPHANS_ON_STARTUP: "true",
39
- })).toBe(true);
40
- });
41
- });
@@ -1,5 +0,0 @@
1
- /**
2
- * Session Output 服务单元测试
3
- */
4
- export {};
5
- //# sourceMappingURL=session-output.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-output.test.d.ts","sourceRoot":"","sources":["../../src/services/session-output.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}