aws-runtime-bridge 1.9.79 → 1.9.80

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 (596) hide show
  1. package/dist/adapter/AcodeSdkAdapter.d.ts +0 -1
  2. package/dist/adapter/AcodeSdkAdapter.js +11 -1986
  3. package/dist/adapter/AdapterRegistry.d.ts +0 -1
  4. package/dist/adapter/AdapterRegistry.js +2 -100
  5. package/dist/adapter/ClaudeSdkAdapter.d.ts +0 -1
  6. package/dist/adapter/ClaudeSdkAdapter.js +4 -1300
  7. package/dist/adapter/CodexSdkAdapter.d.ts +0 -1
  8. package/dist/adapter/CodexSdkAdapter.js +4 -836
  9. package/dist/adapter/OpencodeSdkAdapter.d.ts +0 -1
  10. package/dist/adapter/OpencodeSdkAdapter.js +4 -879
  11. package/dist/adapter/SdkProviderSpi.d.ts +0 -1
  12. package/dist/adapter/SdkProviderSpi.js +2 -55
  13. package/dist/adapter/acode-tool-names.d.ts +0 -1
  14. package/dist/adapter/acode-tool-names.js +2 -37
  15. package/dist/adapter/idle-poll-loop.d.ts +0 -1
  16. package/dist/adapter/idle-poll-loop.js +2 -59
  17. package/dist/adapter/index.d.ts +0 -1
  18. package/dist/adapter/index.js +2 -11
  19. package/dist/adapter/instance-ai-config-resolver.d.ts +0 -1
  20. package/dist/adapter/instance-ai-config-resolver.js +2 -46
  21. package/dist/adapter/types.d.ts +0 -1
  22. package/dist/adapter/types.js +2 -443
  23. package/dist/adapters/cc-switch/common.d.ts +0 -1
  24. package/dist/adapters/cc-switch/common.js +2 -61
  25. package/dist/adapters/cc-switch/index.d.ts +0 -1
  26. package/dist/adapters/cc-switch/index.js +2 -57
  27. package/dist/adapters/cc-switch/mcp-acode.d.ts +0 -1
  28. package/dist/adapters/cc-switch/mcp-acode.js +2 -71
  29. package/dist/adapters/cc-switch/mcp-claude.d.ts +0 -1
  30. package/dist/adapters/cc-switch/mcp-claude.js +2 -89
  31. package/dist/adapters/cc-switch/mcp-claudecode.d.ts +0 -1
  32. package/dist/adapters/cc-switch/mcp-claudecode.js +2 -77
  33. package/dist/adapters/cc-switch/mcp-codex.d.ts +0 -1
  34. package/dist/adapters/cc-switch/mcp-codex.js +11 -249
  35. package/dist/adapters/cc-switch/mcp-opencode.d.ts +0 -1
  36. package/dist/adapters/cc-switch/mcp-opencode.js +2 -97
  37. package/dist/adapters/cc-switch/mcp-placeholder.d.ts +0 -1
  38. package/dist/adapters/cc-switch/mcp-placeholder.js +2 -19
  39. package/dist/adapters/cc-switch/skill-acode.d.ts +0 -1
  40. package/dist/adapters/cc-switch/skill-acode.js +2 -12
  41. package/dist/adapters/cc-switch/skill-claude.d.ts +0 -1
  42. package/dist/adapters/cc-switch/skill-claude.js +2 -11
  43. package/dist/adapters/cc-switch/skill-claudecode.d.ts +0 -1
  44. package/dist/adapters/cc-switch/skill-claudecode.js +2 -11
  45. package/dist/adapters/cc-switch/skill-codex.d.ts +0 -1
  46. package/dist/adapters/cc-switch/skill-codex.js +2 -6
  47. package/dist/adapters/cc-switch/skill-directory.d.ts +0 -1
  48. package/dist/adapters/cc-switch/skill-directory.js +3 -137
  49. package/dist/adapters/cc-switch/skill-opencode.d.ts +0 -1
  50. package/dist/adapters/cc-switch/skill-opencode.js +2 -11
  51. package/dist/adapters/cc-switch/skill-placeholder.d.ts +0 -1
  52. package/dist/adapters/cc-switch/skill-placeholder.js +2 -19
  53. package/dist/config.d.ts +0 -1
  54. package/dist/config.js +2 -290
  55. package/dist/index.d.ts +0 -1
  56. package/dist/index.js +2 -573
  57. package/dist/middleware/auth.d.ts +0 -1
  58. package/dist/middleware/auth.js +2 -98
  59. package/dist/routes/acode-todos.d.ts +0 -1
  60. package/dist/routes/acode-todos.js +2 -75
  61. package/dist/routes/ai-sources.d.ts +0 -1
  62. package/dist/routes/ai-sources.js +2 -132
  63. package/dist/routes/dashboard.d.ts +0 -1
  64. package/dist/routes/dashboard.js +182 -649
  65. package/dist/routes/events.d.ts +0 -1
  66. package/dist/routes/events.js +2 -22
  67. package/dist/routes/file-browser.d.ts +0 -1
  68. package/dist/routes/file-browser.js +2 -781
  69. package/dist/routes/file-diff-rollback.d.ts +0 -1
  70. package/dist/routes/file-diff-rollback.js +2 -301
  71. package/dist/routes/file-snapshot.d.ts +0 -1
  72. package/dist/routes/file-snapshot.js +2 -156
  73. package/dist/routes/git.d.ts +0 -1
  74. package/dist/routes/git.js +28 -1900
  75. package/dist/routes/instance.d.ts +0 -1
  76. package/dist/routes/instance.js +3 -748
  77. package/dist/routes/mcp.d.ts +0 -1
  78. package/dist/routes/mcp.js +2 -196
  79. package/dist/routes/processes.d.ts +0 -1
  80. package/dist/routes/processes.js +2 -252
  81. package/dist/routes/properties.d.ts +0 -1
  82. package/dist/routes/properties.js +2 -72
  83. package/dist/routes/pty.d.ts +0 -1
  84. package/dist/routes/pty.js +6 -560
  85. package/dist/routes/runtime-binding.d.ts +0 -1
  86. package/dist/routes/runtime-binding.js +2 -263
  87. package/dist/routes/sessions.d.ts +0 -1
  88. package/dist/routes/sessions.js +2 -758
  89. package/dist/routes/skills.d.ts +0 -1
  90. package/dist/routes/skills.js +2 -187
  91. package/dist/routes/sub-agents.d.ts +0 -1
  92. package/dist/routes/sub-agents.js +20 -279
  93. package/dist/routes/system-metrics.d.ts +0 -1
  94. package/dist/routes/system-metrics.js +2 -20
  95. package/dist/routes/task-context.d.ts +0 -1
  96. package/dist/routes/task-context.js +2 -78
  97. package/dist/routes/terminal.d.ts +0 -1
  98. package/dist/routes/terminal.js +54 -2882
  99. package/dist/routes/yml.d.ts +0 -1
  100. package/dist/routes/yml.js +2 -223
  101. package/dist/services/acode-package.d.ts +0 -1
  102. package/dist/services/acode-package.js +2 -111
  103. package/dist/services/agent-event-store.d.ts +0 -1
  104. package/dist/services/agent-event-store.js +2 -81
  105. package/dist/services/agent-process-manager.d.ts +0 -1
  106. package/dist/services/agent-process-manager.js +2 -796
  107. package/dist/services/ai-source-apply.d.ts +0 -1
  108. package/dist/services/ai-source-apply.js +2 -83
  109. package/dist/services/auto-register.d.ts +0 -1
  110. package/dist/services/auto-register.js +2 -1053
  111. package/dist/services/aws-client-agent-mcp.d.ts +0 -1
  112. package/dist/services/aws-client-agent-mcp.js +3 -337
  113. package/dist/services/bridge-package-publish-hooks.d.ts +0 -1
  114. package/dist/services/bridge-package-publish-hooks.js +2 -115
  115. package/dist/services/cc-switch-sdk.d.ts +0 -1
  116. package/dist/services/cc-switch-sdk.js +2 -135
  117. package/dist/services/cli-commands.d.ts +6 -1
  118. package/dist/services/cli-commands.js +6 -645
  119. package/dist/services/event-delta-pusher.d.ts +0 -1
  120. package/dist/services/event-delta-pusher.js +2 -95
  121. package/dist/services/fileSnapshotStore.d.ts +0 -1
  122. package/dist/services/fileSnapshotStore.js +2 -500
  123. package/dist/services/instance-ai-config-service.d.ts +0 -1
  124. package/dist/services/instance-ai-config-service.js +2 -174
  125. package/dist/services/instance-init-service.d.ts +0 -1
  126. package/dist/services/instance-init-service.js +2 -193
  127. package/dist/services/instance-service.d.ts +0 -1
  128. package/dist/services/instance-service.js +2 -237
  129. package/dist/services/instance-state.d.ts +0 -1
  130. package/dist/services/instance-state.js +2 -94
  131. package/dist/services/legacy-path-migration.d.ts +0 -1
  132. package/dist/services/legacy-path-migration.js +2 -66
  133. package/dist/services/lifecycle-state.d.ts +0 -1
  134. package/dist/services/lifecycle-state.js +3 -110
  135. package/dist/services/mcp-launch-binding-queue.d.ts +0 -1
  136. package/dist/services/mcp-launch-binding-queue.js +2 -175
  137. package/dist/services/orphan-monitor.d.ts +0 -1
  138. package/dist/services/orphan-monitor.js +2 -382
  139. package/dist/services/panel-auth.d.ts +0 -1
  140. package/dist/services/panel-auth.js +2 -168
  141. package/dist/services/process-detector.d.ts +0 -1
  142. package/dist/services/process-detector.js +18 -1019
  143. package/dist/services/process-registry.d.ts +0 -1
  144. package/dist/services/process-registry.js +2 -375
  145. package/dist/services/ring-buffer.d.ts +0 -1
  146. package/dist/services/ring-buffer.js +2 -103
  147. package/dist/services/runtime-binding.d.ts +0 -1
  148. package/dist/services/runtime-binding.js +6 -363
  149. package/dist/services/runtime-lifecycle-policy.d.ts +0 -1
  150. package/dist/services/runtime-lifecycle-policy.js +2 -35
  151. package/dist/services/session-output.d.ts +0 -1
  152. package/dist/services/session-output.js +5 -539
  153. package/dist/services/startup-config-wizard.d.ts +0 -1
  154. package/dist/services/startup-config-wizard.js +14 -258
  155. package/dist/services/sub-agent-manager-instance.d.ts +0 -1
  156. package/dist/services/sub-agent-manager-instance.js +2 -12
  157. package/dist/services/system-metrics.d.ts +0 -1
  158. package/dist/services/system-metrics.js +2 -252
  159. package/dist/services/terminal-persistence.d.ts +0 -1
  160. package/dist/services/terminal-persistence.js +2 -176
  161. package/dist/services/tool-installer.d.ts +0 -1
  162. package/dist/services/tool-installer.js +5 -751
  163. package/dist/services/tunnel-client.d.ts +0 -1
  164. package/dist/services/tunnel-client.js +2 -402
  165. package/dist/services/windows-service-manager.d.ts +3 -3
  166. package/dist/services/windows-service-manager.js +2 -59
  167. package/dist/services/workspace-files.d.ts +0 -1
  168. package/dist/services/workspace-files.js +2 -1275
  169. package/dist/services/workspace-watch.d.ts +0 -1
  170. package/dist/services/workspace-watch.js +2 -123
  171. package/dist/services/workspaceTaskChangeWatcher.d.ts +0 -1
  172. package/dist/services/workspaceTaskChangeWatcher.js +2 -483
  173. package/dist/types.d.ts +0 -1
  174. package/dist/types.js +1 -1
  175. package/dist/utils/file-utils.d.ts +0 -1
  176. package/dist/utils/file-utils.js +3 -208
  177. package/dist/utils/instance-ai-config-debug-logger.d.ts +0 -1
  178. package/dist/utils/instance-ai-config-debug-logger.js +4 -63
  179. package/dist/utils/logger.d.ts +0 -1
  180. package/dist/utils/logger.js +2 -154
  181. package/dist/utils/mcp-utils.d.ts +0 -1
  182. package/dist/utils/mcp-utils.js +2 -187
  183. package/dist/utils/path-utils.d.ts +0 -1
  184. package/dist/utils/path-utils.js +2 -44
  185. package/dist/utils/sdk-package-loader.d.ts +0 -1
  186. package/dist/utils/sdk-package-loader.js +2 -78
  187. package/dist/utils/validation.d.ts +0 -1
  188. package/dist/utils/validation.js +2 -53
  189. package/dist/utils/yaml-utils.d.ts +0 -1
  190. package/dist/utils/yaml-utils.js +2 -312
  191. package/node_modules/@cc-switch/sdk/dist/constants.d.ts +0 -1
  192. package/node_modules/@cc-switch/sdk/dist/constants.js +2 -63
  193. package/node_modules/@cc-switch/sdk/dist/errors.d.ts +0 -1
  194. package/node_modules/@cc-switch/sdk/dist/errors.js +2 -8
  195. package/node_modules/@cc-switch/sdk/dist/index.d.ts +0 -1
  196. package/node_modules/@cc-switch/sdk/dist/index.js +2 -9
  197. package/node_modules/@cc-switch/sdk/dist/schemas.d.ts +0 -1
  198. package/node_modules/@cc-switch/sdk/dist/schemas.js +2 -38
  199. package/node_modules/@cc-switch/sdk/dist/sdk.d.ts +0 -1
  200. package/node_modules/@cc-switch/sdk/dist/sdk.js +2 -470
  201. package/node_modules/@cc-switch/sdk/dist/services/ai-config-service.d.ts +0 -1
  202. package/node_modules/@cc-switch/sdk/dist/services/ai-config-service.js +4 -307
  203. package/node_modules/@cc-switch/sdk/dist/services/mcp-model.d.ts +0 -1
  204. package/node_modules/@cc-switch/sdk/dist/services/mcp-model.js +2 -37
  205. package/node_modules/@cc-switch/sdk/dist/services/mcp-service.d.ts +0 -1
  206. package/node_modules/@cc-switch/sdk/dist/services/mcp-service.js +2 -9
  207. package/node_modules/@cc-switch/sdk/dist/services/skill-model.d.ts +0 -1
  208. package/node_modules/@cc-switch/sdk/dist/services/skill-model.js +2 -41
  209. package/node_modules/@cc-switch/sdk/dist/services/skill-service.d.ts +0 -1
  210. package/node_modules/@cc-switch/sdk/dist/services/skill-service.js +2 -9
  211. package/node_modules/@cc-switch/sdk/dist/state.d.ts +0 -1
  212. package/node_modules/@cc-switch/sdk/dist/state.js +2 -19
  213. package/node_modules/@cc-switch/sdk/dist/types.d.ts +0 -1
  214. package/node_modules/@cc-switch/sdk/dist/types.js +1 -1
  215. package/node_modules/@cc-switch/sdk/dist/utils/fs.d.ts +0 -1
  216. package/node_modules/@cc-switch/sdk/dist/utils/fs.js +3 -114
  217. package/node_modules/@cc-switch/sdk/dist/utils/id.d.ts +0 -1
  218. package/node_modules/@cc-switch/sdk/dist/utils/id.js +2 -12
  219. package/node_modules/@cc-switch/sdk/package.json +1 -1
  220. package/package/acode/dist/ask-user-question-tool.d.ts +0 -1
  221. package/package/acode/dist/ask-user-question-tool.js +4 -233
  222. package/package/acode/dist/built-in-file-tools.d.ts +0 -1
  223. package/package/acode/dist/built-in-file-tools.js +4 -966
  224. package/package/acode/dist/built-in-symbols-tool.d.ts +0 -1
  225. package/package/acode/dist/built-in-symbols-tool.js +2 -117
  226. package/package/acode/dist/builtins/commandArtifacts.d.ts +0 -1
  227. package/package/acode/dist/builtins/commandArtifacts.js +9 -97
  228. package/package/acode/dist/builtins/commandOutputEvents.d.ts +0 -1
  229. package/package/acode/dist/builtins/commandOutputEvents.js +2 -56
  230. package/package/acode/dist/builtins/shellCommandPreparation.d.ts +0 -1
  231. package/package/acode/dist/builtins/shellCommandPreparation.js +5 -44
  232. package/package/acode/dist/builtins/shellCommandResult.d.ts +0 -1
  233. package/package/acode/dist/builtins/shellCommandResult.js +2 -71
  234. package/package/acode/dist/builtins/shellCommandRunner.d.ts +0 -1
  235. package/package/acode/dist/builtins/shellCommandRunner.js +2 -115
  236. package/package/acode/dist/builtins/shellOutputDecoder.d.ts +0 -1
  237. package/package/acode/dist/builtins/shellOutputDecoder.js +2 -94
  238. package/package/acode/dist/cli.d.ts +0 -1
  239. package/package/acode/dist/cli.js +4 -38
  240. package/package/acode/dist/commands/commandLoader.d.ts +0 -1
  241. package/package/acode/dist/commands/commandLoader.js +2 -33
  242. package/package/acode/dist/commands/commandParser.d.ts +0 -1
  243. package/package/acode/dist/commands/commandParser.js +3 -77
  244. package/package/acode/dist/commands/commandRegistry.d.ts +0 -1
  245. package/package/acode/dist/commands/commandRegistry.js +2 -30
  246. package/package/acode/dist/compaction.d.ts +0 -1
  247. package/package/acode/dist/compaction.js +7 -919
  248. package/package/acode/dist/config.d.ts +0 -1
  249. package/package/acode/dist/config.js +5 -105
  250. package/package/acode/dist/fs-utils.d.ts +0 -1
  251. package/package/acode/dist/fs-utils.js +2 -79
  252. package/package/acode/dist/hooks/hookBus.d.ts +0 -1
  253. package/package/acode/dist/hooks/hookBus.js +2 -40
  254. package/package/acode/dist/index.d.ts +0 -1
  255. package/package/acode/dist/index.js +2 -19
  256. package/package/acode/dist/mcpToolNames.d.ts +0 -1
  257. package/package/acode/dist/mcpToolNames.js +2 -17
  258. package/package/acode/dist/parsers/ast-cache.d.ts +0 -1
  259. package/package/acode/dist/parsers/ast-cache.js +2 -76
  260. package/package/acode/dist/parsers/language-detector.d.ts +0 -1
  261. package/package/acode/dist/parsers/language-detector.js +2 -44
  262. package/package/acode/dist/parsers/language-queries.d.ts +0 -1
  263. package/package/acode/dist/parsers/language-queries.js +12 -602
  264. package/package/acode/dist/parsers/symbol-extractor.d.ts +0 -1
  265. package/package/acode/dist/parsers/symbol-extractor.js +3 -164
  266. package/package/acode/dist/parsers/tree-sitter-loader.d.ts +0 -1
  267. package/package/acode/dist/parsers/tree-sitter-loader.js +2 -64
  268. package/package/acode/dist/parsers/types.d.ts +0 -1
  269. package/package/acode/dist/parsers/types.js +1 -7
  270. package/package/acode/dist/runtime.d.ts +0 -1
  271. package/package/acode/dist/runtime.js +86 -3771
  272. package/package/acode/dist/skill-tool.d.ts +0 -1
  273. package/package/acode/dist/skill-tool.js +5 -174
  274. package/package/acode/dist/sub-agent-manager.d.ts +0 -1
  275. package/package/acode/dist/sub-agent-manager.js +2 -1159
  276. package/package/acode/dist/sub-agent-store.d.ts +0 -1
  277. package/package/acode/dist/sub-agent-store.js +4 -236
  278. package/package/acode/dist/sub-agent-tools.d.ts +0 -1
  279. package/package/acode/dist/sub-agent-tools.js +15 -369
  280. package/package/acode/dist/sub-agent-types.d.ts +0 -1
  281. package/package/acode/dist/sub-agent-types.js +1 -8
  282. package/package/acode/dist/todo-store.d.ts +0 -1
  283. package/package/acode/dist/todo-store.js +2 -73
  284. package/package/acode/dist/todo-tool.d.ts +0 -1
  285. package/package/acode/dist/todo-tool.js +5 -121
  286. package/package/acode/dist/types.d.ts +0 -1
  287. package/package/acode/dist/types.js +1 -1
  288. package/package/acode/package.json +2 -2
  289. package/package/aws-client-agent-mcp/dist/agent-client.d.ts +0 -1
  290. package/package/aws-client-agent-mcp/dist/agent-client.js +2 -890
  291. package/package/aws-client-agent-mcp/dist/agent-client.test.d.ts +0 -1
  292. package/package/aws-client-agent-mcp/dist/agent-client.test.js +0 -1
  293. package/package/aws-client-agent-mcp/dist/config.d.ts +0 -1
  294. package/package/aws-client-agent-mcp/dist/config.js +2 -243
  295. package/package/aws-client-agent-mcp/dist/config.test.d.ts +0 -1
  296. package/package/aws-client-agent-mcp/dist/config.test.js +0 -1
  297. package/package/aws-client-agent-mcp/dist/constants.d.ts +0 -1
  298. package/package/aws-client-agent-mcp/dist/constants.js +2 -24
  299. package/package/aws-client-agent-mcp/dist/context-manager.d.ts +0 -1
  300. package/package/aws-client-agent-mcp/dist/context-manager.js +2 -477
  301. package/package/aws-client-agent-mcp/dist/context-manager.test.d.ts +0 -1
  302. package/package/aws-client-agent-mcp/dist/context-manager.test.js +0 -1
  303. package/package/aws-client-agent-mcp/dist/http-client.d.ts +0 -1
  304. package/package/aws-client-agent-mcp/dist/http-client.js +2 -446
  305. package/package/aws-client-agent-mcp/dist/http-client.test.d.ts +0 -1
  306. package/package/aws-client-agent-mcp/dist/http-client.test.js +0 -1
  307. package/package/aws-client-agent-mcp/dist/index.d.ts +0 -1
  308. package/package/aws-client-agent-mcp/dist/index.js +2 -34
  309. package/package/aws-client-agent-mcp/dist/logger.d.ts +0 -1
  310. package/package/aws-client-agent-mcp/dist/logger.js +3 -178
  311. package/package/aws-client-agent-mcp/dist/logger.test.d.ts +0 -1
  312. package/package/aws-client-agent-mcp/dist/logger.test.js +0 -1
  313. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +0 -1
  314. package/package/aws-client-agent-mcp/dist/mcp-server.js +38 -2709
  315. package/package/aws-client-agent-mcp/dist/mcp-server.test.d.ts +0 -1
  316. package/package/aws-client-agent-mcp/dist/mcp-server.test.js +0 -1
  317. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +0 -1
  318. package/package/aws-client-agent-mcp/dist/mcp-tools.js +22 -562
  319. package/package/aws-client-agent-mcp/dist/mcp-tools.test.d.ts +0 -1
  320. package/package/aws-client-agent-mcp/dist/mcp-tools.test.js +0 -1
  321. package/package/aws-client-agent-mcp/dist/memory-store.d.ts +0 -1
  322. package/package/aws-client-agent-mcp/dist/memory-store.js +4 -826
  323. package/package/aws-client-agent-mcp/dist/memory-store.test.d.ts +0 -1
  324. package/package/aws-client-agent-mcp/dist/memory-store.test.js +0 -1
  325. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +0 -1
  326. package/package/aws-client-agent-mcp/dist/memory-tools.js +31 -294
  327. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +0 -1
  328. package/package/aws-client-agent-mcp/dist/message-buffer.js +2 -288
  329. package/package/aws-client-agent-mcp/dist/message-buffer.test.d.ts +0 -1
  330. package/package/aws-client-agent-mcp/dist/message-buffer.test.js +0 -1
  331. package/package/aws-client-agent-mcp/dist/messageContent.d.ts +0 -1
  332. package/package/aws-client-agent-mcp/dist/messageContent.js +2 -125
  333. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.d.ts +0 -1
  334. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.js +2 -103
  335. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.d.ts +0 -1
  336. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.js +0 -1
  337. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +0 -1
  338. package/package/aws-client-agent-mcp/dist/server-memory-store.js +2 -96
  339. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts +0 -1
  340. package/package/aws-client-agent-mcp/dist/status-reporter.js +3 -327
  341. package/package/aws-client-agent-mcp/dist/status-reporter.test.d.ts +0 -1
  342. package/package/aws-client-agent-mcp/dist/status-reporter.test.js +0 -1
  343. package/package/aws-client-agent-mcp/dist/types.d.ts +0 -1
  344. package/package/aws-client-agent-mcp/dist/types.js +2 -9
  345. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +0 -1
  346. package/package/aws-client-agent-mcp/dist/websocket-client.js +2 -677
  347. package/package/aws-client-agent-mcp/dist/websocket-client.test.d.ts +0 -1
  348. package/package/aws-client-agent-mcp/dist/websocket-client.test.js +0 -1
  349. package/package/aws-client-agent-mcp/package.json +1 -1
  350. package/package/cc-switch-sdk/dist/constants.d.ts +0 -1
  351. package/package/cc-switch-sdk/dist/constants.js +2 -63
  352. package/package/cc-switch-sdk/dist/errors.d.ts +0 -1
  353. package/package/cc-switch-sdk/dist/errors.js +2 -8
  354. package/package/cc-switch-sdk/dist/index.d.ts +0 -1
  355. package/package/cc-switch-sdk/dist/index.js +2 -9
  356. package/package/cc-switch-sdk/dist/schemas.d.ts +0 -1
  357. package/package/cc-switch-sdk/dist/schemas.js +2 -38
  358. package/package/cc-switch-sdk/dist/sdk.d.ts +0 -1
  359. package/package/cc-switch-sdk/dist/sdk.js +2 -470
  360. package/package/cc-switch-sdk/dist/services/ai-config-service.d.ts +0 -1
  361. package/package/cc-switch-sdk/dist/services/ai-config-service.js +4 -307
  362. package/package/cc-switch-sdk/dist/services/mcp-model.d.ts +0 -1
  363. package/package/cc-switch-sdk/dist/services/mcp-model.js +2 -37
  364. package/package/cc-switch-sdk/dist/services/mcp-service.d.ts +0 -1
  365. package/package/cc-switch-sdk/dist/services/mcp-service.js +2 -9
  366. package/package/cc-switch-sdk/dist/services/skill-model.d.ts +0 -1
  367. package/package/cc-switch-sdk/dist/services/skill-model.js +2 -41
  368. package/package/cc-switch-sdk/dist/services/skill-service.d.ts +0 -1
  369. package/package/cc-switch-sdk/dist/services/skill-service.js +2 -9
  370. package/package/cc-switch-sdk/dist/state.d.ts +0 -1
  371. package/package/cc-switch-sdk/dist/state.js +2 -19
  372. package/package/cc-switch-sdk/dist/types.d.ts +0 -1
  373. package/package/cc-switch-sdk/dist/types.js +1 -1
  374. package/package/cc-switch-sdk/dist/utils/fs.d.ts +0 -1
  375. package/package/cc-switch-sdk/dist/utils/fs.js +3 -114
  376. package/package/cc-switch-sdk/dist/utils/id.d.ts +0 -1
  377. package/package/cc-switch-sdk/dist/utils/id.js +2 -12
  378. package/package/cc-switch-sdk/package.json +1 -1
  379. package/package.json +4 -2
  380. package/dist/adapter/AcodeSdkAdapter.d.ts.map +0 -1
  381. package/dist/adapter/AdapterRegistry.d.ts.map +0 -1
  382. package/dist/adapter/ClaudeSdkAdapter.d.ts.map +0 -1
  383. package/dist/adapter/CodexSdkAdapter.d.ts.map +0 -1
  384. package/dist/adapter/OpencodeSdkAdapter.d.ts.map +0 -1
  385. package/dist/adapter/SdkProviderSpi.d.ts.map +0 -1
  386. package/dist/adapter/acode-tool-names.d.ts.map +0 -1
  387. package/dist/adapter/idle-poll-loop.d.ts.map +0 -1
  388. package/dist/adapter/index.d.ts.map +0 -1
  389. package/dist/adapter/instance-ai-config-resolver.d.ts.map +0 -1
  390. package/dist/adapter/types.d.ts.map +0 -1
  391. package/dist/adapters/cc-switch/common.d.ts.map +0 -1
  392. package/dist/adapters/cc-switch/index.d.ts.map +0 -1
  393. package/dist/adapters/cc-switch/mcp-acode.d.ts.map +0 -1
  394. package/dist/adapters/cc-switch/mcp-claude.d.ts.map +0 -1
  395. package/dist/adapters/cc-switch/mcp-claudecode.d.ts.map +0 -1
  396. package/dist/adapters/cc-switch/mcp-codex.d.ts.map +0 -1
  397. package/dist/adapters/cc-switch/mcp-opencode.d.ts.map +0 -1
  398. package/dist/adapters/cc-switch/mcp-placeholder.d.ts.map +0 -1
  399. package/dist/adapters/cc-switch/skill-acode.d.ts.map +0 -1
  400. package/dist/adapters/cc-switch/skill-claude.d.ts.map +0 -1
  401. package/dist/adapters/cc-switch/skill-claudecode.d.ts.map +0 -1
  402. package/dist/adapters/cc-switch/skill-codex.d.ts.map +0 -1
  403. package/dist/adapters/cc-switch/skill-directory.d.ts.map +0 -1
  404. package/dist/adapters/cc-switch/skill-opencode.d.ts.map +0 -1
  405. package/dist/adapters/cc-switch/skill-placeholder.d.ts.map +0 -1
  406. package/dist/config.d.ts.map +0 -1
  407. package/dist/index.d.ts.map +0 -1
  408. package/dist/middleware/auth.d.ts.map +0 -1
  409. package/dist/routes/acode-todos.d.ts.map +0 -1
  410. package/dist/routes/ai-sources.d.ts.map +0 -1
  411. package/dist/routes/dashboard.d.ts.map +0 -1
  412. package/dist/routes/events.d.ts.map +0 -1
  413. package/dist/routes/file-browser.d.ts.map +0 -1
  414. package/dist/routes/file-diff-rollback.d.ts.map +0 -1
  415. package/dist/routes/file-snapshot.d.ts.map +0 -1
  416. package/dist/routes/git.d.ts.map +0 -1
  417. package/dist/routes/instance.d.ts.map +0 -1
  418. package/dist/routes/mcp.d.ts.map +0 -1
  419. package/dist/routes/processes.d.ts.map +0 -1
  420. package/dist/routes/properties.d.ts.map +0 -1
  421. package/dist/routes/pty.d.ts.map +0 -1
  422. package/dist/routes/runtime-binding.d.ts.map +0 -1
  423. package/dist/routes/sessions.d.ts.map +0 -1
  424. package/dist/routes/skills.d.ts.map +0 -1
  425. package/dist/routes/sub-agents.d.ts.map +0 -1
  426. package/dist/routes/system-metrics.d.ts.map +0 -1
  427. package/dist/routes/task-context.d.ts.map +0 -1
  428. package/dist/routes/terminal.d.ts.map +0 -1
  429. package/dist/routes/yml.d.ts.map +0 -1
  430. package/dist/services/acode-package.d.ts.map +0 -1
  431. package/dist/services/agent-event-store.d.ts.map +0 -1
  432. package/dist/services/agent-process-manager.d.ts.map +0 -1
  433. package/dist/services/ai-source-apply.d.ts.map +0 -1
  434. package/dist/services/auto-register.d.ts.map +0 -1
  435. package/dist/services/aws-client-agent-mcp.d.ts.map +0 -1
  436. package/dist/services/bridge-package-publish-hooks.d.ts.map +0 -1
  437. package/dist/services/cc-switch-sdk.d.ts.map +0 -1
  438. package/dist/services/cli-commands.d.ts.map +0 -1
  439. package/dist/services/event-delta-pusher.d.ts.map +0 -1
  440. package/dist/services/fileSnapshotStore.d.ts.map +0 -1
  441. package/dist/services/instance-ai-config-service.d.ts.map +0 -1
  442. package/dist/services/instance-init-service.d.ts.map +0 -1
  443. package/dist/services/instance-service.d.ts.map +0 -1
  444. package/dist/services/instance-state.d.ts.map +0 -1
  445. package/dist/services/legacy-path-migration.d.ts.map +0 -1
  446. package/dist/services/lifecycle-state.d.ts.map +0 -1
  447. package/dist/services/mcp-launch-binding-queue.d.ts.map +0 -1
  448. package/dist/services/orphan-monitor.d.ts.map +0 -1
  449. package/dist/services/panel-auth.d.ts.map +0 -1
  450. package/dist/services/process-detector.d.ts.map +0 -1
  451. package/dist/services/process-registry.d.ts.map +0 -1
  452. package/dist/services/ring-buffer.d.ts.map +0 -1
  453. package/dist/services/runtime-binding.d.ts.map +0 -1
  454. package/dist/services/runtime-lifecycle-policy.d.ts.map +0 -1
  455. package/dist/services/session-output.d.ts.map +0 -1
  456. package/dist/services/startup-config-wizard.d.ts.map +0 -1
  457. package/dist/services/sub-agent-manager-instance.d.ts.map +0 -1
  458. package/dist/services/system-metrics.d.ts.map +0 -1
  459. package/dist/services/terminal-persistence.d.ts.map +0 -1
  460. package/dist/services/tool-installer.d.ts.map +0 -1
  461. package/dist/services/tunnel-client.d.ts.map +0 -1
  462. package/dist/services/windows-service-manager.d.ts.map +0 -1
  463. package/dist/services/workspace-files.d.ts.map +0 -1
  464. package/dist/services/workspace-watch.d.ts.map +0 -1
  465. package/dist/services/workspaceTaskChangeWatcher.d.ts.map +0 -1
  466. package/dist/types.d.ts.map +0 -1
  467. package/dist/utils/file-utils.d.ts.map +0 -1
  468. package/dist/utils/instance-ai-config-debug-logger.d.ts.map +0 -1
  469. package/dist/utils/logger.d.ts.map +0 -1
  470. package/dist/utils/mcp-utils.d.ts.map +0 -1
  471. package/dist/utils/path-utils.d.ts.map +0 -1
  472. package/dist/utils/sdk-package-loader.d.ts.map +0 -1
  473. package/dist/utils/validation.d.ts.map +0 -1
  474. package/dist/utils/yaml-utils.d.ts.map +0 -1
  475. package/node_modules/@cc-switch/sdk/dist/constants.d.ts.map +0 -1
  476. package/node_modules/@cc-switch/sdk/dist/errors.d.ts.map +0 -1
  477. package/node_modules/@cc-switch/sdk/dist/index.d.ts.map +0 -1
  478. package/node_modules/@cc-switch/sdk/dist/schemas.d.ts.map +0 -1
  479. package/node_modules/@cc-switch/sdk/dist/sdk.d.ts.map +0 -1
  480. package/node_modules/@cc-switch/sdk/dist/services/ai-config-service.d.ts.map +0 -1
  481. package/node_modules/@cc-switch/sdk/dist/services/mcp-model.d.ts.map +0 -1
  482. package/node_modules/@cc-switch/sdk/dist/services/mcp-service.d.ts.map +0 -1
  483. package/node_modules/@cc-switch/sdk/dist/services/skill-model.d.ts.map +0 -1
  484. package/node_modules/@cc-switch/sdk/dist/services/skill-service.d.ts.map +0 -1
  485. package/node_modules/@cc-switch/sdk/dist/state.d.ts.map +0 -1
  486. package/node_modules/@cc-switch/sdk/dist/types.d.ts.map +0 -1
  487. package/node_modules/@cc-switch/sdk/dist/utils/fs.d.ts.map +0 -1
  488. package/node_modules/@cc-switch/sdk/dist/utils/id.d.ts.map +0 -1
  489. package/package/acode/dist/ask-user-question-tool.d.ts.map +0 -1
  490. package/package/acode/dist/built-in-file-tools.d.ts.map +0 -1
  491. package/package/acode/dist/built-in-symbols-tool.d.ts.map +0 -1
  492. package/package/acode/dist/builtins/commandArtifacts.d.ts.map +0 -1
  493. package/package/acode/dist/builtins/commandOutputEvents.d.ts.map +0 -1
  494. package/package/acode/dist/builtins/shellCommandPreparation.d.ts.map +0 -1
  495. package/package/acode/dist/builtins/shellCommandResult.d.ts.map +0 -1
  496. package/package/acode/dist/builtins/shellCommandRunner.d.ts.map +0 -1
  497. package/package/acode/dist/builtins/shellOutputDecoder.d.ts.map +0 -1
  498. package/package/acode/dist/cli.d.ts.map +0 -1
  499. package/package/acode/dist/commands/commandLoader.d.ts.map +0 -1
  500. package/package/acode/dist/commands/commandParser.d.ts.map +0 -1
  501. package/package/acode/dist/commands/commandRegistry.d.ts.map +0 -1
  502. package/package/acode/dist/compaction.d.ts.map +0 -1
  503. package/package/acode/dist/config.d.ts.map +0 -1
  504. package/package/acode/dist/fs-utils.d.ts.map +0 -1
  505. package/package/acode/dist/hooks/hookBus.d.ts.map +0 -1
  506. package/package/acode/dist/index.d.ts.map +0 -1
  507. package/package/acode/dist/mcpToolNames.d.ts.map +0 -1
  508. package/package/acode/dist/parsers/ast-cache.d.ts.map +0 -1
  509. package/package/acode/dist/parsers/language-detector.d.ts.map +0 -1
  510. package/package/acode/dist/parsers/language-queries.d.ts.map +0 -1
  511. package/package/acode/dist/parsers/symbol-extractor.d.ts.map +0 -1
  512. package/package/acode/dist/parsers/tree-sitter-loader.d.ts.map +0 -1
  513. package/package/acode/dist/parsers/types.d.ts.map +0 -1
  514. package/package/acode/dist/runtime.d.ts.map +0 -1
  515. package/package/acode/dist/skill-tool.d.ts.map +0 -1
  516. package/package/acode/dist/sub-agent-manager.d.ts.map +0 -1
  517. package/package/acode/dist/sub-agent-store.d.ts.map +0 -1
  518. package/package/acode/dist/sub-agent-tools.d.ts.map +0 -1
  519. package/package/acode/dist/sub-agent-types.d.ts.map +0 -1
  520. package/package/acode/dist/todo-store.d.ts.map +0 -1
  521. package/package/acode/dist/todo-tool.d.ts.map +0 -1
  522. package/package/acode/dist/types.d.ts.map +0 -1
  523. package/package/aws-client-agent-mcp/dist/agent-client.d.ts.map +0 -1
  524. package/package/aws-client-agent-mcp/dist/agent-client.js.map +0 -1
  525. package/package/aws-client-agent-mcp/dist/agent-client.test.d.ts.map +0 -1
  526. package/package/aws-client-agent-mcp/dist/agent-client.test.js.map +0 -1
  527. package/package/aws-client-agent-mcp/dist/config.d.ts.map +0 -1
  528. package/package/aws-client-agent-mcp/dist/config.js.map +0 -1
  529. package/package/aws-client-agent-mcp/dist/config.test.d.ts.map +0 -1
  530. package/package/aws-client-agent-mcp/dist/config.test.js.map +0 -1
  531. package/package/aws-client-agent-mcp/dist/constants.d.ts.map +0 -1
  532. package/package/aws-client-agent-mcp/dist/constants.js.map +0 -1
  533. package/package/aws-client-agent-mcp/dist/context-manager.d.ts.map +0 -1
  534. package/package/aws-client-agent-mcp/dist/context-manager.js.map +0 -1
  535. package/package/aws-client-agent-mcp/dist/context-manager.test.d.ts.map +0 -1
  536. package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +0 -1
  537. package/package/aws-client-agent-mcp/dist/http-client.d.ts.map +0 -1
  538. package/package/aws-client-agent-mcp/dist/http-client.js.map +0 -1
  539. package/package/aws-client-agent-mcp/dist/http-client.test.d.ts.map +0 -1
  540. package/package/aws-client-agent-mcp/dist/http-client.test.js.map +0 -1
  541. package/package/aws-client-agent-mcp/dist/index.d.ts.map +0 -1
  542. package/package/aws-client-agent-mcp/dist/index.js.map +0 -1
  543. package/package/aws-client-agent-mcp/dist/logger.d.ts.map +0 -1
  544. package/package/aws-client-agent-mcp/dist/logger.js.map +0 -1
  545. package/package/aws-client-agent-mcp/dist/logger.test.d.ts.map +0 -1
  546. package/package/aws-client-agent-mcp/dist/logger.test.js.map +0 -1
  547. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +0 -1
  548. package/package/aws-client-agent-mcp/dist/mcp-server.js.map +0 -1
  549. package/package/aws-client-agent-mcp/dist/mcp-server.test.d.ts.map +0 -1
  550. package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +0 -1
  551. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +0 -1
  552. package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +0 -1
  553. package/package/aws-client-agent-mcp/dist/mcp-tools.test.d.ts.map +0 -1
  554. package/package/aws-client-agent-mcp/dist/mcp-tools.test.js.map +0 -1
  555. package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +0 -1
  556. package/package/aws-client-agent-mcp/dist/memory-store.js.map +0 -1
  557. package/package/aws-client-agent-mcp/dist/memory-store.test.d.ts.map +0 -1
  558. package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +0 -1
  559. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +0 -1
  560. package/package/aws-client-agent-mcp/dist/memory-tools.js.map +0 -1
  561. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +0 -1
  562. package/package/aws-client-agent-mcp/dist/message-buffer.js.map +0 -1
  563. package/package/aws-client-agent-mcp/dist/message-buffer.test.d.ts.map +0 -1
  564. package/package/aws-client-agent-mcp/dist/message-buffer.test.js.map +0 -1
  565. package/package/aws-client-agent-mcp/dist/messageContent.d.ts.map +0 -1
  566. package/package/aws-client-agent-mcp/dist/messageContent.js.map +0 -1
  567. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.d.ts.map +0 -1
  568. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.js.map +0 -1
  569. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.d.ts.map +0 -1
  570. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.test.js.map +0 -1
  571. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts.map +0 -1
  572. package/package/aws-client-agent-mcp/dist/server-memory-store.js.map +0 -1
  573. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +0 -1
  574. package/package/aws-client-agent-mcp/dist/status-reporter.js.map +0 -1
  575. package/package/aws-client-agent-mcp/dist/status-reporter.test.d.ts.map +0 -1
  576. package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +0 -1
  577. package/package/aws-client-agent-mcp/dist/types.d.ts.map +0 -1
  578. package/package/aws-client-agent-mcp/dist/types.js.map +0 -1
  579. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts.map +0 -1
  580. package/package/aws-client-agent-mcp/dist/websocket-client.js.map +0 -1
  581. package/package/aws-client-agent-mcp/dist/websocket-client.test.d.ts.map +0 -1
  582. package/package/aws-client-agent-mcp/dist/websocket-client.test.js.map +0 -1
  583. package/package/cc-switch-sdk/dist/constants.d.ts.map +0 -1
  584. package/package/cc-switch-sdk/dist/errors.d.ts.map +0 -1
  585. package/package/cc-switch-sdk/dist/index.d.ts.map +0 -1
  586. package/package/cc-switch-sdk/dist/schemas.d.ts.map +0 -1
  587. package/package/cc-switch-sdk/dist/sdk.d.ts.map +0 -1
  588. package/package/cc-switch-sdk/dist/services/ai-config-service.d.ts.map +0 -1
  589. package/package/cc-switch-sdk/dist/services/mcp-model.d.ts.map +0 -1
  590. package/package/cc-switch-sdk/dist/services/mcp-service.d.ts.map +0 -1
  591. package/package/cc-switch-sdk/dist/services/skill-model.d.ts.map +0 -1
  592. package/package/cc-switch-sdk/dist/services/skill-service.d.ts.map +0 -1
  593. package/package/cc-switch-sdk/dist/state.d.ts.map +0 -1
  594. package/package/cc-switch-sdk/dist/types.d.ts.map +0 -1
  595. package/package/cc-switch-sdk/dist/utils/fs.d.ts.map +0 -1
  596. package/package/cc-switch-sdk/dist/utils/id.d.ts.map +0 -1
