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,177 +0,0 @@
1
- /**
2
- * Session Output 服务单元测试
3
- */
4
- import axios from "axios";
5
- import { afterEach, describe, expect, it, vi } from "vitest";
6
- import { logger } from "../utils/logger.js";
7
- import { appendSessionOutput, sendOutput, sendStatus, sessions, } from "./session-output.js";
8
- import { getRuntimeAccessToken } from "./runtime-binding.js";
9
- vi.mock("axios", () => ({
10
- default: {
11
- post: vi.fn(),
12
- },
13
- }));
14
- vi.mock("./runtime-binding.js", () => ({
15
- getRuntimeAccessToken: vi.fn(() => "runtime-token"),
16
- }));
17
- vi.mock("../utils/logger.js", () => ({
18
- logger: {
19
- warn: vi.fn(),
20
- },
21
- }));
22
- const mockedAxiosPost = axios.post;
23
- const mockedLogger = vi.mocked(logger);
24
- const mockedGetRuntimeAccessToken = vi.mocked(getRuntimeAccessToken);
25
- const createSession = (overrides = {}) => ({
26
- agentId: "agent-1",
27
- workspacePath: "D:/workspace",
28
- outputBuffer: "",
29
- flushTimer: null,
30
- flushInFlight: null,
31
- seq: 0,
32
- ...overrides,
33
- });
34
- afterEach(() => {
35
- sessions.clear();
36
- vi.clearAllMocks();
37
- });
38
- describe("session-output service", () => {
39
- it("manages sessions map correctly", () => {
40
- sessions.set("session-1", createSession());
41
- expect(sessions.size).toBe(1);
42
- expect(sessions.has("session-1")).toBe(true);
43
- const session = sessions.get("session-1");
44
- if (session)
45
- session.outputBuffer = "test output";
46
- expect(sessions.get("session-1")?.outputBuffer).toBe("test output");
47
- sessions.delete("session-1");
48
- expect(sessions.size).toBe(0);
49
- });
50
- it("finds session by agentId", () => {
51
- sessions.set("session-1", createSession({ agentId: "agent-1" }));
52
- sessions.set("session-2", createSession({ agentId: "agent-2" }));
53
- const findByAgentId = (agentId) => {
54
- for (const [id, session] of sessions) {
55
- if (session.agentId === agentId)
56
- return id;
57
- }
58
- return null;
59
- };
60
- expect(findByAgentId("agent-1")).toBe("session-1");
61
- expect(findByAgentId("agent-3")).toBe(null);
62
- });
63
- it("accumulates output correctly", () => {
64
- sessions.set("session-1", createSession());
65
- appendSessionOutput("session-1", "line1\n");
66
- appendSessionOutput("session-1", "line2\n");
67
- expect(sessions.get("session-1")?.outputBuffer).toBe("line1\nline2\n");
68
- });
69
- it("bounds pending SDK output so callback failures cannot grow memory without limit", () => {
70
- sessions.set("session-bounded", createSession());
71
- appendSessionOutput("session-bounded", "a".repeat(70 * 1024));
72
- const output = sessions.get("session-bounded")?.outputBuffer ?? "";
73
- expect(output.length).toBeLessThanOrEqual(64 * 1024);
74
- expect(output).toContain("AgentsWorkStudio: omitted");
75
- expect(output.endsWith("a")).toBe(true);
76
- });
77
- it("increments sequence correctly", () => {
78
- const session = createSession();
79
- sessions.set("session-1", session);
80
- session.seq += 1;
81
- expect(session.seq).toBe(1);
82
- session.seq += 1;
83
- expect(session.seq).toBe(2);
84
- });
85
- it("builds correct status payload", () => {
86
- const buildStatusPayload = (agentId, sessionId, status) => ({
87
- agentId,
88
- sessionId,
89
- status,
90
- });
91
- expect(buildStatusPayload("agent-1", "session-1", "running")).toEqual({
92
- agentId: "agent-1",
93
- sessionId: "session-1",
94
- status: "running",
95
- });
96
- expect(buildStatusPayload("agent-1", null, "stopped")).toEqual({
97
- agentId: "agent-1",
98
- sessionId: null,
99
- status: "stopped",
100
- });
101
- });
102
- it("does not throw when runtime status callback fails", async () => {
103
- mockedAxiosPost.mockRejectedValueOnce(new Error("scheduler unavailable"));
104
- await expect(sendStatus("agent-1", "session-1", "waiting_input")).resolves.toBeUndefined();
105
- expect(mockedAxiosPost).toHaveBeenCalledWith(expect.stringContaining("/api/runtime/callback/status"), {
106
- agentId: "agent-1",
107
- sessionId: "session-1",
108
- status: "waiting_input",
109
- }, { headers: { "X-Runtime-Token": "runtime-token" } });
110
- expect(mockedLogger.warn).toHaveBeenCalledWith("Runtime status callback failed", expect.objectContaining({
111
- agentId: "agent-1",
112
- sessionId: "session-1",
113
- status: "waiting_input",
114
- }));
115
- });
116
- it("uses explicit runtime callback token before persisted binding token", async () => {
117
- mockedAxiosPost.mockResolvedValueOnce({ data: { ok: true } });
118
- await sendStatus("agent-1", "session-1", "waiting_input", undefined, undefined, {
119
- runtimeAccessToken: "session-runtime-token",
120
- });
121
- expect(mockedAxiosPost).toHaveBeenCalledWith(expect.stringContaining("/api/runtime/callback/status"), {
122
- agentId: "agent-1",
123
- sessionId: "session-1",
124
- status: "waiting_input",
125
- }, { headers: { "X-Runtime-Token": "session-runtime-token" } });
126
- });
127
- it("sends structured source event metadata with SDK output chunks", async () => {
128
- mockedAxiosPost.mockResolvedValueOnce({ data: { ok: true } });
129
- await sendOutput("agent-1", "answer chunk", "session-1", 7, { sourceEventType: "text_delta" }, { runtimeAccessToken: "session-runtime-token" });
130
- expect(mockedAxiosPost).toHaveBeenCalledWith(expect.stringContaining("/api/runtime/callback/output"), {
131
- agentId: "agent-1",
132
- output: "answer chunk",
133
- sessionId: "session-1",
134
- seq: 7,
135
- sourceEventType: "text_delta",
136
- }, { headers: { "X-Runtime-Token": "session-runtime-token" } });
137
- });
138
- it("uses launch scheduler URL for Docker-deployed scheduler callbacks", async () => {
139
- mockedAxiosPost.mockResolvedValue({ data: { ok: true } });
140
- await sendStatus("agent-1", "session-1", "thinking", undefined, undefined, {
141
- runtimeAccessToken: "session-runtime-token",
142
- schedulerBaseUrl: "http://127.0.0.1:7380",
143
- });
144
- await sendOutput("agent-1", "[ACode] 正在请求模型 gpt-test:hello", "session-1", 8, { sourceEventType: "ai_request", logCategory: "acode" }, {
145
- runtimeAccessToken: "session-runtime-token",
146
- schedulerBaseUrl: "http://127.0.0.1:7380",
147
- });
148
- expect(mockedAxiosPost).toHaveBeenNthCalledWith(1, "http://127.0.0.1:7380/api/runtime/callback/status", {
149
- agentId: "agent-1",
150
- sessionId: "session-1",
151
- status: "thinking",
152
- }, { headers: { "X-Runtime-Token": "session-runtime-token" } });
153
- expect(mockedAxiosPost).toHaveBeenNthCalledWith(2, "http://127.0.0.1:7380/api/runtime/callback/output", {
154
- agentId: "agent-1",
155
- output: "[ACode] 正在请求模型 gpt-test:hello",
156
- sessionId: "session-1",
157
- seq: 8,
158
- sourceEventType: "ai_request",
159
- logCategory: "acode",
160
- }, { headers: { "X-Runtime-Token": "session-runtime-token" } });
161
- });
162
- it("looks up persisted runtime token by launch scheduler URL when explicit token is missing", async () => {
163
- mockedAxiosPost.mockResolvedValueOnce({ data: { ok: true } });
164
- mockedGetRuntimeAccessToken.mockImplementationOnce((_, serverBaseUrl) => serverBaseUrl === "http://127.0.0.1:7380"
165
- ? "scoped-7380-token"
166
- : undefined);
167
- await sendStatus("agent-1", "session-1", "thinking", undefined, undefined, {
168
- schedulerBaseUrl: "http://127.0.0.1:7380",
169
- });
170
- expect(mockedGetRuntimeAccessToken).toHaveBeenNthCalledWith(1, undefined, "http://127.0.0.1:7380");
171
- expect(mockedAxiosPost).toHaveBeenCalledWith("http://127.0.0.1:7380/api/runtime/callback/status", {
172
- agentId: "agent-1",
173
- sessionId: "session-1",
174
- status: "thinking",
175
- }, { headers: { "X-Runtime-Token": "scoped-7380-token" } });
176
- });
177
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=startup-config-wizard.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup-config-wizard.test.d.ts","sourceRoot":"","sources":["../../src/services/startup-config-wizard.test.ts"],"names":[],"mappings":""}
@@ -1,184 +0,0 @@
1
- import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } 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 { configureStartupConfig, ensureStartupConfig, } from "./startup-config-wizard.js";
6
- class FakePrompt {
7
- constructor(answers) {
8
- this.answers = answers;
9
- this.index = 0;
10
- this.closed = false;
11
- this.prompts = [];
12
- }
13
- async question(prompt) {
14
- this.prompts.push(prompt);
15
- return this.answers[this.index++] ?? "";
16
- }
17
- close() {
18
- this.closed = true;
19
- }
20
- }
21
- const tempRoots = [];
22
- function createConfigPath() {
23
- const root = mkdtempSync(path.join(os.tmpdir(), "aws-bridge-wizard-"));
24
- tempRoots.push(root);
25
- return path.join(root, ".aws-bridge", "config.json");
26
- }
27
- afterEach(() => {
28
- for (const root of tempRoots.splice(0)) {
29
- rmSync(root, { recursive: true, force: true });
30
- }
31
- });
32
- describe("startup config wizard", () => {
33
- it("does not prompt when config file already exists", async () => {
34
- const configPath = createConfigPath();
35
- mkdirSync(path.dirname(configPath), { recursive: true });
36
- writeFileSync(configPath, "{}", "utf-8");
37
- const prompt = new FakePrompt([]);
38
- const result = await ensureStartupConfig({ configPath, interactive: true, prompt });
39
- expect(result).toBe("exists");
40
- expect(prompt.closed).toBe(false);
41
- });
42
- it("writes generated connection key when user chooses no", async () => {
43
- const configPath = createConfigPath();
44
- const prompt = new FakePrompt(["n"]);
45
- const result = await ensureStartupConfig({
46
- configPath,
47
- interactive: true,
48
- prompt,
49
- generateConnectionKey: () => "awsb_test_generated_key",
50
- });
51
- expect(result).toBe("skipped");
52
- expect(JSON.parse(readFileSync(configPath, "utf-8"))).toEqual({
53
- connectionKey: "awsb_test_generated_key",
54
- });
55
- });
56
- it("writes connection key and auto register target from interactive answers", async () => {
57
- const configPath = createConfigPath();
58
- const prompt = new FakePrompt([
59
- "y",
60
- "gkmzjaznX55..",
61
- "http://127.0.0.1:8080",
62
- "至强主机",
63
- "aws_live_crh_g0GGrg5IntODg1sFwnas7qf4yGrcwoisDWPBtd8",
64
- "127.0.0.1",
65
- ]);
66
- const result = await ensureStartupConfig({ configPath, interactive: true, prompt });
67
- expect(result).toBe("created");
68
- expect(JSON.parse(readFileSync(configPath, "utf-8"))).toEqual({
69
- connectionKey: "gkmzjaznX55..",
70
- autoRegisterTargets: [
71
- {
72
- serverUrl: "http://127.0.0.1:8080",
73
- instanceName: "至强主机",
74
- userKey: "aws_live_crh_g0GGrg5IntODg1sFwnas7qf4yGrcwoisDWPBtd8",
75
- registerIp: "127.0.0.1",
76
- },
77
- ],
78
- });
79
- });
80
- it("writes generated connection key and does not block startup in non-interactive environments", async () => {
81
- const configPath = createConfigPath();
82
- const result = await ensureStartupConfig({
83
- configPath,
84
- interactive: false,
85
- generateConnectionKey: () => "awsb_non_interactive_key",
86
- });
87
- expect(result).toBe("non-interactive");
88
- expect(JSON.parse(readFileSync(configPath, "utf-8"))).toEqual({
89
- connectionKey: "awsb_non_interactive_key",
90
- });
91
- });
92
- it("supports environment opt-out for unattended startup", async () => {
93
- const configPath = createConfigPath();
94
- const result = await ensureStartupConfig({
95
- configPath,
96
- interactive: true,
97
- env: { AWS_BRIDGE_SKIP_SETUP: "true" },
98
- generateConnectionKey: () => "awsb_env_skip_key",
99
- });
100
- expect(result).toBe("skipped");
101
- expect(JSON.parse(readFileSync(configPath, "utf-8"))).toEqual({
102
- connectionKey: "awsb_env_skip_key",
103
- });
104
- });
105
- it("reconfigures existing config and keeps current values on empty input", async () => {
106
- const configPath = createConfigPath();
107
- mkdirSync(path.dirname(configPath), { recursive: true });
108
- writeFileSync(configPath, JSON.stringify({
109
- connectionKey: "old-connection-key",
110
- autoRegisterTargets: [
111
- {
112
- serverUrl: "http://old-server:7380",
113
- instanceName: "old-instance",
114
- userKey: "old-user-key",
115
- registerIp: "10.0.0.8",
116
- },
117
- ],
118
- }, null, 2), "utf-8");
119
- const prompt = new FakePrompt(["", "", "", "", ""]);
120
- const result = await configureStartupConfig({
121
- configPath,
122
- interactive: true,
123
- prompt,
124
- });
125
- expect(result).toBe("configured");
126
- expect(JSON.parse(readFileSync(configPath, "utf-8"))).toEqual({
127
- connectionKey: "old-connection-key",
128
- autoRegisterTargets: [
129
- {
130
- serverUrl: "http://old-server:7380",
131
- instanceName: "old-instance",
132
- userKey: "old-user-key",
133
- registerIp: "10.0.0.8",
134
- },
135
- ],
136
- });
137
- expect(prompt.prompts).toEqual([
138
- "connectionKey(面板连接 Bridge 的密钥)(默认使用当前值 old-connection-key,直接回车保留): ",
139
- "serverUrl(调度中心地址)(默认使用当前值 http://old-server:7380,直接回车保留): ",
140
- "instanceName(实例名称)(默认使用当前值 old-instance,直接回车保留): ",
141
- "userKey(用户 API Key)(默认使用当前值 old-user-key,直接回车保留): ",
142
- "registerIp(Bridge 对外访问 IP)(默认使用当前值 10.0.0.8,直接回车保留): ",
143
- ]);
144
- });
145
- it("reconfigures existing config with changed values", async () => {
146
- const configPath = createConfigPath();
147
- mkdirSync(path.dirname(configPath), { recursive: true });
148
- writeFileSync(configPath, JSON.stringify({
149
- connectionKey: "old-connection-key",
150
- autoRegisterTargets: [
151
- {
152
- serverUrl: "http://old-server:7380",
153
- instanceName: "old-instance",
154
- userKey: "old-user-key",
155
- registerIp: "10.0.0.8",
156
- },
157
- ],
158
- }), "utf-8");
159
- const prompt = new FakePrompt([
160
- "new-connection-key",
161
- "http://new-server:7380",
162
- "new-instance",
163
- "new-user-key",
164
- "10.0.0.9",
165
- ]);
166
- const result = await configureStartupConfig({
167
- configPath,
168
- interactive: true,
169
- prompt,
170
- });
171
- expect(result).toBe("configured");
172
- expect(JSON.parse(readFileSync(configPath, "utf-8"))).toEqual({
173
- connectionKey: "new-connection-key",
174
- autoRegisterTargets: [
175
- {
176
- serverUrl: "http://new-server:7380",
177
- instanceName: "new-instance",
178
- userKey: "new-user-key",
179
- registerIp: "10.0.0.9",
180
- },
181
- ],
182
- });
183
- });
184
- });
@@ -1,5 +0,0 @@
1
- /**
2
- * Terminal Persistence 服务单元测试
3
- */
4
- export {};
5
- //# sourceMappingURL=terminal-persistence.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal-persistence.test.d.ts","sourceRoot":"","sources":["../../src/services/terminal-persistence.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,159 +0,0 @@
1
- /**
2
- * Terminal Persistence 服务单元测试
3
- */
4
- import { promises as fs } from 'node:fs';
5
- import path from 'node:path';
6
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
7
- const tmpRoot = path.join(process.cwd(), '.tmp-vitest-terminal-persistence');
8
- vi.mock('node:os', () => ({
9
- default: {
10
- tmpdir: () => tmpRoot,
11
- },
12
- }));
13
- const persistence = await import('./terminal-persistence.js');
14
- function makeSession(sessionId, agentId) {
15
- return {
16
- sessionId,
17
- agentId,
18
- workspacePath: `/workspace/${agentId}`,
19
- command: 'claude',
20
- startedAt: new Date(0).toISOString(),
21
- status: 'running',
22
- };
23
- }
24
- describe('terminal-persistence service', () => {
25
- beforeEach(async () => {
26
- await fs.rm(tmpRoot, { recursive: true, force: true });
27
- });
28
- afterEach(async () => {
29
- await fs.rm(tmpRoot, { recursive: true, force: true });
30
- });
31
- it('generates correct file path', () => {
32
- const getPersistedSessionsFile = (tmpdir) => {
33
- return `${tmpdir}/agentswork-runtime-bridge/sessions.json`;
34
- };
35
- const path = getPersistedSessionsFile('/tmp');
36
- expect(path.includes('agentswork-runtime-bridge')).toBe(true);
37
- expect(path.endsWith('sessions.json')).toBe(true);
38
- });
39
- it('serializes sessions to JSON correctly', () => {
40
- const sessions = [{ sessionId: 'session-1', agentId: 'agent-1', status: 'running' }];
41
- const json = JSON.stringify(sessions);
42
- const parsed = JSON.parse(json);
43
- expect(parsed.length).toBe(1);
44
- expect(parsed[0].sessionId).toBe('session-1');
45
- });
46
- it('filters running sessions on load', () => {
47
- const sessions = [
48
- { sessionId: 's1', status: 'running' },
49
- { sessionId: 's2', status: 'stopped' },
50
- { sessionId: 's3', status: 'running' },
51
- ];
52
- const runningSessions = sessions.filter(s => s.status === 'running');
53
- expect(runningSessions.length).toBe(2);
54
- });
55
- it('adds new session', () => {
56
- const sessions = [];
57
- const upsertSession = (newSession) => {
58
- const index = sessions.findIndex(s => s.sessionId === newSession.sessionId);
59
- if (index >= 0)
60
- sessions[index] = newSession;
61
- else
62
- sessions.push(newSession);
63
- };
64
- upsertSession({ sessionId: 'session-1', agentId: 'agent-1' });
65
- expect(sessions.length).toBe(1);
66
- });
67
- it('updates existing session', () => {
68
- const sessions = [{ sessionId: 'session-1', status: 'running' }];
69
- const index = sessions.findIndex(s => s.sessionId === 'session-1');
70
- if (index >= 0)
71
- sessions[index] = { sessionId: 'session-1', status: 'stopped' };
72
- expect(sessions[0].status).toBe('stopped');
73
- });
74
- it('removes session by id', () => {
75
- const sessions = [{ sessionId: 's1' }, { sessionId: 's2' }];
76
- const index = sessions.findIndex(s => s.sessionId === 's2');
77
- if (index >= 0)
78
- sessions.splice(index, 1);
79
- expect(sessions.length).toBe(1);
80
- expect(sessions.find(s => s.sessionId === 's2')).toBeUndefined();
81
- });
82
- it('prefers removing persisted session after stop to prevent later recovery', () => {
83
- const sessions = [
84
- { sessionId: 's1', agentId: 'a1', status: 'running' },
85
- { sessionId: 's2', agentId: 'a2', status: 'running' },
86
- ];
87
- const stoppedSessionId = 's1';
88
- const afterRemove = sessions.filter(s => s.sessionId !== stoppedSessionId);
89
- expect(afterRemove).toEqual([
90
- { sessionId: 's2', agentId: 'a2', status: 'running' },
91
- ]);
92
- expect(afterRemove.find(s => s.sessionId === stoppedSessionId)).toBeUndefined();
93
- });
94
- it('finds session by agentId', () => {
95
- const sessions = [
96
- { sessionId: 's1', agentId: 'a1' },
97
- { sessionId: 's2', agentId: 'a2' },
98
- ];
99
- const found = sessions.find(s => s.agentId === 'a2');
100
- expect(found?.sessionId).toBe('s2');
101
- });
102
- it('handles invalid JSON on load', () => {
103
- const parseSessions = (raw) => {
104
- try {
105
- return JSON.parse(raw);
106
- }
107
- catch {
108
- return [];
109
- }
110
- };
111
- expect(parseSessions('invalid json')).toEqual([]);
112
- });
113
- it('keeps a single running session per agent when upserting', async () => {
114
- await persistence.upsertPersistedSession(makeSession('session-old', 'agent-1'));
115
- await persistence.upsertPersistedSession(makeSession('session-new', 'agent-1'));
116
- const sessions = await persistence.loadPersistedSessions();
117
- expect(sessions).toHaveLength(1);
118
- expect(sessions[0].sessionId).toBe('session-new');
119
- });
120
- it('persists latest runtime action state for restart recovery', async () => {
121
- await persistence.upsertPersistedSession(makeSession('session-1', 'agent-1'));
122
- const updated = await persistence.updatePersistedSessionRuntimeState('session-1', {
123
- runtimeStatus: 'tool_using',
124
- runtimeActionType: 'mcp',
125
- runtimeActionLabel: 'poll_message',
126
- runtimeActionDetail: '等待群聊消息',
127
- });
128
- const sessions = await persistence.loadPersistedSessions();
129
- expect(updated).toBe(true);
130
- expect(sessions[0]).toMatchObject({
131
- sessionId: 'session-1',
132
- runtimeStatus: 'tool_using',
133
- runtimeActionType: 'mcp',
134
- runtimeActionLabel: 'poll_message',
135
- runtimeActionDetail: '等待群聊消息',
136
- });
137
- });
138
- it('serializes concurrent upserts without losing sessions', async () => {
139
- await Promise.all([
140
- persistence.upsertPersistedSession(makeSession('session-1', 'agent-1')),
141
- persistence.upsertPersistedSession(makeSession('session-2', 'agent-2')),
142
- persistence.upsertPersistedSession(makeSession('session-3', 'agent-3')),
143
- ]);
144
- const sessions = await persistence.loadPersistedSessions();
145
- expect(sessions.map(session => session.sessionId).sort()).toEqual(['session-1', 'session-2', 'session-3']);
146
- });
147
- it('does not revive a removed session during concurrent writes', async () => {
148
- await persistence.savePersistedSessions([
149
- makeSession('session-1', 'agent-1'),
150
- makeSession('session-2', 'agent-2'),
151
- ]);
152
- await Promise.all([
153
- persistence.removePersistedSession('session-1'),
154
- persistence.upsertPersistedSession(makeSession('session-3', 'agent-3')),
155
- ]);
156
- const sessions = await persistence.loadPersistedSessions();
157
- expect(sessions.map(session => session.sessionId).sort()).toEqual(['session-2', 'session-3']);
158
- });
159
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=tool-installer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-installer.test.d.ts","sourceRoot":"","sources":["../../src/services/tool-installer.test.ts"],"names":[],"mappings":""}