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,890 +1,2 @@
1
- /**
2
- * Agent 客户端核心模块
3
- * 负责与调度中心通信,管理消息循环
4
- */
5
- import { configManager } from "./config.js";
6
- import { MESSAGE_POLL_INTERVAL_MS } from "./constants.js";
7
- import { HttpClient } from "./http-client.js";
8
- import { logger, setMcpNodeLogSink, updateStartupLogIdentity } from "./logger.js";
9
- import { claimRuntimeLaunchBinding } from "./runtime-launch-binding.js";
10
- import { StatusReporter } from "./status-reporter.js";
11
- import { WebSocketClient } from "./websocket-client.js";
12
- export class AgentClient {
13
- wsClient;
14
- httpClient;
15
- agentConfig;
16
- serverConfig;
17
- agentId = null;
18
- displayName = null;
19
- projectName = null; // Agent 所属项目(由服务端决定)
20
- isRunning = false;
21
- isDegradedMode = false; // 降级模式标志
22
- messageHandler = null;
23
- profileHandler = null;
24
- pollTimer = null;
25
- statusReporter = null;
26
- newCharacterHandler = null;
27
- /** runtime token 主动续期定时器(补全已配置但未接线的 12h 刷新) */
28
- runtimeTokenRefreshTimer = null;
29
- /**
30
- * Profile 缓存
31
- * 用于处理 PROFILE_INFO 消息在 profileHandler 设置之前到达的情况
32
- */
33
- cachedProfile = null;
34
- constructor() {
35
- configManager.loadConfig();
36
- this.agentConfig = configManager.getAgentConfig();
37
- this.serverConfig = configManager.getServerConfig();
38
- this.wsClient = new WebSocketClient(this.serverConfig);
39
- this.httpClient = new HttpClient(this.serverConfig);
40
- this.setupWebSocketListeners();
41
- }
42
- async initialize() {
43
- const binding = await claimRuntimeLaunchBinding(this.agentConfig, this.serverConfig);
44
- if (!binding) {
45
- // 无启动绑定时清除 bridge base URL,避免 ensureRuntimeAccessToken
46
- // ( !runtimeBridgeBaseUrl 分支)抛出异常阻塞后续注册流程。
47
- this.serverConfig.runtimeBridgeBaseUrl = undefined;
48
- return;
49
- }
50
- configManager.applyRuntimeLaunchBinding(binding);
51
- this.agentConfig = configManager.getAgentConfig();
52
- this.serverConfig = configManager.getServerConfig();
53
- this.wsClient = new WebSocketClient(this.serverConfig);
54
- this.httpClient = new HttpClient(this.serverConfig);
55
- this.setupWebSocketListeners();
56
- }
57
- // ============ WebSocket 事件监听 ============
58
- setupWebSocketListeners() {
59
- this.wsClient.on("directMessage", (message) => {
60
- this.handleIncomingDm(message);
61
- });
62
- this.wsClient.on("groupMessage", (message) => {
63
- this.handleIncomingGroup(message);
64
- });
65
- this.wsClient.on("profileInfo", (profile) => {
66
- logger.info(`[AgentClient] WebSocket profileInfo 事件触发,displayName: ${profile.displayName}`);
67
- this.handleProfileInfo(profile);
68
- });
69
- this.wsClient.on("agentStatus", (statusUpdate) => {
70
- logger.info(`[AgentClient] WebSocket agentStatus 事件触发: ${statusUpdate.status}`);
71
- // 状态更新由服务端推送,这里只记录日志
72
- });
73
- this.wsClient.on("disconnected", (code, reason) => {
74
- const closeReason = reason?.toString() || "";
75
- logger.warn("[AgentClient] WebSocket 断开连接: code=%s, reason=%s, agentId=%s, 正在自动重连", code, closeReason, this.agentId);
76
- });
77
- this.wsClient.on("error", (error) => {
78
- logger.error("[AgentClient] WebSocket 错误: %s, stack=%s", error.message, error.stack);
79
- });
80
- this.wsClient.on("reconnectFailed", () => {
81
- logger.error("[AgentClient] 重连失败(已达重试上限),停止消息循环, agentId=%s", this.agentId);
82
- this.stop();
83
- });
84
- }
85
- // ============ 注册相关 ============
86
- /**
87
- * 注册 Agent 上线
88
- */
89
- async register() {
90
- logger.info("[AgentClient] 正在注册 Agent...");
91
- if (this.hasPresetAgentId()) {
92
- return await this.registerWithExistingAgentId();
93
- }
94
- return await this.registerAsNewAgent();
95
- }
96
- hasPresetAgentId() {
97
- return !!(this.agentConfig.agentId && this.agentConfig.agentId.trim().length > 0);
98
- }
99
- /**
100
- * 使用预设 AgentID 注册(绑定已有实例)
101
- */
102
- async registerWithExistingAgentId() {
103
- const presetAgentId = this.agentConfig.agentId;
104
- if (!presetAgentId) {
105
- throw new Error("Preset agentId is missing");
106
- }
107
- this.agentId = presetAgentId.trim();
108
- let profile;
109
- try {
110
- profile = await this.getProfileByAgentId(this.agentId);
111
- }
112
- catch (error) {
113
- logger.error("[AgentClient] getProfileByAgentId 失败 (presetAgentId=%s): %s", this.agentId, error instanceof Error ? error.message : String(error));
114
- throw error;
115
- }
116
- this.displayName = profile.displayName;
117
- this.projectName = profile.projectName || null; // 保存 Agent 所属项目
118
- logger.info(`[AgentClient] 使用预设 AgentID 绑定实例: ${this.displayName} (${this.agentId})`);
119
- logger.info(`[AgentClient] 所属项目: ${this.projectName || "(未设置)"}`);
120
- try {
121
- await this.wsClient.connect(this.agentId);
122
- }
123
- catch (error) {
124
- logger.error("[AgentClient] WebSocket 连接失败 (agentId=%s): %s", this.agentId, error instanceof Error ? error.message : String(error));
125
- throw error;
126
- }
127
- logger.info("[AgentClient] WebSocket 连接已建立,Agent 现在已上线");
128
- // 初始化状态报告器
129
- this.initializeStatusReporter();
130
- // WebSocket 重新连上后,服务端会立刻把该 Agent 标记为在线。
131
- // 这里重新获取一次最新 profile,避免把连接前读取到的离线状态返回给调用方。
132
- const refreshedProfile = await this.getProfileByAgentId(this.agentId);
133
- this.displayName = refreshedProfile.displayName;
134
- this.projectName = refreshedProfile.projectName || null;
135
- // 用真实的角色名和实例名更新 MCP 启动日志文件路径
136
- updateStartupLogIdentity(refreshedProfile.roleName || "unknown-role", refreshedProfile.instanceName || this.agentId);
137
- return {
138
- agentId: this.agentId,
139
- displayName: this.displayName,
140
- status: refreshedProfile.isOnline ? "online" : "offline",
141
- projectName: refreshedProfile.projectName,
142
- workspacePath: refreshedProfile.workspacePath,
143
- runtimeStatus: refreshedProfile.runtimeStatus,
144
- runtimeSessionId: refreshedProfile.runtimeSessionId,
145
- };
146
- }
147
- /**
148
- * 作为新 Agent 注册
149
- */
150
- async registerAsNewAgent() {
151
- const result = await this.httpClient.callTool("register", {
152
- roleName: this.agentConfig.roleName,
153
- projectName: this.agentConfig.projectName,
154
- workspacePath: this.agentConfig.workspacePath,
155
- prompt: this.agentConfig.prompt,
156
- runtimeBridgeBaseUrl: this.serverConfig.runtimeBridgeBaseUrl,
157
- });
158
- const agentId = result.agentId;
159
- if (!agentId) {
160
- throw new Error("Registration failed: agentId was not returned");
161
- }
162
- this.agentId = agentId;
163
- this.displayName = result.displayName;
164
- this.projectName = result.projectName || null; // 保存服务端返回的项目名
165
- // 用真实的角色名和实例名更新 MCP 启动日志文件路径
166
- updateStartupLogIdentity(this.agentConfig.roleName || "unknown-role", result.instanceName || agentId);
167
- logger.info(`[AgentClient] 注册成功: ${this.displayName} (${this.agentId})`);
168
- logger.info(`[AgentClient] 状态: ${result.status}`);
169
- logger.info(`[AgentClient] 所属项目: ${this.projectName || "(未设置)"}`);
170
- await this.wsClient.connect(this.agentId);
171
- logger.info("[AgentClient] WebSocket 连接已建立,Agent 现在已上线");
172
- // 初始化状态报告器
173
- this.initializeStatusReporter();
174
- // 触发新角色回调
175
- if (result.isExisting === false && this.newCharacterHandler) {
176
- this.newCharacterHandler();
177
- }
178
- return result;
179
- }
180
- /**
181
- * 注销 Agent 下线
182
- */
183
- async unregister() {
184
- logger.info("[AgentClient] 正在注销 Agent...");
185
- if (this.agentId) {
186
- await this.httpClient.callTool("unregister", { agentId: this.agentId });
187
- }
188
- this.stopRuntimeTokenRefresh();
189
- this.wsClient.disconnect();
190
- this.agentId = null;
191
- this.displayName = null;
192
- this.projectName = null;
193
- this.isRunning = false;
194
- logger.info("[AgentClient] 已注销");
195
- }
196
- // ============ 消息相关 ============
197
- /**
198
- * 获取当前 Agent 可见的同事列表(包含离线 Agent)。
199
- */
200
- async discoverColleagues() {
201
- return await this.httpClient.callTool("discover_colleague", {
202
- agentId: this.agentId,
203
- });
204
- }
205
- /**
206
- * 获取当前 Agent 在关系图中可发现的群组列表。
207
- */
208
- async discoverGroupRooms() {
209
- this.ensureRegistered();
210
- return await this.httpClient.callTool("discover_group_rooms", {
211
- agentId: this.agentId,
212
- });
213
- }
214
- /**
215
- * 招聘同事并创建新的 Agent 实例。
216
- * 主流程:校验当前实例已注册 -> 透传创建角色参数到服务端 MCP tool -> 返回新实例信息。
217
- */
218
- async hireColleague(args) {
219
- this.ensureRegistered();
220
- return await this.httpClient.callTool("hire_colleague", {
221
- agentId: this.agentId,
222
- ...args,
223
- });
224
- }
225
- /**
226
- * 批量发起招聘审批请求。
227
- * 主流程:校验当前实例已注册 -> 透传批量招聘参数到服务端 MCP tool -> 返回整批审批与创建结果。
228
- */
229
- async hireColleaguesBatch(args) {
230
- this.ensureRegistered();
231
- return await this.httpClient.callTool("hire_colleagues_batch", {
232
- agentId: this.agentId,
233
- ...args,
234
- });
235
- }
236
- /**
237
- * 调用需要当前 Agent 实例身份的 server MCP tool。
238
- * 主流程:确认已注册 -> 自动附加 agentId -> 复用带 runtime token 的 HTTP 通道。
239
- */
240
- async callAgentScopedTool(toolName, args) {
241
- this.ensureRegistered();
242
- return await this.httpClient.callTool(toolName, {
243
- agentId: this.agentId,
244
- ...args,
245
- });
246
- }
247
- /**
248
- * 上报当前 MCP 本地合并后的记忆统计。
249
- * 主流程:自动附加 agentId -> 交给 server 广播给 Dashboard,避免前端只看到 server 实例级统计。
250
- */
251
- async reportMemoryStats(memoryStats) {
252
- await this.callAgentScopedTool("report_memory_stats", { memoryStats });
253
- }
254
- /**
255
- * 发送群消息
256
- * @param content 消息内容
257
- * @param projectName 目标项目名,不传则使用 Agent 所属项目(由服务端决定)
258
- * @param roomId 目标群房间 ID,小组群场景下优先使用以避免误发到项目公共群
259
- */
260
- async sendGroupMessage(content, projectName, roomId) {
261
- this.ensureRegistered();
262
- // 优先级:传入参数 > Agent 所属项目(服务端决定) > 配置文件默认值
263
- const targetProject = projectName || this.projectName || this.agentConfig.projectName;
264
- return await this.httpClient.callTool("send_group_message", {
265
- agentId: this.agentId,
266
- projectName: targetProject,
267
- roomId,
268
- content,
269
- });
270
- }
271
- /**
272
- * 发送私信
273
- *
274
- * waitReply=true(调用式)时使用 callToolOnce 替代 callTool,原因:
275
- * - callTool 的全局 HTTP 超时固定为 120s(DEFAULT_MCP_HTTP_REQUEST_TIMEOUT_MS),
276
- * 无法匹配服务端 sendCallAndWaitReply 的较长等待时间
277
- * - callTool 的重试循环(累计最多重试 30s)在服务端排队 503 时还可能额外拖累
278
- * - callToolOnce 无自动重试、支持自定义超时,与服务端阻塞等待语义一致
279
- */
280
- async sendDirectMessage(targetId, content, waitReply = false, replyToCallId, timeoutMs) {
281
- this.ensureRegistered();
282
- const args = {
283
- agentId: this.agentId,
284
- targetId,
285
- content,
286
- requireReply: waitReply,
287
- waitReply,
288
- replyToCallId,
289
- };
290
- if (typeof timeoutMs === "number" && timeoutMs > 0) {
291
- args.timeoutMs = timeoutMs;
292
- }
293
- if (waitReply) {
294
- // 调用式:使用 callToolOnce 避免全局 120s 超时截断服务端等待。
295
- // HTTP 超时 = 用户指定的 timeoutMs + 30s 缓冲,确保服务端正常返回前不会提前 abort;
296
- // 用户未指定时默认 0(永久阻塞等待,无 HTTP 超时)。
297
- const httpTimeoutMs = typeof timeoutMs === "number" && timeoutMs > 0
298
- ? timeoutMs + 30_000
299
- : 0;
300
- return await this.httpClient.callToolOnce("send_dm", args, httpTimeoutMs);
301
- }
302
- return await this.httpClient.callTool("send_dm", args);
303
- }
304
- /**
305
- * 发送私信并等待回复(阻塞式)
306
- */
307
- async sendCallAndWaitReply(targetId, content, timeoutMs = 60000) {
308
- const result = await this.sendDirectMessage(targetId, content, true, undefined, timeoutMs);
309
- if (result.reply) {
310
- return result.reply;
311
- }
312
- throw new Error("No reply received for call-style direct message before timeout");
313
- }
314
- /**
315
- * 回复调用式消息
316
- */
317
- async replyToCall(callId, targetId, content) {
318
- return await this.sendDirectMessage(targetId, content, false, callId);
319
- }
320
- /**
321
- * 获取私信历史消息
322
- */
323
- async getDmHistory(targetUserId, limit = 50, since) {
324
- this.ensureRegistered();
325
- const args = {
326
- agentId: this.agentId,
327
- targetUserId,
328
- limit,
329
- };
330
- if (since) {
331
- args.since = since;
332
- }
333
- return await this.httpClient.callTool("get_dm_history", args);
334
- }
335
- /**
336
- * 获取群消息历史记录
337
- */
338
- async getGroupHistory(limit = 50, roomId, since) {
339
- this.ensureRegistered();
340
- if (roomId) {
341
- const args = {
342
- projectName: this.projectName || this.agentConfig.projectName,
343
- roomId,
344
- limit,
345
- };
346
- if (since) {
347
- args.since = since;
348
- }
349
- return await this.httpClient.callTool("get_group_history", args);
350
- }
351
- const groups = await this.discoverGroupRooms();
352
- const targetProject = this.projectName || this.agentConfig.projectName;
353
- const roomIds = this.collectRoomIds(groups, targetProject);
354
- if (roomIds.length === 0) {
355
- return { messages: [], count: 0 };
356
- }
357
- const historyResponses = await Promise.all(roomIds.map(async (currentRoomId) => {
358
- const args = {
359
- projectName: targetProject,
360
- roomId: currentRoomId,
361
- limit,
362
- };
363
- if (since) {
364
- args.since = since;
365
- }
366
- return await this.httpClient.callTool("get_group_history", args);
367
- }));
368
- const messages = historyResponses
369
- .flatMap((response) => response.messages)
370
- .sort((left, right) => new Date(left.timestamp).getTime() -
371
- new Date(right.timestamp).getTime());
372
- return {
373
- messages,
374
- count: messages.length,
375
- };
376
- }
377
- /**
378
- * 拉取当前 Agent 尚未消费的未读消息。
379
- * 主流程:校验注册状态 -> 获取未读私信 -> 获取未读群消息 -> 合并返回。
380
- * @param since 可选的起始时间(ISO 8601),早于该时间的消息将被过滤
381
- */
382
- async fetchUnreadMessages(options = {}) {
383
- this.ensureRegistered();
384
- const targetProject = this.projectName || this.agentConfig.projectName;
385
- const dmArgs = {
386
- agentId: this.agentId,
387
- blockIfEmpty: options.blockIfEmpty ?? false,
388
- };
389
- if (options.since) {
390
- dmArgs.since = options.since;
391
- }
392
- if (options.blockTimeoutMs && options.blockTimeoutMs > 0) {
393
- dmArgs.blockTimeoutMs = options.blockTimeoutMs;
394
- }
395
- const dmToolName = options.includePipelineTasks
396
- ? "poll_message"
397
- : "get_dm_messages";
398
- const directMessagesResponse = await this.fetchDirectMessagesWithRecovery(dmToolName, dmArgs);
399
- const groups = await this.discoverGroupRooms();
400
- const roomIds = this.collectRoomIds(groups, targetProject);
401
- const groupMessageResponses = await Promise.all(roomIds.map(async (currentRoomId) => {
402
- const groupArgs = {
403
- agentId: this.agentId,
404
- projectName: targetProject,
405
- roomId: currentRoomId,
406
- };
407
- if (options.since) {
408
- groupArgs.since = options.since;
409
- }
410
- try {
411
- return await this.httpClient.callTool("get_group_messages", groupArgs);
412
- }
413
- catch (error) {
414
- logger.warn("[AgentClient] 跳过群房间未读补拉失败: roomId=%s, error=%s", currentRoomId, error instanceof Error ? error.message : String(error));
415
- return {
416
- messages: [],
417
- currentReadPos: 0,
418
- hasMore: false,
419
- };
420
- }
421
- }));
422
- return {
423
- directMessages: Array.isArray(directMessagesResponse.messages)
424
- ? directMessagesResponse.messages
425
- : [],
426
- groupMessages: groupMessageResponses
427
- .flatMap((response) => this.normalizeGroupMessages(response))
428
- .sort((left, right) => new Date(left.timestamp).getTime() -
429
- new Date(right.timestamp).getTime()),
430
- };
431
- }
432
- /**
433
- * 拉取服务端私信并对 poll_message 长轮询做容错处理。
434
- * 主流程:针对 poll_message 使用 callToolOnce(单次长阻塞,无重试干扰);
435
- * 非 poll_message 工具走 callTool(标准带重试逻辑)。
436
- * callToolOnce 超时后转为空结果,让 hydrateUnreadMessagesUntilAvailable 继续等待。
437
- */
438
- async fetchDirectMessagesWithRecovery(toolName, args) {
439
- if (toolName === "poll_message") {
440
- try {
441
- return await this.httpClient.callToolOnce(toolName, args);
442
- }
443
- catch (error) {
444
- if (this.isRecoverableLongPollError(error)) {
445
- logger.warn("[AgentClient] poll_message 单次长轮询超时,按空结果退避后继续等待:", error);
446
- return { messages: [] };
447
- }
448
- throw error;
449
- }
450
- }
451
- // 非 poll_message 工具走标准带重试路径
452
- return await this.httpClient.callTool(toolName, args);
453
- }
454
- /**
455
- * 判断是否为 poll_message 长轮询的可恢复失败。
456
- * 主流程:只匹配明确的 HTTP 503 或客户端硬超时,避免吞掉业务工具错误或认证错误。
457
- */
458
- isRecoverableLongPollError(error) {
459
- if (!(error instanceof Error)) {
460
- return false;
461
- }
462
- return (/MCP tool poll_message call failed: 503(?:\s|$)/.test(error.message) ||
463
- /MCP tool poll_message timed out after \d+ms/.test(error.message));
464
- }
465
- /**
466
- * 规范化服务端群消息响应。
467
- * 主流程:只接受数组中的完整群消息对象,忽略 401/空响应/异常元素,避免补拉消息时崩溃。
468
- */
469
- normalizeGroupMessages(response) {
470
- if (!Array.isArray(response.messages)) {
471
- return [];
472
- }
473
- return response.messages.filter((message) => Boolean(message &&
474
- typeof message === "object" &&
475
- typeof message.msgId === "number" &&
476
- typeof message.senderId === "string" &&
477
- typeof message.content === "string" &&
478
- typeof message.timestamp === "string"));
479
- }
480
- /**
481
- * 收集当前项目下 Agent 可访问的群房间 ID,避免离线补拉和历史查询遗漏小组群。
482
- */
483
- collectRoomIds(groups, projectName) {
484
- const roomIds = groups.groups
485
- .filter((group) => group.projectName === projectName)
486
- .map((group) => group.id);
487
- return Array.from(new Set(roomIds));
488
- }
489
- /**
490
- * 获取当前 Agent 的个人信息
491
- */
492
- async getProfile() {
493
- this.ensureRegistered();
494
- const agentId = this.agentId;
495
- if (!agentId) {
496
- throw new Error("Agent is not registered");
497
- }
498
- const profile = await this.getProfileByAgentId(agentId);
499
- return {
500
- ...profile,
501
- describe: this.agentConfig.describe,
502
- };
503
- }
504
- async getProfileByAgentId(agentId) {
505
- return await this.httpClient.callTool("get_profile", {
506
- agentId,
507
- });
508
- }
509
- // ============ 流程线任务相关 ============
510
- /**
511
- * 获取当前 Agent 被分配的流程线任务列表
512
- */
513
- async getMyTasks() {
514
- this.ensureRegistered();
515
- return await this.httpClient.callTool("my_task", {
516
- agentId: this.agentId,
517
- });
518
- }
519
- /**
520
- * 创建流程线实例级留言。
521
- * 主流程:确认已注册 -> 自动附加 agentId -> 服务端校验当前 Agent 正在处理该实例节点。
522
- */
523
- async createTaskInstanceComment(args) {
524
- this.ensureRegistered();
525
- const payload = {
526
- agentId: this.agentId,
527
- ...args,
528
- };
529
- return await this.httpClient.callTool("create_task_instance_comment", payload);
530
- }
531
- /**
532
- * 提交流程线任务结果
533
- * @param changeLog 可选。本次任务处理期间产生的文件/内容变更日志,服务端会在节点翻转状态前持久化,供 AI 回退使用。
534
- */
535
- async submitTaskResult(nodeId, outputPayload, changeLog) {
536
- this.ensureRegistered();
537
- const payload = {
538
- agentId: this.agentId,
539
- nodeId,
540
- outputPayload,
541
- };
542
- if (changeLog && Array.isArray(changeLog) && changeLog.length > 0) {
543
- payload.changeLog = changeLog;
544
- }
545
- return await this.httpClient.callTool("submit_task_result", payload);
546
- }
547
- /**
548
- * 将分配给当前 Agent 的 AI 回退任务标记为回退中。
549
- */
550
- async startTaskRollback(args) {
551
- this.ensureRegistered();
552
- return await this.httpClient.callTool("start_task_rollback", {
553
- agentId: this.agentId,
554
- ...args,
555
- });
556
- }
557
- /**
558
- * 将分配给当前 Agent 的 AI 回退任务标记为已回退,并写入结果说明。
559
- */
560
- async finishTaskRollback(args) {
561
- this.ensureRegistered();
562
- return await this.httpClient.callTool("finish_task_rollback", {
563
- agentId: this.agentId,
564
- ...args,
565
- });
566
- }
567
- /**
568
- * 拒绝流程线任务
569
- */
570
- async rejectTask(nodeId, reason) {
571
- this.ensureRegistered();
572
- return await this.httpClient.callTool("reject_task", {
573
- agentId: this.agentId,
574
- nodeId,
575
- reason,
576
- });
577
- }
578
- /**
579
- * 终止流程线任务(终止后不再流转)
580
- */
581
- async terminateTask(taskInstanceId, reason) {
582
- this.ensureRegistered();
583
- return await this.httpClient.callTool("terminate_task", {
584
- agentId: this.agentId,
585
- taskInstanceId,
586
- reason,
587
- });
588
- }
589
- // ============ 消息循环 ============
590
- /**
591
- * 启动消息监听
592
- */
593
- start(handler, options) {
594
- if (this.isRunning) {
595
- logger.warn("[AgentClient] 消息循环已在运行中");
596
- return;
597
- }
598
- // 降级模式下跳过注册检查
599
- if (!this.isDegradedMode) {
600
- this.ensureRegistered();
601
- }
602
- this.messageHandler = handler;
603
- this.profileHandler = options?.profileHandler || null;
604
- this.isRunning = true;
605
- logger.info(`[AgentClient] start() 被调用,cachedProfile: ${this.cachedProfile ? "存在" : "不存在"}, profileHandler: ${this.profileHandler ? "已设置" : "未设置"}, 降级模式: ${this.isDegradedMode ? "是" : "否"}`);
606
- // 处理缓存的 profile 消息(在 profileHandler 设置之前到达的)
607
- if (this.cachedProfile && this.profileHandler) {
608
- logger.info(`[AgentClient] 处理缓存的 Profile 信息: ${this.cachedProfile.displayName}`);
609
- this.profileHandler(this.cachedProfile);
610
- this.cachedProfile = null;
611
- }
612
- const pollMode = options?.pollMode ?? false;
613
- if (pollMode) {
614
- logger.warn("[AgentClient] 启动消息主循环(HTTP轮询模式 - 不推荐)");
615
- this.messageLoop();
616
- }
617
- else {
618
- logger.info("[AgentClient] 启动消息主循环(WebSocket推送模式 - 推荐)");
619
- }
620
- }
621
- /**
622
- * 停止消息监听
623
- */
624
- stop() {
625
- this.isRunning = false;
626
- if (this.pollTimer) {
627
- clearTimeout(this.pollTimer);
628
- this.pollTimer = null;
629
- }
630
- this.stopRuntimeTokenRefresh();
631
- logger.info("[AgentClient] 消息主循环已停止");
632
- }
633
- async messageLoop() {
634
- while (this.isRunning) {
635
- try {
636
- await this.delay(MESSAGE_POLL_INTERVAL_MS);
637
- }
638
- catch (error) {
639
- logger.error("[AgentClient] 消息循环错误:", error);
640
- await this.delay(5000);
641
- }
642
- }
643
- }
644
- // ============ WebSocket 消息处理 ============
645
- handleIncomingDm(message) {
646
- if (message.senderId === this.agentId) {
647
- return; // 过滤自己发送的消息
648
- }
649
- this.processMessage(message);
650
- }
651
- handleIncomingGroup(message) {
652
- if (message.senderId === this.agentId) {
653
- return; // 过滤自己发送的消息
654
- }
655
- this.processMessage(message);
656
- }
657
- /**
658
- * 处理收到的 Profile 信息
659
- * 由服务端在 Agent 连接时自动推送
660
- */
661
- handleProfileInfo(profile) {
662
- logger.info(`[AgentClient] 收到 Profile 信息: ${profile.displayName} (${profile.roleName})`);
663
- // 更新 Agent 所属项目(服务端决定的项目)
664
- if (profile.projectName) {
665
- this.projectName = profile.projectName;
666
- logger.info(`[AgentClient] 更新所属项目: ${this.projectName}`);
667
- }
668
- // 同步角色名,确保写入永久记忆的目录与服务端存储的 roleName 一致
669
- if (profile.roleName && profile.roleName !== this.agentConfig.roleName) {
670
- logger.info(`[AgentClient] 同步角色名: "${this.agentConfig.roleName || "(空)"}" -> "${profile.roleName}"`);
671
- this.agentConfig.roleName = profile.roleName;
672
- }
673
- if (this.profileHandler) {
674
- // profileHandler 已设置,直接调用
675
- this.profileHandler(profile);
676
- }
677
- else {
678
- // profileHandler 未设置,缓存 profile
679
- logger.info("[AgentClient] profileHandler 未设置,缓存 Profile 信息");
680
- this.cachedProfile = profile;
681
- }
682
- }
683
- async processMessage(message) {
684
- if (!this.messageHandler) {
685
- return;
686
- }
687
- const isDm = typeof message.msgId === "string";
688
- logger.info(`[AgentClient] 收到${isDm ? "私信" : "群消息"}来自 ${message.senderName}: ${message.content.substring(0, 50)}...`);
689
- try {
690
- const reply = await this.messageHandler(message);
691
- // 处理调用式消息的回复
692
- if (isDm) {
693
- const dm = message;
694
- if (dm.requireReply && dm.callId) {
695
- await this.replyToCall(dm.callId, dm.senderId, reply || "已收到消息,正在处理中...");
696
- }
697
- }
698
- }
699
- catch (error) {
700
- const isDm = typeof message.msgId === "string";
701
- logger.error("[AgentClient] 处理消息失败: type=%s, senderId=%s, senderName=%s, msgId=%s, error=%s", isDm ? "私信" : "群消息", message.senderId, message.senderName, message.msgId, error instanceof Error ? error.message : String(error));
702
- // 处理调用式消息的错误回复
703
- if (isDm) {
704
- const dm = message;
705
- if (dm.requireReply && dm.callId) {
706
- await this.replyToCall(dm.callId, dm.senderId, `处理失败: ${error}`);
707
- }
708
- }
709
- }
710
- }
711
- // ============ 工具方法 ============
712
- ensureRegistered() {
713
- if (!this.agentId) {
714
- throw new Error("Agent is not registered");
715
- }
716
- }
717
- delay(ms) {
718
- return new Promise((resolve) => {
719
- this.pollTimer = setTimeout(resolve, ms);
720
- });
721
- }
722
- /**
723
- * 注册新角色回调:当 registerAsNewAgent 返回 isExisting === false 时触发。
724
- */
725
- onNewCharacter(handler) {
726
- this.newCharacterHandler = handler;
727
- }
728
- getState() {
729
- return {
730
- agentId: this.agentId,
731
- displayName: this.displayName,
732
- projectName: this.projectName,
733
- isConnected: this.wsClient.isConnected(),
734
- isRunning: this.isRunning,
735
- };
736
- }
737
- getAgentConfig() {
738
- return this.agentConfig;
739
- }
740
- reloadConfig() {
741
- configManager.loadConfig();
742
- this.agentConfig = configManager.getAgentConfig();
743
- logger.info(`[AgentClient] 配置已重新加载,角色: ${this.agentConfig.roleName}`);
744
- }
745
- /**
746
- * 进入降级模式
747
- * 当注册失败时,Agent 可以降级运行,等待后续重试注册
748
- */
749
- enterDegradedMode() {
750
- this.isDegradedMode = true;
751
- logger.warn("[AgentClient] 进入降级模式,将在后台持续尝试重连");
752
- }
753
- /**
754
- * 退出降级模式
755
- * 当重连成功时,退出降级模式
756
- */
757
- exitDegradedMode() {
758
- this.isDegradedMode = false;
759
- logger.info("[AgentClient] 退出降级模式");
760
- }
761
- /**
762
- * 是否处于降级模式
763
- */
764
- isInDegradedMode() {
765
- return this.isDegradedMode;
766
- }
767
- /**
768
- * 降级模式下重试注册
769
- * 在后台持续尝试重新注册到调度中心
770
- */
771
- async retryRegistrationInBackground(retryIntervalMs, maxRetries) {
772
- let retryCount = 0;
773
- const retryLoop = async () => {
774
- while (this.isDegradedMode) {
775
- try {
776
- logger.info(`[AgentClient] 降级模式:尝试重新注册 (${retryCount + 1}/${maxRetries === -1 ? "无限" : maxRetries})`);
777
- const result = await this.register();
778
- logger.info(`[AgentClient] 降级模式:注册成功 - ${result.displayName} (${result.agentId})`);
779
- // 注册成功,退出降级模式
780
- this.exitDegradedMode();
781
- // 启动消息监听
782
- if (this.messageHandler) {
783
- this.start(this.messageHandler);
784
- }
785
- return;
786
- }
787
- catch (error) {
788
- retryCount++;
789
- const errorMessage = error instanceof Error ? error.message : String(error);
790
- logger.warn(`[AgentClient] 降级模式:注册失败 (${retryCount}/${maxRetries === -1 ? "无限" : maxRetries}): ${errorMessage}`);
791
- // 检查是否达到最大重试次数
792
- if (maxRetries > 0 && retryCount >= maxRetries) {
793
- logger.error(`[AgentClient] 降级模式:达到最大重试次数,停止重连`);
794
- this.isDegradedMode = false;
795
- return;
796
- }
797
- // 等待后重试
798
- await new Promise((resolve) => setTimeout(resolve, retryIntervalMs));
799
- }
800
- }
801
- };
802
- // 启动后台重试循环
803
- retryLoop().catch((error) => {
804
- logger.error("[AgentClient] 降级模式后台重试循环异常退出: error=%s, stack=%s", error instanceof Error ? error.message : String(error), error instanceof Error ? error.stack : "(no stack)");
805
- });
806
- }
807
- // ============ 状态报告 ============
808
- /**
809
- * 初始化状态报告器
810
- */
811
- initializeStatusReporter() {
812
- if (!this.agentId) {
813
- logger.warn("[AgentClient] 无法初始化状态报告器:agentId 为空");
814
- return;
815
- }
816
- this.statusReporter = new StatusReporter({
817
- agentId: this.agentId,
818
- sendStatusUpdate: (update) => {
819
- // 通过 WebSocket 发送状态更新
820
- this.wsClient.send({
821
- type: "AGENT_STATUS",
822
- data: update,
823
- timestamp: new Date().toISOString(),
824
- });
825
- },
826
- });
827
- setMcpNodeLogSink((entry) => this.reportMcpNodeLog(entry));
828
- this.startRuntimeTokenRefresh();
829
- logger.info("[AgentClient] 状态报告器已初始化");
830
- }
831
- /**
832
- * 启动 runtimeAccessToken 主动续期定时器。
833
- * 主流程:消费 serverConfig.runtimeTokenRefreshIntervalMs(默认 12h),在服务端 24h TTL 过期前
834
- * 通过 bridge refresh-token 端点续期,避免 token 过期后 WebSocket 重连被拒(1008)导致 zombie。
835
- */
836
- startRuntimeTokenRefresh() {
837
- this.stopRuntimeTokenRefresh();
838
- const intervalMs = this.serverConfig.runtimeTokenRefreshIntervalMs;
839
- if (!intervalMs || intervalMs <= 0) {
840
- logger.warn("[AgentClient] runtimeTokenRefreshIntervalMs 未配置或无效,跳过主动续期");
841
- return;
842
- }
843
- const agentId = this.agentId;
844
- if (!agentId) {
845
- logger.warn("[AgentClient] agentId 为空,跳过主动续期");
846
- return;
847
- }
848
- this.runtimeTokenRefreshTimer = setInterval(async () => {
849
- try {
850
- const refreshed = await this.httpClient.refreshRuntimeAccessToken(agentId);
851
- if (refreshed) {
852
- logger.info("[AgentClient] runtimeAccessToken 已主动续期");
853
- }
854
- }
855
- catch (error) {
856
- logger.warn("[AgentClient] 主动续期 runtimeAccessToken 失败: %s", error instanceof Error ? error.message : String(error));
857
- if (error instanceof Error && error.stack) {
858
- logger.warn("[AgentClient] 主动续期异常堆栈:", error.stack);
859
- }
860
- }
861
- }, intervalMs);
862
- logger.info(`[AgentClient] runtime token 主动续期已启动,间隔 ${intervalMs}ms`);
863
- }
864
- stopRuntimeTokenRefresh() {
865
- if (this.runtimeTokenRefreshTimer) {
866
- clearInterval(this.runtimeTokenRefreshTimer);
867
- this.runtimeTokenRefreshTimer = null;
868
- }
869
- }
870
- /**
871
- * 上报 MCP Node.js 进程自身日志。
872
- * 主流程:logger 写入 stderr/file -> sink 回调 -> WebSocket 转发给调度中心和面板。
873
- */
874
- reportMcpNodeLog(entry) {
875
- const maybeLogSender = this.wsClient;
876
- if (!this.agentId ||
877
- !this.wsClient.isConnected() ||
878
- typeof maybeLogSender.sendMcpNodeLog !== "function") {
879
- return;
880
- }
881
- maybeLogSender.sendMcpNodeLog(entry);
882
- }
883
- /**
884
- * 获取状态报告器(供 MCP Server 使用)
885
- */
886
- getStatusReporter() {
887
- return this.statusReporter;
888
- }
889
- }
890
- //# sourceMappingURL=agent-client.js.map
1
+ import{configManager as g}from"./config.js";import{MESSAGE_POLL_INTERVAL_MS as p}from"./constants.js";import{HttpClient as f}from"./http-client.js";import{logger as s,setMcpNodeLogSink as C,updateStartupLogIdentity as m}from"./logger.js";import{claimRuntimeLaunchBinding as I}from"./runtime-launch-binding.js";import{StatusReporter as y}from"./status-reporter.js";import{WebSocketClient as u}from"./websocket-client.js";class _{wsClient;httpClient;agentConfig;serverConfig;agentId=null;displayName=null;projectName=null;isRunning=!1;isDegradedMode=!1;messageHandler=null;profileHandler=null;pollTimer=null;statusReporter=null;newCharacterHandler=null;runtimeTokenRefreshTimer=null;cachedProfile=null;constructor(){g.loadConfig(),this.agentConfig=g.getAgentConfig(),this.serverConfig=g.getServerConfig(),this.wsClient=new u(this.serverConfig),this.httpClient=new f(this.serverConfig),this.setupWebSocketListeners()}async initialize(){const e=await I(this.agentConfig,this.serverConfig);if(!e){this.serverConfig.runtimeBridgeBaseUrl=void 0;return}g.applyRuntimeLaunchBinding(e),this.agentConfig=g.getAgentConfig(),this.serverConfig=g.getServerConfig(),this.wsClient=new u(this.serverConfig),this.httpClient=new f(this.serverConfig),this.setupWebSocketListeners()}setupWebSocketListeners(){this.wsClient.on("directMessage",e=>{this.handleIncomingDm(e)}),this.wsClient.on("groupMessage",e=>{this.handleIncomingGroup(e)}),this.wsClient.on("profileInfo",e=>{s.info(`[AgentClient] WebSocket profileInfo \u4E8B\u4EF6\u89E6\u53D1\uFF0CdisplayName: ${e.displayName}`),this.handleProfileInfo(e)}),this.wsClient.on("agentStatus",e=>{s.info(`[AgentClient] WebSocket agentStatus \u4E8B\u4EF6\u89E6\u53D1: ${e.status}`)}),this.wsClient.on("disconnected",(e,t)=>{const n=t?.toString()||"";s.warn("[AgentClient] WebSocket \u65AD\u5F00\u8FDE\u63A5: code=%s, reason=%s, agentId=%s, \u6B63\u5728\u81EA\u52A8\u91CD\u8FDE",e,n,this.agentId)}),this.wsClient.on("error",e=>{s.error("[AgentClient] WebSocket \u9519\u8BEF: %s, stack=%s",e.message,e.stack)}),this.wsClient.on("reconnectFailed",()=>{s.error("[AgentClient] \u91CD\u8FDE\u5931\u8D25\uFF08\u5DF2\u8FBE\u91CD\u8BD5\u4E0A\u9650\uFF09\uFF0C\u505C\u6B62\u6D88\u606F\u5FAA\u73AF, agentId=%s",this.agentId),this.stop()})}async register(){return s.info("[AgentClient] \u6B63\u5728\u6CE8\u518C Agent..."),this.hasPresetAgentId()?await this.registerWithExistingAgentId():await this.registerAsNewAgent()}hasPresetAgentId(){return!!(this.agentConfig.agentId&&this.agentConfig.agentId.trim().length>0)}async registerWithExistingAgentId(){const e=this.agentConfig.agentId;if(!e)throw new Error("Preset agentId is missing");this.agentId=e.trim();let t;try{t=await this.getProfileByAgentId(this.agentId)}catch(i){throw s.error("[AgentClient] getProfileByAgentId \u5931\u8D25 (presetAgentId=%s): %s",this.agentId,i instanceof Error?i.message:String(i)),i}this.displayName=t.displayName,this.projectName=t.projectName||null,s.info(`[AgentClient] \u4F7F\u7528\u9884\u8BBE AgentID \u7ED1\u5B9A\u5B9E\u4F8B: ${this.displayName} (${this.agentId})`),s.info(`[AgentClient] \u6240\u5C5E\u9879\u76EE: ${this.projectName||"(\u672A\u8BBE\u7F6E)"}`);try{await this.wsClient.connect(this.agentId)}catch(i){throw s.error("[AgentClient] WebSocket \u8FDE\u63A5\u5931\u8D25 (agentId=%s): %s",this.agentId,i instanceof Error?i.message:String(i)),i}s.info("[AgentClient] WebSocket \u8FDE\u63A5\u5DF2\u5EFA\u7ACB\uFF0CAgent \u73B0\u5728\u5DF2\u4E0A\u7EBF"),this.initializeStatusReporter();const n=await this.getProfileByAgentId(this.agentId);return this.displayName=n.displayName,this.projectName=n.projectName||null,m(n.roleName||"unknown-role",n.instanceName||this.agentId),{agentId:this.agentId,displayName:this.displayName,status:n.isOnline?"online":"offline",projectName:n.projectName,workspacePath:n.workspacePath,runtimeStatus:n.runtimeStatus,runtimeSessionId:n.runtimeSessionId}}async registerAsNewAgent(){const e=await this.httpClient.callTool("register",{roleName:this.agentConfig.roleName,projectName:this.agentConfig.projectName,workspacePath:this.agentConfig.workspacePath,prompt:this.agentConfig.prompt,runtimeBridgeBaseUrl:this.serverConfig.runtimeBridgeBaseUrl}),t=e.agentId;if(!t)throw new Error("Registration failed: agentId was not returned");return this.agentId=t,this.displayName=e.displayName,this.projectName=e.projectName||null,m(this.agentConfig.roleName||"unknown-role",e.instanceName||t),s.info(`[AgentClient] \u6CE8\u518C\u6210\u529F: ${this.displayName} (${this.agentId})`),s.info(`[AgentClient] \u72B6\u6001: ${e.status}`),s.info(`[AgentClient] \u6240\u5C5E\u9879\u76EE: ${this.projectName||"(\u672A\u8BBE\u7F6E)"}`),await this.wsClient.connect(this.agentId),s.info("[AgentClient] WebSocket \u8FDE\u63A5\u5DF2\u5EFA\u7ACB\uFF0CAgent \u73B0\u5728\u5DF2\u4E0A\u7EBF"),this.initializeStatusReporter(),e.isExisting===!1&&this.newCharacterHandler&&this.newCharacterHandler(),e}async unregister(){s.info("[AgentClient] \u6B63\u5728\u6CE8\u9500 Agent..."),this.agentId&&await this.httpClient.callTool("unregister",{agentId:this.agentId}),this.stopRuntimeTokenRefresh(),this.wsClient.disconnect(),this.agentId=null,this.displayName=null,this.projectName=null,this.isRunning=!1,s.info("[AgentClient] \u5DF2\u6CE8\u9500")}async discoverColleagues(){return await this.httpClient.callTool("discover_colleague",{agentId:this.agentId})}async discoverGroupRooms(){return this.ensureRegistered(),await this.httpClient.callTool("discover_group_rooms",{agentId:this.agentId})}async hireColleague(e){return this.ensureRegistered(),await this.httpClient.callTool("hire_colleague",{agentId:this.agentId,...e})}async hireColleaguesBatch(e){return this.ensureRegistered(),await this.httpClient.callTool("hire_colleagues_batch",{agentId:this.agentId,...e})}async callAgentScopedTool(e,t){return this.ensureRegistered(),await this.httpClient.callTool(e,{agentId:this.agentId,...t})}async reportMemoryStats(e){await this.callAgentScopedTool("report_memory_stats",{memoryStats:e})}async sendGroupMessage(e,t,n){this.ensureRegistered();const i=t||this.projectName||this.agentConfig.projectName;return await this.httpClient.callTool("send_group_message",{agentId:this.agentId,projectName:i,roomId:n,content:e})}async sendDirectMessage(e,t,n=!1,i,r){this.ensureRegistered();const o={agentId:this.agentId,targetId:e,content:t,requireReply:n,waitReply:n,replyToCallId:i};if(typeof r=="number"&&r>0&&(o.timeoutMs=r),n){const h=typeof r=="number"&&r>0?r+3e4:0;return await this.httpClient.callToolOnce("send_dm",o,h)}return await this.httpClient.callTool("send_dm",o)}async sendCallAndWaitReply(e,t,n=6e4){const i=await this.sendDirectMessage(e,t,!0,void 0,n);if(i.reply)return i.reply;throw new Error("No reply received for call-style direct message before timeout")}async replyToCall(e,t,n){return await this.sendDirectMessage(t,n,!1,e)}async getDmHistory(e,t=50,n){this.ensureRegistered();const i={agentId:this.agentId,targetUserId:e,limit:t};return n&&(i.since=n),await this.httpClient.callTool("get_dm_history",i)}async getGroupHistory(e=50,t,n){if(this.ensureRegistered(),t){const a={projectName:this.projectName||this.agentConfig.projectName,roomId:t,limit:e};return n&&(a.since=n),await this.httpClient.callTool("get_group_history",a)}const i=await this.discoverGroupRooms(),r=this.projectName||this.agentConfig.projectName,o=this.collectRoomIds(i,r);if(o.length===0)return{messages:[],count:0};const c=(await Promise.all(o.map(async a=>{const l={projectName:r,roomId:a,limit:e};return n&&(l.since=n),await this.httpClient.callTool("get_group_history",l)}))).flatMap(a=>a.messages).sort((a,l)=>new Date(a.timestamp).getTime()-new Date(l.timestamp).getTime());return{messages:c,count:c.length}}async fetchUnreadMessages(e={}){this.ensureRegistered();const t=this.projectName||this.agentConfig.projectName,n={agentId:this.agentId,blockIfEmpty:e.blockIfEmpty??!1};e.since&&(n.since=e.since),e.blockTimeoutMs&&e.blockTimeoutMs>0&&(n.blockTimeoutMs=e.blockTimeoutMs);const i=e.includePipelineTasks?"poll_message":"get_dm_messages",r=await this.fetchDirectMessagesWithRecovery(i,n),o=await this.discoverGroupRooms(),h=this.collectRoomIds(o,t),c=await Promise.all(h.map(async a=>{const l={agentId:this.agentId,projectName:t,roomId:a};e.since&&(l.since=e.since);try{return await this.httpClient.callTool("get_group_messages",l)}catch(d){return s.warn("[AgentClient] \u8DF3\u8FC7\u7FA4\u623F\u95F4\u672A\u8BFB\u8865\u62C9\u5931\u8D25: roomId=%s, error=%s",a,d instanceof Error?d.message:String(d)),{messages:[],currentReadPos:0,hasMore:!1}}}));return{directMessages:Array.isArray(r.messages)?r.messages:[],groupMessages:c.flatMap(a=>this.normalizeGroupMessages(a)).sort((a,l)=>new Date(a.timestamp).getTime()-new Date(l.timestamp).getTime())}}async fetchDirectMessagesWithRecovery(e,t){if(e==="poll_message")try{return await this.httpClient.callToolOnce(e,t)}catch(n){if(this.isRecoverableLongPollError(n))return s.warn("[AgentClient] poll_message \u5355\u6B21\u957F\u8F6E\u8BE2\u8D85\u65F6\uFF0C\u6309\u7A7A\u7ED3\u679C\u9000\u907F\u540E\u7EE7\u7EED\u7B49\u5F85:",n),{messages:[]};throw n}return await this.httpClient.callTool(e,t)}isRecoverableLongPollError(e){return e instanceof Error?/MCP tool poll_message call failed: 503(?:\s|$)/.test(e.message)||/MCP tool poll_message timed out after \d+ms/.test(e.message):!1}normalizeGroupMessages(e){return Array.isArray(e.messages)?e.messages.filter(t=>!!(t&&typeof t=="object"&&typeof t.msgId=="number"&&typeof t.senderId=="string"&&typeof t.content=="string"&&typeof t.timestamp=="string")):[]}collectRoomIds(e,t){const n=e.groups.filter(i=>i.projectName===t).map(i=>i.id);return Array.from(new Set(n))}async getProfile(){this.ensureRegistered();const e=this.agentId;if(!e)throw new Error("Agent is not registered");return{...await this.getProfileByAgentId(e),describe:this.agentConfig.describe}}async getProfileByAgentId(e){return await this.httpClient.callTool("get_profile",{agentId:e})}async getMyTasks(){return this.ensureRegistered(),await this.httpClient.callTool("my_task",{agentId:this.agentId})}async createTaskInstanceComment(e){this.ensureRegistered();const t={agentId:this.agentId,...e};return await this.httpClient.callTool("create_task_instance_comment",t)}async submitTaskResult(e,t,n){this.ensureRegistered();const i={agentId:this.agentId,nodeId:e,outputPayload:t};return n&&Array.isArray(n)&&n.length>0&&(i.changeLog=n),await this.httpClient.callTool("submit_task_result",i)}async startTaskRollback(e){return this.ensureRegistered(),await this.httpClient.callTool("start_task_rollback",{agentId:this.agentId,...e})}async finishTaskRollback(e){return this.ensureRegistered(),await this.httpClient.callTool("finish_task_rollback",{agentId:this.agentId,...e})}async rejectTask(e,t){return this.ensureRegistered(),await this.httpClient.callTool("reject_task",{agentId:this.agentId,nodeId:e,reason:t})}async terminateTask(e,t){return this.ensureRegistered(),await this.httpClient.callTool("terminate_task",{agentId:this.agentId,taskInstanceId:e,reason:t})}start(e,t){if(this.isRunning){s.warn("[AgentClient] \u6D88\u606F\u5FAA\u73AF\u5DF2\u5728\u8FD0\u884C\u4E2D");return}this.isDegradedMode||this.ensureRegistered(),this.messageHandler=e,this.profileHandler=t?.profileHandler||null,this.isRunning=!0,s.info(`[AgentClient] start() \u88AB\u8C03\u7528\uFF0CcachedProfile: ${this.cachedProfile?"\u5B58\u5728":"\u4E0D\u5B58\u5728"}, profileHandler: ${this.profileHandler?"\u5DF2\u8BBE\u7F6E":"\u672A\u8BBE\u7F6E"}, \u964D\u7EA7\u6A21\u5F0F: ${this.isDegradedMode?"\u662F":"\u5426"}`),this.cachedProfile&&this.profileHandler&&(s.info(`[AgentClient] \u5904\u7406\u7F13\u5B58\u7684 Profile \u4FE1\u606F: ${this.cachedProfile.displayName}`),this.profileHandler(this.cachedProfile),this.cachedProfile=null),t?.pollMode??!1?(s.warn("[AgentClient] \u542F\u52A8\u6D88\u606F\u4E3B\u5FAA\u73AF\uFF08HTTP\u8F6E\u8BE2\u6A21\u5F0F - \u4E0D\u63A8\u8350\uFF09"),this.messageLoop()):s.info("[AgentClient] \u542F\u52A8\u6D88\u606F\u4E3B\u5FAA\u73AF\uFF08WebSocket\u63A8\u9001\u6A21\u5F0F - \u63A8\u8350\uFF09")}stop(){this.isRunning=!1,this.pollTimer&&(clearTimeout(this.pollTimer),this.pollTimer=null),this.stopRuntimeTokenRefresh(),s.info("[AgentClient] \u6D88\u606F\u4E3B\u5FAA\u73AF\u5DF2\u505C\u6B62")}async messageLoop(){for(;this.isRunning;)try{await this.delay(p)}catch(e){s.error("[AgentClient] \u6D88\u606F\u5FAA\u73AF\u9519\u8BEF:",e),await this.delay(5e3)}}handleIncomingDm(e){e.senderId!==this.agentId&&this.processMessage(e)}handleIncomingGroup(e){e.senderId!==this.agentId&&this.processMessage(e)}handleProfileInfo(e){s.info(`[AgentClient] \u6536\u5230 Profile \u4FE1\u606F: ${e.displayName} (${e.roleName})`),e.projectName&&(this.projectName=e.projectName,s.info(`[AgentClient] \u66F4\u65B0\u6240\u5C5E\u9879\u76EE: ${this.projectName}`)),e.roleName&&e.roleName!==this.agentConfig.roleName&&(s.info(`[AgentClient] \u540C\u6B65\u89D2\u8272\u540D: "${this.agentConfig.roleName||"(\u7A7A)"}" -> "${e.roleName}"`),this.agentConfig.roleName=e.roleName),this.profileHandler?this.profileHandler(e):(s.info("[AgentClient] profileHandler \u672A\u8BBE\u7F6E\uFF0C\u7F13\u5B58 Profile \u4FE1\u606F"),this.cachedProfile=e)}async processMessage(e){if(!this.messageHandler)return;const t=typeof e.msgId=="string";s.info(`[AgentClient] \u6536\u5230${t?"\u79C1\u4FE1":"\u7FA4\u6D88\u606F"}\u6765\u81EA ${e.senderName}: ${e.content.substring(0,50)}...`);try{const n=await this.messageHandler(e);if(t){const i=e;i.requireReply&&i.callId&&await this.replyToCall(i.callId,i.senderId,n||"\u5DF2\u6536\u5230\u6D88\u606F\uFF0C\u6B63\u5728\u5904\u7406\u4E2D...")}}catch(n){const i=typeof e.msgId=="string";if(s.error("[AgentClient] \u5904\u7406\u6D88\u606F\u5931\u8D25: type=%s, senderId=%s, senderName=%s, msgId=%s, error=%s",i?"\u79C1\u4FE1":"\u7FA4\u6D88\u606F",e.senderId,e.senderName,e.msgId,n instanceof Error?n.message:String(n)),i){const r=e;r.requireReply&&r.callId&&await this.replyToCall(r.callId,r.senderId,`\u5904\u7406\u5931\u8D25: ${n}`)}}}ensureRegistered(){if(!this.agentId)throw new Error("Agent is not registered")}delay(e){return new Promise(t=>{this.pollTimer=setTimeout(t,e)})}onNewCharacter(e){this.newCharacterHandler=e}getState(){return{agentId:this.agentId,displayName:this.displayName,projectName:this.projectName,isConnected:this.wsClient.isConnected(),isRunning:this.isRunning}}getAgentConfig(){return this.agentConfig}reloadConfig(){g.loadConfig(),this.agentConfig=g.getAgentConfig(),s.info(`[AgentClient] \u914D\u7F6E\u5DF2\u91CD\u65B0\u52A0\u8F7D\uFF0C\u89D2\u8272: ${this.agentConfig.roleName}`)}enterDegradedMode(){this.isDegradedMode=!0,s.warn("[AgentClient] \u8FDB\u5165\u964D\u7EA7\u6A21\u5F0F\uFF0C\u5C06\u5728\u540E\u53F0\u6301\u7EED\u5C1D\u8BD5\u91CD\u8FDE")}exitDegradedMode(){this.isDegradedMode=!1,s.info("[AgentClient] \u9000\u51FA\u964D\u7EA7\u6A21\u5F0F")}isInDegradedMode(){return this.isDegradedMode}async retryRegistrationInBackground(e,t){let n=0;(async()=>{for(;this.isDegradedMode;)try{s.info(`[AgentClient] \u964D\u7EA7\u6A21\u5F0F\uFF1A\u5C1D\u8BD5\u91CD\u65B0\u6CE8\u518C (${n+1}/${t===-1?"\u65E0\u9650":t})`);const r=await this.register();s.info(`[AgentClient] \u964D\u7EA7\u6A21\u5F0F\uFF1A\u6CE8\u518C\u6210\u529F - ${r.displayName} (${r.agentId})`),this.exitDegradedMode(),this.messageHandler&&this.start(this.messageHandler);return}catch(r){n++;const o=r instanceof Error?r.message:String(r);if(s.warn(`[AgentClient] \u964D\u7EA7\u6A21\u5F0F\uFF1A\u6CE8\u518C\u5931\u8D25 (${n}/${t===-1?"\u65E0\u9650":t}): ${o}`),t>0&&n>=t){s.error("[AgentClient] \u964D\u7EA7\u6A21\u5F0F\uFF1A\u8FBE\u5230\u6700\u5927\u91CD\u8BD5\u6B21\u6570\uFF0C\u505C\u6B62\u91CD\u8FDE"),this.isDegradedMode=!1;return}await new Promise(h=>setTimeout(h,e))}})().catch(r=>{s.error("[AgentClient] \u964D\u7EA7\u6A21\u5F0F\u540E\u53F0\u91CD\u8BD5\u5FAA\u73AF\u5F02\u5E38\u9000\u51FA: error=%s, stack=%s",r instanceof Error?r.message:String(r),r instanceof Error?r.stack:"(no stack)")})}initializeStatusReporter(){if(!this.agentId){s.warn("[AgentClient] \u65E0\u6CD5\u521D\u59CB\u5316\u72B6\u6001\u62A5\u544A\u5668\uFF1AagentId \u4E3A\u7A7A");return}this.statusReporter=new y({agentId:this.agentId,sendStatusUpdate:e=>{this.wsClient.send({type:"AGENT_STATUS",data:e,timestamp:new Date().toISOString()})}}),C(e=>this.reportMcpNodeLog(e)),this.startRuntimeTokenRefresh(),s.info("[AgentClient] \u72B6\u6001\u62A5\u544A\u5668\u5DF2\u521D\u59CB\u5316")}startRuntimeTokenRefresh(){this.stopRuntimeTokenRefresh();const e=this.serverConfig.runtimeTokenRefreshIntervalMs;if(!e||e<=0){s.warn("[AgentClient] runtimeTokenRefreshIntervalMs \u672A\u914D\u7F6E\u6216\u65E0\u6548\uFF0C\u8DF3\u8FC7\u4E3B\u52A8\u7EED\u671F");return}const t=this.agentId;if(!t){s.warn("[AgentClient] agentId \u4E3A\u7A7A\uFF0C\u8DF3\u8FC7\u4E3B\u52A8\u7EED\u671F");return}this.runtimeTokenRefreshTimer=setInterval(async()=>{try{await this.httpClient.refreshRuntimeAccessToken(t)&&s.info("[AgentClient] runtimeAccessToken \u5DF2\u4E3B\u52A8\u7EED\u671F")}catch(n){s.warn("[AgentClient] \u4E3B\u52A8\u7EED\u671F runtimeAccessToken \u5931\u8D25: %s",n instanceof Error?n.message:String(n)),n instanceof Error&&n.stack&&s.warn("[AgentClient] \u4E3B\u52A8\u7EED\u671F\u5F02\u5E38\u5806\u6808:",n.stack)}},e),s.info(`[AgentClient] runtime token \u4E3B\u52A8\u7EED\u671F\u5DF2\u542F\u52A8\uFF0C\u95F4\u9694 ${e}ms`)}stopRuntimeTokenRefresh(){this.runtimeTokenRefreshTimer&&(clearInterval(this.runtimeTokenRefreshTimer),this.runtimeTokenRefreshTimer=null)}reportMcpNodeLog(e){const t=this.wsClient;!this.agentId||!this.wsClient.isConnected()||typeof t.sendMcpNodeLog!="function"||t.sendMcpNodeLog(e)}getStatusReporter(){return this.statusReporter}}export{_ as AgentClient};
2
+