@@ -1,748 +1,3 @@
1
- import { Router } from "express";
2
- import axios from "axios";
3
- import { spawn } from "node:child_process";
4
- import { createHash, timingSafeEqual } from "node:crypto";
5
- import { getBridgeVersion, resolveSchedulerBaseUrlFrom } from "../config.js";
6
- import { validateToken, validateTokenOrPanelSession } from "../middleware/auth.js";
7
- import { getConfiguredConnectionKeys, requestRuntimeAccessTokenRefreshForServer } from "../services/auto-register.js";
8
- import { discoverCcSwitchConfiguredItems, loadCcSwitchSdk } from "../services/cc-switch-sdk.js";
9
- import { initInstance, syncLegacyStateFromSdk } from "../services/instance-init-service.js";
10
- import { createBridgeLifecycleOperation, deliverPendingBridgeLifecycleNotifications, upsertBridgeLifecycleOperation, } from "../services/lifecycle-state.js";
11
- import { loadInstanceState, saveInstanceState, } from "../services/instance-state.js";
12
- import { getRuntimeAccessToken } from "../services/runtime-binding.js";
13
- import { detectToolStatuses, ensureToolsInstalled, SUPPORTED_INSTALLABLE_TOOLS, SUPPORTED_UNINSTALLABLE_TOOLS, uninstallTools, } from "../services/tool-installer.js";
14
- import { createLogger } from "../utils/logger.js";
15
- const log = createLogger("instance");
16
- const PANEL_TOOL_STATUS_KEYS = ["acode", "claude", "opencode", "codex"];
17
- // ★★★ 导出 gracefulShutdown 的触发函数
18
- // 用于 aws-mcp-server 通知 bridge 保留会话状态关闭
19
- let gracefulShutdownFn = null;
20
- export function setGracefulShutdownFn(fn) {
21
- gracefulShutdownFn = fn;
22
- }
23
- export const instanceRouter = Router();
24
- function resolveNpmExecutable() {
25
- return process.platform === "win32" ? "npm.cmd" : "npm";
26
- }
27
- function truncateCommandOutput(output) {
28
- const maxLength = 16_000;
29
- return output.length > maxLength
30
- ? `${output.slice(output.length - maxLength)}\n[output truncated]`
31
- : output;
32
- }
33
- function runCommand(command, args) {
34
- return new Promise((resolve, reject) => {
35
- const child = spawn(command, args, {
36
- shell: false,
37
- windowsHide: true,
38
- });
39
- let stdout = "";
40
- let stderr = "";
41
- child.stdout.on("data", (chunk) => {
42
- stdout += chunk.toString("utf8");
43
- });
44
- child.stderr.on("data", (chunk) => {
45
- stderr += chunk.toString("utf8");
46
- });
47
- child.on("error", reject);
48
- child.on("close", (exitCode) => {
49
- resolve({
50
- command,
51
- args,
52
- exitCode,
53
- stdout: truncateCommandOutput(stdout),
54
- stderr: truncateCommandOutput(stderr),
55
- });
56
- });
57
- });
58
- }
59
- function normalizeOptionalText(value) {
60
- const normalized = String(value || "").trim();
61
- return normalized || undefined;
62
- }
63
- function resolveRequestRuntimeBridgeBaseUrl(req) {
64
- const host = req.get("host");
65
- if (!host) {
66
- return undefined;
67
- }
68
- return `${req.protocol}://${host}`;
69
- }
70
- async function runBridgeUpdateInBackground(input) {
71
- const runningOperation = {
72
- ...input.operation,
73
- status: "running",
74
- message: "Bridge 更新正在后台执行。",
75
- };
76
- await upsertBridgeLifecycleOperation(runningOperation);
77
- try {
78
- log.info("[update-bridge] 正在后台更新 aws-runtime-bridge 到最新版本");
79
- const result = await runCommand(input.command, input.args);
80
- const succeeded = result.exitCode === 0;
81
- await upsertBridgeLifecycleOperation({
82
- ...runningOperation,
83
- status: succeeded ? "succeeded" : "failed",
84
- message: succeeded
85
- ? "Bridge 更新完成,请重启实例 Bridge 以加载新版本。"
86
- : `Bridge 更新失败,npm 退出码: ${result.exitCode ?? "unknown"}`,
87
- error: succeeded ? undefined : result.stderr || result.stdout,
88
- });
89
- await deliverPendingBridgeLifecycleNotifications();
90
- }
91
- catch (error) {
92
- const err = error;
93
- log.error("[update-bridge] background update failed:", err);
94
- await upsertBridgeLifecycleOperation({
95
- ...runningOperation,
96
- status: "failed",
97
- message: "Bridge 更新失败。",
98
- error: err.message || "update bridge failed",
99
- });
100
- await deliverPendingBridgeLifecycleNotifications();
101
- }
102
- }
103
- async function writeRestartSessionFlag(preserveSessions) {
104
- const fs = await import("node:fs/promises");
105
- const path = await import("node:path");
106
- const os = await import("node:os");
107
- const restartFlagFile = path.join(os.tmpdir(), "agentswork-runtime-bridge", ".preserve-sessions");
108
- if (preserveSessions) {
109
- await fs.mkdir(path.dirname(restartFlagFile), { recursive: true });
110
- await fs.writeFile(restartFlagFile, JSON.stringify({
111
- preserveSessions: true,
112
- timestamp: new Date().toISOString(),
113
- }), "utf-8");
114
- log.info(`[prepare-restart] 已创建保留会话标记文件: ${restartFlagFile}`);
115
- return;
116
- }
117
- try {
118
- await fs.unlink(restartFlagFile);
119
- log.info("[prepare-restart] 已删除保留会话标记文件");
120
- }
121
- catch {
122
- // 文件不存在时无需处理。
123
- }
124
- }
125
- function md5Hex(value) {
126
- return createHash("md5").update(value, "utf8").digest("hex");
127
- }
128
- function hasMatchingConnectionKeyDigest(connectionKeyMd5) {
129
- const provided = connectionKeyMd5.trim().toLowerCase();
130
- if (!/^[a-f0-9]{32}$/.test(provided)) {
131
- return false;
132
- }
133
- const providedBuffer = Buffer.from(provided, "hex");
134
- return getConfiguredConnectionKeys()
135
- .map((key) => key.trim())
136
- .filter(Boolean)
137
- .some((key) => {
138
- const configuredBuffer = Buffer.from(md5Hex(key), "hex");
139
- return (configuredBuffer.length === providedBuffer.length &&
140
- timingSafeEqual(configuredBuffer, providedBuffer));
141
- });
142
- }
143
- export function buildConnectionCheckResponse(connectionKeyMd5) {
144
- const configuredConnectionKeys = getConfiguredConnectionKeys();
145
- const connectionKeyRequired = configuredConnectionKeys.length > 0;
146
- const version = getBridgeVersion();
147
- if (!connectionKeyRequired) {
148
- return {
149
- status: 200,
150
- body: {
151
- ok: true,
152
- runtimeBridge: "healthy",
153
- version,
154
- connectionKeyMatched: true,
155
- connectionKeyRequired: false,
156
- },
157
- };
158
- }
159
- if (hasMatchingConnectionKeyDigest(connectionKeyMd5)) {
160
- return {
161
- status: 200,
162
- body: {
163
- ok: true,
164
- runtimeBridge: "healthy",
165
- version,
166
- connectionKeyMatched: true,
167
- connectionKeyRequired: true,
168
- },
169
- };
170
- }
171
- return {
172
- status: 401,
173
- body: {
174
- ok: false,
175
- error: "connection_key_mismatch",
176
- version,
177
- connectionKeyMatched: false,
178
- connectionKeyRequired: true,
179
- },
180
- };
181
- }
182
- /**
183
- * 构建调度中心 ping 失败响应。
184
- * 主流程:保留底层错误与 scheduler 地址,同时明确 bridge 本身已连通、失败点在 bridge 回连调度中心。
185
- */
186
- export function buildSchedulerPingFailureResponse(error, configuredSchedulerBaseUrl) {
187
- const trimmedSchedulerBaseUrl = configuredSchedulerBaseUrl.trim();
188
- const schedulerUrl = trimmedSchedulerBaseUrl || "http://localhost:8080";
189
- const isLocalhostScheduler = /^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?(?:\/|$)/i.test(schedulerUrl);
190
- return {
191
- ok: false,
192
- error: error.message || "scheduler ping failed",
193
- failureStage: "scheduler_ping",
194
- runtimeBridge: "healthy",
195
- schedulerBaseUrl: schedulerUrl,
196
- hint: isLocalhostScheduler
197
- ? "aws-runtime-bridge 已连通,但它回连调度中心失败。请在 bridge 启动环境中将 AWS_RUNTIME_SCHEDULER_BASE_URL 配置为该实例可访问的调度中心地址,例如 http://<server-host>:7380。"
198
- : "aws-runtime-bridge 已连通,但它回连调度中心失败。请确认 AWS_RUNTIME_SCHEDULER_BASE_URL 指向的调度中心地址可从 bridge 机器访问,并且运行时访问令牌仍有效。",
199
- };
200
- }
201
- function getAxiosStatusCode(error) {
202
- if (typeof error !== "object" || error === null) {
203
- return undefined;
204
- }
205
- const response = Reflect.get(error, "response");
206
- if (typeof response !== "object" || response === null) {
207
- return undefined;
208
- }
209
- const status = Reflect.get(response, "status");
210
- return typeof status === "number" ? status : undefined;
211
- }
212
- async function pingSchedulerWithToken(schedulerBaseUrl, runtimeAccessToken) {
213
- try {
214
- const schedulerResponse = await axios.get(`${schedulerBaseUrl}/api/runtime/ping`, { headers: { "X-Runtime-Token": runtimeAccessToken } });
215
- return {
216
- schedulerReachable: schedulerResponse.status >= 200 && schedulerResponse.status < 300,
217
- tokenRefreshed: false,
218
- };
219
- }
220
- catch (error) {
221
- if (getAxiosStatusCode(error) !== 401) {
222
- throw error;
223
- }
224
- const refreshResult = await requestRuntimeAccessTokenRefreshForServer(schedulerBaseUrl);
225
- if (!refreshResult.success || !refreshResult.runtimeAccessToken) {
226
- throw error;
227
- }
228
- const retryResponse = await axios.get(`${schedulerBaseUrl}/api/runtime/ping`, { headers: { "X-Runtime-Token": refreshResult.runtimeAccessToken } });
229
- return {
230
- schedulerReachable: retryResponse.status >= 200 && retryResponse.status < 300,
231
- tokenRefreshed: true,
232
- };
233
- }
234
- }
235
- /**
236
- * Build the response for ambiguous scheduler targets.
237
- * Main flow: never silently pick the first target; require an explicit scheduler URL or future scheduler identity routing.
238
- */
239
- export function buildAmbiguousSchedulerBaseUrlResponse(targetUrls) {
240
- return {
241
- ok: false,
242
- error: "ambiguous_scheduler_base_url",
243
- failureStage: "scheduler_ping",
244
- runtimeBridge: "healthy",
245
- schedulerBaseUrl: "",
246
- autoRegisterTargetUrls: targetUrls,
247
- hint: "Multiple autoRegisterTargets.serverUrl values were found, so bridge cannot safely infer which scheduler /runtime/ping should call back. Set AWS_RUNTIME_SCHEDULER_BASE_URL explicitly, or use future schedulerId/token-bound multi-scheduler routing.",
248
- };
249
- }
250
- /**
251
- * 构建工具状态检测目标列表。
252
- * 主流程:合并实例启用工具与配置面板固定展示工具,避免历史状态缺少 Codex 时前端误判为待检测。
253
- */
254
- export function buildToolStatusDetectionTargets(enabledTools) {
255
- return Array.from(new Set([...enabledTools, ...PANEL_TOOL_STATUS_KEYS]
256
- .map((tool) => String(tool || "").trim().toLowerCase())
257
- .filter(Boolean)));
258
- }
259
- /**
260
- * 汇总卸载后仍可执行的工具,用于避免把部分卸载误报为成功。
261
- */
262
- export function buildUninstallFailureMessage(requestedTools, toolStatus) {
263
- const failedTools = requestedTools.filter((tool) => toolStatus[tool]?.installed);
264
- if (failedTools.length === 0) {
265
- return "";
266
- }
267
- return failedTools
268
- .map((tool) => {
269
- const status = toolStatus[tool];
270
- const detail = status?.error || status?.executable || "command is still available";
271
- return `${tool}: ${detail}`;
272
- })
273
- .join("; ");
274
- }
275
- export function summarizeToolStatus(toolStatus) {
276
- return Object.fromEntries(Object.entries(toolStatus || {}).map(([tool, status]) => [
277
- tool,
278
- {
279
- installed: Boolean(status?.installed),
280
- version: status?.version || null,
281
- executable: status?.executable || null,
282
- error: status?.error || null,
283
- },
284
- ]));
285
- }
286
- /**
287
- * GET /runtime/check-update
288
- *
289
- * 查询 npm registry 获取 aws-runtime-bridge 的最新版本并和当前版本比较。
290
- * 使用 5 分钟内存缓存减少对 npm registry 的请求。
291
- */
292
- let updateCheckCache = null;
293
- const UPDATE_CHECK_CACHE_TTL = 300_000; // 5 分钟
294
- async function fetchLatestNpmVersion() {
295
- const response = await axios.get("https://registry.npmjs.org/aws-runtime-bridge/latest", { timeout: 10_000, responseType: "json" });
296
- const data = response.data;
297
- return data?.version || "unknown";
298
- }
299
- instanceRouter.get("/check-update", async (_req, res) => {
300
- try {
301
- let latestVersion;
302
- if (updateCheckCache && Date.now() - updateCheckCache.ts < UPDATE_CHECK_CACHE_TTL) {
303
- latestVersion = updateCheckCache.latestVersion;
304
- }
305
- else {
306
- latestVersion = await fetchLatestNpmVersion();
307
- updateCheckCache = { latestVersion, ts: Date.now() };
308
- }
309
- const currentVersion = getBridgeVersion();
310
- const hasUpdate = latestVersion !== "unknown" && currentVersion !== "unknown" && latestVersion !== currentVersion;
311
- res.json({
312
- ok: true,
313
- hasUpdate,
314
- currentVersion,
315
- latestVersion,
316
- });
317
- }
318
- catch (error) {
319
- const err = error;
320
- log.warn("[check-update] Failed to query npm registry:", err.message);
321
- res.json({
322
- ok: false,
323
- hasUpdate: false,
324
- currentVersion: getBridgeVersion(),
325
- latestVersion: null,
326
- error: err.message || "failed to check for updates",
327
- });
328
- }
329
- });
330
- instanceRouter.get("/healthz", (_req, res) => {
331
- res.json({
332
- ok: true,
333
- runtimeBridge: "healthy",
334
- });
335
- });
336
- instanceRouter.get("/connection-check", (req, res) => {
337
- const connectionKeyMd5 = String(req.header("X-Bridge-Connection-Key-MD5") || "");
338
- const result = buildConnectionCheckResponse(connectionKeyMd5);
339
- res.status(result.status).json(result.body);
340
- });
341
- instanceRouter.get("/ping", validateToken, async (req, res) => {
342
- const schedulerBaseUrlResolution = resolveSchedulerBaseUrlFrom(req.header("X-Scheduler-Base-Url"), req.header("X-Bridge-Instance-Id"), req.header("X-Bridge-Instance-Name"));
343
- if (schedulerBaseUrlResolution.source === "ambiguous-auto-register-targets") {
344
- res
345
- .status(400)
346
- .json(buildAmbiguousSchedulerBaseUrlResponse(schedulerBaseUrlResolution.ambiguousTargetUrls));
347
- return;
348
- }
349
- const schedulerBaseUrl = schedulerBaseUrlResolution.url;
350
- try {
351
- const runtimeAccessToken = getRuntimeAccessToken(schedulerBaseUrl);
352
- if (!runtimeAccessToken) {
353
- res.status(401).json({ ok: false, error: "runtime_access_token_required" });
354
- return;
355
- }
356
- const schedulerPing = await pingSchedulerWithToken(schedulerBaseUrl, runtimeAccessToken);
357
- res.json({
358
- ok: true,
359
- runtimeBridge: "healthy",
360
- version: getBridgeVersion(),
361
- schedulerReachable: schedulerPing.schedulerReachable,
362
- tokenRefreshed: schedulerPing.tokenRefreshed,
363
- schedulerBaseUrl,
364
- // 回传匹配到的 instanceId/instanceName,让 server 知道 bridge 实际绑定的是哪个
365
- instanceId: schedulerBaseUrlResolution.instanceId,
366
- instanceName: schedulerBaseUrlResolution.instanceName,
367
- });
368
- }
369
- catch (error) {
370
- const err = error;
371
- res
372
- .status(502)
373
- .json(buildSchedulerPingFailureResponse(err, schedulerBaseUrl));
374
- }
375
- });
376
- instanceRouter.post("/init-instance", validateToken, async (req, res) => {
377
- const { agentId, workspacePath, skillEnabled, mcpEnabled, ccSwitchEnabledTools, skillPackage, skillPackages, mcpServers, } = req.body || {};
378
- if (!agentId || !workspacePath) {
379
- res.status(400).json({ error: "agentId and workspacePath are required" });
380
- return;
381
- }
382
- try {
383
- log.info("[init-instance] Request received", {
384
- agentId: String(agentId),
385
- workspacePath: String(workspacePath),
386
- skillEnabled,
387
- mcpEnabled,
388
- ccSwitchEnabledTools,
389
- });
390
- const result = await initInstance(agentId, workspacePath, {
391
- skillEnabled,
392
- mcpEnabled,
393
- ccSwitchEnabledTools,
394
- skillPackage,
395
- skillPackages,
396
- mcpServers,
397
- });
398
- log.info("[init-instance] Initialization completed", {
399
- agentId: String(agentId),
400
- ok: result.ok,
401
- logCount: result.logs?.length || 0,
402
- enabledTools: result.enabledTools,
403
- });
404
- res.json(result);
405
- }
406
- catch (error) {
407
- const err = error;
408
- log.error("[init-instance] Initialization failed", {
409
- agentId: String(agentId),
410
- workspacePath: String(workspacePath),
411
- error: err?.message || String(error),
412
- stack: err?.stack || null,
413
- });
414
- res.status(400).json({
415
- error: err?.message || "initialize instance failed",
416
- });
417
- }
418
- });
419
- instanceRouter.post("/cc-switch/state", validateToken, async (req, res) => {
420
- const { agentId } = req.body || {};
421
- if (!agentId) {
422
- res.status(400).json({ error: "agentId is required" });
423
- return;
424
- }
425
- try {
426
- log.info("[cc-switch/state] Request received", { agentId: String(agentId) });
427
- const sdk = await loadCcSwitchSdk(agentId);
428
- const imported = await discoverCcSwitchConfiguredItems(sdk);
429
- const synced = await syncLegacyStateFromSdk(agentId, sdk);
430
- const state = synced.state;
431
- const detectionTargets = buildToolStatusDetectionTargets(state.enabledTools || []);
432
- log.info("[cc-switch/state] Detecting SDK statuses", {
433
- agentId: String(agentId),
434
- detectionTargets,
435
- });
436
- const toolStatus = await detectToolStatuses(detectionTargets);
437
- log.info("[cc-switch/state] SDK status detection completed", {
438
- agentId: String(agentId),
439
- toolStatus: summarizeToolStatus(toolStatus),
440
- importedMcpCount: imported.mcpServers,
441
- importedSkillCount: imported.skills,
442
- });
443
- res.json({
444
- ok: true,
445
- agentId: String(agentId),
446
- imported: {
447
- mcpServers: imported.mcpServers,
448
- skills: imported.skills,
449
- },
450
- state: { ...state, toolStatus },
451
- });
452
- }
453
- catch (error) {
454
- const err = error;
455
- log.error("[cc-switch/state] Failed to load state", {
456
- agentId: String(agentId),
457
- error: err?.message || String(error),
458
- stack: err?.stack || null,
459
- });
460
- res.status(400).json({ error: err?.message || "load state failed" });
461
- }
462
- });
463
- instanceRouter.post("/cc-switch/install-tools", validateToken, async (req, res) => {
464
- const { agentId, tools } = req.body || {};
465
- if (!agentId) {
466
- res.status(400).json({ error: "agentId is required" });
467
- return;
468
- }
469
- const requestedTools = Array.isArray(tools)
470
- ? tools
471
- .map((tool) => String(tool || "")
472
- .trim()
473
- .toLowerCase())
474
- .filter(Boolean)
475
- : [];
476
- log.info("[cc-switch/install-tools] Request received", {
477
- agentId: String(agentId),
478
- requestedTools,
479
- });
480
- const supportedInstallableTools = new Set(SUPPORTED_INSTALLABLE_TOOLS);
481
- const installableTools = requestedTools.filter((tool) => supportedInstallableTools.has(tool));
482
- log.info("[cc-switch/install-tools] Request normalized", {
483
- agentId: String(agentId),
484
- requestedTools,
485
- installableTools,
486
- supportedInstallableTools: SUPPORTED_INSTALLABLE_TOOLS,
487
- });
488
- if (installableTools.length === 0) {
489
- log.warn("[cc-switch/install-tools] No supported installable tools requested", {
490
- agentId: String(agentId),
491
- requestedTools,
492
- });
493
- res
494
- .status(400)
495
- .json({
496
- error: `tools must include ${SUPPORTED_INSTALLABLE_TOOLS.join(", ")}`,
497
- });
498
- return;
499
- }
500
- try {
501
- const state = await loadInstanceState(agentId);
502
- const enabledTools = Array.from(new Set([...(state.enabledTools || []), ...installableTools]));
503
- log.info("[cc-switch/install-tools] Starting installer", {
504
- agentId: String(agentId),
505
- installableTools,
506
- previousEnabledTools: state.enabledTools || [],
507
- nextEnabledTools: enabledTools,
508
- });
509
- const toolStatus = await ensureToolsInstalled(installableTools);
510
- log.info("[cc-switch/install-tools] Installer completed", {
511
- agentId: String(agentId),
512
- toolStatus: summarizeToolStatus(toolStatus),
513
- });
514
- const refreshedToolStatus = await detectToolStatuses(enabledTools);
515
- log.info("[cc-switch/install-tools] Refreshed enabled SDK statuses", {
516
- agentId: String(agentId),
517
- refreshedToolStatus: summarizeToolStatus(refreshedToolStatus),
518
- });
519
- const nextToolStatus = {
520
- ...refreshedToolStatus,
521
- ...toolStatus,
522
- };
523
- const savedState = await saveInstanceState(agentId, {
524
- ...state,
525
- enabledTools,
526
- toolStatus: nextToolStatus,
527
- });
528
- const installableToolSet = new Set(installableTools);
529
- const failedTools = Object.entries(nextToolStatus)
530
- .filter(([tool]) => installableToolSet.has(tool))
531
- .filter(([, status]) => !status.installed)
532
- .map(([tool, status]) => ({ tool, error: status.error || null }));
533
- if (failedTools.length > 0) {
534
- log.warn("[cc-switch/install-tools] Some SDKs remain unavailable", {
535
- agentId: String(agentId),
536
- failedTools,
537
- });
538
- }
539
- log.info("[cc-switch/install-tools] State saved", {
540
- agentId: String(agentId),
541
- enabledTools: savedState.enabledTools,
542
- toolStatus: summarizeToolStatus(nextToolStatus),
543
- });
544
- res.json({
545
- ok: failedTools.length === 0,
546
- agentId: String(agentId),
547
- toolStatus: nextToolStatus,
548
- failedTools,
549
- state: savedState,
550
- });
551
- }
552
- catch (error) {
553
- const err = error;
554
- log.error("[cc-switch/install-tools] Install route failed", {
555
- agentId: String(agentId),
556
- requestedTools,
557
- installableTools,
558
- error: err?.message || String(error),
559
- stack: err?.stack || null,
560
- });
561
- res.status(400).json({ error: err?.message || "install tools failed" });
562
- }
563
- });
564
- instanceRouter.post("/cc-switch/uninstall-tools", validateToken, async (req, res) => {
565
- const { agentId, tools } = req.body || {};
566
- if (!agentId) {
567
- res.status(400).json({ error: "agentId is required" });
568
- return;
569
- }
570
- const requestedTools = Array.isArray(tools)
571
- ? tools
572
- .map((tool) => String(tool || "")
573
- .trim()
574
- .toLowerCase())
575
- .filter(Boolean)
576
- : [];
577
- const supportedUninstallableTools = new Set(SUPPORTED_UNINSTALLABLE_TOOLS);
578
- const uninstallableTools = requestedTools.filter((tool) => supportedUninstallableTools.has(tool));
579
- if (uninstallableTools.length === 0) {
580
- res.status(400).json({
581
- error: `tools must include ${SUPPORTED_UNINSTALLABLE_TOOLS.join(", ")}`,
582
- });
583
- return;
584
- }
585
- try {
586
- const state = await loadInstanceState(agentId);
587
- const uninstallableToolSet = new Set(uninstallableTools);
588
- const enabledTools = (state.enabledTools || []).filter((tool) => !uninstallableToolSet.has(String(tool || "").trim().toLowerCase()));
589
- const uninstalledToolStatus = await uninstallTools(uninstallableTools);
590
- const refreshedToolStatus = await detectToolStatuses([
591
- ...enabledTools,
592
- ...uninstallableTools,
593
- ]);
594
- const nextToolStatus = {
595
- ...refreshedToolStatus,
596
- ...uninstalledToolStatus,
597
- };
598
- const uninstallFailureMessage = buildUninstallFailureMessage(uninstallableTools, nextToolStatus);
599
- const nextEnabledTools = uninstallFailureMessage
600
- ? state.enabledTools || []
601
- : enabledTools;
602
- const savedState = await saveInstanceState(agentId, {
603
- ...state,
604
- enabledTools: nextEnabledTools,
605
- toolStatus: nextToolStatus,
606
- });
607
- if (uninstallFailureMessage) {
608
- res.status(400).json({
609
- ok: false,
610
- agentId: String(agentId),
611
- error: `uninstall incomplete: ${uninstallFailureMessage}`,
612
- toolStatus: nextToolStatus,
613
- state: savedState,
614
- });
615
- return;
616
- }
617
- res.json({
618
- ok: true,
619
- agentId: String(agentId),
620
- toolStatus: nextToolStatus,
621
- state: savedState,
622
- });
623
- }
624
- catch (error) {
625
- const err = error;
626
- res.status(400).json({ error: err?.message || "uninstall tools failed" });
627
- }
628
- });
629
- /**
630
- * ★★★ 新增:aws-mcp-server 通知 bridge 准备重启
631
- * POST /runtime/prepare-restart
632
- *
633
- * 当 aws-mcp-server 准备重启时,调用此接口通知 bridge:
634
- * - bridge 保留所有会话状态(不清空持久化)
635
- * - aws-mcp-server 重启后可以从 bridge 恢复 agent 状态
636
- *
637
- * 请求体:
638
- * - preserveSessions: true = 保留会话(aws-mcp-server 重启)
639
- * false = 清理会话(bridge 自己关闭)
640
- */
641
- instanceRouter.post("/prepare-restart", validateToken, async (req, res) => {
642
- const { preserveSessions = true } = req.body || {};
643
- try {
644
- log.info(`[prepare-restart] 收到准备重启通知,preserveSessions=${preserveSessions}`);
645
- // 记录重启模式到文件,供下次启动时判断。
646
- await writeRestartSessionFlag(Boolean(preserveSessions));
647
- res.json({
648
- ok: true,
649
- preserveSessions,
650
- message: preserveSessions
651
- ? "Bridge will preserve sessions for aws-mcp-server restart"
652
- : "Bridge will clean up sessions on shutdown",
653
- });
654
- }
655
- catch (error) {
656
- const err = error;
657
- log.error("[prepare-restart] Error:", err);
658
- res.status(500).json({ error: err.message });
659
- }
660
- });
661
- /**
662
- * POST /runtime/update-bridge
663
- *
664
- * 通过当前 Bridge 进程执行全局 npm 包更新,等价于 CLI 的
665
- * `awsb update`,用于面板上的“更新实例 Bridge”。
666
- */
667
- instanceRouter.post("/update-bridge", validateTokenOrPanelSession, async (req, res) => {
668
- const command = resolveNpmExecutable();
669
- const args = ["install", "-g", "aws-runtime-bridge@latest", "--omit=optional"];
670
- const requestedByUserId = normalizeOptionalText(req.body?.requestedByUserId);
671
- try {
672
- if (!requestedByUserId) {
673
- res.status(400).json({ error: "requestedByUserId is required" });
674
- return;
675
- }
676
- const operation = createBridgeLifecycleOperation({
677
- operationType: "update",
678
- requestedByUserId,
679
- schedulerBaseUrl: req.body?.schedulerBaseUrl,
680
- runtimeBridgeBaseUrl: resolveRequestRuntimeBridgeBaseUrl(req),
681
- status: "accepted",
682
- message: "Bridge 更新请求已收到,将在后台执行。",
683
- });
684
- await upsertBridgeLifecycleOperation(operation);
685
- void runBridgeUpdateInBackground({ command, args, operation });
686
- res.json({
687
- ok: true,
688
- operationId: operation.operationId,
689
- message: "Bridge 更新已在后台开始,完成后会通过消息中心通知结果。",
690
- });
691
- }
692
- catch (error) {
693
- const err = error;
694
- log.error("[update-bridge] Error:", err);
695
- res.status(500).json({ error: err.message || "update bridge failed" });
696
- }
697
- });
698
- /**
699
- * POST /runtime/restart-bridge
700
- *
701
- * 写入保留会话标记后优雅关闭当前 Bridge 进程。真正的重新拉起由
702
- * systemd、PM2、Docker 外部守护或用户手动启动完成。
703
- */
704
- instanceRouter.post("/restart-bridge", validateTokenOrPanelSession, async (req, res) => {
705
- const { preserveSessions = true } = req.body || {};
706
- const requestedByUserId = normalizeOptionalText(req.body?.requestedByUserId);
707
- try {
708
- if (!requestedByUserId) {
709
- res.status(400).json({ error: "requestedByUserId is required" });
710
- return;
711
- }
712
- log.info(`[restart-bridge] 收到实例 Bridge 重启请求,preserveSessions=${preserveSessions}`);
713
- const operation = createBridgeLifecycleOperation({
714
- operationType: "restart",
715
- requestedByUserId,
716
- schedulerBaseUrl: req.body?.schedulerBaseUrl,
717
- runtimeBridgeBaseUrl: resolveRequestRuntimeBridgeBaseUrl(req),
718
- status: "accepted",
719
- message: "Bridge 已收到重启请求;下次启动后会发送确认通知。",
720
- });
721
- await upsertBridgeLifecycleOperation(operation);
722
- await writeRestartSessionFlag(Boolean(preserveSessions));
723
- res.json({
724
- ok: true,
725
- operationId: operation.operationId,
726
- preserveSessions: Boolean(preserveSessions),
727
- message: "Bridge 正在优雅退出;下次启动后会通过消息中心通知结果。若未由守护进程管理,请手动重新启动。",
728
- });
729
- setTimeout(() => {
730
- // 用退出码 42 表示"重启请求",配合 systemd Restart=on-failure 触发自动拉起
731
- process.exitCode = 42;
732
- if (gracefulShutdownFn) {
733
- gracefulShutdownFn("PANEL_RESTART", Boolean(preserveSessions)).catch((error) => {
734
- const err = error;
735
- log.error("[restart-bridge] graceful shutdown failed:", err);
736
- process.exit(1);
737
- });
738
- return;
739
- }
740
- process.exit(42);
741
- }, 250);
742
- }
743
- catch (error) {
744
- const err = error;
745
- log.error("[restart-bridge] Error:", err);
746
- res.status(500).json({ error: err.message || "restart bridge failed" });
747
- }
748
- });
1
+ import{Router as D}from"express";import I from"axios";import{spawn as N}from"node:child_process";import{createHash as $,timingSafeEqual as F}from"node:crypto";import{getBridgeVersion as b,resolveSchedulerBaseUrlFrom as M}from"../config.js";import{validateToken as S,validateTokenOrPanelSession as j}from"../middleware/auth.js";import{getConfiguredConnectionKeys as _,requestRuntimeAccessTokenRefreshForServer as z}from"../services/auto-register.js";import{discoverCcSwitchConfiguredItems as H,loadCcSwitchSdk as V}from"../services/cc-switch-sdk.js";import{initInstance as X,syncLegacyStateFromSdk as W}from"../services/instance-init-service.js";import{createBridgeLifecycleOperation as E,deliverPendingBridgeLifecycleNotifications as C,upsertBridgeLifecycleOperation as y}from"../services/lifecycle-state.js";import{loadInstanceState as x,saveInstanceState as L}from"../services/instance-state.js";import{getRuntimeAccessToken as G}from"../services/runtime-binding.js";import{detectToolStatuses as R,ensureToolsInstalled as J,SUPPORTED_INSTALLABLE_TOOLS as v,SUPPORTED_UNINSTALLABLE_TOOLS as A,uninstallTools as Y}from"../services/tool-installer.js";import{createLogger as Q}from"../utils/logger.js";const l=Q("instance"),Z=["acode","claude","opencode","codex"];let U=null;function je(r){U=r}const d=D();function ee(){return process.platform==="win32"?"npm.cmd":"npm"}function q(r){return r.length>16e3?`${r.slice(r.length-16e3)}
2
+ [output truncated]`:r}function te(r,t){return new Promise((e,s)=>{const n=N(r,t,{shell:!1,windowsHide:!0});let a="",i="";n.stdout.on("data",o=>{a+=o.toString("utf8")}),n.stderr.on("data",o=>{i+=o.toString("utf8")}),n.on("error",s),n.on("close",o=>{e({command:r,args:t,exitCode:o,stdout:q(a),stderr:q(i)})})})}function K(r){return String(r||"").trim()||void 0}function O(r){const t=r.get("host");if(t)return`${r.protocol}://${t}`}async function re(r){const t={...r.operation,status:"running",message:"Bridge \u66F4\u65B0\u6B63\u5728\u540E\u53F0\u6267\u884C\u3002"};await y(t);try{l.info("[update-bridge] \u6B63\u5728\u540E\u53F0\u66F4\u65B0 aws-runtime-bridge \u5230\u6700\u65B0\u7248\u672C");const e=await te(r.command,r.args),s=e.exitCode===0;await y({...t,status:s?"succeeded":"failed",message:s?"Bridge \u66F4\u65B0\u5B8C\u6210\uFF0C\u8BF7\u91CD\u542F\u5B9E\u4F8B Bridge \u4EE5\u52A0\u8F7D\u65B0\u7248\u672C\u3002":`Bridge \u66F4\u65B0\u5931\u8D25\uFF0Cnpm \u9000\u51FA\u7801: ${e.exitCode??"unknown"}`,error:s?void 0:e.stderr||e.stdout}),await C()}catch(e){const s=e;l.error("[update-bridge] background update failed:",s),await y({...t,status:"failed",message:"Bridge \u66F4\u65B0\u5931\u8D25\u3002",error:s.message||"update bridge failed"}),await C()}}async function P(r){const t=await import("node:fs/promises"),e=await import("node:path"),s=await import("node:os"),n=e.join(s.tmpdir(),"agentswork-runtime-bridge",".preserve-sessions");if(r){await t.mkdir(e.dirname(n),{recursive:!0}),await t.writeFile(n,JSON.stringify({preserveSessions:!0,timestamp:new Date().toISOString()}),"utf-8"),l.info(`[prepare-restart] \u5DF2\u521B\u5EFA\u4FDD\u7559\u4F1A\u8BDD\u6807\u8BB0\u6587\u4EF6: ${n}`);return}try{await t.unlink(n),l.info("[prepare-restart] \u5DF2\u5220\u9664\u4FDD\u7559\u4F1A\u8BDD\u6807\u8BB0\u6587\u4EF6")}catch{}}function se(r){return $("md5").update(r,"utf8").digest("hex")}function ne(r){const t=r.trim().toLowerCase();if(!/^[a-f0-9]{32}$/.test(t))return!1;const e=Buffer.from(t,"hex");return _().map(s=>s.trim()).filter(Boolean).some(s=>{const n=Buffer.from(se(s),"hex");return n.length===e.length&&F(n,e)})}function oe(r){const e=_().length>0,s=b();return e?ne(r)?{status:200,body:{ok:!0,runtimeBridge:"healthy",version:s,connectionKeyMatched:!0,connectionKeyRequired:!0}}:{status:401,body:{ok:!1,error:"connection_key_mismatch",version:s,connectionKeyMatched:!1,connectionKeyRequired:!0}}:{status:200,body:{ok:!0,runtimeBridge:"healthy",version:s,connectionKeyMatched:!0,connectionKeyRequired:!1}}}function ae(r,t){const s=t.trim()||"http://localhost:8080",n=/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?(?:\/|$)/i.test(s);return{ok:!1,error:r.message||"scheduler ping failed",failureStage:"scheduler_ping",runtimeBridge:"healthy",schedulerBaseUrl:s,hint:n?"aws-runtime-bridge \u5DF2\u8FDE\u901A\uFF0C\u4F46\u5B83\u56DE\u8FDE\u8C03\u5EA6\u4E2D\u5FC3\u5931\u8D25\u3002\u8BF7\u5728 bridge \u542F\u52A8\u73AF\u5883\u4E2D\u5C06 AWS_RUNTIME_SCHEDULER_BASE_URL \u914D\u7F6E\u4E3A\u8BE5\u5B9E\u4F8B\u53EF\u8BBF\u95EE\u7684\u8C03\u5EA6\u4E2D\u5FC3\u5730\u5740\uFF0C\u4F8B\u5982 http://<server-host>:7380\u3002":"aws-runtime-bridge \u5DF2\u8FDE\u901A\uFF0C\u4F46\u5B83\u56DE\u8FDE\u8C03\u5EA6\u4E2D\u5FC3\u5931\u8D25\u3002\u8BF7\u786E\u8BA4 AWS_RUNTIME_SCHEDULER_BASE_URL \u6307\u5411\u7684\u8C03\u5EA6\u4E2D\u5FC3\u5730\u5740\u53EF\u4ECE bridge \u673A\u5668\u8BBF\u95EE\uFF0C\u5E76\u4E14\u8FD0\u884C\u65F6\u8BBF\u95EE\u4EE4\u724C\u4ECD\u6709\u6548\u3002"}}function ie(r){if(typeof r!="object"||r===null)return;const t=Reflect.get(r,"response");if(typeof t!="object"||t===null)return;const e=Reflect.get(t,"status");return typeof e=="number"?e:void 0}async function le(r,t){try{const e=await I.get(`${r}/api/runtime/ping`,{headers:{"X-Runtime-Token":t}});return{schedulerReachable:e.status>=200&&e.status<300,tokenRefreshed:!1}}catch(e){if(ie(e)!==401)throw e;const s=await z(r);if(!s.success||!s.runtimeAccessToken)throw e;const n=await I.get(`${r}/api/runtime/ping`,{headers:{"X-Runtime-Token":s.runtimeAccessToken}});return{schedulerReachable:n.status>=200&&n.status<300,tokenRefreshed:!0}}}function ce(r){return{ok:!1,error:"ambiguous_scheduler_base_url",failureStage:"scheduler_ping",runtimeBridge:"healthy",schedulerBaseUrl:"",autoRegisterTargetUrls:r,hint:"Multiple autoRegisterTargets.serverUrl values were found, so bridge cannot safely infer which scheduler /runtime/ping should call back. Set AWS_RUNTIME_SCHEDULER_BASE_URL explicitly, or use future schedulerId/token-bound multi-scheduler routing."}}function ue(r){return Array.from(new Set([...r,...Z].map(t=>String(t||"").trim().toLowerCase()).filter(Boolean)))}function de(r,t){const e=r.filter(s=>t[s]?.installed);return e.length===0?"":e.map(s=>{const n=t[s],a=n?.error||n?.executable||"command is still available";return`${s}: ${a}`}).join("; ")}function T(r){return Object.fromEntries(Object.entries(r||{}).map(([t,e])=>[t,{installed:!!e?.installed,version:e?.version||null,executable:e?.executable||null,error:e?.error||null}]))}let k=null;const ge=3e5;async function fe(){return(await I.get("https://registry.npmjs.org/aws-runtime-bridge/latest",{timeout:1e4,responseType:"json"})).data?.version||"unknown"}d.get("/check-update",async(r,t)=>{try{let e;k&&Date.now()-k.ts<ge?e=k.latestVersion:(e=await fe(),k={latestVersion:e,ts:Date.now()});const s=b(),n=e!=="unknown"&&s!=="unknown"&&e!==s;t.json({ok:!0,hasUpdate:n,currentVersion:s,latestVersion:e})}catch(e){const s=e;l.warn("[check-update] Failed to query npm registry:",s.message),t.json({ok:!1,hasUpdate:!1,currentVersion:b(),latestVersion:null,error:s.message||"failed to check for updates"})}}),d.get("/healthz",(r,t)=>{t.json({ok:!0,runtimeBridge:"healthy"})}),d.get("/connection-check",(r,t)=>{const e=String(r.header("X-Bridge-Connection-Key-MD5")||""),s=oe(e);t.status(s.status).json(s.body)}),d.get("/ping",S,async(r,t)=>{const e=M(r.header("X-Scheduler-Base-Url"),r.header("X-Bridge-Instance-Id"),r.header("X-Bridge-Instance-Name"));if(e.source==="ambiguous-auto-register-targets"){t.status(400).json(ce(e.ambiguousTargetUrls));return}const s=e.url;try{const n=G(s);if(!n){t.status(401).json({ok:!1,error:"runtime_access_token_required"});return}const a=await le(s,n);t.json({ok:!0,runtimeBridge:"healthy",version:b(),schedulerReachable:a.schedulerReachable,tokenRefreshed:a.tokenRefreshed,schedulerBaseUrl:s,instanceId:e.instanceId,instanceName:e.instanceName})}catch(n){const a=n;t.status(502).json(ae(a,s))}}),d.post("/init-instance",S,async(r,t)=>{const{agentId:e,workspacePath:s,skillEnabled:n,mcpEnabled:a,ccSwitchEnabledTools:i,skillPackage:o,skillPackages:c,mcpServers:m}=r.body||{};if(!e||!s){t.status(400).json({error:"agentId and workspacePath are required"});return}try{l.info("[init-instance] Request received",{agentId:String(e),workspacePath:String(s),skillEnabled:n,mcpEnabled:a,ccSwitchEnabledTools:i});const u=await X(e,s,{skillEnabled:n,mcpEnabled:a,ccSwitchEnabledTools:i,skillPackage:o,skillPackages:c,mcpServers:m});l.info("[init-instance] Initialization completed",{agentId:String(e),ok:u.ok,logCount:u.logs?.length||0,enabledTools:u.enabledTools}),t.json(u)}catch(u){const g=u;l.error("[init-instance] Initialization failed",{agentId:String(e),workspacePath:String(s),error:g?.message||String(u),stack:g?.stack||null}),t.status(400).json({error:g?.message||"initialize instance failed"})}}),d.post("/cc-switch/state",S,async(r,t)=>{const{agentId:e}=r.body||{};if(!e){t.status(400).json({error:"agentId is required"});return}try{l.info("[cc-switch/state] Request received",{agentId:String(e)});const s=await V(e),n=await H(s),i=(await W(e,s)).state,o=ue(i.enabledTools||[]);l.info("[cc-switch/state] Detecting SDK statuses",{agentId:String(e),detectionTargets:o});const c=await R(o);l.info("[cc-switch/state] SDK status detection completed",{agentId:String(e),toolStatus:T(c),importedMcpCount:n.mcpServers,importedSkillCount:n.skills}),t.json({ok:!0,agentId:String(e),imported:{mcpServers:n.mcpServers,skills:n.skills},state:{...i,toolStatus:c}})}catch(s){const n=s;l.error("[cc-switch/state] Failed to load state",{agentId:String(e),error:n?.message||String(s),stack:n?.stack||null}),t.status(400).json({error:n?.message||"load state failed"})}}),d.post("/cc-switch/install-tools",S,async(r,t)=>{const{agentId:e,tools:s}=r.body||{};if(!e){t.status(400).json({error:"agentId is required"});return}const n=Array.isArray(s)?s.map(o=>String(o||"").trim().toLowerCase()).filter(Boolean):[];l.info("[cc-switch/install-tools] Request received",{agentId:String(e),requestedTools:n});const a=new Set(v),i=n.filter(o=>a.has(o));if(l.info("[cc-switch/install-tools] Request normalized",{agentId:String(e),requestedTools:n,installableTools:i,supportedInstallableTools:v}),i.length===0){l.warn("[cc-switch/install-tools] No supported installable tools requested",{agentId:String(e),requestedTools:n}),t.status(400).json({error:`tools must include ${v.join(", ")}`});return}try{const o=await x(e),c=Array.from(new Set([...o.enabledTools||[],...i]));l.info("[cc-switch/install-tools] Starting installer",{agentId:String(e),installableTools:i,previousEnabledTools:o.enabledTools||[],nextEnabledTools:c});const m=await J(i);l.info("[cc-switch/install-tools] Installer completed",{agentId:String(e),toolStatus:T(m)});const u=await R(c);l.info("[cc-switch/install-tools] Refreshed enabled SDK statuses",{agentId:String(e),refreshedToolStatus:T(u)});const g={...u,...m},p=await L(e,{...o,enabledTools:c,toolStatus:g}),w=new Set(i),h=Object.entries(g).filter(([f])=>w.has(f)).filter(([,f])=>!f.installed).map(([f,B])=>({tool:f,error:B.error||null}));h.length>0&&l.warn("[cc-switch/install-tools] Some SDKs remain unavailable",{agentId:String(e),failedTools:h}),l.info("[cc-switch/install-tools] State saved",{agentId:String(e),enabledTools:p.enabledTools,toolStatus:T(g)}),t.json({ok:h.length===0,agentId:String(e),toolStatus:g,failedTools:h,state:p})}catch(o){const c=o;l.error("[cc-switch/install-tools] Install route failed",{agentId:String(e),requestedTools:n,installableTools:i,error:c?.message||String(o),stack:c?.stack||null}),t.status(400).json({error:c?.message||"install tools failed"})}}),d.post("/cc-switch/uninstall-tools",S,async(r,t)=>{const{agentId:e,tools:s}=r.body||{};if(!e){t.status(400).json({error:"agentId is required"});return}const n=Array.isArray(s)?s.map(o=>String(o||"").trim().toLowerCase()).filter(Boolean):[],a=new Set(A),i=n.filter(o=>a.has(o));if(i.length===0){t.status(400).json({error:`tools must include ${A.join(", ")}`});return}try{const o=await x(e),c=new Set(i),m=(o.enabledTools||[]).filter(B=>!c.has(String(B||"").trim().toLowerCase())),u=await Y(i),p={...await R([...m,...i]),...u},w=de(i,p),h=w?o.enabledTools||[]:m,f=await L(e,{...o,enabledTools:h,toolStatus:p});if(w){t.status(400).json({ok:!1,agentId:String(e),error:`uninstall incomplete: ${w}`,toolStatus:p,state:f});return}t.json({ok:!0,agentId:String(e),toolStatus:p,state:f})}catch(o){const c=o;t.status(400).json({error:c?.message||"uninstall tools failed"})}}),d.post("/prepare-restart",S,async(r,t)=>{const{preserveSessions:e=!0}=r.body||{};try{l.info(`[prepare-restart] \u6536\u5230\u51C6\u5907\u91CD\u542F\u901A\u77E5\uFF0CpreserveSessions=${e}`),await P(!!e),t.json({ok:!0,preserveSessions:e,message:e?"Bridge will preserve sessions for aws-mcp-server restart":"Bridge will clean up sessions on shutdown"})}catch(s){const n=s;l.error("[prepare-restart] Error:",n),t.status(500).json({error:n.message})}}),d.post("/update-bridge",j,async(r,t)=>{const e=ee(),s=["install","-g","aws-runtime-bridge@latest","--omit=optional"],n=K(r.body?.requestedByUserId);try{if(!n){t.status(400).json({error:"requestedByUserId is required"});return}const a=E({operationType:"update",requestedByUserId:n,schedulerBaseUrl:r.body?.schedulerBaseUrl,runtimeBridgeBaseUrl:O(r),status:"accepted",message:"Bridge \u66F4\u65B0\u8BF7\u6C42\u5DF2\u6536\u5230\uFF0C\u5C06\u5728\u540E\u53F0\u6267\u884C\u3002"});await y(a),re({command:e,args:s,operation:a}),t.json({ok:!0,operationId:a.operationId,message:"Bridge \u66F4\u65B0\u5DF2\u5728\u540E\u53F0\u5F00\u59CB\uFF0C\u5B8C\u6210\u540E\u4F1A\u901A\u8FC7\u6D88\u606F\u4E2D\u5FC3\u901A\u77E5\u7ED3\u679C\u3002"})}catch(a){const i=a;l.error("[update-bridge] Error:",i),t.status(500).json({error:i.message||"update bridge failed"})}}),d.post("/restart-bridge",j,async(r,t)=>{const{preserveSessions:e=!0}=r.body||{},s=K(r.body?.requestedByUserId);try{if(!s){t.status(400).json({error:"requestedByUserId is required"});return}l.info(`[restart-bridge] \u6536\u5230\u5B9E\u4F8B Bridge \u91CD\u542F\u8BF7\u6C42\uFF0CpreserveSessions=${e}`);const n=E({operationType:"restart",requestedByUserId:s,schedulerBaseUrl:r.body?.schedulerBaseUrl,runtimeBridgeBaseUrl:O(r),status:"accepted",message:"Bridge \u5DF2\u6536\u5230\u91CD\u542F\u8BF7\u6C42\uFF1B\u4E0B\u6B21\u542F\u52A8\u540E\u4F1A\u53D1\u9001\u786E\u8BA4\u901A\u77E5\u3002"});await y(n),await P(!!e),t.json({ok:!0,operationId:n.operationId,preserveSessions:!!e,message:"Bridge \u6B63\u5728\u4F18\u96C5\u9000\u51FA\uFF1B\u4E0B\u6B21\u542F\u52A8\u540E\u4F1A\u901A\u8FC7\u6D88\u606F\u4E2D\u5FC3\u901A\u77E5\u7ED3\u679C\u3002\u82E5\u672A\u7531\u5B88\u62A4\u8FDB\u7A0B\u7BA1\u7406\uFF0C\u8BF7\u624B\u52A8\u91CD\u65B0\u542F\u52A8\u3002"}),setTimeout(()=>{if(process.exitCode=42,U){U("PANEL_RESTART",!!e).catch(a=>{const i=a;l.error("[restart-bridge] graceful shutdown failed:",i),process.exit(1)});return}process.exit(42)},250)}catch(n){const a=n;l.error("[restart-bridge] Error:",a),t.status(500).json({error:a.message||"restart bridge failed"})}});export{ce as buildAmbiguousSchedulerBaseUrlResponse,oe as buildConnectionCheckResponse,ae as buildSchedulerPingFailureResponse,ue as buildToolStatusDetectionTargets,de as buildUninstallFailureMessage,d as instanceRouter,je as setGracefulShutdownFn,T as summarizeToolStatus};
3
+