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,5 +0,0 @@
1
- /**
2
- * YAML 路由单元测试
3
- */
4
- export {};
5
- //# sourceMappingURL=yml.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"yml.test.d.ts","sourceRoot":"","sources":["../../src/routes/yml.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,58 +0,0 @@
1
- /**
2
- * YAML 路由单元测试
3
- */
4
- import { describe, it, expect } from 'vitest';
5
- describe('yml route validation', () => {
6
- it('requires workspacePath for read', () => {
7
- const validateReadRequest = (body) => {
8
- const normalizedWorkspace = body.workspacePath ? String(body.workspacePath).trim() : '';
9
- if (!normalizedWorkspace)
10
- return { valid: false, error: 'workspacePath is required' };
11
- return { valid: true };
12
- };
13
- expect(validateReadRequest({}).valid).toBe(false);
14
- expect(validateReadRequest({ workspacePath: '/valid/path' }).valid).toBe(true);
15
- });
16
- it('requires workspacePath and content for write', () => {
17
- const validateWriteRequest = (body) => {
18
- const normalizedWorkspace = body.workspacePath ? String(body.workspacePath).trim() : '';
19
- if (!normalizedWorkspace)
20
- return { valid: false, error: 'workspacePath is required' };
21
- if (!body.content || !String(body.content).trim())
22
- return { valid: false, error: 'content is required' };
23
- return { valid: true };
24
- };
25
- expect(validateWriteRequest({}).valid).toBe(false);
26
- expect(validateWriteRequest({ workspacePath: '/path', content: 'test' }).valid).toBe(true);
27
- });
28
- it('uses default ymlPath when not provided', () => {
29
- const resolveYmlPath = (ymlPath) => {
30
- return ymlPath ? String(ymlPath).trim() || '.agentswork/my.yml' : '.agentswork/my.yml';
31
- };
32
- expect(resolveYmlPath()).toBe('.agentswork/my.yml');
33
- expect(resolveYmlPath('custom/path.yml')).toBe('custom/path.yml');
34
- });
35
- });
36
- describe('response building', () => {
37
- it('builds correct response for existing file', () => {
38
- const response = {
39
- ok: true,
40
- workspacePath: '/project/workspace',
41
- filePath: '/project/.agentswork/my.yml',
42
- exists: true,
43
- content: 'agent:\n - name: test',
44
- };
45
- expect(response.ok).toBe(true);
46
- expect(response.exists).toBe(true);
47
- });
48
- it('builds correct response for non-existing file', () => {
49
- const response = {
50
- ok: true,
51
- exists: false,
52
- fullContent: null,
53
- isTemplate: true,
54
- };
55
- expect(response.exists).toBe(false);
56
- expect(response.isTemplate).toBe(true);
57
- });
58
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ai-source-apply.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-source-apply.test.d.ts","sourceRoot":"","sources":["../../src/services/ai-source-apply.test.ts"],"names":[],"mappings":""}
@@ -1,138 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- function status(tool, installed) {
3
- return {
4
- tool,
5
- installed,
6
- executable: installed ? tool : null,
7
- version: installed ? '1.0.0' : null,
8
- installing: false,
9
- error: installed ? null : 'not installed',
10
- };
11
- }
12
- describe('applyCurrentAiConfigToInstalledTools', () => {
13
- it('forces current unified AI config and skips uninstalled tools', async () => {
14
- const applyClaudeCodeConfig = vi.fn(async (config) => config);
15
- const applyCodexConfig = vi.fn(async (config) => config);
16
- const applyOpenCodeConfig = vi.fn(async (config) => config);
17
- const applyAcodeConfig = vi.fn(async (config) => config);
18
- const { applyCurrentAiConfigToInstalledTools } = await import('./ai-source-apply.js');
19
- const result = await applyCurrentAiConfigToInstalledTools({
20
- template: {
21
- baseUrl: 'https://current.example.com',
22
- apiKey: 'sk-current',
23
- model: 'gpt-current',
24
- },
25
- requestedSources: {
26
- claudecode: { env: { ANTHROPIC_BASE_URL: 'https://stale.example.com' } },
27
- codex: { model: 'stale-codex' },
28
- opencode: { provider: { default: { options: { baseURL: 'https://stale.example.com/v1' } } } },
29
- },
30
- toolStatus: {
31
- acode: status('acode', true),
32
- claude: status('claude', true),
33
- codex: status('codex', false),
34
- opencode: status('opencode', true),
35
- },
36
- aiConfigService: {
37
- applyAcodeConfig,
38
- applyClaudeCodeConfig,
39
- applyCodexConfig,
40
- applyOpenCodeConfig,
41
- },
42
- });
43
- expect(applyClaudeCodeConfig).toHaveBeenCalledWith({
44
- env: {
45
- ANTHROPIC_BASE_URL: 'https://current.example.com',
46
- ANTHROPIC_AUTH_TOKEN: 'sk-current',
47
- ANTHROPIC_MODEL: 'gpt-current',
48
- },
49
- });
50
- expect(applyCodexConfig).not.toHaveBeenCalled();
51
- expect(applyOpenCodeConfig).toHaveBeenCalledWith(expect.objectContaining({
52
- provider: expect.objectContaining({
53
- default: expect.objectContaining({
54
- model: 'gpt-current',
55
- options: expect.objectContaining({
56
- baseURL: 'https://current.example.com/v1',
57
- apiKey: 'sk-current',
58
- }),
59
- }),
60
- }),
61
- }));
62
- expect(applyAcodeConfig).toHaveBeenCalledOnce();
63
- expect(result.applied.codex).toEqual([]);
64
- expect(result.skippedTools).toEqual(['codex']);
65
- }, 15_000);
66
- it('applies Claude Code config when the installed tool status uses the claudecode alias', async () => {
67
- const applyClaudeCodeConfig = vi.fn(async (config) => config);
68
- const { applyCurrentAiConfigToInstalledTools } = await import('./ai-source-apply.js');
69
- await applyCurrentAiConfigToInstalledTools({
70
- template: {
71
- baseUrl: 'https://current.example.com',
72
- apiKey: 'sk-current',
73
- model: 'gpt-current',
74
- },
75
- toolStatus: {
76
- claudecode: status('claudecode', true),
77
- },
78
- aiConfigService: {
79
- applyAcodeConfig: vi.fn(async (config) => config),
80
- applyClaudeCodeConfig,
81
- applyCodexConfig: vi.fn(async (config) => config),
82
- applyOpenCodeConfig: vi.fn(async (config) => config),
83
- },
84
- });
85
- expect(applyClaudeCodeConfig).toHaveBeenCalledOnce();
86
- });
87
- it('applies explicit per-tool AI sources when no unified template is present', async () => {
88
- const applyClaudeCodeConfig = vi.fn(async (config) => config);
89
- const applyCodexConfig = vi.fn(async (config) => config);
90
- const applyOpenCodeConfig = vi.fn(async (config) => config);
91
- const applyAcodeConfig = vi.fn(async (config) => config);
92
- const { applyCurrentAiConfigToInstalledTools } = await import('./ai-source-apply.js');
93
- const result = await applyCurrentAiConfigToInstalledTools({
94
- template: null,
95
- requestedSources: {
96
- claudecode: {
97
- env: {
98
- ANTHROPIC_BASE_URL: 'https://explicit.example.com',
99
- ANTHROPIC_AUTH_TOKEN: 'sk-explicit',
100
- ANTHROPIC_MODEL: 'claude-explicit',
101
- },
102
- },
103
- codex: { model: 'gpt-explicit' },
104
- opencode: {
105
- provider: {
106
- default: {
107
- options: { baseURL: 'https://explicit.example.com/v1', apiKey: 'sk-explicit' },
108
- },
109
- },
110
- },
111
- },
112
- toolStatus: {
113
- claude: status('claude', true),
114
- codex: status('codex', true),
115
- opencode: status('opencode', true),
116
- },
117
- aiConfigService: {
118
- applyAcodeConfig,
119
- applyClaudeCodeConfig,
120
- applyCodexConfig,
121
- applyOpenCodeConfig,
122
- },
123
- });
124
- expect(applyClaudeCodeConfig).toHaveBeenCalledWith({
125
- env: {
126
- ANTHROPIC_BASE_URL: 'https://explicit.example.com',
127
- ANTHROPIC_AUTH_TOKEN: 'sk-explicit',
128
- ANTHROPIC_MODEL: 'claude-explicit',
129
- },
130
- });
131
- expect(applyCodexConfig).toHaveBeenCalledWith({ model: 'gpt-explicit' });
132
- expect(applyOpenCodeConfig).toHaveBeenCalledOnce();
133
- expect(result.generatedFromUnifiedTemplate).toBe(false);
134
- expect(result.applied.claudecode).toEqual(['env']);
135
- expect(result.applied.codex).toEqual(['model']);
136
- expect(result.applied.opencode).toEqual(['provider']);
137
- });
138
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=auto-register.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-register.test.d.ts","sourceRoot":"","sources":["../../src/services/auto-register.test.ts"],"names":[],"mappings":""}
@@ -1,184 +0,0 @@
1
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { afterEach, describe, expect, it, vi } from "vitest";
5
- vi.mock("node:os", async () => {
6
- const actual = await vi.importActual("node:os");
7
- const mocked = {
8
- ...actual,
9
- homedir: () => process.env.AWS_TEST_HOME || actual.homedir(),
10
- };
11
- return {
12
- ...mocked,
13
- default: mocked,
14
- };
15
- });
16
- vi.mock("axios", () => ({
17
- default: {
18
- post: vi.fn(),
19
- },
20
- }));
21
- const originalEnv = { ...process.env };
22
- const tempRoots = [];
23
- function createRuntimeHome() {
24
- const root = mkdtempSync(path.join(os.tmpdir(), "aws-auto-register-"));
25
- tempRoots.push(root);
26
- return root;
27
- }
28
- function writeAutoRegisterConfig(homeDir, targets) {
29
- const configPath = path.join(homeDir, ".aws-bridge", "config.json");
30
- const autoRegisterTargets = (typeof targets === "string"
31
- ? [{ serverUrl: targets }]
32
- : targets).map((target, index) => {
33
- const normalizedTarget = {
34
- serverUrl: target.serverUrl,
35
- instanceName: target.instanceName || `test-bridge-${index + 1}`,
36
- userKey: target.userKey || `aws_live_test_key_${index + 1}`,
37
- };
38
- if (!target.omitRegisterIp) {
39
- normalizedTarget.registerIp = target.registerIp || "127.0.0.1";
40
- }
41
- return normalizedTarget;
42
- });
43
- mkdirSync(path.dirname(configPath), { recursive: true });
44
- writeFileSync(configPath, `${JSON.stringify({
45
- connectionKey: "bridge-key",
46
- autoRegisterTargets,
47
- }, null, 2)}\n`, "utf-8");
48
- }
49
- function useRuntimeHome(runtimeHome) {
50
- process.env.AWS_TEST_HOME = runtimeHome;
51
- process.env.HOME = runtimeHome;
52
- process.env.USERPROFILE = runtimeHome;
53
- process.env.AWS_RUNTIME_HOME_DIR = runtimeHome;
54
- process.env.AWS_RUNTIME_SCHEDULER_BASE_URL = "";
55
- }
56
- async function mockSuccessfulPost(response) {
57
- const { default: axios } = await import("axios");
58
- vi.mocked(axios.post).mockResolvedValue({ data: response });
59
- return vi.mocked(axios.post);
60
- }
61
- afterEach(() => {
62
- process.env = { ...originalEnv };
63
- vi.resetModules();
64
- vi.clearAllMocks();
65
- vi.restoreAllMocks();
66
- for (const root of tempRoots.splice(0)) {
67
- rmSync(root, { recursive: true, force: true });
68
- }
69
- });
70
- describe("auto-register scheduler URL selection", () => {
71
- it("uses loopback scheduler URLs without warning when registerIp is omitted", async () => {
72
- const runtimeHome = createRuntimeHome();
73
- useRuntimeHome(runtimeHome);
74
- writeAutoRegisterConfig(runtimeHome, [
75
- { serverUrl: "http://127.0.0.1:7380", omitRegisterIp: true },
76
- ]);
77
- const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => undefined);
78
- const post = await mockSuccessfulPost({
79
- success: true,
80
- instanceId: "bridge-loopback",
81
- userId: "user-loopback",
82
- message: "ok",
83
- runtimeAccessToken: "runtime-token-loopback-123456",
84
- });
85
- const { autoRegister } = await import("./auto-register.js");
86
- await expect(autoRegister()).resolves.toBe(true);
87
- expect(warnSpy).not.toHaveBeenCalledWith(expect.stringContaining("未找到与调度中心 (127.0.0.1) 同子网的本机 IP"));
88
- expect(post.mock.calls[0]?.[1]).toMatchObject({
89
- runtimeBridgeBaseUrl: "http://127.0.0.1:18081",
90
- });
91
- });
92
- it("uses configured serverUrl for lifecycle callbacks when env scheduler URL is absent", async () => {
93
- const runtimeHome = createRuntimeHome();
94
- useRuntimeHome(runtimeHome);
95
- writeAutoRegisterConfig(runtimeHome, "http://127.0.0.1:7380");
96
- const post = await mockSuccessfulPost({
97
- success: true,
98
- instanceId: "bridge-instance-1",
99
- userId: "user-1",
100
- message: "ok",
101
- runtimeAccessToken: "runtime-token-123456",
102
- });
103
- const { autoRegister, bridgeRestartCleanup, requestRuntimeAccessTokenRefresh, unregister } = await import("./auto-register.js");
104
- await expect(autoRegister()).resolves.toBe(true);
105
- await expect(bridgeRestartCleanup()).resolves.toMatchObject({ success: true });
106
- post.mockResolvedValueOnce({
107
- data: {
108
- success: true,
109
- runtimeAccessToken: "refreshed-token-123456",
110
- userId: "user-1",
111
- },
112
- });
113
- await expect(requestRuntimeAccessTokenRefresh()).resolves.toMatchObject({
114
- success: true,
115
- runtimeAccessToken: "refreshed-token-123456",
116
- });
117
- post.mockResolvedValueOnce({ data: { success: true, message: "unregistered" } });
118
- await expect(unregister()).resolves.toBe(true);
119
- expect(post.mock.calls[0]?.[0]).toBe("http://127.0.0.1:7380/api/instances/register");
120
- expect(post.mock.calls[1]?.[0]).toBe("http://127.0.0.1:7380/api/instances/bridge-restart-cleanup");
121
- expect(post.mock.calls[2]?.[0]).toBe("http://127.0.0.1:7380/api/instances/runtime-tokens/refresh");
122
- expect(post.mock.calls[3]?.[0]).toBe("http://127.0.0.1:7380/api/instances/unregister");
123
- expect(post.mock.calls[3]?.[2]?.headers?.["X-Runtime-Token"]).toBe("refreshed-token-123456");
124
- const { getRuntimeAccessToken, loadRuntimeBinding } = await import("./runtime-binding.js");
125
- expect(getRuntimeAccessToken("user-1", "http://127.0.0.1:7380")).toBeUndefined();
126
- expect(loadRuntimeBinding().status).toBe("unpaired");
127
- });
128
- it("uses the registered target URL instead of the first configured target", async () => {
129
- const runtimeHome = createRuntimeHome();
130
- useRuntimeHome(runtimeHome);
131
- writeAutoRegisterConfig(runtimeHome, [
132
- { serverUrl: "http://scheduler-a.local:7380", userKey: "aws_live_key_a" },
133
- { serverUrl: "http://scheduler-b.local:7380", userKey: "aws_live_key_b" },
134
- ]);
135
- const post = await mockSuccessfulPost({ success: false, message: "unexpected" });
136
- post.mockResolvedValueOnce({
137
- data: {
138
- success: true,
139
- instanceId: "bridge-a",
140
- userId: "user-a",
141
- runtimeAccessToken: "runtime-token-a-123456",
142
- },
143
- });
144
- post.mockResolvedValueOnce({
145
- data: {
146
- success: true,
147
- instanceId: "bridge-b",
148
- userId: "user-b",
149
- runtimeAccessToken: "runtime-token-b-123456",
150
- },
151
- });
152
- post.mockResolvedValueOnce({ data: { success: true, message: "cleanup ok" } });
153
- const { autoRegister, bridgeRestartCleanup } = await import("./auto-register.js");
154
- await expect(autoRegister()).resolves.toBe(true);
155
- await expect(bridgeRestartCleanup()).resolves.toMatchObject({ success: true });
156
- expect(post.mock.calls[0]?.[0]).toBe("http://scheduler-a.local:7380/api/instances/register");
157
- expect(post.mock.calls[1]?.[0]).toBe("http://scheduler-b.local:7380/api/instances/register");
158
- expect(post.mock.calls[2]?.[0]).toBe("http://scheduler-b.local:7380/api/instances/bridge-restart-cleanup");
159
- });
160
- it("falls back to paired runtime binding scheduler URL when config has no serverUrl", async () => {
161
- const runtimeHome = createRuntimeHome();
162
- useRuntimeHome(runtimeHome);
163
- const post = await mockSuccessfulPost({
164
- success: true,
165
- runtimeAccessToken: "binding-refresh-token-123456",
166
- userId: "user-from-binding",
167
- });
168
- const { saveRuntimeBinding } = await import("./runtime-binding.js");
169
- const { requestRuntimeAccessTokenRefresh } = await import("./auto-register.js");
170
- saveRuntimeBinding({
171
- accessToken: "existing-binding-token-123456",
172
- instanceId: "bridge-from-binding",
173
- userId: "user-from-binding",
174
- schedulerBaseUrl: "http://paired-scheduler.local:7380",
175
- });
176
- process.env.AWS_AUTO_REGISTER = "true";
177
- process.env.AWS_USER_KEY = "aws_live_env_key";
178
- await expect(requestRuntimeAccessTokenRefresh()).resolves.toMatchObject({
179
- success: true,
180
- runtimeAccessToken: "binding-refresh-token-123456",
181
- });
182
- expect(post.mock.calls[0]?.[0]).toBe("http://paired-scheduler.local:7380/api/instances/runtime-tokens/refresh");
183
- });
184
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=aws-client-agent-mcp.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aws-client-agent-mcp.test.d.ts","sourceRoot":"","sources":["../../src/services/aws-client-agent-mcp.test.ts"],"names":[],"mappings":""}
@@ -1,242 +0,0 @@
1
- import { spawnSync } from 'node:child_process';
2
- import { existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readlinkSync, realpathSync, rmSync, writeFileSync, } from 'node:fs';
3
- import os from 'node:os';
4
- import path from 'node:path';
5
- import { afterEach, describe, expect, it, vi } from 'vitest';
6
- const originalEnv = { ...process.env };
7
- afterEach(() => {
8
- process.env = { ...originalEnv };
9
- vi.resetModules();
10
- vi.restoreAllMocks();
11
- });
12
- function createBundledMcpPackage(version = '1.0.0') {
13
- const packageRoot = mkdtempSync(path.join(os.tmpdir(), 'aws-mcp-package-'));
14
- const bundledDist = path.join(packageRoot, 'package', 'aws-client-agent-mcp', 'dist');
15
- mkdirSync(bundledDist, { recursive: true });
16
- writeFileSync(path.join(packageRoot, 'package.json'), JSON.stringify({ name: 'aws-runtime-bridge', version: '9.9.9' }), 'utf-8');
17
- writeFileSync(path.join(packageRoot, 'package', 'aws-client-agent-mcp', 'package.json'), JSON.stringify({
18
- name: 'aws-client-agent-mcp',
19
- version,
20
- type: 'module',
21
- main: 'dist/index.js',
22
- dependencies: {
23
- '@modelcontextprotocol/sdk': '^1.27.1',
24
- ws: '^8.14.2',
25
- yaml: '^2.3.4',
26
- },
27
- }), 'utf-8');
28
- writeFileSync(path.join(packageRoot, 'package', 'aws-client-agent-mcp', 'README.md'), '# aws-client-agent-mcp\n', 'utf-8');
29
- mkdirSync(path.join(packageRoot, 'node_modules', '@modelcontextprotocol', 'sdk'), {
30
- recursive: true,
31
- });
32
- writeFileSync(path.join(packageRoot, 'node_modules', '@modelcontextprotocol', 'sdk', 'package.json'), JSON.stringify({
33
- name: '@modelcontextprotocol/sdk',
34
- version: '1.27.1',
35
- type: 'module',
36
- main: 'index.js',
37
- exports: './index.js',
38
- }), 'utf-8');
39
- writeFileSync(path.join(packageRoot, 'node_modules', '@modelcontextprotocol', 'sdk', 'index.js'), 'export const sdkMarker = "resolved-sdk";\n', 'utf-8');
40
- mkdirSync(path.join(packageRoot, 'node_modules', 'ws'), { recursive: true });
41
- mkdirSync(path.join(packageRoot, 'node_modules', 'yaml'), { recursive: true });
42
- writeFileSync(path.join(bundledDist, 'index.js'), 'console.log("mcp v1");\n', 'utf-8');
43
- return packageRoot;
44
- }
45
- describe('aws-client-agent-mcp service', () => {
46
- it('prefers explicit command override from env', async () => {
47
- process.env.AWS_CLIENT_AGENT_MCP_COMMAND = 'custom-aws-client-agent-mcp';
48
- process.env.AWS_CLIENT_AGENT_MCP_ARGS = JSON.stringify(['--stdio', '--trace']);
49
- const mod = await import('./aws-client-agent-mcp.js');
50
- expect(mod.resolveAwsClientAgentMcpCommand()).toEqual({
51
- source: 'override',
52
- command: 'custom-aws-client-agent-mcp',
53
- args: ['--stdio', '--trace'],
54
- });
55
- });
56
- it('uses bundled dist entry after release check', async () => {
57
- process.env.AWS_CLIENT_AGENT_MCP_COMMAND = '';
58
- const mod = await import('./aws-client-agent-mcp.js');
59
- const releasedEntry = path.join(os.homedir(), '.aws-bridge', 'mcp', 'dist', 'index.js');
60
- const exists = vi.fn((filePath) => filePath === releasedEntry);
61
- const release = vi.fn(() => releasedEntry);
62
- const resolved = mod.resolveAwsClientAgentMcpCommand({ exists, release });
63
- expect(resolved).toEqual({
64
- source: 'bundled',
65
- command: process.execPath,
66
- args: [releasedEntry],
67
- });
68
- expect(exists).toHaveBeenCalled();
69
- expect(release).toHaveBeenCalledOnce();
70
- });
71
- it('writes release manifest and skips copy when bundled mcp is unchanged', async () => {
72
- process.env.AWS_CLIENT_AGENT_MCP_COMMAND = '';
73
- const packageRoot = createBundledMcpPackage('1.0.0');
74
- const releasedRoot = mkdtempSync(path.join(os.tmpdir(), 'aws-mcp-release-'));
75
- try {
76
- const mod = await import('./aws-client-agent-mcp.js');
77
- const firstRelease = mod.releaseBundledAwsClientAgentMcp({
78
- packageRoot,
79
- releasedRoot,
80
- now: () => '2026-05-04T00:00:00.000Z',
81
- });
82
- const releasedIndex = path.join(releasedRoot, 'dist', 'index.js');
83
- const manifestPath = path.join(releasedRoot, '.release.json');
84
- const releasedPackageJson = path.join(releasedRoot, 'package.json');
85
- const releasedNodeModules = path.join(releasedRoot, 'node_modules');
86
- expect(firstRelease).toBe(releasedIndex);
87
- expect(existsSync(releasedIndex)).toBe(true);
88
- expect(JSON.parse(readFileSync(releasedPackageJson, 'utf-8'))).toMatchObject({
89
- name: 'aws-client-agent-mcp',
90
- version: '1.0.0',
91
- dependencies: {
92
- '@modelcontextprotocol/sdk': '^1.27.1',
93
- },
94
- });
95
- expect(readFileSync(path.join(releasedRoot, 'README.md'), 'utf-8')).toBe('# aws-client-agent-mcp\n');
96
- expect(lstatSync(releasedNodeModules).isSymbolicLink()).toBe(true);
97
- expect(realpathSync(releasedNodeModules)).toBe(realpathSync(path.join(packageRoot, 'node_modules')));
98
- expect(path.resolve(readlinkSync(releasedNodeModules))).toBe(path.join(packageRoot, 'node_modules'));
99
- const firstManifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
100
- expect(firstManifest).toMatchObject({
101
- bridgeVersion: '9.9.9',
102
- mcpVersion: '1.0.0',
103
- releasedAt: '2026-05-04T00:00:00.000Z',
104
- });
105
- expect(firstManifest.distHash).toMatch(/^sha256:/);
106
- writeFileSync(releasedIndex, 'console.log("local marker");\n', 'utf-8');
107
- rmSync(releasedNodeModules, { recursive: true, force: true });
108
- mkdirSync(releasedNodeModules, { recursive: true });
109
- mod.releaseBundledAwsClientAgentMcp({
110
- packageRoot,
111
- releasedRoot,
112
- now: () => '2026-05-05T00:00:00.000Z',
113
- });
114
- expect(readFileSync(releasedIndex, 'utf-8')).toBe('console.log("local marker");\n');
115
- expect(realpathSync(releasedNodeModules)).toBe(realpathSync(path.join(packageRoot, 'node_modules')));
116
- expect(JSON.parse(readFileSync(manifestPath, 'utf-8')).releasedAt).toBe('2026-05-04T00:00:00.000Z');
117
- }
118
- finally {
119
- rmSync(packageRoot, { recursive: true, force: true });
120
- rmSync(releasedRoot, { recursive: true, force: true });
121
- }
122
- });
123
- it('refreshes released mcp when bundled dist changes', async () => {
124
- process.env.AWS_CLIENT_AGENT_MCP_COMMAND = '';
125
- const packageRoot = createBundledMcpPackage('1.0.0');
126
- const releasedRoot = mkdtempSync(path.join(os.tmpdir(), 'aws-mcp-release-'));
127
- try {
128
- const mod = await import('./aws-client-agent-mcp.js');
129
- const bundledIndex = path.join(packageRoot, 'package', 'aws-client-agent-mcp', 'dist', 'index.js');
130
- const releasedIndex = path.join(releasedRoot, 'dist', 'index.js');
131
- mod.releaseBundledAwsClientAgentMcp({ packageRoot, releasedRoot });
132
- writeFileSync(bundledIndex, 'console.log("mcp v2");\n', 'utf-8');
133
- mod.releaseBundledAwsClientAgentMcp({
134
- packageRoot,
135
- releasedRoot,
136
- now: () => '2026-05-05T00:00:00.000Z',
137
- });
138
- expect(readFileSync(releasedIndex, 'utf-8')).toBe('console.log("mcp v2");\n');
139
- expect(JSON.parse(readFileSync(path.join(releasedRoot, '.release.json'), 'utf-8')).releasedAt).toBe('2026-05-05T00:00:00.000Z');
140
- }
141
- finally {
142
- rmSync(packageRoot, { recursive: true, force: true });
143
- rmSync(releasedRoot, { recursive: true, force: true });
144
- }
145
- });
146
- it('releases a runnable package root that resolves bundled mcp runtime dependencies', async () => {
147
- process.env.AWS_CLIENT_AGENT_MCP_COMMAND = '';
148
- const packageRoot = createBundledMcpPackage('1.0.0');
149
- const releasedRoot = mkdtempSync(path.join(os.tmpdir(), 'aws-mcp-release-'));
150
- try {
151
- const bundledIndex = path.join(packageRoot, 'package', 'aws-client-agent-mcp', 'dist', 'index.js');
152
- writeFileSync(bundledIndex, 'import { sdkMarker } from "@modelcontextprotocol/sdk";\nconsole.log(sdkMarker);\n', 'utf-8');
153
- const mod = await import('./aws-client-agent-mcp.js');
154
- const releasedEntry = mod.releaseBundledAwsClientAgentMcp({ packageRoot, releasedRoot });
155
- expect(releasedEntry).toBe(path.join(releasedRoot, 'dist', 'index.js'));
156
- if (!releasedEntry) {
157
- throw new Error('Expected bundled MCP release entry to exist');
158
- }
159
- const result = spawnSync(process.execPath, [releasedEntry], {
160
- cwd: releasedRoot,
161
- encoding: 'utf-8',
162
- });
163
- expect(result.stderr).toBe('');
164
- expect(result.status).toBe(0);
165
- expect(result.stdout.trim()).toBe('resolved-sdk');
166
- }
167
- finally {
168
- rmSync(packageRoot, { recursive: true, force: true });
169
- rmSync(releasedRoot, { recursive: true, force: true });
170
- }
171
- });
172
- it('releases bundled mcp into home directory when runtime dist is missing', async () => {
173
- process.env.AWS_CLIENT_AGENT_MCP_COMMAND = '';
174
- const mod = await import('./aws-client-agent-mcp.js');
175
- const releasedEntry = path.join(os.homedir(), '.aws-bridge', 'mcp', 'dist', 'index.js');
176
- let released = false;
177
- const exists = vi.fn((filePath) => released && filePath === releasedEntry);
178
- const release = vi.fn(() => {
179
- released = true;
180
- return releasedEntry;
181
- });
182
- expect(mod.resolveAwsClientAgentMcpCommand({ exists, release })).toEqual({
183
- source: 'bundled',
184
- command: process.execPath,
185
- args: [releasedEntry],
186
- });
187
- expect(release).toHaveBeenCalledOnce();
188
- });
189
- it('falls back to global aws-client-agent-mcp command when bundle is missing', async () => {
190
- process.env.AWS_CLIENT_AGENT_MCP_COMMAND = '';
191
- const mod = await import('./aws-client-agent-mcp.js');
192
- expect(mod.resolveAwsClientAgentMcpCommand({ exists: () => false, release: () => null })).toEqual({
193
- source: 'global',
194
- command: 'aws-client-agent-mcp',
195
- args: [],
196
- });
197
- });
198
- it('builds aws-mcp server config with inferred scheduler urls', async () => {
199
- process.env.AWS_CLIENT_AGENT_MCP_COMMAND = 'aws-client-agent-mcp';
200
- process.env.CUSTOM_SECRET = 'should-not-leak';
201
- process.env.AWS_RUNTIME_HOME_DIR = mkdtempSync(path.join(os.tmpdir(), 'aws-mcp-config-'));
202
- process.env.AWS_TEST_HOME = process.env.AWS_RUNTIME_HOME_DIR;
203
- process.env.AWS_RUNTIME_SCHEDULER_BASE_URL = '';
204
- process.env.AWS_SERVER_URL = '';
205
- process.env.AWS_MCP_HTTP_URL = '';
206
- const mod = await import('./aws-client-agent-mcp.js');
207
- const config = mod.buildAwsMcpServerConfig({
208
- agentId: 'agent-1',
209
- workspacePath: '/workspace/demo',
210
- });
211
- expect(config.command).toBe('aws-client-agent-mcp');
212
- expect(config.env.AWS_AGENT_ID).toBe('agent-1');
213
- expect(config.env.AWS_WORKSPACE_PATH).toBe('/workspace/demo');
214
- expect(config.env.AWS_SERVER_URL).toBe('ws://localhost:8080/ws/agent');
215
- expect(config.env.AWS_MCP_HTTP_URL).toBe('http://localhost:8080/mcp/call');
216
- expect(config.env.CUSTOM_SECRET).toBeUndefined();
217
- });
218
- it('repairs duplicated scheduler ports when building MCP URLs', async () => {
219
- process.env.AWS_CLIENT_AGENT_MCP_COMMAND = 'aws-client-agent-mcp';
220
- process.env.AWS_RUNTIME_HOME_DIR = mkdtempSync(path.join(os.tmpdir(), 'aws-mcp-config-'));
221
- process.env.AWS_RUNTIME_SCHEDULER_BASE_URL = 'http://127.0.0.1:8080:8080';
222
- process.env.AWS_SERVER_URL = '';
223
- process.env.AWS_MCP_HTTP_URL = '';
224
- const mod = await import('./aws-client-agent-mcp.js');
225
- const config = mod.buildAwsMcpServerConfig({
226
- agentId: 'agent-1',
227
- workspacePath: '/workspace/demo',
228
- });
229
- expect(config.env.AWS_SERVER_URL).toBe('ws://127.0.0.1:8080/ws/agent');
230
- expect(config.env.AWS_MCP_HTTP_URL).toBe('http://127.0.0.1:8080/mcp/call');
231
- });
232
- it('ignores malformed AWS_CLIENT_AGENT_MCP_ARGS JSON', async () => {
233
- process.env.AWS_CLIENT_AGENT_MCP_COMMAND = 'custom-aws-client-agent-mcp';
234
- process.env.AWS_CLIENT_AGENT_MCP_ARGS = '{bad json';
235
- const mod = await import('./aws-client-agent-mcp.js');
236
- expect(mod.resolveAwsClientAgentMcpCommand()).toEqual({
237
- source: 'override',
238
- command: 'custom-aws-client-agent-mcp',
239
- args: [],
240
- });
241
- });
242
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=bridge-package-publish-hooks.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridge-package-publish-hooks.test.d.ts","sourceRoot":"","sources":["../../src/services/bridge-package-publish-hooks.test.ts"],"names":[],"mappings":""}