aws-runtime-bridge 1.9.175 → 1.9.180

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 (357) hide show
  1. package/CHANGELOG.md +223 -0
  2. package/README.md +61 -2
  3. package/dist/adapter/AcodeSdkAdapter.d.ts +382 -0
  4. package/dist/adapter/AcodeSdkAdapter.js +3 -3
  5. package/dist/adapter/AdapterRegistry.d.ts +28 -0
  6. package/dist/adapter/ClaudeSdkAdapter.d.ts +71 -0
  7. package/dist/adapter/CodexSdkAdapter.d.ts +14 -0
  8. package/dist/adapter/OpencodeSdkAdapter.d.ts +44 -0
  9. package/dist/adapter/acode-tool-names.d.ts +9 -0
  10. package/dist/adapter/idle-poll-loop.d.ts +20 -0
  11. package/dist/adapter/index.d.ts +3 -0
  12. package/dist/adapter/instance-ai-config-resolver.d.ts +20 -0
  13. package/dist/adapter/prompts.d.ts +12 -0
  14. package/dist/adapter/types.d.ts +201 -0
  15. package/dist/browser/browser-bootstrap.d.ts +15 -0
  16. package/dist/browser/browser-connect-token.d.ts +11 -0
  17. package/dist/browser/browser-frame-encode.d.ts +32 -0
  18. package/dist/browser/browser-pool.d.ts +129 -0
  19. package/dist/browser/browser-profile-store.d.ts +41 -0
  20. package/dist/browser/browser-ws-bridge.d.ts +20 -0
  21. package/dist/browser/built-in-browser-tools.d.ts +44 -0
  22. package/dist/browser/element-locator.d.ts +25 -0
  23. package/dist/browser/element-picker.d.ts +30 -0
  24. package/dist/browser/frame-encode.d.ts +19 -0
  25. package/dist/browser/input-dispatcher.d.ts +35 -0
  26. package/dist/browser/listener-store.d.ts +44 -0
  27. package/dist/browser/page-listener-manager.d.ts +88 -0
  28. package/dist/browser/page-listener-types.d.ts +38 -0
  29. package/dist/browser/screencast-differ.d.ts +10 -0
  30. package/dist/browser/screencast-manager.d.ts +94 -0
  31. package/dist/browser/snapshot-serializer.d.ts +56 -0
  32. package/dist/browser/ssrf-guard.d.ts +44 -0
  33. package/dist/browser/stealth.d.ts +21 -0
  34. package/dist/browser/step-archive.d.ts +13 -0
  35. package/dist/browser/types.d.ts +100 -0
  36. package/dist/browser/ws-server.d.ts +54 -0
  37. package/dist/config.d.ts +138 -2
  38. package/dist/config.js +2 -2
  39. package/dist/desktop/built-in-desktop-tools.d.ts +68 -0
  40. package/dist/desktop/built-in-desktop-tools.js +2 -1
  41. package/dist/desktop/desktop-control.d.ts +142 -0
  42. package/dist/desktop/desktop-control.js +2 -0
  43. package/dist/desktop/desktop-mcp-client.d.ts +28 -0
  44. package/dist/desktop/desktop-staleness.d.ts +66 -0
  45. package/dist/desktop/desktop-staleness.js +2 -0
  46. package/dist/index.d.ts +4 -0
  47. package/dist/index.js +1 -1
  48. package/dist/middleware/auth.d.ts +26 -0
  49. package/dist/middleware/auth.js +1 -1
  50. package/dist/remote-desktop/computer-control.d.ts +3 -0
  51. package/dist/remote-desktop/coords.d.ts +6 -0
  52. package/dist/remote-desktop/frame-backpressure.d.ts +10 -0
  53. package/dist/remote-desktop/frame-encode.d.ts +3 -0
  54. package/dist/remote-desktop/index.js +2 -2
  55. package/dist/remote-desktop/input-dispatcher.d.ts +4 -0
  56. package/dist/remote-desktop/permission-manager.d.ts +3 -0
  57. package/dist/remote-desktop/screen-capture.d.ts +91 -0
  58. package/dist/remote-desktop/session-manager.d.ts +47 -0
  59. package/dist/remote-desktop/session-manager.js +1 -1
  60. package/dist/remote-desktop/system-backend.d.ts +64 -0
  61. package/dist/remote-desktop/types.d.ts +25 -0
  62. package/dist/remote-desktop/ui-automation.d.ts +11 -0
  63. package/dist/remote-desktop/win32-api.d.ts +10 -0
  64. package/dist/routes/acode-todos.d.ts +13 -0
  65. package/dist/routes/agent-state.d.ts +15 -0
  66. package/dist/routes/ai-sources.js +1 -1
  67. package/dist/routes/background-tasks.d.ts +18 -0
  68. package/dist/routes/background-tasks.js +2 -2
  69. package/dist/routes/browser-listeners.d.ts +17 -0
  70. package/dist/routes/browser-sessions.d.ts +10 -0
  71. package/dist/routes/capabilities.js +1 -1
  72. package/dist/routes/dashboard-icon.d.ts +9 -0
  73. package/dist/routes/dashboard-icon.js +2 -0
  74. package/dist/routes/dashboard-theme.d.ts +24 -0
  75. package/dist/routes/dashboard-theme.js +157 -0
  76. package/dist/routes/dashboard.d.ts +9 -0
  77. package/dist/routes/dashboard.js +1988 -625
  78. package/dist/routes/debug-mount.d.ts +16 -0
  79. package/dist/routes/desktop-control.d.ts +15 -0
  80. package/dist/routes/desktop-control.js +2 -0
  81. package/dist/routes/events.d.ts +4 -0
  82. package/dist/routes/file-browser.d.ts +11 -0
  83. package/dist/routes/file-change-diff.d.ts +25 -0
  84. package/dist/routes/file-diff-rollback.d.ts +28 -0
  85. package/dist/routes/file-snapshot.d.ts +7 -0
  86. package/dist/routes/git.d.ts +143 -0
  87. package/dist/routes/instance-tool-status.d.ts +5 -0
  88. package/dist/routes/instance.d.ts +8 -0
  89. package/dist/routes/instance.js +1 -1
  90. package/dist/routes/jdks.d.ts +4 -0
  91. package/dist/routes/launch.d.ts +5 -0
  92. package/dist/routes/lsp-providers.d.ts +11 -0
  93. package/dist/routes/lsp-providers.js +2 -0
  94. package/dist/routes/lsp.d.ts +41 -0
  95. package/dist/routes/lsp.js +4 -2
  96. package/dist/routes/mcp-extra.d.ts +15 -0
  97. package/dist/routes/mcp.d.ts +16 -0
  98. package/dist/routes/mcp.js +1 -1
  99. package/dist/routes/plugins.d.ts +19 -0
  100. package/dist/routes/plugins.js +1 -1
  101. package/dist/routes/processes.d.ts +4 -0
  102. package/dist/routes/properties.d.ts +4 -0
  103. package/dist/routes/pty.d.ts +29 -0
  104. package/dist/routes/runtime-binding.d.ts +3 -0
  105. package/dist/routes/sessions.d.ts +22 -0
  106. package/dist/routes/skills.d.ts +15 -0
  107. package/dist/routes/skills.js +1 -1
  108. package/dist/routes/sub-agents.d.ts +11 -0
  109. package/dist/routes/sub-agents.js +1 -1
  110. package/dist/routes/task-context.d.ts +5 -0
  111. package/dist/routes/tech-stack.d.ts +4 -0
  112. package/dist/routes/terminal.d.ts +131 -0
  113. package/dist/routes/terminal.js +25 -25
  114. package/dist/routes/workspace-index.d.ts +12 -0
  115. package/dist/routes/workspace-index.js +2 -0
  116. package/dist/routes/yml.d.ts +4 -0
  117. package/dist/scripts/migrate-user-scopes.d.ts +26 -0
  118. package/dist/scripts/migrate-user-scopes.js +2 -0
  119. package/dist/services/access-control.d.ts +21 -0
  120. package/dist/services/acode-bg-manager.d.ts +21 -0
  121. package/dist/services/acode-package.d.ts +10 -0
  122. package/dist/services/acode-package.js +1 -1
  123. package/dist/services/agent-capability-sync.d.ts +26 -0
  124. package/dist/services/agent-capability-sync.js +1 -1
  125. package/dist/services/agent-event-store.d.ts +20 -0
  126. package/dist/services/agent-ownership.d.ts +58 -0
  127. package/dist/services/agent-ownership.js +3 -0
  128. package/dist/services/agent-process-manager.d.ts +154 -0
  129. package/dist/services/agent-pty-manager.d.ts +37 -0
  130. package/dist/services/agent-startup-memory.d.ts +34 -0
  131. package/dist/services/agent-startup-memory.js +1 -1
  132. package/dist/services/ai-config-service.d.ts +26 -52
  133. package/dist/services/ai-config-service.js +1 -3
  134. package/dist/services/ai-source-apply.d.ts +7 -15
  135. package/dist/services/ai-source-apply.js +1 -1
  136. package/dist/services/auto-register.d.ts +165 -1
  137. package/dist/services/auto-register.js +1 -1
  138. package/dist/services/aws-client-agent-mcp.d.ts +14 -0
  139. package/dist/services/aws-client-agent-mcp.js +2 -2
  140. package/dist/services/bridge-package-publish-hooks.d.ts +14 -0
  141. package/dist/services/bridge-pairing.d.ts +82 -0
  142. package/dist/services/bridge-pairing.js +2 -0
  143. package/dist/services/bridge-temp-files.d.ts +29 -0
  144. package/dist/services/browser-session-manager.d.ts +71 -0
  145. package/dist/services/capability-config.d.ts +60 -15
  146. package/dist/services/capability-config.js +2 -2
  147. package/dist/services/change-cache-retention.d.ts +9 -0
  148. package/dist/services/changelog.d.ts +9 -0
  149. package/dist/services/cli-commands.d.ts +82 -0
  150. package/dist/services/cli-commands.js +6 -6
  151. package/dist/services/connection-key-rotation.d.ts +27 -0
  152. package/dist/services/connection-key-rotation.js +2 -0
  153. package/dist/services/debug-mount.d.ts +49 -0
  154. package/dist/services/desktop-mcp-manager.d.ts +103 -1
  155. package/dist/services/desktop-mcp-manager.js +1 -1
  156. package/dist/services/event-delta-pusher.d.ts +15 -0
  157. package/dist/services/fileSnapshotStore.d.ts +33 -0
  158. package/dist/services/gitignore.d.ts +9 -0
  159. package/dist/services/instance-ai-config-service.d.ts +9 -0
  160. package/dist/services/instance-ai-config-service.js +1 -1
  161. package/dist/services/instance-features.d.ts +127 -0
  162. package/dist/services/instance-features.js +1 -1
  163. package/dist/services/instance-init-service.d.ts +3 -0
  164. package/dist/services/instance-init-service.js +1 -1
  165. package/dist/services/instance-state.d.ts +23 -0
  166. package/dist/services/jdk-scanner.d.ts +15 -0
  167. package/dist/services/launch-manager.d.ts +138 -0
  168. package/dist/services/launch-metrics.d.ts +42 -0
  169. package/dist/services/launch-streams.d.ts +19 -0
  170. package/dist/services/lifecycle-state.d.ts +5 -0
  171. package/dist/services/log-retention.d.ts +38 -0
  172. package/dist/services/lsp/install-manager.d.ts +55 -0
  173. package/dist/services/lsp/install-manager.js +2 -0
  174. package/dist/services/lsp/provider-registry.d.ts +108 -0
  175. package/dist/services/lsp/provider-registry.js +2 -0
  176. package/dist/services/lsp/uri-rewrite.d.ts +44 -0
  177. package/dist/services/lsp/uri-rewrite.js +2 -0
  178. package/dist/services/lsp-stdio-bridge.d.ts +41 -4
  179. package/dist/services/lsp-stdio-bridge.js +3 -3
  180. package/dist/services/mcp-deploy.d.ts +45 -4
  181. package/dist/services/mcp-deploy.js +4 -4
  182. package/dist/services/mcp-env-injector.d.ts +52 -0
  183. package/dist/services/mcp-launch-binding-queue.d.ts +12 -0
  184. package/dist/services/mcp-package.d.ts +22 -0
  185. package/dist/services/mcp-package.js +1 -1
  186. package/dist/services/mcp-probe-client.d.ts +19 -0
  187. package/dist/services/mcp-probe-client.js +1 -1
  188. package/dist/services/open-doc-events.d.ts +22 -0
  189. package/dist/services/open-doc-registry.d.ts +35 -0
  190. package/dist/services/orphan-monitor.d.ts +43 -0
  191. package/dist/services/panel-auth.d.ts +24 -0
  192. package/dist/services/panel-env.d.ts +28 -0
  193. package/dist/services/plugin-deployment.d.ts +34 -1
  194. package/dist/services/plugin-deployment.js +2 -2
  195. package/dist/services/plugin-event-buffer.d.ts +21 -0
  196. package/dist/services/plugin-fs.d.ts +11 -0
  197. package/dist/services/plugin-handler-adapter.d.ts +13 -0
  198. package/dist/services/plugin-listener-runner.d.ts +10 -0
  199. package/dist/services/plugin-loader.d.ts +15 -0
  200. package/dist/services/plugin-manager.d.ts +95 -9
  201. package/dist/services/plugin-manager.js +4 -4
  202. package/dist/services/plugin-manifest.d.ts +14 -0
  203. package/dist/services/plugin-package.d.ts +13 -0
  204. package/dist/services/plugin-runtime.d.ts +15 -0
  205. package/dist/services/port-detector.d.ts +15 -0
  206. package/dist/services/process-detail.d.ts +3 -0
  207. package/dist/services/process-detector.d.ts +132 -0
  208. package/dist/services/process-registry.d.ts +120 -0
  209. package/dist/services/process-top.d.ts +6 -0
  210. package/dist/services/request-identity.d.ts +77 -0
  211. package/dist/services/request-identity.js +2 -0
  212. package/dist/services/request-invalid-dump.d.ts +4 -0
  213. package/dist/services/ring-buffer.d.ts +33 -0
  214. package/dist/services/runtime-binding.d.ts +56 -4
  215. package/dist/services/runtime-binding.js +4 -4
  216. package/dist/services/runtime-lifecycle-policy.d.ts +17 -0
  217. package/dist/services/runtime-resources-snapshot.d.ts +26 -0
  218. package/dist/services/sdk-tool-file-change-recorder.d.ts +9 -0
  219. package/dist/services/session-output.d.ts +63 -0
  220. package/dist/services/session-output.js +3 -3
  221. package/dist/services/skill-manager.d.ts +42 -5
  222. package/dist/services/skill-manager.js +3 -3
  223. package/dist/services/snapshot-retention.d.ts +23 -0
  224. package/dist/services/startup-config-wizard.d.ts +7 -1
  225. package/dist/services/startup-config-wizard.js +10 -10
  226. package/dist/services/system-metrics.d.ts +3 -0
  227. package/dist/services/tech-stack-scanner.d.ts +12 -0
  228. package/dist/services/terminal-persistence.d.ts +43 -0
  229. package/dist/services/tool-installer.d.ts +12 -0
  230. package/dist/services/tunnel-client.d.ts +57 -2
  231. package/dist/services/tunnel-client.js +1 -1
  232. package/dist/services/update-log.d.ts +6 -0
  233. package/dist/services/update-notifier.d.ts +17 -0
  234. package/dist/services/update-notifier.js +2 -2
  235. package/dist/services/user-scope.d.ts +115 -0
  236. package/dist/services/user-scope.js +2 -0
  237. package/dist/services/windows-service-manager.d.ts +12 -0
  238. package/dist/services/workspace-files.d.ts +64 -0
  239. package/dist/services/workspace-index/index-manager.d.ts +46 -0
  240. package/dist/services/workspace-index/index-manager.js +2 -0
  241. package/dist/services/workspace-index/indexer.d.ts +15 -0
  242. package/dist/services/workspace-index/indexer.js +2 -0
  243. package/dist/services/workspace-index/query.d.ts +74 -0
  244. package/dist/services/workspace-index/query.js +5 -0
  245. package/dist/services/workspace-index/resolver.d.ts +26 -0
  246. package/dist/services/workspace-index/resolver.js +2 -0
  247. package/dist/services/workspace-index/types.d.ts +89 -0
  248. package/dist/services/workspace-index/types.js +2 -0
  249. package/dist/services/workspace-watch.d.ts +4 -0
  250. package/dist/services/workspaceTaskChangeWatcher.d.ts +49 -0
  251. package/dist/services/workspaceTaskChangeWatcher.js +1 -1
  252. package/dist/types.d.ts +9 -0
  253. package/dist/utils/config-write-queue.d.ts +11 -0
  254. package/dist/utils/env-safety.d.ts +21 -0
  255. package/dist/utils/file-utils.d.ts +15 -0
  256. package/dist/utils/instance-ai-config-debug-logger.d.ts +15 -0
  257. package/dist/utils/lifecycle-log.d.ts +5 -0
  258. package/dist/utils/logger.d.ts +13 -0
  259. package/dist/utils/logger.js +2 -1
  260. package/dist/utils/npm-version.d.ts +10 -0
  261. package/dist/utils/path-utils.d.ts +12 -0
  262. package/dist/utils/scheduler-url.d.ts +18 -0
  263. package/dist/utils/scheduler-url.js +2 -0
  264. package/dist/utils/sdk-package-loader.d.ts +13 -0
  265. package/dist/utils/sdk-package-loader.js +1 -1
  266. package/dist/utils/target-identity.d.ts +31 -0
  267. package/dist/utils/target-identity.js +2 -0
  268. package/dist/utils/validation.d.ts +17 -0
  269. package/dist/utils/yaml-utils.d.ts +48 -0
  270. package/package/acode/dist/__tests__/summary-request-helper.d.ts +10 -0
  271. package/package/acode/dist/ask-user-question-tool.d.ts +17 -0
  272. package/package/acode/dist/await-complete-tool.d.ts +12 -0
  273. package/package/acode/dist/background-command-manager.d.ts +105 -0
  274. package/package/acode/dist/background-command-store.d.ts +27 -0
  275. package/package/acode/dist/background-command-tools.d.ts +8 -0
  276. package/package/acode/dist/background-output-ringbuffer.d.ts +15 -0
  277. package/package/acode/dist/built-in-file-tools.d.ts +65 -0
  278. package/package/acode/dist/built-in-symbols-tool.d.ts +3 -0
  279. package/package/acode/dist/builtins/commandArtifacts.d.ts +3 -0
  280. package/package/acode/dist/builtins/shellCommandPreparation.d.ts +17 -0
  281. package/package/acode/dist/builtins/shellCommandRunner.d.ts +4 -0
  282. package/package/acode/dist/builtins/shellOutputDecoder.d.ts +15 -0
  283. package/package/acode/dist/cache-control.d.ts +45 -0
  284. package/package/acode/dist/commands/commandLoader.d.ts +3 -0
  285. package/package/acode/dist/commands/commandParser.d.ts +3 -0
  286. package/package/acode/dist/commands/commandRegistry.d.ts +3 -0
  287. package/package/acode/dist/compaction.d.ts +354 -0
  288. package/package/acode/dist/config.d.ts +3 -0
  289. package/package/acode/dist/context-overflow.d.ts +32 -0
  290. package/package/acode/dist/fs-utils.d.ts +18 -0
  291. package/package/acode/dist/hooks/hookBus.d.ts +3 -0
  292. package/package/acode/dist/image-utils.d.ts +35 -0
  293. package/package/acode/dist/index.d.ts +1 -0
  294. package/package/acode/dist/index.js +1 -1
  295. package/package/acode/dist/mcpToolNames.d.ts +32 -0
  296. package/package/acode/dist/microcompact.d.ts +53 -0
  297. package/package/acode/dist/parsers/ast-cache.d.ts +41 -0
  298. package/package/acode/dist/parsers/file-index.d.ts +83 -0
  299. package/package/acode/dist/parsers/file-index.js +4 -0
  300. package/package/acode/dist/parsers/language-detector.d.ts +4 -0
  301. package/package/acode/dist/parsers/tree-sitter-loader.d.ts +12 -0
  302. package/package/acode/dist/parsers/types.d.ts +11 -0
  303. package/package/acode/dist/paths.d.ts +14 -0
  304. package/package/acode/dist/plugin-types.d.ts +34 -0
  305. package/package/acode/dist/read-file-state.d.ts +15 -0
  306. package/package/acode/dist/runtime-environment.d.ts +16 -0
  307. package/package/acode/dist/runtime.d.ts +824 -9
  308. package/package/acode/dist/runtime.js +22 -22
  309. package/package/acode/dist/skill-tool.d.ts +20 -0
  310. package/package/acode/dist/sub-agent-manager.d.ts +169 -0
  311. package/package/acode/dist/sub-agent-manager.js +1 -1
  312. package/package/acode/dist/sub-agent-store.d.ts +50 -0
  313. package/package/acode/dist/sub-agent-tools.d.ts +15 -0
  314. package/package/acode/dist/sub-agent-types.d.ts +13 -0
  315. package/package/acode/dist/terminal-tool.d.ts +15 -0
  316. package/package/acode/dist/terminal-types.d.ts +10 -0
  317. package/package/acode/dist/todo-store.d.ts +15 -0
  318. package/package/acode/dist/token-estimator.d.ts +17 -0
  319. package/package/acode/dist/tool-allocation.d.ts +113 -0
  320. package/package/acode/dist/tool-concurrency/index.d.ts +8 -0
  321. package/package/acode/dist/tool-concurrency/observability.d.ts +32 -0
  322. package/package/acode/dist/tool-concurrency/resource-lock.d.ts +30 -0
  323. package/package/acode/dist/tool-concurrency/scheduler.d.ts +19 -0
  324. package/package/acode/dist/tool-concurrency/types.d.ts +57 -0
  325. package/package/acode/dist/tool-group-manager.d.ts +195 -0
  326. package/package/acode/dist/tool-group-manager.js +4 -4
  327. package/package/acode/dist/types.d.ts +194 -0
  328. package/package/aws-client-agent-mcp/README.md +130 -215
  329. package/package/aws-client-agent-mcp/dist/ability-market-tools.d.ts +57 -0
  330. package/package/aws-client-agent-mcp/dist/agent-client.d.ts +277 -3
  331. package/package/aws-client-agent-mcp/dist/agent-client.js +1 -1
  332. package/package/aws-client-agent-mcp/dist/config.d.ts +18 -0
  333. package/package/aws-client-agent-mcp/dist/constants.d.ts +2 -0
  334. package/package/aws-client-agent-mcp/dist/context-manager.d.ts +70 -0
  335. package/package/aws-client-agent-mcp/dist/http-client.d.ts +61 -0
  336. package/package/aws-client-agent-mcp/dist/index.d.ts +10 -0
  337. package/package/aws-client-agent-mcp/dist/logger.d.ts +24 -0
  338. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +606 -1
  339. package/package/aws-client-agent-mcp/dist/mcp-server.js +4 -4
  340. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +158 -0
  341. package/package/aws-client-agent-mcp/dist/mcp-tools.js +38 -22
  342. package/package/aws-client-agent-mcp/dist/memory-store.d.ts +81 -0
  343. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +18 -0
  344. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +86 -0
  345. package/package/aws-client-agent-mcp/dist/messageContent.d.ts +24 -0
  346. package/package/aws-client-agent-mcp/dist/office/office-equation.d.ts +19 -0
  347. package/package/aws-client-agent-mcp/dist/office/office-image.d.ts +18 -0
  348. package/package/aws-client-agent-mcp/dist/office/office-workspace.d.ts +29 -0
  349. package/package/aws-client-agent-mcp/dist/parent-lifecycle.d.ts +18 -0
  350. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.d.ts +6 -0
  351. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +4 -0
  352. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts +41 -0
  353. package/package/aws-client-agent-mcp/dist/tool-groups.d.ts +136 -0
  354. package/package/aws-client-agent-mcp/dist/types.d.ts +123 -0
  355. package/package/aws-client-agent-mcp/dist/watchdog.d.ts +7 -0
  356. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +108 -0
  357. package/package.json +1 -1
@@ -1,4 +1,9 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
2
7
  import { TextDecoder } from "node:util";
3
8
  import { type AdapterSessionConfig, type ProviderEvent, type RuntimeStatusActionInfo } from "../adapter/index.js";
4
9
  import { type RuntimeOutputMetadata } from "../services/session-output.js";
@@ -19,10 +24,27 @@ export interface SdkSessionEntry {
19
24
  currentRuntimeActionDetail?: string;
20
25
  currentRuntimeActionInput?: string;
21
26
 
27
+
28
+
29
+
30
+
31
+
32
+
22
33
  cachedCapabilitiesActionDetail?: string;
23
34
  }
24
35
  export declare const sdkSessions: Map<string, SdkSessionEntry>;
25
36
 
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
26
48
  export declare function renderSessionSnapshot(messages: Array<{
27
49
  role: string;
28
50
  content: string;
@@ -33,7 +55,23 @@ export declare function renderSessionSnapshot(messages: Array<{
33
55
  truncated: boolean;
34
56
  };
35
57
 
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
36
67
  export declare function parseResumeTranscript(raw: unknown): unknown[] | undefined;
68
+
69
+
70
+
71
+
72
+
73
+
74
+ export declare function parseResumeTokenUsage(raw: unknown): AdapterSessionConfig["resumeTokenUsage"];
37
75
  export interface RuntimeStopOptions {
38
76
  statusNotified: boolean;
39
77
  reason: string | undefined;
@@ -47,8 +85,14 @@ export type RuntimeContextResetSupport = {
47
85
  };
48
86
  export declare function resolveRuntimeContextResetSupport(providerId: string, hasResetContext: boolean): RuntimeContextResetSupport;
49
87
 
88
+
89
+
90
+
50
91
  export declare function shouldProbeSdkProcessPid(providerId: string): boolean;
51
92
 
93
+
94
+
95
+
52
96
  export declare function parseRuntimeStopOptions(body: unknown): RuntimeStopOptions;
53
97
  export declare function resolveStatusChangeUsage(actionInfo?: RuntimeStatusActionInfo): {
54
98
  inputTokens: number;
@@ -59,12 +103,22 @@ export declare function resolveStatusChangeUsage(actionInfo?: RuntimeStatusActio
59
103
  compactionThreshold?: number;
60
104
  cacheHitTokens?: number;
61
105
  cacheMissTokens?: number;
106
+ totalInputTokens?: number;
107
+ totalOutputTokens?: number;
62
108
  } | undefined;
63
109
  export declare function resolveStatusChangeRuntimeState(status: string, actionInfo?: RuntimeStatusActionInfo): {
64
110
  status: string;
65
111
  actionInfo?: RuntimeStatusActionInfo;
66
112
  };
67
113
 
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
68
122
  export declare function isIdleStatusChangeRetryable(params: {
69
123
  status: string;
70
124
  actionInfo?: RuntimeStatusActionInfo;
@@ -73,6 +127,17 @@ export declare function isIdleStatusChangeRetryable(params: {
73
127
  shouldPreservePrevAction: boolean;
74
128
  }): boolean;
75
129
 
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
76
141
  export declare function isUsageOnlyStatusChange(params: {
77
142
  actionInfo?: RuntimeStatusActionInfo;
78
143
  usage?: ReturnType<typeof resolveStatusChangeUsage>;
@@ -82,45 +147,87 @@ export declare function countTerminalOutputLines(output: string): number;
82
147
  export declare function formatCommandOutputSpilloverNotice(outputPath: string, lineLimit?: number): string;
83
148
  export declare function formatCommandInactivityTimeoutNotice(timeoutMs?: number): string;
84
149
 
150
+
151
+
85
152
  export declare function normalizeTerminalCommandInput(value: unknown): string;
86
153
 
154
+
155
+
156
+
87
157
  export declare function resolveTerminalOutputEncoding(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string;
88
158
 
159
+
160
+
89
161
  interface TerminalOutputDecoder {
90
162
  decode(chunk?: Uint8Array | ArrayBuffer | null, options?: {
91
163
  stream?: boolean;
92
164
  }): string;
93
165
  }
94
166
 
167
+
168
+
169
+
170
+
171
+
95
172
  export declare function createTerminalOutputDecoder(encoding?: string): TerminalOutputDecoder;
96
173
 
174
+
175
+
97
176
  export declare function decodeTerminalOutputChunk(decoder: TerminalOutputDecoder | TextDecoder, chunk?: Buffer, end?: boolean): string;
98
177
 
178
+
179
+
99
180
  export declare function parseTerminalDirectoryChangeTarget(command: string): string | null | undefined;
100
181
 
182
+
183
+
184
+
101
185
  export declare function resolveSdkSessionDisplayStatus(adapterStatus?: string, currentRuntimeStatus?: string, currentRuntimeActionType?: string): string;
102
186
  export interface PersistedSessionReuseDecision {
103
187
  reusable: boolean;
104
188
  reason: "active-pid" | "missing-pid" | "dead-pid" | "in-process-provider";
105
189
  }
106
190
 
191
+
192
+
193
+
107
194
  export declare function evaluatePersistedSessionReuse(session: Pick<PersistedSession, "pid"> & Partial<Pick<PersistedSession, "command">>, isPidRunning?: (pid: number) => boolean | Promise<boolean>): Promise<PersistedSessionReuseDecision>;
108
195
 
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
109
206
  export declare function cleanupSdkSessionByAgentId(agentId: string): string | undefined;
110
207
 
208
+
209
+
111
210
  export declare function formatTerminalPrompt(currentDirectory: string): string;
112
211
  export declare function buildRuntimeEnv(agentId: string, workspacePath: string | undefined, baseEnv: NodeJS.ProcessEnv, envOverrides?: Record<string, unknown>, projectRoot?: string | undefined): Record<string, string>;
113
212
 
213
+
214
+
215
+
114
216
  export declare function resolveSdkInputMessage(input: unknown): Promise<string>;
115
217
  export interface ClaudeCodeLaunchConfig {
116
218
  envOverrides: Record<string, string>;
117
219
  model?: string;
118
220
  }
119
221
 
222
+
223
+
120
224
  export declare function buildClaudeCodeLaunchConfig(savedClaudeConfig: {
121
225
  env?: Record<string, unknown>;
122
226
  } | null | undefined, requestEnvOverrides?: Record<string, unknown>): ClaudeCodeLaunchConfig;
123
227
 
228
+
229
+
230
+
124
231
  export declare function buildToolResultTimelineActionInfo(event: ProviderEvent): RuntimeStatusActionInfo | undefined;
125
232
  export declare function formatSdkOutputEvent(event: ProviderEvent): string | undefined;
126
233
  export declare function buildSdkOutputMetadata(event: ProviderEvent): RuntimeOutputMetadata;
@@ -129,11 +236,35 @@ export declare function resolveRuntimeStatusFromProviderEvent(event: ProviderEve
129
236
  actionInfo?: RuntimeStatusActionInfo;
130
237
  } | undefined;
131
238
 
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
132
254
  export declare function raceSendOutputWithRetry(factory: (signal: AbortSignal) => Promise<void>, timeoutMs?: number, maxRetries?: number): Promise<void>;
133
255
  export declare function enqueueCompactionSummaryChunk(entry: SdkSessionEntry, sessionId: string, output: string, seq: number): void;
134
256
 
257
+
258
+
259
+
135
260
  export declare function flushCompactionSummaryAccumulator(sessionId: string): void;
136
261
  export declare function resolveSdkProviderId(command?: string): string;
137
262
 
263
+
264
+
265
+
266
+
267
+
268
+
138
269
  export declare function withSenderSignature(input: unknown, sender: unknown): unknown;
139
270
  export {};
@@ -1,42 +1,42 @@
1
- import{spawn as At}from"node:child_process";import{promises as oe}from"node:fs";import Tt from"node:os";import se from"node:path";import{TextDecoder as ie}from"node:util";import{buildResumeContextBlock as _t}from"@agentswork/acode";import xe from"axios";import{Router as bt}from"express";import{v4 as kt}from"uuid";import{adapterRegistry as T,getToolActionInfo as Ce,isTransientClipboardPasteFilePath as Ue,redactTransientClipboardPastePaths as F,registerSdkProviders as Ct,resolveSdkProviderIdByCommand as Et}from"../adapter/index.js";import{MESSAGE_POLLING_IDLE_PROMPT as Ne}from"../adapter/prompts.js";import{getActiveBridgeHttpPort as Rt,getAcodeDataHome as Be}from"../config.js";import{validateToken as I}from"../middleware/auth.js";import{getAgentProcessManager as Ee}from"../services/agent-process-manager.js";import{loadAgentStartupMemories as $t}from"../services/agent-startup-memory.js";import{createAiConfigService as wt}from"../services/ai-config-service.js";import{resolveSchedulerBaseUrlFromToken as je}from"../services/auto-register.js";import{setChangeCacheRetentionDays as Dt}from"../services/change-cache-retention.js";import{clearDebugMounts as ae}from"../services/debug-mount.js";import{getAllPushStats as Ot,startHeartbeatScheduler as Pt}from"../services/event-delta-pusher.js";import{sweepExpiredSnapshots as Lt}from"../services/fileSnapshotStore.js";import{prepareAcodeInstanceConfig as Mt,redactForLog as ce}from"../services/instance-ai-config-service.js";import{setAgentFeatures as xt,setAgentCapabilities as Ut,setAgentInheritedFeatures as Nt,setAgentCapabilitiesInherited as Bt,getAgentFeatures as jt,getAgentInheritedFeatures as Ft,getFeatureState as S,LAUNCH_ITEM_FEATURE_KEY as Fe,HIRE_FEATURE_KEY as ve,PENCIL_FEATURE_KEY as Ke,DRAW_FEATURE_KEY as He,OFFICE_FEATURE_KEY as qe,COLLABORATION_TASK_FEATURE_KEY as We,COLLABORATION_MEETING_FEATURE_KEY as ze,COLLABORATION_DEBUG_FEATURE_KEY as Ge,COLLABORATION_FILE_HISTORY_FEATURE_KEY as Ye,EMAIL_FEATURE_KEY as Xe,SKILL_INSTALL_FEATURE_KEY as Ve,ABILITY_DEV_FEATURE_KEY as Je}from"../services/instance-features.js";import{setLogRetentionDays as vt}from"../services/log-retention.js";import{enqueueMcpLaunchBinding as Kt}from"../services/mcp-launch-binding-queue.js";import{setPanelEnvVars as Ht,setAgentMeta as qt}from"../services/panel-env.js";import{findClaudeCodeProcesses as Wt,isProcessRunning as zt}from"../services/process-detector.js";import{forgetSession as v,onSdkToolUseEnd as Gt,onSdkToolUseStart as Yt}from"../services/sdk-tool-file-change-recorder.js";import{bridgeEventBuffer as Qe,sendOutput as K,sendQuestionRequest as Xt,sendToolAuthRequest as Vt,sendStatus as $}from"../services/session-output.js";import{getSnapshotRetentionDays as Re,setSnapshotRetentionDays as Jt}from"../services/snapshot-retention.js";import{findPersistedSessionByAgentId as Qt,removePersistedSession as H,savePersistedSessions as Zt,updatePersistedSessionAutoCommands as en,updatePersistedSessionRuntimeState as tn,upsertPersistedSession as nn}from"../services/terminal-persistence.js";import{getInstanceAiConfigDebugLogger as rn}from"../utils/instance-ai-config-debug-logger.js";import{logger as l}from"../utils/logger.js";const h=bt();function Ze(e){const n=e.header("X-Runtime-Token");return n&&n.trim()?n.trim():(e.header("Authorization")||"").match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||void 0}const f=new Map,on=45e3,ue=new Map;function sn(e){if(ue.has(e))return;const n=setInterval(()=>{const t=f.get(e);if(!t){M(e);return}const r=t.currentRuntimeStatus;if(r!=="thinking"&&r!=="tool_using"&&r!=="compacting"){M(e);return}$(t.agentId,e,r,void 0,void 0,{runtimeAccessToken:t.runtimeAccessToken,schedulerBaseUrl:t.schedulerBaseUrl}).catch(()=>{})},on);ue.set(e,n)}function M(e){const n=ue.get(e);n&&(clearInterval(n),ue.delete(e))}const et=4e3,an=200,cn=2e3,tt=24e3,nt=200,rt=8e3;function un(e){if(!Array.isArray(e)||e.length===0)return{snapshot:"",truncated:!1};const n=[];let t=null,r=[];const s=()=>{if(t===null)return;const u=r.join("").trim();if(r=[],!u){t=null;return}const d=t==="user"?"\u7528\u6237":t==="assistant"?"\u52A9\u624B":t;n.push(`\u3010${d}\u3011${de(u,cn)}`),t=null};for(const u of e){const d=String(u?.role||"").trim();if(!d||d==="system")continue;if(d==="tool_use"||d==="tool_result"){s();const p=String(u.toolName||"").trim()||"\u672A\u77E5\u5DE5\u5177";if(dn(p))continue;if(d==="tool_use"){const g=fn(String(u.content||""));n.push(`\u3010\u5DE5\u5177\u8C03\u7528\u3011${p}${g?` ${g}`:""}`)}else{const g=de(String(u.content||"").trim(),an);n.push(`\u3010\u5DE5\u5177\u7ED3\u679C\u3011${p}${u.isError?"\uFF08\u5931\u8D25\uFF09":""}${g?`\uFF1A${g}`:""}`)}continue}const m=String(u.content||"");m.trim()&&(t===d||(s(),t=d),r.push(m))}if(s(),n.length===0)return{snapshot:"",truncated:!1};const o=n.join(`
2
- `);if(o.length<=tt)return{snapshot:o,truncated:!1};const i=tt-rt,a=o.slice(0,rt),c=o.slice(o.length-i);return{snapshot:`${a}
1
+ import{spawn as Tt}from"node:child_process";import{promises as se}from"node:fs";import At from"node:os";import ie from"node:path";import{TextDecoder as ae}from"node:util";import{buildResumeContextBlock as kt}from"@agentswork/acode";import Ne from"axios";import{Router as _t}from"express";import{v4 as bt}from"uuid";import{adapterRegistry as A,getToolActionInfo as $e,isTransientClipboardPasteFilePath as Be,redactTransientClipboardPastePaths as K,registerSdkProviders as Ct,resolveSdkProviderIdByCommand as Et}from"../adapter/index.js";import{MESSAGE_POLLING_IDLE_PROMPT as je}from"../adapter/prompts.js";import{getActiveBridgeHttpPort as $t,getAcodeDataHome as Fe}from"../config.js";import{validateToken as S}from"../middleware/auth.js";import{registerAgentOwner as Rt}from"../services/agent-ownership.js";import{getAgentProcessManager as Re}from"../services/agent-process-manager.js";import{loadAgentStartupMemories as wt}from"../services/agent-startup-memory.js";import{resolveSchedulerBaseUrlFromToken as Ke}from"../services/auto-register.js";import{setChangeCacheRetentionDays as Dt}from"../services/change-cache-retention.js";import{clearDebugMounts as ce}from"../services/debug-mount.js";import{getAllPushStats as Ot,startHeartbeatScheduler as Mt}from"../services/event-delta-pusher.js";import{sweepExpiredSnapshots as Pt}from"../services/fileSnapshotStore.js";import{prepareAcodeInstanceConfig as Lt,redactForLog as ue}from"../services/instance-ai-config-service.js";import{setAgentFeatures as Ut,setAgentCapabilities as xt,setAgentInheritedFeatures as Nt,setAgentCapabilitiesInherited as Bt,getAgentFeatures as jt,getAgentInheritedFeatures as Ft,getFeatureState as I,LAUNCH_ITEM_FEATURE_KEY as ve,HIRE_FEATURE_KEY as He,PENCIL_FEATURE_KEY as qe,DRAW_FEATURE_KEY as ze,OFFICE_FEATURE_KEY as We,COLLABORATION_TASK_FEATURE_KEY as Ge,COLLABORATION_MEETING_FEATURE_KEY as Ye,COLLABORATION_DEBUG_FEATURE_KEY as Xe,COLLABORATION_FILE_HISTORY_FEATURE_KEY as Je,EMAIL_FEATURE_KEY as Ve,SKILL_INSTALL_FEATURE_KEY as Qe,ABILITY_DEV_FEATURE_KEY as Ze}from"../services/instance-features.js";import{setLogRetentionDays as Kt}from"../services/log-retention.js";import{enqueueMcpLaunchBinding as vt}from"../services/mcp-launch-binding-queue.js";import{setPanelEnvVars as Ht,setAgentMeta as qt}from"../services/panel-env.js";import{findClaudeCodeProcesses as zt,isProcessRunning as Wt}from"../services/process-detector.js";import{forgetSession as v,onSdkToolUseEnd as Gt,onSdkToolUseStart as Yt}from"../services/sdk-tool-file-change-recorder.js";import{bridgeEventBuffer as et,sendOutput as H,sendQuestionRequest as Xt,sendToolAuthRequest as Jt,sendStatus as R}from"../services/session-output.js";import{getSnapshotRetentionDays as we,setSnapshotRetentionDays as Vt}from"../services/snapshot-retention.js";import{findPersistedSessionByAgentId as Qt,removePersistedSession as q,savePersistedSessions as Zt,updatePersistedSessionAutoCommands as en,updatePersistedSessionRuntimeState as tn,upsertPersistedSession as nn}from"../services/terminal-persistence.js";import{extractUserScope as on,normalizeUserScope as rn}from"../services/user-scope.js";import{getInstanceAiConfigDebugLogger as sn}from"../utils/instance-ai-config-debug-logger.js";import{logger as l}from"../utils/logger.js";const h=_t();function tt(e){const n=e.header("X-Runtime-Token");return n&&n.trim()?n.trim():(e.header("Authorization")||"").match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||void 0}const f=new Map,an=45e3,de=new Map;function cn(e){if(de.has(e))return;const n=setInterval(()=>{const t=f.get(e);if(!t){P(e);return}const o=t.currentRuntimeStatus;if(o!=="thinking"&&o!=="tool_using"&&o!=="compacting"){P(e);return}R(t.agentId,e,o,void 0,void 0,{runtimeAccessToken:t.runtimeAccessToken,schedulerBaseUrl:t.schedulerBaseUrl}).catch(()=>{})},an);de.set(e,n)}function P(e){const n=de.get(e);n&&(clearInterval(n),de.delete(e))}const nt=4e3,un=200,dn=2e3,ot=24e3,rt=200,st=8e3;function ln(e){if(!Array.isArray(e)||e.length===0)return{snapshot:"",truncated:!1};const n=[];let t=null,o=[];const s=()=>{if(t===null)return;const u=o.join("").trim();if(o=[],!u){t=null;return}const d=t==="user"?"\u7528\u6237":t==="assistant"?"\u52A9\u624B":t;n.push(`\u3010${d}\u3011${le(u,dn)}`),t=null};for(const u of e){const d=String(u?.role||"").trim();if(!d||d==="system")continue;if(d==="tool_use"||d==="tool_result"){s();const m=String(u.toolName||"").trim()||"\u672A\u77E5\u5DE5\u5177";if(fn(m))continue;if(d==="tool_use"){const g=gn(String(u.content||""));n.push(`\u3010\u5DE5\u5177\u8C03\u7528\u3011${m}${g?` ${g}`:""}`)}else{const g=le(String(u.content||"").trim(),un);n.push(`\u3010\u5DE5\u5177\u7ED3\u679C\u3011${m}${u.isError?"\uFF08\u5931\u8D25\uFF09":""}${g?`\uFF1A${g}`:""}`)}continue}const p=String(u.content||"");p.trim()&&(t===d||(s(),t=d),o.push(p))}if(s(),n.length===0)return{snapshot:"",truncated:!1};const r=n.join(`
2
+ `);if(r.length<=ot)return{snapshot:r,truncated:!1};const i=ot-st,a=r.slice(0,st),c=r.slice(r.length-i);return{snapshot:`${a}
3
3
 
4
- ...\uFF08\u6B64\u5904\u7701\u7565\u4E2D\u6BB5 ${o.length-a.length-c.length} \u5B57\u7B26\u5386\u53F2\uFF09...
4
+ ...\uFF08\u6B64\u5904\u7701\u7565\u4E2D\u6BB5 ${r.length-a.length-c.length} \u5B57\u7B26\u5386\u53F2\uFF09...
5
5
 
6
- ${c}`,truncated:!0}}function de(e,n){const t=String(e??"");return t.length<=n?t:`${t.slice(0,n)}...\uFF08\u622A\u65AD ${t.length-n} \u5B57\u7B26\uFF09`}function dn(e){const n=e.toLowerCase();return n.includes("poll_message")||n.includes("get_message")||n.includes("await_complete")}function ln(e){if(typeof e!="string"||!e.trim())return Array.isArray(e)&&e.length>0?e:void 0;try{const n=JSON.parse(e);if(!Array.isArray(n)||n.length===0)return;const t=new Set(["system","user","assistant","tool"]),r=1e6,o=n.filter(i=>!!i&&typeof i=="object"&&t.has(String(i.role))).filter(i=>JSON.stringify(i).length<=r).slice(0,5e3);return o.length>0?o:void 0}catch{return}}function fn(e){const n=String(e??"").trim();if(!n)return"";let t;try{const s=JSON.parse(n);if(!s||typeof s!="object"||Array.isArray(s))return"";t=s}catch{return de(n,nt)}const r=[];for(const s of["file_path","path","filePath","pattern","query","command","cmd","url"]){const o=t[s];if(typeof o=="string"&&o.trim()&&r.push(`${s}=${o.trim()}`),r.length>=3)break}if(r.length===0){const s=Object.keys(t).slice(0,5);return s.length>0?`(${s.join(", ")})`:""}return de(r.join(" "),nt)}function ot(e){if(e==null||typeof e!="object"||Array.isArray(e))return;const n=e,t={};return typeof n.model=="string"&&n.model.trim()&&(t.model=n.model.trim()),typeof n.baseURL=="string"&&n.baseURL.trim()&&(t.baseURL=n.baseURL.trim()),typeof n.apiKey=="string"&&n.apiKey.trim()&&(t.apiKey=n.apiKey.trim()),typeof n.effort=="string"&&n.effort.trim()&&(t.effort=n.effort.trim()),t}const q=new Set;function mn(e,n){return e!=="acode"?{supported:!1,statusCode:400,error:"context reset without restart is only supported by ACode"}:n?{supported:!0}:{supported:!1,statusCode:500,error:"ACode adapter does not expose resetContext"}}function pn(e){return e!=="acode"}function gn(e){const n=typeof e=="object"&&e!==null&&"suppressStatus"in e&&e.suppressStatus===!0,t=typeof e=="object"&&e!==null&&"reason"in e&&typeof e.reason=="string"&&e.reason.trim()?e.reason.trim():void 0;return{statusNotified:!n,reason:t}}function V(e){const n=e?.usage;if(!n)return;const t=Number.isFinite(n.inputTokens)?n.inputTokens:0,r=Number.isFinite(n.outputTokens)?n.outputTokens:0;if(t<=0&&r<=0&&!n.contextLimit&&!n.maxOutput&&!n.inputLimit&&!n.compactionThreshold)return;const s={inputTokens:t,outputTokens:r,...n.contextLimit?{contextLimit:n.contextLimit}:{},...n.maxOutput?{maxOutput:n.maxOutput}:{},...n.inputLimit?{inputLimit:n.inputLimit}:{},...n.compactionThreshold?{compactionThreshold:n.compactionThreshold}:{},...n.cacheHitTokens!==void 0?{cacheHitTokens:n.cacheHitTokens}:{},...n.cacheMissTokens!==void 0?{cacheMissTokens:n.cacheMissTokens}:{}};return process.env.ACODE_TOKEN_DEBUG==="1"&&(s.inputTokens>0||s.outputTokens>0||s.cacheHitTokens!==void 0||s.cacheMissTokens!==void 0)&&l.info(`[TokenDebug][Terminal] resolveStatusChangeUsage: input=${s.inputTokens} output=${s.outputTokens} cacheHit=${s.cacheHitTokens??"(none)"} cacheMiss=${s.cacheMissTokens??"(none)"} actionType=${e?.actionType??"(none)"}`),s}function yn(e,n){const t=String(e||"").trim().toLowerCase(),r=String(n?.actionType||"").trim().toLowerCase();return t==="tool_using"&&r==="idle"?n?{status:"waiting_input",actionInfo:n}:{status:"waiting_input"}:n?{status:e,actionInfo:n}:{status:e}}function Sn(e){return e.restoredActionInfo?.actionType==="idle"||e.currentRuntimeActionType==="idle"&&e.shouldPreservePrevAction||e.status==="waiting_input"&&!e.actionInfo?.actionType}function In(e){return e.actionInfo?.actionType?!1:!!e.usage}const J=new Map,hn="utf-8",st="utf-8",it=300,at=6e4;function Q(e){return String(e).padStart(2,"0")}function An(e,n=new Date){const t=n.getFullYear(),r=Q(n.getMonth()+1),s=Q(n.getDate()),o=Q(n.getHours()),i=Q(n.getMinutes()),a=`${t}${r}${s}-${o}${i}${Q(n.getSeconds())}-${String(n.getMilliseconds()).padStart(3,"0")}`;return se.join(Be(),"cmd-dist",e,`${t}-${r}-${s}`,o,i,`${a}-cmd.out`)}function Tn(e){if(!e)return 0;const n=e.replace(/\r\n/g,`
6
+ ${c}`,truncated:!0}}function le(e,n){const t=String(e??"");return t.length<=n?t:`${t.slice(0,n)}...\uFF08\u622A\u65AD ${t.length-n} \u5B57\u7B26\uFF09`}function fn(e){const n=e.toLowerCase();return n.includes("poll_message")||n.includes("get_message")||n.includes("await_complete")}function pn(e){if(typeof e!="string"||!e.trim())return Array.isArray(e)&&e.length>0?e:void 0;try{const n=JSON.parse(e);if(!Array.isArray(n)||n.length===0)return;const t=new Set(["system","user","assistant","tool"]),o=1e6,r=n.filter(i=>!!i&&typeof i=="object"&&t.has(String(i.role))).filter(i=>JSON.stringify(i).length<=o).slice(0,5e3);return r.length>0?r:void 0}catch{return}}function mn(e){if(!(typeof e!="string"||!e.trim()))try{const n=JSON.parse(e);if(!n||typeof n!="object"||Array.isArray(n))return;const t=a=>{const c=Number(a);return Number.isFinite(c)&&c>=0?c:void 0},o=t(n.totalInputTokens),s=t(n.totalOutputTokens),r=t(n.cacheHitTokens),i=t(n.cacheMissTokens);return o===void 0&&s===void 0&&r===void 0&&i===void 0?void 0:{...o!==void 0?{totalInputTokens:o}:{},...s!==void 0?{totalOutputTokens:s}:{},...r!==void 0?{cacheHitTokens:r}:{},...i!==void 0?{cacheMissTokens:i}:{}}}catch{return}}function gn(e){const n=String(e??"").trim();if(!n)return"";let t;try{const s=JSON.parse(n);if(!s||typeof s!="object"||Array.isArray(s))return"";t=s}catch{return le(n,rt)}const o=[];for(const s of["file_path","path","filePath","pattern","query","command","cmd","url"]){const r=t[s];if(typeof r=="string"&&r.trim()&&o.push(`${s}=${r.trim()}`),o.length>=3)break}if(o.length===0){const s=Object.keys(t).slice(0,5);return s.length>0?`(${s.join(", ")})`:""}return le(o.join(" "),rt)}function it(e){if(e==null||typeof e!="object"||Array.isArray(e))return;const n=e,t={};return typeof n.model=="string"&&n.model.trim()&&(t.model=n.model.trim()),typeof n.baseURL=="string"&&n.baseURL.trim()&&(t.baseURL=n.baseURL.trim()),typeof n.apiKey=="string"&&n.apiKey.trim()&&(t.apiKey=n.apiKey.trim()),typeof n.effort=="string"&&n.effort.trim()&&(t.effort=n.effort.trim()),t}const z=new Set;function yn(e,n){return e!=="acode"?{supported:!1,statusCode:400,error:"context reset without restart is only supported by ACode"}:n?{supported:!0}:{supported:!1,statusCode:500,error:"ACode adapter does not expose resetContext"}}function In(e){return e!=="acode"}function Sn(e){const n=typeof e=="object"&&e!==null&&"suppressStatus"in e&&e.suppressStatus===!0,t=typeof e=="object"&&e!==null&&"reason"in e&&typeof e.reason=="string"&&e.reason.trim()?e.reason.trim():void 0;return{statusNotified:!n,reason:t}}function J(e){const n=e?.usage;if(!n)return;const t=Number.isFinite(n.inputTokens)?n.inputTokens:0,o=Number.isFinite(n.outputTokens)?n.outputTokens:0;if(t<=0&&o<=0&&!n.contextLimit&&!n.maxOutput&&!n.inputLimit&&!n.compactionThreshold&&n.totalInputTokens===void 0&&n.totalOutputTokens===void 0)return;const s={inputTokens:t,outputTokens:o,...n.contextLimit?{contextLimit:n.contextLimit}:{},...n.maxOutput?{maxOutput:n.maxOutput}:{},...n.inputLimit?{inputLimit:n.inputLimit}:{},...n.compactionThreshold?{compactionThreshold:n.compactionThreshold}:{},...n.cacheHitTokens!==void 0?{cacheHitTokens:n.cacheHitTokens}:{},...n.cacheMissTokens!==void 0?{cacheMissTokens:n.cacheMissTokens}:{},...n.totalInputTokens!==void 0?{totalInputTokens:n.totalInputTokens}:{},...n.totalOutputTokens!==void 0?{totalOutputTokens:n.totalOutputTokens}:{}};return process.env.ACODE_TOKEN_DEBUG==="1"&&(s.inputTokens>0||s.outputTokens>0||s.cacheHitTokens!==void 0||s.cacheMissTokens!==void 0||s.totalInputTokens!==void 0||s.totalOutputTokens!==void 0)&&l.info(`[TokenDebug][Terminal] resolveStatusChangeUsage: input=${s.inputTokens} output=${s.outputTokens} cacheHit=${s.cacheHitTokens??"(none)"} cacheMiss=${s.cacheMissTokens??"(none)"} totalInput=${s.totalInputTokens??"(none)"} totalOutput=${s.totalOutputTokens??"(none)"} actionType=${e?.actionType??"(none)"}`),s}function hn(e,n){const t=String(e||"").trim().toLowerCase(),o=String(n?.actionType||"").trim().toLowerCase();return t==="tool_using"&&o==="idle"?n?{status:"waiting_input",actionInfo:n}:{status:"waiting_input"}:n?{status:e,actionInfo:n}:{status:e}}function Tn(e){return e.restoredActionInfo?.actionType==="idle"||e.currentRuntimeActionType==="idle"&&e.shouldPreservePrevAction||e.status==="waiting_input"&&!e.actionInfo?.actionType}function An(e){return e.actionInfo?.actionType?!1:!!e.usage}const V=new Map,kn="utf-8",at="utf-8",ct=300,ut=6e4;function Q(e){return String(e).padStart(2,"0")}function _n(e,n=new Date){const t=n.getFullYear(),o=Q(n.getMonth()+1),s=Q(n.getDate()),r=Q(n.getHours()),i=Q(n.getMinutes()),a=`${t}${o}${s}-${r}${i}${Q(n.getSeconds())}-${String(n.getMilliseconds()).padStart(3,"0")}`;return ie.join(Fe(),"cmd-dist",e,`${t}-${o}-${s}`,r,i,`${a}-cmd.out`)}function bn(e){if(!e)return 0;const n=e.replace(/\r\n/g,`
7
7
  `).replace(/\r/g,`
8
8
  `),t=n.endsWith(`
9
9
  `)?n.slice(0,-1):n;return t?t.split(`
10
- `).length:1}function _n(e,n=it){return`\r
10
+ `).length:1}function Cn(e,n=ct){return`\r
11
11
  [ACode] \u547D\u4EE4\u8F93\u51FA\u8D85\u8FC7 ${n} \u884C\uFF0C\u5B8C\u6574\u8F93\u51FA\u5DF2\u5199\u5165: ${e}\r
12
12
  [ACode] Agent \u53EF\u81EA\u884C\u8BFB\u53D6\u8BE5\u6587\u4EF6\uFF0C\u6216\u5728\u8BE5\u6587\u4EF6\u4E2D\u641C\u7D22\u9700\u8981\u7684\u5185\u5BB9\u3002\r
13
- `}function bn(e=at){return`\r
13
+ `}function En(e=ut){return`\r
14
14
  [ACode] \u547D\u4EE4\u8D85\u8FC7 ${Math.round(e/1e3)} \u79D2\u6CA1\u6709\u65B0\u7684\u8F93\u51FA\uFF0C\u5DF2\u505C\u6B62\u6267\u884C\u5E76\u4FDD\u7559\u6B64\u524D\u8F93\u51FA\u3002\r
15
- `}async function ct(e){const n=e.outputPath||An(e.agentId,e.startedAt);return e.outputPath=n,await oe.mkdir(se.dirname(n),{recursive:!0}),await oe.writeFile(n,e.chunks.join(""),"utf-8"),n}function kn(e){return String(e??"").replace(/\r/g,`
16
- `).trim()}function Cn(e=process.platform,n=process.env){const t=n.AWS_TERMINAL_OUTPUT_ENCODING?.trim();return t||(e==="win32"?hn:st)}function ut(e=Cn()){if(e!=="utf-8")try{return new ie(e,{fatal:!1})}catch{return new ie(st,{fatal:!1})}return En()}function En(){let e=null,n=null,t=null;const r=[];function s(o){try{return new ie(o,{fatal:!1})}catch{return new ie("utf-8",{fatal:!1})}}return{decode(o,i){if(o!=null&&r.push(o instanceof ArrayBuffer?Buffer.from(o):Buffer.isBuffer(o)?o:Buffer.from(o.buffer,o.byteOffset,o.byteLength)),t==="gb18030")return n||(n=s("gb18030")),n.decode(o,i);e||(e=s("utf-8"));const a=e.decode(o,i);if(t===null&&a.includes("\uFFFD")){t="gb18030",n=s("gb18030");const c=Buffer.concat(r);return n.decode(c)}return t===null&&!i?.stream&&(t="utf-8"),a}}}function le(e,n,t=!1){return t?e.decode():!n||n.length===0?"":e.decode(n,{stream:!0})}function Rn(e){const n=e.trim().match(/^cd(?:\s+(.*))?$/i);if(!n)return;const t=n[1]?.trim();if(!t)return null;const r=t.replace(/^\/d\s+/i,"").trim();return r.startsWith('"')&&r.endsWith('"')||r.startsWith("'")&&r.endsWith("'")?r.slice(1,-1):r}function $n(e){const n=J.get(e.sessionId);if(n)return n;const t={currentDirectory:e.workspacePath,runningProcess:null};return J.set(e.sessionId,t),t}function dt(e){for(const n of f.values())if(n.agentId===e)return n}async function wn(e){const n=T.get(e.providerId||"claude-code"),t=Z(n.getSessionStatus(e.sessionId),e.currentRuntimeStatus,e.currentRuntimeActionType);return{sessionId:e.sessionId,status:t,runtimeStatus:t,runtimeActionType:e.currentRuntimeActionType,runtimeActionLabel:e.currentRuntimeActionLabel,runtimeActionDetail:e.currentRuntimeActionDetail,agentId:e.agentId,workspacePath:e.workspacePath,command:e.config.command,mode:"sdk",providerSessionId:n.getProviderSessionId(e.sessionId),reused:!0}}function Z(e,n,t){const r=String(e||"").trim();if(r){const o=String(n||"").trim(),i=String(t||"").trim().toLowerCase();return r.toLowerCase()==="tool_using"&&o.toLowerCase()==="waiting_input"&&i==="idle"?o:r}return String(n||"").trim()||"running"}async function Dn(e,n=zt){return e.pid?await n(e.pid)?yt(e.command)==="acode"?{reusable:!1,reason:"in-process-provider"}:{reusable:!0,reason:"active-pid"}:{reusable:!1,reason:"dead-pid"}:{reusable:!1,reason:"missing-pid"}}function Yr(e){try{ae(e)}catch(t){l.warn(`[cleanupSdkSessionByAgentId] clear debug mounts failed for agentId=${e}: ${t}`)}const n=dt(e);if(!n)l.info(`[cleanupSdkSessionByAgentId] No active SDK session found for agentId=${e}, cleaning residual state anyway`);else{const t=n.sessionId;return l.info(`[cleanupSdkSessionByAgentId] Cleaning up SDK session for agentId=${e}, sessionId=${t}`),M(t),f.delete(t),v(t),fe(t),H(t).catch(r=>{l.warn(`[cleanupSdkSessionByAgentId] Failed to remove persisted session for agentId=${e}: ${r}`)}),t}q.has(e)&&(q.delete(e),l.info(`[cleanupSdkSessionByAgentId] Released startingAgents lock for agentId=${e}`))}function fe(e){const n=J.get(e);if(!n?.runningProcess){J.delete(e);return}try{n.runningProcess.kill()}catch{}finally{n.runningProcess=null,J.delete(e)}}function C(e,n){n&&(e.seq+=1,K(e.agentId,n,e.sessionId,e.seq,void 0,{runtimeAccessToken:e.runtimeAccessToken,schedulerBaseUrl:e.schedulerBaseUrl}).catch(()=>{}))}function $e(e){return`\x1B[36m${e}>\x1B[0m `}function On(e,n){return n==="~"?Tt.homedir():se.resolve(e,n)}async function Pn(e,n,t){const r=Rn(t);if(r===void 0)return!1;if(r===null)return C(e,`${n.currentDirectory}\r
17
- `),!0;const s=On(n.currentDirectory,r);try{return(await oe.stat(s)).isDirectory()?(n.currentDirectory=s,C(e,`${n.currentDirectory}\r
15
+ `}async function dt(e){const n=e.outputPath||_n(e.agentId,e.startedAt);return e.outputPath=n,await se.mkdir(ie.dirname(n),{recursive:!0}),await se.writeFile(n,e.chunks.join(""),"utf-8"),n}function $n(e){return String(e??"").replace(/\r/g,`
16
+ `).trim()}function Rn(e=process.platform,n=process.env){const t=n.AWS_TERMINAL_OUTPUT_ENCODING?.trim();return t||(e==="win32"?kn:at)}function lt(e=Rn()){if(e!=="utf-8")try{return new ae(e,{fatal:!1})}catch{return new ae(at,{fatal:!1})}return wn()}function wn(){let e=null,n=null,t=null;const o=[];function s(r){try{return new ae(r,{fatal:!1})}catch{return new ae("utf-8",{fatal:!1})}}return{decode(r,i){if(r!=null&&o.push(r instanceof ArrayBuffer?Buffer.from(r):Buffer.isBuffer(r)?r:Buffer.from(r.buffer,r.byteOffset,r.byteLength)),t==="gb18030")return n||(n=s("gb18030")),n.decode(r,i);e||(e=s("utf-8"));const a=e.decode(r,i);if(t===null&&a.includes("\uFFFD")){t="gb18030",n=s("gb18030");const c=Buffer.concat(o);return n.decode(c)}return t===null&&!i?.stream&&(t="utf-8"),a}}}function fe(e,n,t=!1){return t?e.decode():!n||n.length===0?"":e.decode(n,{stream:!0})}function Dn(e){const n=e.trim().match(/^cd(?:\s+(.*))?$/i);if(!n)return;const t=n[1]?.trim();if(!t)return null;const o=t.replace(/^\/d\s+/i,"").trim();return o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'")?o.slice(1,-1):o}function On(e){const n=V.get(e.sessionId);if(n)return n;const t={currentDirectory:e.workspacePath,runningProcess:null};return V.set(e.sessionId,t),t}function ft(e){for(const n of f.values())if(n.agentId===e)return n}async function Mn(e){const n=A.get(e.providerId||"claude-code"),t=Z(n.getSessionStatus(e.sessionId),e.currentRuntimeStatus,e.currentRuntimeActionType);return{sessionId:e.sessionId,status:t,runtimeStatus:t,runtimeActionType:e.currentRuntimeActionType,runtimeActionLabel:e.currentRuntimeActionLabel,runtimeActionDetail:e.currentRuntimeActionDetail,agentId:e.agentId,workspacePath:e.workspacePath,command:e.config.command,mode:"sdk",providerSessionId:n.getProviderSessionId(e.sessionId),reused:!0}}function Z(e,n,t){const o=String(e||"").trim();if(o){const r=String(n||"").trim(),i=String(t||"").trim().toLowerCase();return o.toLowerCase()==="tool_using"&&r.toLowerCase()==="waiting_input"&&i==="idle"?r:o}return String(n||"").trim()||"running"}async function Pn(e,n=Wt){return e.pid?await n(e.pid)?It(e.command)==="acode"?{reusable:!1,reason:"in-process-provider"}:{reusable:!0,reason:"active-pid"}:{reusable:!1,reason:"dead-pid"}:{reusable:!1,reason:"missing-pid"}}function Zo(e){try{ce(e)}catch(t){l.warn(`[cleanupSdkSessionByAgentId] clear debug mounts failed for agentId=${e}: ${t}`)}const n=ft(e);if(!n)l.info(`[cleanupSdkSessionByAgentId] No active SDK session found for agentId=${e}, cleaning residual state anyway`);else{const t=n.sessionId;return l.info(`[cleanupSdkSessionByAgentId] Cleaning up SDK session for agentId=${e}, sessionId=${t}`),P(t),f.delete(t),v(t),pe(t),q(t).catch(o=>{l.warn(`[cleanupSdkSessionByAgentId] Failed to remove persisted session for agentId=${e}: ${o}`)}),t}z.has(e)&&(z.delete(e),l.info(`[cleanupSdkSessionByAgentId] Released startingAgents lock for agentId=${e}`))}function pe(e){const n=V.get(e);if(!n?.runningProcess){V.delete(e);return}try{n.runningProcess.kill()}catch{}finally{n.runningProcess=null,V.delete(e)}}function C(e,n){n&&(e.seq+=1,H(e.agentId,n,e.sessionId,e.seq,void 0,{runtimeAccessToken:e.runtimeAccessToken,schedulerBaseUrl:e.schedulerBaseUrl}).catch(()=>{}))}function De(e){return`\x1B[36m${e}>\x1B[0m `}function Ln(e,n){return n==="~"?At.homedir():ie.resolve(e,n)}async function Un(e,n,t){const o=Dn(t);if(o===void 0)return!1;if(o===null)return C(e,`${n.currentDirectory}\r
17
+ `),!0;const s=Ln(n.currentDirectory,o);try{return(await se.stat(s)).isDirectory()?(n.currentDirectory=s,C(e,`${n.currentDirectory}\r
18
18
  `),!0):(C(e,`cd: not a directory: ${s}\r
19
- `),!0)}catch(o){const i=o instanceof Error?o.message:String(o);return C(e,`cd: ${i}\r
20
- `),!0}}async function Ln(e,n){const t=f.get(e);if(!t)throw new Error("SDK session not found");const r=kn(n),s=$n(t);if(!r)return{started:!1,cwd:s.currentDirectory};if(s.runningProcess)throw new Error("A terminal command is already running for this session");const o=F(r);if(C(t,`${$e(s.currentDirectory)}${o}\r
21
- `),Ue(r))return C(t,`[Terminal Warning] \u68C0\u6D4B\u5230\u526A\u8D34\u677F\u4E34\u65F6 paste \u6587\u4EF6\u8DEF\u5F84\uFF0C\u5DF2\u8DF3\u8FC7\u6267\u884C\u3002\u8BF7\u7C98\u8D34\u6587\u4EF6\u5185\u5BB9\u6216\u4F7F\u7528\u663E\u5F0F\u8BFB\u53D6\u547D\u4EE4\u3002\r
22
- `),C(t,$e(s.currentDirectory)),{started:!1,cwd:s.currentDirectory};if(await Pn(t,s,r))return{started:!1,cwd:s.currentDirectory};await $(t.agentId,e,"tool_using",{actionType:"bash",actionLabel:"\u7EC8\u7AEF\u547D\u4EE4",actionDetail:o},void 0,{runtimeAccessToken:t.runtimeAccessToken,schedulerBaseUrl:t.schedulerBaseUrl});const a=At(r,{cwd:s.currentDirectory,shell:!0,env:lt(t.agentId,t.workspacePath,process.env,t.config.envOverrides)});s.runningProcess=a;const c=ut(),u=ut(),d=t.providerId==="acode",m={agentId:t.agentId,startedAt:new Date,chunks:[],spilled:!1};let p;const g=()=>{p&&(clearTimeout(p),p=void 0)},k=()=>{g(),p=setTimeout(()=>{s.runningProcess===a&&(C(t,bn()),a.kill())},at)},E=(y,L=!0)=>{if(y&&(d&&m.chunks.push(y),d&&L&&k(),!(d&&m.spilled))){if(d&&Tn(m.chunks.join(""))>it){m.spilled=!0,ct(m).then(_=>{C(t,_n(_))}).catch(_=>{const w=_ instanceof Error?_.message:String(_);C(t,`\r
23
- [ACode] \u547D\u4EE4\u8F93\u51FA\u843D\u76D8\u5931\u8D25: ${w}\r
24
- `)});return}C(t,y)}};return d&&k(),a.stdout.on("data",y=>{E(le(c,y))}),a.stderr.on("data",y=>{E(le(u,y))}),a.on("error",y=>{C(t,`\r
19
+ `),!0)}catch(r){const i=r instanceof Error?r.message:String(r);return C(e,`cd: ${i}\r
20
+ `),!0}}async function xn(e,n){const t=f.get(e);if(!t)throw new Error("SDK session not found");const o=$n(n),s=On(t);if(!o)return{started:!1,cwd:s.currentDirectory};if(s.runningProcess)throw new Error("A terminal command is already running for this session");const r=K(o);if(C(t,`${De(s.currentDirectory)}${r}\r
21
+ `),Be(o))return C(t,`[Terminal Warning] \u68C0\u6D4B\u5230\u526A\u8D34\u677F\u4E34\u65F6 paste \u6587\u4EF6\u8DEF\u5F84\uFF0C\u5DF2\u8DF3\u8FC7\u6267\u884C\u3002\u8BF7\u7C98\u8D34\u6587\u4EF6\u5185\u5BB9\u6216\u4F7F\u7528\u663E\u5F0F\u8BFB\u53D6\u547D\u4EE4\u3002\r
22
+ `),C(t,De(s.currentDirectory)),{started:!1,cwd:s.currentDirectory};if(await Un(t,s,o))return{started:!1,cwd:s.currentDirectory};await R(t.agentId,e,"tool_using",{actionType:"bash",actionLabel:"\u7EC8\u7AEF\u547D\u4EE4",actionDetail:r},void 0,{runtimeAccessToken:t.runtimeAccessToken,schedulerBaseUrl:t.schedulerBaseUrl});const a=Tt(o,{cwd:s.currentDirectory,shell:!0,env:pt(t.agentId,t.workspacePath,process.env,t.config.envOverrides)});s.runningProcess=a;const c=lt(),u=lt(),d=t.providerId==="acode",p={agentId:t.agentId,startedAt:new Date,chunks:[],spilled:!1};let m;const g=()=>{m&&(clearTimeout(m),m=void 0)},b=()=>{g(),m=setTimeout(()=>{s.runningProcess===a&&(C(t,En()),a.kill())},ut)},E=(y,O=!0)=>{if(y&&(d&&p.chunks.push(y),d&&O&&b(),!(d&&p.spilled))){if(d&&bn(p.chunks.join(""))>ct){p.spilled=!0,dt(p).then(k=>{C(t,Cn(k))}).catch(k=>{const B=k instanceof Error?k.message:String(k);C(t,`\r
23
+ [ACode] \u547D\u4EE4\u8F93\u51FA\u843D\u76D8\u5931\u8D25: ${B}\r
24
+ `)});return}C(t,y)}};return d&&b(),a.stdout.on("data",y=>{E(fe(c,y))}),a.stderr.on("data",y=>{E(fe(u,y))}),a.on("error",y=>{C(t,`\r
25
25
  [Terminal Error] ${y.message}\r
26
- `)}),a.on("close",(y,L)=>{g(),s.runningProcess=null,E(le(c,void 0,!0),!1),E(le(u,void 0,!0),!1),m.spilled&&ct(m).catch(_=>{const w=_ instanceof Error?_.message:String(_);C(t,`\r
27
- [ACode] \u547D\u4EE4\u8F93\u51FA\u6700\u7EC8\u843D\u76D8\u5931\u8D25: ${w}\r
26
+ `)}),a.on("close",(y,O)=>{g(),s.runningProcess=null,E(fe(c,void 0,!0),!1),E(fe(u,void 0,!0),!1),p.spilled&&dt(p).catch(k=>{const B=k instanceof Error?k.message:String(k);C(t,`\r
27
+ [ACode] \u547D\u4EE4\u8F93\u51FA\u6700\u7EC8\u843D\u76D8\u5931\u8D25: ${B}\r
28
28
  `)}),y&&y!==0?C(t,`\r
29
29
  [exit ${y}]\r
30
- `):L&&C(t,`\r
31
- [signal ${L}]\r
32
- `),C(t,$e(s.currentDirectory)),$(t.agentId,e,"waiting_input",void 0,void 0,{runtimeAccessToken:t.runtimeAccessToken,schedulerBaseUrl:t.schedulerBaseUrl})}),{started:!0,cwd:s.currentDirectory}}function lt(e,n,t,r,s){const o={};for(const[i,a]of Object.entries(t))a!==void 0&&(o[i]=a);if(n&&(o.AWS_WORKSPACE_PATH=String(n)),s&&String(s).trim()&&(o.AWS_PROJECT_ROOT=String(s).trim()),r)for(const[i,a]of Object.entries(r)){const c=i.trim();if(!c||a===void 0||a===null)continue;const u=String(a).trim();u&&(o[c]=u)}return o.AWS_AGENT_ID=String(e),o.AWS_MCP_CLAIM_LAUNCH_BINDING="true",o.AWS_RUNTIME_BRIDGE_BASE_URL=`http://127.0.0.1:${Rt()}`,String(o.ACODE_HOME||"").trim()||(o.ACODE_HOME=Be()),S(e,Fe)!=="disabled"&&(o.AWS_LAUNCH_CONFIG_TOOLS=S(e,Fe)),S(e,ve)!=="disabled"&&(o.AWS_HIRE_TOOLS=S(e,ve)),S(e,Ke)!=="disabled"&&(o.AWS_PENCIL_TOOLS=S(e,Ke)),S(e,He)!=="disabled"&&(o.AWS_DRAW_TOOLS=S(e,He)),S(e,qe)!=="disabled"&&(o.AWS_OFFICE_TOOLS=S(e,qe)),S(e,We)!=="disabled"&&(o.AWS_COLLABORATION_TASK_TOOLS=S(e,We)),S(e,ze)!=="disabled"&&(o.AWS_COLLABORATION_MEETING_TOOLS=S(e,ze)),S(e,Ge)!=="disabled"&&(o.AWS_COLLABORATION_DEBUG_TOOLS=S(e,Ge)),S(e,Ye)!=="disabled"&&(o.AWS_COLLABORATION_FILE_HISTORY_TOOLS=S(e,Ye)),S(e,Xe)!=="disabled"&&(o.AWS_EMAIL_TOOLS=S(e,Xe)),S(e,Ve)!=="disabled"&&(o.AWS_ABILITY_MARKET_TOOLS=S(e,Ve)),S(e,Je)!=="disabled"&&(o.AWS_ABILITY_DEV_TOOLS=S(e,Je)),o}function Mn(e){const n=e.trim(),t=n[0],r=n[n.length-1];return(t==='"'||t==="'")&&t===r?n.slice(1,-1):n}async function xn(e){const n=String(e);if(!Ue(n))return n;const t=Mn(n);return se.isAbsolute(t)?oe.readFile(t,"utf-8"):n}function ft(e,n){const t={};for(const s of[e?.env,n])if(s)for(const[o,i]of Object.entries(s)){const a=o.trim();if(!a||i===void 0||i===null)continue;const c=String(i).trim();c&&(t[a]=c)}const r=t.ANTHROPIC_MODEL?.trim()||t.CODEX_MODEL?.trim()||void 0;return{envOverrides:t,model:r}}async function Un(){try{return await wt().readClaudeCodeConfig()}catch(e){return console.warn(`[Runtime] Failed to read saved ClaudeCode AI config: ${e.message}`),{}}}function Nn(e){if(e==null)return;const t=(typeof e=="string"?e:JSON.stringify(e,null,2)).trim();if(t)return t.length<=et?t:`${t.slice(0,et)}
33
- ...\uFF08\u7ED3\u679C\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`}function Bn(e){try{const n=JSON.parse(e);if(n&&typeof n=="object"&&!Array.isArray(n))return["directMessages","groupMessages","messages"].some(t=>Array.isArray(n[t])&&n[t].length>0)}catch{}return e.trim().length>0}function jn(e){if(e.data.actionType==="mcp")return!0;const t=String(e.data.toolName||"").toLowerCase();return t.startsWith("mcp__")||t.includes("-mcp__")||t.includes("mcp_")}function Fn(e){if(e.type!=="tool_use_end")return;const n=Nn(e.data.toolResult??e.data.actionResult);if(!n)return;const t=Ce(e.data.toolName,e.data.toolInput),r=e.data.actionType||t.actionType;if(r==="idle"){const s=String(e.data.rawToolName||e.data.toolName||"").toLowerCase();if((s.includes("poll_message")||s.includes("get_message"))&&!Bn(n))return}return r==="mcp"&&jn(e)?{actionType:"mcp",actionLabel:"MCP\u8FD4\u56DE",actionDetail:e.data.actionDetail||e.data.toolName,actionId:e.data.actionId||e.data.toolUseId,actionResult:n,...e.data.parentId?{parentId:e.data.parentId}:{}}:{actionType:r,actionLabel:e.data.actionLabel||t.actionLabel,actionDetail:e.data.actionDetail||t.actionDetail||e.data.toolName,actionId:e.data.actionId||e.data.toolUseId,actionResult:n,...e.data.parentId?{parentId:e.data.parentId}:{}}}function vn(e){if(e.type==="ai_request"){const n=e.data.model?` ${e.data.model}`:"",t=e.data.lastUserMessagePreview?`\uFF1A${e.data.lastUserMessagePreview}`:"";return`\r
30
+ `):O&&C(t,`\r
31
+ [signal ${O}]\r
32
+ `),C(t,De(s.currentDirectory)),R(t.agentId,e,"waiting_input",void 0,void 0,{runtimeAccessToken:t.runtimeAccessToken,schedulerBaseUrl:t.schedulerBaseUrl})}),{started:!0,cwd:s.currentDirectory}}function pt(e,n,t,o,s){const r={};for(const[i,a]of Object.entries(t))a!==void 0&&(r[i]=a);if(n&&(r.AWS_WORKSPACE_PATH=String(n)),s&&String(s).trim()&&(r.AWS_PROJECT_ROOT=String(s).trim()),o)for(const[i,a]of Object.entries(o)){const c=i.trim();if(!c||a===void 0||a===null)continue;const u=String(a).trim();u&&(r[c]=u)}return r.AWS_AGENT_ID=String(e),r.AWS_MCP_CLAIM_LAUNCH_BINDING="true",r.AWS_RUNTIME_BRIDGE_BASE_URL=`http://127.0.0.1:${$t()}`,String(r.ACODE_HOME||"").trim()||(r.ACODE_HOME=Fe()),I(e,ve)!=="disabled"&&(r.AWS_LAUNCH_CONFIG_TOOLS=I(e,ve)),I(e,He)!=="disabled"&&(r.AWS_HIRE_TOOLS=I(e,He)),I(e,qe)!=="disabled"&&(r.AWS_PENCIL_TOOLS=I(e,qe)),I(e,ze)!=="disabled"&&(r.AWS_DRAW_TOOLS=I(e,ze)),I(e,We)!=="disabled"&&(r.AWS_OFFICE_TOOLS=I(e,We)),I(e,Ge)!=="disabled"&&(r.AWS_COLLABORATION_TASK_TOOLS=I(e,Ge)),I(e,Ye)!=="disabled"&&(r.AWS_COLLABORATION_MEETING_TOOLS=I(e,Ye)),I(e,Xe)!=="disabled"&&(r.AWS_COLLABORATION_DEBUG_TOOLS=I(e,Xe)),I(e,Je)!=="disabled"&&(r.AWS_COLLABORATION_FILE_HISTORY_TOOLS=I(e,Je)),I(e,Ve)!=="disabled"&&(r.AWS_EMAIL_TOOLS=I(e,Ve)),I(e,Qe)!=="disabled"&&(r.AWS_ABILITY_MARKET_TOOLS=I(e,Qe)),I(e,Ze)!=="disabled"&&(r.AWS_ABILITY_DEV_TOOLS=I(e,Ze)),r}function Nn(e){const n=e.trim(),t=n[0],o=n[n.length-1];return(t==='"'||t==="'")&&t===o?n.slice(1,-1):n}async function Bn(e){const n=String(e);if(!Be(n))return n;const t=Nn(n);return ie.isAbsolute(t)?se.readFile(t,"utf-8"):n}function jn(e,n){const t={};for(const s of[e?.env,n])if(s)for(const[r,i]of Object.entries(s)){const a=r.trim();if(!a||i===void 0||i===null)continue;const c=String(i).trim();c&&(t[a]=c)}const o=t.ANTHROPIC_MODEL?.trim()||t.CODEX_MODEL?.trim()||void 0;return{envOverrides:t,model:o}}function Fn(e){if(e==null)return;const t=(typeof e=="string"?e:JSON.stringify(e,null,2)).trim();if(t)return t.length<=nt?t:`${t.slice(0,nt)}
33
+ ...\uFF08\u7ED3\u679C\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`}function Kn(e){try{const n=JSON.parse(e);if(n&&typeof n=="object"&&!Array.isArray(n))return["directMessages","groupMessages","messages"].some(t=>Array.isArray(n[t])&&n[t].length>0)}catch{}return e.trim().length>0}function vn(e){if(e.data.actionType==="mcp")return!0;const t=String(e.data.toolName||"").toLowerCase();return t.startsWith("mcp__")||t.includes("-mcp__")||t.includes("mcp_")}function Hn(e){if(e.type!=="tool_use_end")return;const n=Fn(e.data.toolResult??e.data.actionResult);if(!n)return;const t=$e(e.data.toolName,e.data.toolInput),o=e.data.actionType||t.actionType;if(o==="idle"){const s=String(e.data.rawToolName||e.data.toolName||"").toLowerCase();if((s.includes("poll_message")||s.includes("get_message"))&&!Kn(n))return}return o==="mcp"&&vn(e)?{actionType:"mcp",actionLabel:"MCP\u8FD4\u56DE",actionDetail:e.data.actionDetail||e.data.toolName,actionId:e.data.actionId||e.data.toolUseId,actionResult:n,...e.data.parentId?{parentId:e.data.parentId}:{}}:{actionType:o,actionLabel:e.data.actionLabel||t.actionLabel,actionDetail:e.data.actionDetail||t.actionDetail||e.data.toolName,actionId:e.data.actionId||e.data.toolUseId,actionResult:n,...e.data.parentId?{parentId:e.data.parentId}:{}}}function qn(e){if(e.type==="ai_request"){const n=e.data.model?` ${e.data.model}`:"",t=e.data.lastUserMessagePreview?`\uFF1A${e.data.lastUserMessagePreview}`:"";return`\r
34
34
  [ACode] \u6B63\u5728\u8BF7\u6C42\u6A21\u578B${n}${t}\r
35
35
  `}if(e.type==="text_delta"||e.type==="thinking"||e.type==="compaction_summary"||e.type==="command_output")return e.data.text||void 0;if(e.type==="error")return e.data.text?`\r
36
36
  [SDK Error] ${e.data.text}\r
37
- `:void 0}function Kn(e){const n=Wn(e);return{sourceEventType:e.type,logCategory:"acode",...qn(e),...n?{logLevel:Hn(e),logMessage:n}:{}}}function Hn(e){return e.type==="error"?"error":e.type==="command_output"&&e.data.stream==="stderr"?"warn":"info"}function qn(e){return e.type!=="command_output"?{}:{...typeof e.data.stream=="string"?{stream:e.data.stream}:{},...typeof e.data.sequence=="number"?{sequence:e.data.sequence}:{},...typeof e.data.cwd=="string"?{cwd:e.data.cwd}:{},...typeof e.data.commandFilePath=="string"?{commandFilePath:e.data.commandFilePath}:{},...typeof e.data.commandLineCount=="number"?{commandLineCount:e.data.commandLineCount}:{}}}function Wn(e){if(e.type==="ai_request"){const n=e.data.model||"unknown-model",t=e.data.endpoint?` @ ${e.data.endpoint}`:"",r=typeof e.data.toolCount=="number"?`, tools=${e.data.toolCount}`:"";return`AI request started: ${n}${t}${r}`}if(e.type==="tool_use_start")return mt(e,"\u5F00\u59CB");if(e.type==="tool_use_end")return mt(e,"\u5B8C\u6210");if(e.type==="command_output")return Yn(e);if(e.type==="turn_complete")return`Turn completed${e.data.finishReason?`, finish=${e.data.finishReason}`:""}`;if(e.type==="session_complete")return`Session completed: exitCode=${e.data.exitCode??0}`;if(e.type==="error")return e.data.text||"ACode runtime error"}const zn=/\x1b\[[0-9;?]*[a-zA-Z]/g;function Gn(e){return e.replace(zn,"")}function Yn(e){const n=typeof e.data.stream=="string"?e.data.stream:"mixed",t=typeof e.data.sequence=="number"?` #${e.data.sequence}`:"",r=Gn(String(e.data.text||"")).replace(/\s+/g," ").trim(),s=r.length>240?`${r.slice(0,240)}...`:r;return`\u547D\u4EE4\u8F93\u51FA(${n}${t}): ${s||"(empty)"}`}function mt(e,n){const t=Ce(e.data.toolName,e.data.toolInput),r=e.data.actionLabel||t.actionLabel||"\u8C03\u7528\u5DE5\u5177",s=pt(e,t);return s?`${n}${r}: ${s}`:`${n}${r}: ${e.data.actionDetail||e.data.toolName||"tool"}`}function pt(e,n){const t=e.data.toolInput;return n.actionType==="bash"?Xn(t)||e.data.actionDetail||n.actionDetail:n.actionType==="read_file"||n.actionType==="edit_file"||n.actionType==="write_file"?Vn(t)||e.data.actionDetail||n.actionDetail:e.data.actionDetail||n.actionDetail}function Xn(e){const n=we(e?.command,e?.cmd);if(n)return n;if(Array.isArray(e?.argv)){const t=e.argv.map(r=>String(r??"").trim()).filter(Boolean).join(" ");return t?F(t):void 0}return we(e?.args)}function Vn(e){const n=gt(e?.paths);return n.length>0?n.length===1?n[0]:`${n.length}\u4E2A\u6587\u4EF6: ${n.join(", ")}`:we(e?.file_path,e?.filePath,e?.path,e?.target_file,e?.targetFile)}function we(...e){for(const n of e){if(typeof n=="string"&&n.trim())return F(n.trim());if(Array.isArray(n)){const t=gt(n)[0];if(t)return t}}}function gt(e){return Array.isArray(e)?e.map(n=>typeof n=="string"?n.trim():"").filter(Boolean).map(n=>F(n)):[]}function Jn(e){if(!(!e||Object.keys(e).length===0))try{const n=F(JSON.stringify(e,null,2));return n.length>8e3?`${n.slice(0,8e3)}
38
- ...\uFF08\u8F93\u5165\u53C2\u6570\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`:n}catch{return}}function Qn(e,n){return String(n||"").trim().toLowerCase()!=="waiting_input"?!1:e.type==="thinking"||e.type==="text_delta"}function Zn(e,n){if(!Qn(e,n)){if(e.type==="background_command_completed")return{status:"tool_result",actionInfo:{actionType:"background_command",actionLabel:"\u540E\u53F0\u547D\u4EE4",actionDetail:"background_command_completed"}};if(e.type==="thinking"||e.type==="text_delta")return{status:"thinking"};if(e.type==="tool_use_start"){const t=Ce(e.data.toolName,e.data.toolInput),r=pt(e,t),s=Jn(e.data.toolInput);return e.data.actionType==="idle"||t.actionType==="idle"?{status:"waiting_input",actionInfo:{actionType:e.data.actionType||t.actionType,actionLabel:e.data.actionLabel||t.actionLabel,actionDetail:r||e.data.actionDetail||t.actionDetail||e.data.toolName,actionInput:s,actionId:e.data.actionId||e.data.toolUseId}}:{status:"tool_using",actionInfo:{actionType:e.data.actionType||t.actionType,actionLabel:e.data.actionLabel||t.actionLabel,actionDetail:r||e.data.actionDetail||t.actionDetail||e.data.toolName,actionInput:s,actionId:e.data.actionId||e.data.toolUseId,...e.data.batchId?{parentId:e.data.batchId}:{}}}}if(e.type==="turn_complete")return{status:"waiting_input",actionInfo:e.data.usage?{usage:e.data.usage}:void 0};if(e.type==="error")return{status:"error"};if(e.type==="context_compaction")return{status:"compacting",actionInfo:{actionType:"context_compaction",actionLabel:e.data.actionLabel,actionDetail:e.data.actionDetail,...e.data.actionId?{actionId:e.data.actionId}:{},...e.data.parentId?{parentId:e.data.parentId}:{}}};if(e.type==="runtime_capabilities")return{status:n||"waiting_input",actionInfo:{actionType:"runtime_capabilities",actionLabel:e.data.actionLabel||"\u8FD0\u884C\u65F6\u80FD\u529B",actionDetail:e.data.actionDetail}};if(e.type==="tool_batch_start"){const t=e.data.batchId;return t?{status:"tool_result",actionInfo:{actionType:"tool_batch",actionLabel:"\u5E76\u884C\u6267\u884C\u5DE5\u5177",actionDetail:e.data.actionDetail,actionId:t}}:void 0}if(e.type==="tool_batch_metrics"){const t=e.data.batchId;return t?{status:"tool_result",actionInfo:{actionType:"tool_batch",actionLabel:"\u5E76\u884C\u6267\u884C\u5DE5\u5177",actionId:t,batchId:t,...e.data.batchMetrics?{batchMetrics:e.data.batchMetrics}:{}}}:void 0}}}const x=new Map,me=new Map,pe=new Map;async function De(e){const{entry:n,sessionId:t,actionInfo:r,timestamp:s,sourceEventType:o,backoffBaseMs:i,label:a}=e,c={runtimeAccessToken:n.runtimeAccessToken,schedulerBaseUrl:n.schedulerBaseUrl},u=3;for(let d=0;d<u;d++){if(await $(n.agentId,t,"tool_result",r,void 0,c,s,o)!==void 0)return;d<u-1&&await new Promise(p=>setTimeout(p,i*(d+1)))}l.warn(`[Runtime] ${a} tool_result sendStatus retry exhausted (result may be lost): agentId=${n.agentId}`)}const ee=new Map,er=20,tr=500,nr=3e4;async function ge(e,n=nr,t=2){for(let r=0;r<=t;r++){const s=new AbortController;let o;try{const i=e(s.signal);i.catch(()=>{}),await Promise.race([i,new Promise((a,c)=>{o=setTimeout(()=>{s.abort(),c(new Error(`sendOutput timeout after ${n}ms`))},n)})]),o&&clearTimeout(o);return}catch(i){o&&clearTimeout(o);const a=i instanceof Error?i.message:String(i);if(r<t){const c=1e3*(r+1);l.warn(`sendOutput attempt ${r+1}/${t+1} failed (${a}), retrying in ${c}ms...`),await new Promise(u=>setTimeout(u,c));continue}l.warn(`sendOutput failed after ${t+1} attempts (${a}), giving up to unblock serial queue`)}}}async function rr(e,n,t,r,s,o){try{await K(e,n,t,r,{...s,sourceEventType:"compaction_summary",skipLocalPersist:!0},o)}catch(i){l.debug("Compaction summary realtime push failed (non-persisted)",{agentId:e,sessionId:t,error:i instanceof Error?i.message:String(i)})}}const ye=new Map,or=120,sr=120;function ir(e,n,t,r){const s=`${n}:compaction_summary`;let o=ye.get(s);if(o||(o={buffer:"",timer:null,entry:e,sessionId:n,seq:r},ye.set(s,o)),o.buffer+=t,o.seq=r,o.entry=e,o.buffer.length>=or){Oe(n);return}o.timer||(o.timer=setTimeout(()=>Oe(n),sr))}function Oe(e){const n=`${e}:compaction_summary`,t=ye.get(n);if(!t)return;t.timer&&(clearTimeout(t.timer),t.timer=null);const r=t.buffer;ye.delete(n),r&&rr(t.entry.agentId,r,t.sessionId,t.seq,{sourceEventType:"compaction_summary",skipLocalPersist:!0},{runtimeAccessToken:t.entry.runtimeAccessToken,schedulerBaseUrl:t.entry.schedulerBaseUrl})}function Se(e,n){const t=n?`${e}:${n}`:void 0;let r,s;if(t)r=ee.get(t),s=t;else{const g=[];for(const[k,E]of ee)k.startsWith(e+":")&&E.buffer&&g.push(E.sourceEventType);for(const k of g)Se(e,k);return}if(!r||!r.buffer)return;r.timer=null;const o=r.buffer,i=r.seq,a=r.entry,c=r.sourceEventType;r.buffer="",s&&ee.delete(s);const u={sourceEventType:c,logCategory:"acode"},d={runtimeAccessToken:a.runtimeAccessToken,schedulerBaseUrl:a.schedulerBaseUrl},p=(x.get(e)??Promise.resolve()).then(()=>ge(g=>K(a.agentId,o,e,i,u,d,g)),()=>ge(g=>K(a.agentId,o,e,i,u,d,g)));x.set(e,p),p.finally(()=>{x.get(e)===p&&x.delete(e)})}function ar(e,n){const t=vn(e);if(!t)return;n.seq+=1;const r=n.seq,s=Kn(e),o={runtimeAccessToken:n.runtimeAccessToken,schedulerBaseUrl:n.schedulerBaseUrl};if(e.type==="compaction_summary"){ir(n,e.sessionId,t,r);return}if((e.type==="command_output"||e.type==="text_delta"||e.type==="thinking")&&t.length<er){const c=`${e.sessionId}:${e.type}`;let u=ee.get(c);if(u||(u={buffer:"",seq:0,timer:null,entry:n,sourceEventType:e.type}),u.buffer+=t,u.seq=r,u.entry=n,!u.timer){const d=e.sessionId,m=e.type;u.timer=setTimeout(()=>Se(d,m),tr)}ee.set(c,u);return}Se(e.sessionId);const a=(x.get(e.sessionId)??Promise.resolve()).then(()=>ge(c=>K(n.agentId,t,e.sessionId,r,s,o,c)),()=>ge(c=>K(n.agentId,t,e.sessionId,r,s,o,c)));x.set(e.sessionId,a),a.finally(()=>{x.get(e.sessionId)===a&&x.delete(e.sessionId)})}function yt(e){return Et(e)}let St=!1;function cr(){St||(Ct(T,ur),Pt(),St=!0)}function ur(e,n){e.on("event",t=>{const r=f.get(t.sessionId);if(r){if(t.type==="tool_use_start"?Yt(r.sessionId,t.data.toolUseId||t.data.actionId,t.data.toolInput,t.data.toolName,r.workspacePath):t.type==="tool_use_end"&&Gt(t,{sessionId:r.sessionId,agentId:r.agentId,workspacePath:r.workspacePath,providerId:r.providerId}),l.info(`[${n.displayName} Adapter] Event: ${t.type} for session ${t.sessionId}`),!(t.type==="thinking"||t.type==="text_delta"||t.type==="tool_use_start"||t.type==="context_compaction"||t.type==="compaction_summary"||t.type==="ai_request"||t.type==="error")){t.type==="runtime_capabilities"&&t.data.actionDetail&&(r.cachedCapabilitiesActionDetail=t.data.actionDetail);const i=Zn(t,r.currentRuntimeStatus);i&&$(r.agentId,t.sessionId,i.status,i.actionInfo,V(i.actionInfo),{runtimeAccessToken:r.runtimeAccessToken,schedulerBaseUrl:r.schedulerBaseUrl},t.timestamp?new Date(t.timestamp).getTime():void 0,t.type)}t.type==="context_compaction"&&Oe(t.sessionId),ar(t,r);const o=Fn(t);if(o){const i=t.timestamp?new Date(t.timestamp).getTime():void 0,a=String(t.data?.toolName||"").toLowerCase()==="browser_launch",c=t.type==="tool_use_end"&&String(t.data?.rawToolName||t.data?.toolName||"").toLowerCase().replace(/[_-]/g,"").includes("todowrite");De(a?{entry:r,sessionId:t.sessionId,actionInfo:o,timestamp:i,sourceEventType:t.type,backoffBaseMs:3e3,label:"browser_launch"}:c?{entry:r,sessionId:t.sessionId,actionInfo:o,timestamp:i,sourceEventType:t.type,backoffBaseMs:1e3,label:"todo_write"}:{entry:r,sessionId:t.sessionId,actionInfo:o,timestamp:i,sourceEventType:t.type,backoffBaseMs:1e3,label:"tool_result"})}}}),e.on("status-change",(t,r,s)=>{const o=f.get(t);if(o){Se(t),r==="thinking"||r==="tool_using"||r==="compacting"?sn(t):M(t);const i=yn(r,s);o.currentRuntimeStatus=i.status;const a=o.currentRuntimeActionDetail??"",c=a.includes("poll_message")||a.includes("get_message"),d=!(i.actionInfo?.actionType==="ai_request")&&(i.status==="thinking"||i.status==="waiting_input")&&(o.currentRuntimeActionType==="idle"||o.currentRuntimeActionType==="mcp")&&c;(i.actionInfo?.actionType||!d)&&(o.currentRuntimeActionType=i.actionInfo?.actionType,o.currentRuntimeActionLabel=i.actionInfo?.actionLabel,o.currentRuntimeActionDetail=i.actionInfo?.actionDetail,o.currentRuntimeActionInput=i.actionInfo?.actionInput),l.info(`[${n.displayName} Adapter] Status changed: ${i.status} for agent ${o.agentId}`,i.actionInfo||""),tn(t,{runtimeStatus:i.status,runtimeActionType:o.currentRuntimeActionType,runtimeActionLabel:o.currentRuntimeActionLabel,runtimeActionDetail:o.currentRuntimeActionDetail});const m=In({actionInfo:i.actionInfo,usage:V(i.actionInfo)}),p=m?void 0:i.actionInfo?.actionType?i.actionInfo:o.currentRuntimeActionType?{actionType:o.currentRuntimeActionType,actionLabel:o.currentRuntimeActionLabel??"",actionDetail:o.currentRuntimeActionDetail,actionInput:o.currentRuntimeActionInput}:void 0;if(i.status==="compacting"){const k=(me.get(t)??Promise.resolve()).then(async()=>{for(let y=0;y<=2;y++){if(await $(o.agentId,t,i.status,p,V(i.actionInfo),{runtimeAccessToken:o.runtimeAccessToken,schedulerBaseUrl:o.schedulerBaseUrl})!==void 0)return;y<2&&(l.warn(`[${n.displayName}] compaction sendStatus attempt ${y+1} failed (HTTP), retrying in ${1e3*(y+1)}ms...`),await new Promise(_=>setTimeout(_,1e3*(y+1))))}l.warn(`[${n.displayName}] compaction sendStatus failed after 3 attempts, event may be lost`)}).catch(E=>{l.warn(`[${n.displayName}] compaction status chain error:`,E)});me.set(t,k),k.finally(()=>{me.get(t)===k&&me.delete(t)})}else{const g=d&&!i.actionInfo?.actionType||m;if(Sn({status:i.status,actionInfo:i.actionInfo,restoredActionInfo:p,currentRuntimeActionType:o.currentRuntimeActionType,shouldPreservePrevAction:d})){const y=(pe.get(t)??Promise.resolve()).then(async()=>{for(let _=0;_<=2;_++){if(await $(o.agentId,t,i.status,g?void 0:p,V(i.actionInfo),{runtimeAccessToken:o.runtimeAccessToken,schedulerBaseUrl:o.schedulerBaseUrl})!==void 0)return;_<2&&await new Promise(W=>setTimeout(W,1e3*(_+1)))}l.warn(`[${n.displayName}] idle tool sendStatus failed after 3 attempts, status may be stale (frontend will fall back to timeline tool_use event)`)}).catch(L=>{l.warn(`[${n.displayName}] idle status chain error:`,L)});pe.set(t,y),y.finally(()=>{pe.get(t)===y&&pe.delete(t)})}else $(o.agentId,t,i.status,g?void 0:p,V(i.actionInfo),{runtimeAccessToken:o.runtimeAccessToken,schedulerBaseUrl:o.schedulerBaseUrl})}if(i.status==="waiting_input"&&o.cachedCapabilitiesActionDetail){const g=o.cachedCapabilitiesActionDetail;o.cachedCapabilitiesActionDetail=void 0,l.info(`[${n.displayName} Adapter] Re-sending cached runtime_capabilities for agent ${o.agentId} (session stabilized to waiting_input)`),$(o.agentId,t,"waiting_input",{actionType:"runtime_capabilities",actionLabel:"\u8FD0\u884C\u65F6\u80FD\u529B",actionDetail:g},void 0,{runtimeAccessToken:o.runtimeAccessToken,schedulerBaseUrl:o.schedulerBaseUrl})}}}),e.on("ask-user-question",t=>{const r=f.get(t.sessionId);r&&(l.info(`[${n.displayName} Adapter] AskUserQuestion for agent ${r.agentId}`),Xt(r.agentId,t.sessionId,Array.isArray(t.questions)?t.questions:[],{runtimeAccessToken:r.runtimeAccessToken,schedulerBaseUrl:r.schedulerBaseUrl},t.toolCallId))}),e.on("tool-permission-request",t=>{const r=f.get(t.sessionId);r&&t.requestId&&(l.info(`[${n.displayName} Adapter] Tool permission request (${t.capability}) for agent ${r.agentId}`),Vt(r.agentId,t.sessionId,{requestId:t.requestId,capability:t.capability,...t.detail||{}},{runtimeAccessToken:r.runtimeAccessToken,schedulerBaseUrl:r.schedulerBaseUrl}))}),e.on("permission-request",t=>{const r=f.get(t.sessionId);if(r){l.info(`[${n.displayName} Adapter] Permission request: ${t.toolName} for agent ${r.agentId}`);const s=t.toolInput?F(JSON.stringify(t.toolInput).slice(0,400)):void 0;$(r.agentId,t.sessionId,"waiting_input",{actionType:"other",actionLabel:"\u6743\u9650\u786E\u8BA4",actionDetail:s||t.toolName},void 0,{runtimeAccessToken:r.runtimeAccessToken,schedulerBaseUrl:r.schedulerBaseUrl})}})}h.post("/start",I,async(e,n)=>{const{agentId:t,workspacePath:r,mode:s="sdk"}=e.body||{};if(!t||!r){n.status(400).json({error:"agentId and workspacePath are required"});return}const o=String(e.body?.schedulerBaseUrl||"").trim()||String(e.header("x-bridge-tunnel-source")||"").trim()||je(Ze(e))||void 0;if(Kt({agentId:String(t),workspacePath:String(r),serverUrl:e.body?.serverUrl||o,runtimeAccessToken:e.body?.runtimeAccessToken,userId:e.body?.userId,schedulerBaseUrl:o}),e.body?.runtimeFeatures!==null&&e.body?.runtimeFeatures!==void 0&&(xt(String(t),e.body.runtimeFeatures),l.info(`[Runtime] agent ${t} \u542F\u52A8\u4E0B\u53D1\u80FD\u529B\u5F00\u5173: ${JSON.stringify(jt(String(t)))}`)),e.body?.inheritedFeatures!==null&&e.body?.inheritedFeatures!==void 0&&(Nt(String(t),e.body.inheritedFeatures),l.info(`[Runtime] agent ${t} \u542F\u52A8\u4E0B\u53D1\u7EE7\u627F\u4E09\u6001\u5C42: ${JSON.stringify(Ft(String(t)))}`)),e.body?.capabilities!==void 0&&Ut(String(t),e.body.capabilities),e.body?.capabilitiesInherited!==void 0&&Bt(String(t),e.body.capabilitiesInherited),e.body?.envVars!==null&&e.body?.envVars!==void 0&&typeof e.body.envVars=="object"&&(Ht(String(t),e.body.envVars),l.info(`[Runtime] agent ${t} \u4E0B\u53D1\u6709\u6548\u73AF\u5883\u53D8\u91CF: ${Object.keys(e.body.envVars).length} \u9879 \u2192 \u5DE5\u5177\u5B50\u8FDB\u7A0B + MCP spec`)),e.body?.agentMeta!==void 0&&(qt(String(t),e.body.agentMeta),l.info(`[Runtime] agent ${t} \u4E0B\u53D1 agent \u5143\u4FE1\u606F: ${JSON.stringify(e.body.agentMeta)} \u2192 MCP \u4FDD\u7559\u952E\u6CE8\u5165`)),e.body?.changeCacheRetentionDays!==void 0&&(Dt(e.body.changeCacheRetentionDays),l.info(`[Runtime] agent ${t} \u4E0B\u53D1\u53D8\u66F4\u7F13\u5B58\u4FDD\u7559\u5929\u6570: ${e.body.changeCacheRetentionDays??"\u4E0D\u6E05\u7406"}`)),e.body?.snapshotRetentionDays!==void 0){const i=Re();Jt(e.body.snapshotRetentionDays),l.info(`[Runtime] agent ${t} \u4E0B\u53D1\u5FEB\u7167\u4FDD\u7559\u5929\u6570: ${e.body.snapshotRetentionDays??"\u4E0D\u6E05\u7406"}`),i!==Re()&&Lt(Re())}if(e.body?.logRetentionDays!==void 0){const i=Math.min(Number(e.body.logRetentionDays)||0,7);i>0&&(vt(i),l.info(`[Runtime] agent ${t} \u4E0B\u53D1\u65E5\u5FD7\u4FDD\u7559\u5929\u6570: ${i}`))}s&&s!=="sdk"&&console.warn(`[Runtime] Unsupported runtime mode "${s}" requested for agent ${t}; starting SDK session instead.`),await dr(e,n)});async function dr(e,n){const{agentId:t,workspacePath:r,command:s,projectRoot:o,autoAccept:i=!0,initialPrompt:a,systemPrompt:c,globalPrompt:u,rolePrompt:d,memory:m,resumeContext:p,resumeTranscript:g,mcpConfigPath:k,extraMcpServers:E,envOverrides:y,idleInputAutoCommand:L,nonInputAutoCommand:_,model:w,instanceAiConfig:W,subAgentModel:Ie,subAgentEffort:he,scopeKey:Pe,browserAllowPrivate:Le}=e.body||{},z=ln(g);l.info(`[HIBERNATE-IMPORT] \u542F\u52A8\u8BF7\u6C42\u643A\u5E26\u4F11\u7720\u6062\u590D: agentId=${String(t||"").trim()||"?"} resumeContext=${typeof p=="string"?`${p.length}\u5B57`:"\u65E0"} resumeTranscript\u539F\u59CB=${typeof g=="string"?`${g.length}\u5B57`:typeof g} \u89E3\u6790\u7ED3\u679C=${z?`${z.length}\u6761`:"null"}`);const G=rn();G.log({level:"info",category:"launch",message:"startSdkSession: \u6536\u5230\u542F\u52A8\u8BF7\u6C42",source:"bridge",agentId:String(t||"").trim()||void 0,details:{reqBodyKeys:Object.keys(e.body||{}),perInstanceAiConfig:W?ce(W):null,perAgentModel:w??null}});let R=null;const A=String(t||"").trim(),Ae=String(e.body?.runtimeAccessToken||"").trim()||void 0,B=String(e.body?.schedulerBaseUrl||"").trim()||String(e.header("x-bridge-tunnel-source")||"").trim()||je(Ze(e))||void 0;B?l.info(`[startSdkSession] \u56DE\u8C03\u76EE\u6807 server: ${B} (agentId=${A})`):l.warn(`[startSdkSession] \u672A\u89E3\u6790\u5230 schedulerBaseUrl\uFF0C\u5C06\u56DE\u9000\u5230\u9ED8\u8BA4\u5730\u5740 (agentId=${A})`);try{if(cr(),!A){n.status(400).json({error:"agentId is required"});return}const j=dt(A);if(j){n.json(await wn(j));return}const b=await Qt(A);if(b){const O=await Dn(b);if(!O.reusable)console.warn(`[Runtime] Ignoring stale persisted SDK session for agentId=${A}, sessionId=${b.sessionId}, reason=${O.reason}`),await H(b.sessionId);else{const P=Z(b.runtimeStatus,b.runtimeStatus,b.runtimeActionType);n.json({sessionId:b.sessionId,status:P,runtimeStatus:P,runtimeActionType:b.runtimeActionType,runtimeActionLabel:b.runtimeActionLabel,runtimeActionDetail:b.runtimeActionDetail,agentId:b.agentId,workspacePath:b.workspacePath,command:b.command,mode:b.mode||"sdk",pid:b.pid,reused:!0,persistedOnly:!0});return}}if(q.has(A)){n.status(409).json({error:"SDK session is already starting for this agent"});return}q.add(A);const D=yt(s),It=T.get(D);R=kt();const ht=D==="claude-code"?await Un():null,te=ft(D==="claude-code"?ht:null,y),Y=D==="acode"?w?String(w).trim():void 0:(()=>{const O=w?String(w).trim():void 0,P=te.model?String(te.model).trim():void 0;return O||P})();G.log({level:"info",category:"resolve",message:"\u6A21\u578B\u89E3\u6790\u7ED3\u679C",source:"bridge",agentId:A,sessionId:R??void 0,details:{perAgentModel:w??null,globalModel:te.model??null,resolvedModel:Y??null,providerId:D,note:D==="acode"?"adapter handles full priority":"request > global"}});const Te={...te.envOverrides};Y&&(Te.ANTHROPIC_MODEL=Y,Te.CODEX_MODEL=Y);let X,_e=k;if(D==="acode"){const O=W||{},P=await Mt({apiOverrides:ot(O)??void 0,agentId:A,sessionId:R??void 0,runtimeBridgeBaseUrl:B});X=P.instanceConfig.config,_e=P.perInstanceConfigPath,G.log({level:"info",category:"apply",message:"prepareAcodeInstanceConfig \u5B8C\u6210",source:"bridge",agentId:A,sessionId:R??void 0,details:{sanitizedApiOverrides:(()=>{const N=ot(O);return N?ce(N):null})(),resolvedInstanceAiConfig:X?ce(X):null,perInstanceConfigPath:_e,instanceConfigSources:P.instanceConfig.source??null}})}let Me=c||void 0,be,ke,ne;const re=typeof p=="string"&&p.trim()?_t(p):void 0;if(D==="acode")if(be=typeof u=="string"&&u.trim()||void 0,ke=typeof d=="string"&&d.trim()||void 0,typeof m=="string"&&m.trim())ne=m.trim();else{const O=await $t(r,{schedulerBaseUrl:B,runtimeAccessToken:Ae,agentId:A});O&&(ne=O,l.info(`[startSdkSession] Auto-loaded memories for ACode agent ${A}`))}else if(typeof u=="string"&&u.trim()||typeof d=="string"&&d.trim()||typeof m=="string"&&m.trim()||re!==void 0){const P=[u,d,m,re,c].filter(N=>typeof N=="string"&&N.trim().length>0).map(N=>N.trim());Me=P.length>0?P.join(`
37
+ `:void 0}function zn(e){const n=Yn(e);return{sourceEventType:e.type,logCategory:"acode",...Gn(e),...n?{logLevel:Wn(e),logMessage:n}:{}}}function Wn(e){return e.type==="error"?"error":e.type==="command_output"&&e.data.stream==="stderr"?"warn":"info"}function Gn(e){return e.type!=="command_output"?{}:{...typeof e.data.stream=="string"?{stream:e.data.stream}:{},...typeof e.data.sequence=="number"?{sequence:e.data.sequence}:{},...typeof e.data.cwd=="string"?{cwd:e.data.cwd}:{},...typeof e.data.commandFilePath=="string"?{commandFilePath:e.data.commandFilePath}:{},...typeof e.data.commandLineCount=="number"?{commandLineCount:e.data.commandLineCount}:{}}}function Yn(e){if(e.type==="ai_request"){const n=e.data.model||"unknown-model",t=e.data.endpoint?` @ ${e.data.endpoint}`:"",o=typeof e.data.toolCount=="number"?`, tools=${e.data.toolCount}`:"";return`AI request started: ${n}${t}${o}`}if(e.type==="tool_use_start")return mt(e,"\u5F00\u59CB");if(e.type==="tool_use_end")return mt(e,"\u5B8C\u6210");if(e.type==="command_output")return Vn(e);if(e.type==="turn_complete")return`Turn completed${e.data.finishReason?`, finish=${e.data.finishReason}`:""}`;if(e.type==="session_complete")return`Session completed: exitCode=${e.data.exitCode??0}`;if(e.type==="error")return e.data.text||"ACode runtime error"}const Xn=/\x1b\[[0-9;?]*[a-zA-Z]/g;function Jn(e){return e.replace(Xn,"")}function Vn(e){const n=typeof e.data.stream=="string"?e.data.stream:"mixed",t=typeof e.data.sequence=="number"?` #${e.data.sequence}`:"",o=Jn(String(e.data.text||"")).replace(/\s+/g," ").trim(),s=o.length>240?`${o.slice(0,240)}...`:o;return`\u547D\u4EE4\u8F93\u51FA(${n}${t}): ${s||"(empty)"}`}function mt(e,n){const t=$e(e.data.toolName,e.data.toolInput),o=e.data.actionLabel||t.actionLabel||"\u8C03\u7528\u5DE5\u5177",s=gt(e,t);return s?`${n}${o}: ${s}`:`${n}${o}: ${e.data.actionDetail||e.data.toolName||"tool"}`}function gt(e,n){const t=e.data.toolInput;return n.actionType==="bash"?Qn(t)||e.data.actionDetail||n.actionDetail:n.actionType==="read_file"||n.actionType==="edit_file"||n.actionType==="write_file"?Zn(t)||e.data.actionDetail||n.actionDetail:e.data.actionDetail||n.actionDetail}function Qn(e){const n=Oe(e?.command,e?.cmd);if(n)return n;if(Array.isArray(e?.argv)){const t=e.argv.map(o=>String(o??"").trim()).filter(Boolean).join(" ");return t?K(t):void 0}return Oe(e?.args)}function Zn(e){const n=yt(e?.paths);return n.length>0?n.length===1?n[0]:`${n.length}\u4E2A\u6587\u4EF6: ${n.join(", ")}`:Oe(e?.file_path,e?.filePath,e?.path,e?.target_file,e?.targetFile)}function Oe(...e){for(const n of e){if(typeof n=="string"&&n.trim())return K(n.trim());if(Array.isArray(n)){const t=yt(n)[0];if(t)return t}}}function yt(e){return Array.isArray(e)?e.map(n=>typeof n=="string"?n.trim():"").filter(Boolean).map(n=>K(n)):[]}function eo(e){if(!(!e||Object.keys(e).length===0))try{const n=K(JSON.stringify(e,null,2));return n.length>8e3?`${n.slice(0,8e3)}
38
+ ...\uFF08\u8F93\u5165\u53C2\u6570\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`:n}catch{return}}function to(e,n){return String(n||"").trim().toLowerCase()!=="waiting_input"?!1:e.type==="thinking"||e.type==="text_delta"}function no(e,n){if(!to(e,n)){if(e.type==="background_command_completed")return{status:"tool_result",actionInfo:{actionType:"background_command",actionLabel:"\u540E\u53F0\u547D\u4EE4",actionDetail:"background_command_completed"}};if(e.type==="thinking"||e.type==="text_delta")return{status:"thinking"};if(e.type==="tool_use_start"){const t=$e(e.data.toolName,e.data.toolInput),o=gt(e,t),s=eo(e.data.toolInput);return e.data.actionType==="idle"||t.actionType==="idle"?{status:"waiting_input",actionInfo:{actionType:e.data.actionType||t.actionType,actionLabel:e.data.actionLabel||t.actionLabel,actionDetail:o||e.data.actionDetail||t.actionDetail||e.data.toolName,actionInput:s,actionId:e.data.actionId||e.data.toolUseId}}:{status:"tool_using",actionInfo:{actionType:e.data.actionType||t.actionType,actionLabel:e.data.actionLabel||t.actionLabel,actionDetail:o||e.data.actionDetail||t.actionDetail||e.data.toolName,actionInput:s,actionId:e.data.actionId||e.data.toolUseId,...e.data.batchId?{parentId:e.data.batchId}:{}}}}if(e.type==="turn_complete")return{status:"waiting_input",actionInfo:e.data.usage?{usage:e.data.usage}:void 0};if(e.type==="error")return{status:"error"};if(e.type==="context_compaction")return{status:"compacting",actionInfo:{actionType:"context_compaction",actionLabel:e.data.actionLabel,actionDetail:e.data.actionDetail,...e.data.actionId?{actionId:e.data.actionId}:{},...e.data.parentId?{parentId:e.data.parentId}:{}}};if(e.type==="runtime_capabilities")return{status:n||"waiting_input",actionInfo:{actionType:"runtime_capabilities",actionLabel:e.data.actionLabel||"\u8FD0\u884C\u65F6\u80FD\u529B",actionDetail:e.data.actionDetail}};if(e.type==="tool_batch_start"){const t=e.data.batchId;return t?{status:"tool_result",actionInfo:{actionType:"tool_batch",actionLabel:"\u5E76\u884C\u6267\u884C\u5DE5\u5177",actionDetail:e.data.actionDetail,actionId:t}}:void 0}if(e.type==="tool_batch_metrics"){const t=e.data.batchId;return t?{status:"tool_result",actionInfo:{actionType:"tool_batch",actionLabel:"\u5E76\u884C\u6267\u884C\u5DE5\u5177",actionId:t,batchId:t,...e.data.batchMetrics?{batchMetrics:e.data.batchMetrics}:{}}}:void 0}}}const U=new Map,me=new Map,ge=new Map;async function Me(e){const{entry:n,sessionId:t,actionInfo:o,timestamp:s,sourceEventType:r,backoffBaseMs:i,label:a}=e,c={runtimeAccessToken:n.runtimeAccessToken,schedulerBaseUrl:n.schedulerBaseUrl},u=3;for(let d=0;d<u;d++){if(await R(n.agentId,t,"tool_result",o,void 0,c,s,r)!==void 0)return;d<u-1&&await new Promise(m=>setTimeout(m,i*(d+1)))}l.warn(`[Runtime] ${a} tool_result sendStatus retry exhausted (result may be lost): agentId=${n.agentId}`)}const ee=new Map,oo=20,ro=500,so=3e4;async function ye(e,n=so,t=2){for(let o=0;o<=t;o++){const s=new AbortController;let r;try{const i=e(s.signal);i.catch(()=>{}),await Promise.race([i,new Promise((a,c)=>{r=setTimeout(()=>{s.abort(),c(new Error(`sendOutput timeout after ${n}ms`))},n)})]),r&&clearTimeout(r);return}catch(i){r&&clearTimeout(r);const a=i instanceof Error?i.message:String(i);if(o<t){const c=1e3*(o+1);l.warn(`sendOutput attempt ${o+1}/${t+1} failed (${a}), retrying in ${c}ms...`),await new Promise(u=>setTimeout(u,c));continue}l.warn(`sendOutput failed after ${t+1} attempts (${a}), giving up to unblock serial queue`)}}}async function io(e,n,t,o,s,r){try{await H(e,n,t,o,{...s,sourceEventType:"compaction_summary",skipLocalPersist:!0},r)}catch(i){l.debug("Compaction summary realtime push failed (non-persisted)",{agentId:e,sessionId:t,error:i instanceof Error?i.message:String(i)})}}const Ie=new Map,ao=120,co=120;function uo(e,n,t,o){const s=`${n}:compaction_summary`;let r=Ie.get(s);if(r||(r={buffer:"",timer:null,entry:e,sessionId:n,seq:o},Ie.set(s,r)),r.buffer+=t,r.seq=o,r.entry=e,r.buffer.length>=ao){Pe(n);return}r.timer||(r.timer=setTimeout(()=>Pe(n),co))}function Pe(e){const n=`${e}:compaction_summary`,t=Ie.get(n);if(!t)return;t.timer&&(clearTimeout(t.timer),t.timer=null);const o=t.buffer;Ie.delete(n),o&&io(t.entry.agentId,o,t.sessionId,t.seq,{sourceEventType:"compaction_summary",skipLocalPersist:!0},{runtimeAccessToken:t.entry.runtimeAccessToken,schedulerBaseUrl:t.entry.schedulerBaseUrl})}function Se(e,n){const t=n?`${e}:${n}`:void 0;let o,s;if(t)o=ee.get(t),s=t;else{const g=[];for(const[b,E]of ee)b.startsWith(e+":")&&E.buffer&&g.push(E.sourceEventType);for(const b of g)Se(e,b);return}if(!o||!o.buffer)return;o.timer=null;const r=o.buffer,i=o.seq,a=o.entry,c=o.sourceEventType;o.buffer="",s&&ee.delete(s);const u={sourceEventType:c,logCategory:"acode"},d={runtimeAccessToken:a.runtimeAccessToken,schedulerBaseUrl:a.schedulerBaseUrl},m=(U.get(e)??Promise.resolve()).then(()=>ye(g=>H(a.agentId,r,e,i,u,d,g)),()=>ye(g=>H(a.agentId,r,e,i,u,d,g)));U.set(e,m),m.finally(()=>{U.get(e)===m&&U.delete(e)})}function lo(e,n){const t=qn(e);if(!t)return;n.seq+=1;const o=n.seq,s=zn(e),r={runtimeAccessToken:n.runtimeAccessToken,schedulerBaseUrl:n.schedulerBaseUrl};if(e.type==="compaction_summary"){uo(n,e.sessionId,t,o);return}if((e.type==="command_output"||e.type==="text_delta"||e.type==="thinking")&&t.length<oo){const c=`${e.sessionId}:${e.type}`;let u=ee.get(c);if(u||(u={buffer:"",seq:0,timer:null,entry:n,sourceEventType:e.type}),u.buffer+=t,u.seq=o,u.entry=n,!u.timer){const d=e.sessionId,p=e.type;u.timer=setTimeout(()=>Se(d,p),ro)}ee.set(c,u);return}Se(e.sessionId);const a=(U.get(e.sessionId)??Promise.resolve()).then(()=>ye(c=>H(n.agentId,t,e.sessionId,o,s,r,c)),()=>ye(c=>H(n.agentId,t,e.sessionId,o,s,r,c)));U.set(e.sessionId,a),a.finally(()=>{U.get(e.sessionId)===a&&U.delete(e.sessionId)})}function It(e){return Et(e)}let St=!1;function fo(){St||(Ct(A,po),Mt(),St=!0)}function po(e,n){e.on("event",t=>{const o=f.get(t.sessionId);if(o){if(t.type==="tool_use_start"?Yt(o.sessionId,t.data.toolUseId||t.data.actionId,t.data.toolInput,t.data.toolName,o.workspacePath):t.type==="tool_use_end"&&Gt(t,{sessionId:o.sessionId,agentId:o.agentId,workspacePath:o.workspacePath,providerId:o.providerId}),l.info(`[${n.displayName} Adapter] Event: ${t.type} for session ${t.sessionId}`),!(t.type==="thinking"||t.type==="text_delta"||t.type==="tool_use_start"||t.type==="context_compaction"||t.type==="compaction_summary"||t.type==="ai_request"||t.type==="error")){t.type==="runtime_capabilities"&&t.data.actionDetail&&(o.cachedCapabilitiesActionDetail=t.data.actionDetail);const i=no(t,o.currentRuntimeStatus);i&&R(o.agentId,t.sessionId,i.status,i.actionInfo,J(i.actionInfo),{runtimeAccessToken:o.runtimeAccessToken,schedulerBaseUrl:o.schedulerBaseUrl},t.timestamp?new Date(t.timestamp).getTime():void 0,t.type)}t.type==="context_compaction"&&Pe(t.sessionId),lo(t,o);const r=Hn(t);if(r){const i=t.timestamp?new Date(t.timestamp).getTime():void 0,a=String(t.data?.toolName||"").toLowerCase()==="browser_launch",c=t.type==="tool_use_end"&&String(t.data?.rawToolName||t.data?.toolName||"").toLowerCase().replace(/[_-]/g,"").includes("todowrite");Me(a?{entry:o,sessionId:t.sessionId,actionInfo:r,timestamp:i,sourceEventType:t.type,backoffBaseMs:3e3,label:"browser_launch"}:c?{entry:o,sessionId:t.sessionId,actionInfo:r,timestamp:i,sourceEventType:t.type,backoffBaseMs:1e3,label:"todo_write"}:{entry:o,sessionId:t.sessionId,actionInfo:r,timestamp:i,sourceEventType:t.type,backoffBaseMs:1e3,label:"tool_result"})}}}),e.on("status-change",(t,o,s)=>{const r=f.get(t);if(r){Se(t),o==="thinking"||o==="tool_using"||o==="compacting"?cn(t):P(t);const i=hn(o,s);r.currentRuntimeStatus=i.status;const a=r.currentRuntimeActionDetail??"",c=a.includes("poll_message")||a.includes("get_message"),d=!(i.actionInfo?.actionType==="ai_request")&&(i.status==="thinking"||i.status==="waiting_input")&&(r.currentRuntimeActionType==="idle"||r.currentRuntimeActionType==="mcp")&&c;(i.actionInfo?.actionType||!d)&&(r.currentRuntimeActionType=i.actionInfo?.actionType,r.currentRuntimeActionLabel=i.actionInfo?.actionLabel,r.currentRuntimeActionDetail=i.actionInfo?.actionDetail,r.currentRuntimeActionInput=i.actionInfo?.actionInput),l.info(`[${n.displayName} Adapter] Status changed: ${i.status} for agent ${r.agentId}`,i.actionInfo||""),tn(t,{runtimeStatus:i.status,runtimeActionType:r.currentRuntimeActionType,runtimeActionLabel:r.currentRuntimeActionLabel,runtimeActionDetail:r.currentRuntimeActionDetail});const p=An({actionInfo:i.actionInfo,usage:J(i.actionInfo)}),m=p?void 0:i.actionInfo?.actionType?i.actionInfo:r.currentRuntimeActionType?{actionType:r.currentRuntimeActionType,actionLabel:r.currentRuntimeActionLabel??"",actionDetail:r.currentRuntimeActionDetail,actionInput:r.currentRuntimeActionInput}:void 0;if(i.status==="compacting"){const b=(me.get(t)??Promise.resolve()).then(async()=>{for(let y=0;y<=2;y++){if(await R(r.agentId,t,i.status,m,J(i.actionInfo),{runtimeAccessToken:r.runtimeAccessToken,schedulerBaseUrl:r.schedulerBaseUrl})!==void 0)return;y<2&&(l.warn(`[${n.displayName}] compaction sendStatus attempt ${y+1} failed (HTTP), retrying in ${1e3*(y+1)}ms...`),await new Promise(k=>setTimeout(k,1e3*(y+1))))}l.warn(`[${n.displayName}] compaction sendStatus failed after 3 attempts, event may be lost`)}).catch(E=>{l.warn(`[${n.displayName}] compaction status chain error:`,E)});me.set(t,b),b.finally(()=>{me.get(t)===b&&me.delete(t)})}else{const g=d&&!i.actionInfo?.actionType||p;if(Tn({status:i.status,actionInfo:i.actionInfo,restoredActionInfo:m,currentRuntimeActionType:r.currentRuntimeActionType,shouldPreservePrevAction:d})){const y=(ge.get(t)??Promise.resolve()).then(async()=>{for(let k=0;k<=2;k++){if(await R(r.agentId,t,i.status,g?void 0:m,J(i.actionInfo),{runtimeAccessToken:r.runtimeAccessToken,schedulerBaseUrl:r.schedulerBaseUrl})!==void 0)return;k<2&&await new Promise(L=>setTimeout(L,1e3*(k+1)))}l.warn(`[${n.displayName}] idle tool sendStatus failed after 3 attempts, status may be stale (frontend will fall back to timeline tool_use event)`)}).catch(O=>{l.warn(`[${n.displayName}] idle status chain error:`,O)});ge.set(t,y),y.finally(()=>{ge.get(t)===y&&ge.delete(t)})}else R(r.agentId,t,i.status,g?void 0:m,J(i.actionInfo),{runtimeAccessToken:r.runtimeAccessToken,schedulerBaseUrl:r.schedulerBaseUrl})}if(i.status==="waiting_input"&&r.cachedCapabilitiesActionDetail){const g=r.cachedCapabilitiesActionDetail;r.cachedCapabilitiesActionDetail=void 0,l.info(`[${n.displayName} Adapter] Re-sending cached runtime_capabilities for agent ${r.agentId} (session stabilized to waiting_input)`),R(r.agentId,t,"waiting_input",{actionType:"runtime_capabilities",actionLabel:"\u8FD0\u884C\u65F6\u80FD\u529B",actionDetail:g},void 0,{runtimeAccessToken:r.runtimeAccessToken,schedulerBaseUrl:r.schedulerBaseUrl})}}}),e.on("ask-user-question",t=>{const o=f.get(t.sessionId);o&&(l.info(`[${n.displayName} Adapter] AskUserQuestion for agent ${o.agentId}`),Xt(o.agentId,t.sessionId,Array.isArray(t.questions)?t.questions:[],{runtimeAccessToken:o.runtimeAccessToken,schedulerBaseUrl:o.schedulerBaseUrl},t.toolCallId))}),e.on("tool-permission-request",t=>{const o=f.get(t.sessionId);o&&t.requestId&&(l.info(`[${n.displayName} Adapter] Tool permission request (${t.capability}) for agent ${o.agentId}`),Jt(o.agentId,t.sessionId,{requestId:t.requestId,capability:t.capability,...t.detail||{}},{runtimeAccessToken:o.runtimeAccessToken,schedulerBaseUrl:o.schedulerBaseUrl}))}),e.on("permission-request",t=>{const o=f.get(t.sessionId);if(o){l.info(`[${n.displayName} Adapter] Permission request: ${t.toolName} for agent ${o.agentId}`);const s=t.toolInput?K(JSON.stringify(t.toolInput).slice(0,400)):void 0;R(o.agentId,t.sessionId,"waiting_input",{actionType:"other",actionLabel:"\u6743\u9650\u786E\u8BA4",actionDetail:s||t.toolName},void 0,{runtimeAccessToken:o.runtimeAccessToken,schedulerBaseUrl:o.schedulerBaseUrl})}})}h.post("/start",S,async(e,n)=>{const{agentId:t,workspacePath:o,mode:s="sdk"}=e.body||{};if(!t||!o){n.status(400).json({error:"agentId and workspacePath are required"});return}const r=on(e),i=rn(e.body?.tenantId??r?.tenantId,e.body?.ownerUserId??e.body?.userId??r?.userId);if(i)try{Rt(String(t),i,String(e.body?.userId??"").trim()||void 0)}catch(c){if(c instanceof Error&&c.message.includes("agent-ownership-mismatch")){n.status(403).json({ok:!1,error:"agent-ownership-mismatch"});return}throw c}const a=String(e.body?.schedulerBaseUrl||"").trim()||String(e.header("x-bridge-tunnel-source")||"").trim()||Ke(tt(e))||void 0;if(vt({agentId:String(t),workspacePath:String(o),serverUrl:e.body?.serverUrl||a,runtimeAccessToken:e.body?.runtimeAccessToken,userId:e.body?.userId,schedulerBaseUrl:a}),e.body?.runtimeFeatures!==null&&e.body?.runtimeFeatures!==void 0&&(Ut(String(t),e.body.runtimeFeatures),l.info(`[Runtime] agent ${t} \u542F\u52A8\u4E0B\u53D1\u80FD\u529B\u5F00\u5173: ${JSON.stringify(jt(String(t)))}`)),e.body?.inheritedFeatures!==null&&e.body?.inheritedFeatures!==void 0&&(Nt(String(t),e.body.inheritedFeatures),l.info(`[Runtime] agent ${t} \u542F\u52A8\u4E0B\u53D1\u7EE7\u627F\u4E09\u6001\u5C42: ${JSON.stringify(Ft(String(t)))}`)),e.body?.capabilities!==void 0&&xt(String(t),e.body.capabilities),e.body?.capabilitiesInherited!==void 0&&Bt(String(t),e.body.capabilitiesInherited),e.body?.envVars!==null&&e.body?.envVars!==void 0&&typeof e.body.envVars=="object"&&(Ht(String(t),e.body.envVars),l.info(`[Runtime] agent ${t} \u4E0B\u53D1\u6709\u6548\u73AF\u5883\u53D8\u91CF: ${Object.keys(e.body.envVars).length} \u9879 \u2192 \u5DE5\u5177\u5B50\u8FDB\u7A0B + MCP spec`)),e.body?.agentMeta!==void 0&&(qt(String(t),e.body.agentMeta),l.info(`[Runtime] agent ${t} \u4E0B\u53D1 agent \u5143\u4FE1\u606F: ${JSON.stringify(e.body.agentMeta)} \u2192 MCP \u4FDD\u7559\u952E\u6CE8\u5165`)),e.body?.changeCacheRetentionDays!==void 0&&(Dt(e.body.changeCacheRetentionDays),l.info(`[Runtime] agent ${t} \u4E0B\u53D1\u53D8\u66F4\u7F13\u5B58\u4FDD\u7559\u5929\u6570: ${e.body.changeCacheRetentionDays??"\u4E0D\u6E05\u7406"}`)),e.body?.snapshotRetentionDays!==void 0){const c=we();Vt(e.body.snapshotRetentionDays),l.info(`[Runtime] agent ${t} \u4E0B\u53D1\u5FEB\u7167\u4FDD\u7559\u5929\u6570: ${e.body.snapshotRetentionDays??"\u4E0D\u6E05\u7406"}`),c!==we()&&Pt(we())}if(e.body?.logRetentionDays!==void 0){const c=Math.min(Number(e.body.logRetentionDays)||0,7);c>0&&(Kt(c),l.info(`[Runtime] agent ${t} \u4E0B\u53D1\u65E5\u5FD7\u4FDD\u7559\u5929\u6570: ${c}`))}s&&s!=="sdk"&&console.warn(`[Runtime] Unsupported runtime mode "${s}" requested for agent ${t}; starting SDK session instead.`),await mo(e,n)});async function mo(e,n){const{agentId:t,workspacePath:o,command:s,projectRoot:r,autoAccept:i=!0,initialPrompt:a,systemPrompt:c,globalPrompt:u,rolePrompt:d,memory:p,resumeContext:m,resumeTranscript:g,resumeTokenUsage:b,mcpConfigPath:E,extraMcpServers:y,envOverrides:O,idleInputAutoCommand:k,nonInputAutoCommand:B,model:L,instanceAiConfig:he,subAgentModel:Te,subAgentEffort:Ae,scopeKey:Le,browserAllowPrivate:Ue}=e.body||{},W=pn(g),te=mn(b);l.info(`[HIBERNATE-IMPORT] \u542F\u52A8\u8BF7\u6C42\u643A\u5E26\u4F11\u7720\u6062\u590D: agentId=${String(t||"").trim()||"?"} resumeContext=${typeof m=="string"?`${m.length}\u5B57`:"\u65E0"} resumeTranscript\u539F\u59CB=${typeof g=="string"?`${g.length}\u5B57`:typeof g} \u89E3\u6790\u7ED3\u679C=${W?`${W.length}\u6761`:"null"} resumeTokenUsage\u89E3\u6790=${te?JSON.stringify(te):"null"}`);const G=sn();G.log({level:"info",category:"launch",message:"startSdkSession: \u6536\u5230\u542F\u52A8\u8BF7\u6C42",source:"bridge",agentId:String(t||"").trim()||void 0,details:{reqBodyKeys:Object.keys(e.body||{}),perInstanceAiConfig:he?ue(he):null,perAgentModel:L??null}});let $=null;const T=String(t||"").trim(),ke=String(e.body?.runtimeAccessToken||"").trim()||void 0,j=String(e.body?.schedulerBaseUrl||"").trim()||String(e.header("x-bridge-tunnel-source")||"").trim()||Ke(tt(e))||void 0;j?l.info(`[startSdkSession] \u56DE\u8C03\u76EE\u6807 server: ${j} (agentId=${T})`):l.warn(`[startSdkSession] \u672A\u89E3\u6790\u5230 schedulerBaseUrl\uFF0C\u5C06\u56DE\u9000\u5230\u9ED8\u8BA4\u5730\u5740 (agentId=${T})`);try{if(fo(),!T){n.status(400).json({error:"agentId is required"});return}const F=ft(T);if(F){n.json(await Mn(F));return}const _=await Qt(T);if(_){const w=await Pn(_);if(!w.reusable)console.warn(`[Runtime] Ignoring stale persisted SDK session for agentId=${T}, sessionId=${_.sessionId}, reason=${w.reason}`),await q(_.sessionId);else{const D=Z(_.runtimeStatus,_.runtimeStatus,_.runtimeActionType);n.json({sessionId:_.sessionId,status:D,runtimeStatus:D,runtimeActionType:_.runtimeActionType,runtimeActionLabel:_.runtimeActionLabel,runtimeActionDetail:_.runtimeActionDetail,agentId:_.agentId,workspacePath:_.workspacePath,command:_.command,mode:_.mode||"sdk",pid:_.pid,reused:!0,persistedOnly:!0});return}}if(z.has(T)){n.status(409).json({error:"SDK session is already starting for this agent"});return}z.add(T);const M=It(s),ht=A.get(M);$=bt();const ne=jn(null,O),Y=M==="acode"?L?String(L).trim():void 0:(()=>{const w=L?String(L).trim():void 0,D=ne.model?String(ne.model).trim():void 0;return w||D})();G.log({level:"info",category:"resolve",message:"\u6A21\u578B\u89E3\u6790\u7ED3\u679C",source:"bridge",agentId:T,sessionId:$??void 0,details:{perAgentModel:L??null,globalModel:ne.model??null,resolvedModel:Y??null,providerId:M,note:M==="acode"?"adapter handles full priority":"request > global"}});const _e={...ne.envOverrides};Y&&(_e.ANTHROPIC_MODEL=Y,_e.CODEX_MODEL=Y);let X,be=E;if(M==="acode"){const w=he||{},D=await Lt({apiOverrides:it(w)??void 0,agentId:T,sessionId:$??void 0,runtimeBridgeBaseUrl:j});X=D.instanceConfig.config,be=D.perInstanceConfigPath,G.log({level:"info",category:"apply",message:"prepareAcodeInstanceConfig \u5B8C\u6210",source:"bridge",agentId:T,sessionId:$??void 0,details:{sanitizedApiOverrides:(()=>{const N=it(w);return N?ue(N):null})(),resolvedInstanceAiConfig:X?ue(X):null,perInstanceConfigPath:be,instanceConfigSources:D.instanceConfig.source??null}})}let xe=c||void 0,Ce,Ee,oe;const re=typeof m=="string"&&m.trim()?kt(m):void 0;if(M==="acode")if(Ce=typeof u=="string"&&u.trim()||void 0,Ee=typeof d=="string"&&d.trim()||void 0,typeof p=="string"&&p.trim())oe=p.trim();else{const w=await wt(o,{schedulerBaseUrl:j,runtimeAccessToken:ke,agentId:T});w&&(oe=w,l.info(`[startSdkSession] Auto-loaded memories for ACode agent ${T}`))}else if(typeof u=="string"&&u.trim()||typeof d=="string"&&d.trim()||typeof p=="string"&&p.trim()||re!==void 0){const D=[u,d,p,re,c].filter(N=>typeof N=="string"&&N.trim().length>0).map(N=>N.trim());xe=D.length>0?D.join(`
39
39
 
40
- `):void 0}const U={command:s||"acode",workingDirectory:r,agentId:A,...Pe?{scopeKey:Pe}:{},...typeof Le=="boolean"?{browserAllowPrivate:Le}:{},autoAccept:!!i,initialPrompt:a,systemPrompt:Me,...be!==void 0?{globalPrompt:be}:{},...ke!==void 0?{rolePrompt:ke}:{},...ne!==void 0?{memory:ne}:{},...re!==void 0?{resumeContext:re}:{},...D==="acode"&&Array.isArray(z)&&z.length>0?{resumeTranscript:z}:{},model:Y,mcpConfigPath:_e,...X?{instanceAiConfig:X}:{},...typeof Ie=="string"&&Ie.trim()?{subAgentModel:Ie.trim()}:{},...typeof he=="string"&&he.trim()?{subAgentEffort:he.trim()}:{},extraMcpServers:E||{},envOverrides:lt(String(t),String(r),process.env,Te,typeof o=="string"?o:void 0)};G.log({level:"info",category:"launch",message:"\u4F20\u9012\u7ED9 Adapter \u7684\u5B8C\u6574 AdapterSessionConfig",source:"bridge",agentId:A,sessionId:R,details:{adapterModel:U.model??null,adapterInstanceAiConfig:U.instanceAiConfig?ce(U.instanceAiConfig):null,adapterMcpConfigPath:U.mcpConfigPath??null}}),await G.flush(),f.set(R,{agentId:A,workspacePath:r,sessionId:R,config:U,providerId:D,seq:0,runtimeAccessToken:Ae,schedulerBaseUrl:B}),n.json({sessionId:R,status:"starting",runtimeStatus:"starting",agentId:A,workspacePath:r,command:U.command,mode:"sdk"}),lr({sessionId:R,agentId:A,config:U,adapter:It,providerId:D,idleInputAutoCommand:L,nonInputAutoCommand:_,runtimeAccessToken:Ae,requestedSchedulerBaseUrl:B})}catch(j){if(R&&(M(R),f.delete(R),v(R)),A&&q.delete(A),!n.headersSent){const b=j instanceof Error?j.message:String(j);n.status(500).json({error:`Failed to start SDK session: ${b}`})}}}async function lr(e){const{sessionId:n,agentId:t,config:r,adapter:s,providerId:o,idleInputAutoCommand:i,nonInputAutoCommand:a,runtimeAccessToken:c,requestedSchedulerBaseUrl:u}=e;try{await s.startSession(n,r),s.setIdleCommands?.(n,{idleInputCommand:i||Ne,nonInputCommand:a||""});let d;if(pn(o))try{if(await new Promise(p=>setTimeout(p,500)),d=s.getSessionPid?.(n),!d){const g=(await Wt()).find(k=>k.agentId===t||k.cwd===r.workingDirectory||k.command.includes(r.workingDirectory));g&&(d=g.pid,l.info(`[Runtime] Found SDK process PID: ${d} for agentId=${t}`))}}catch(p){console.warn(`[Runtime] Failed to get SDK PID for agentId=${t}:`,p)}const m=Z(s.getSessionStatus(n),f.get(n)?.currentRuntimeStatus,f.get(n)?.currentRuntimeActionType);await nn({sessionId:n,agentId:t,workspacePath:r.workingDirectory,command:r.command,startedAt:new Date().toISOString(),status:"running",runtimeStatus:m,mode:"sdk",pid:d,providerSessionId:s.getProviderSessionId(n)}),d&&await Ee().startProcess({agentId:t,sessionId:n,pid:d,mode:"sdk",workspacePath:r.workingDirectory,command:r.command}),await fr({agentId:t,sessionId:n,sdkPid:d,status:m,schedulerBaseUrl:u,runtimeAccessToken:c})}catch(d){M(n),f.delete(n),v(n),await H(n);const m=d instanceof Error?d.message:String(d);console.error(`[Runtime] Background SDK session startup failed for agentId=${t}: ${m}`),await mr({agentId:t,sessionId:n,schedulerBaseUrl:u,runtimeAccessToken:c,errorMessage:m})}finally{q.delete(t)}}async function fr(e){const{agentId:n,sessionId:t,sdkPid:r,status:s,schedulerBaseUrl:o,runtimeAccessToken:i}=e;if(!o||!i){l.debug(`[Runtime] notifyServerSessionReady skipped: missing schedulerBaseUrl or runtimeAccessToken for agentId=${n}`);return}const a=`${o.replace(/\/+$/,"")}/api/runtime/callback/status`;try{await xe.post(a,{agentId:n,sessionId:t,status:s,pid:r},{headers:{"X-Runtime-Token":i,"Content-Type":"application/json"},timeout:5e3}),l.debug(`[Runtime] Notified server session ready: agentId=${n}, sessionId=${t}, status=${s}`)}catch(c){const u=c instanceof Error?c.message:String(c);l.warn(`[Runtime] Failed to notify server session ready: agentId=${n}, error=${u}`)}}async function mr(e){const{agentId:n,sessionId:t,schedulerBaseUrl:r,runtimeAccessToken:s}=e;if(!r||!s)return;const o=`${r.replace(/\/+$/,"")}/api/runtime/callback/status`;try{await xe.post(o,{agentId:n,sessionId:t,status:"stopped"},{headers:{"X-Runtime-Token":s,"Content-Type":"application/json"},timeout:5e3}),l.debug(`[Runtime] Notified server session failed: agentId=${n}, sessionId=${t}`)}catch(i){const a=i instanceof Error?i.message:String(i);l.warn(`[Runtime] Failed to notify server session failed: agentId=${n}, error=${a}`)}}h.post("/sdk/message",I,async(e,n)=>{const{sessionId:t,message:r}=e.body||{};if(!t||!r){n.status(400).json({error:"sessionId and message are required"});return}const s=f.get(t);if(!s){n.status(404).json({error:"SDK session not found"});return}try{const o=s.providerId||"claude-code";await T.get(o).sendMessage(t,r),n.json({ok:!0})}catch(o){const i=o instanceof Error?o.message:String(o);n.status(500).json({error:i})}}),h.post("/sdk/answer",I,async(e,n)=>{const{sessionId:t,answers:r,cancelled:s,reason:o}=e.body||{},i=s===!0;if(!t||!i&&!r){n.status(400).json({error:i?"sessionId is required":"sessionId and answers are required"});return}const a=f.get(t);if(!a){n.status(404).json({error:"SDK session not found"});return}try{const c=a.providerId||"claude-code",u=T.get(c);if(i){if(!u.cancelQuestionAnswer){n.status(400).json({error:"adapter does not support cancelling a question"});return}l.debug(`[sdk/answer] cancel question: sessionId=${t}, providerId=${c}, hasReason=${!!String(o||"").trim()}`),await u.cancelQuestionAnswer(t,typeof o=="string"?o:void 0)}else u.sendQuestionAnswer&&await u.sendQuestionAnswer(t,r);n.json({ok:!0})}catch(c){const u=c instanceof Error?c.message:String(c);n.status(500).json({error:u})}}),h.post("/tool-auth/answer",I,async(e,n)=>{const{sessionId:t,requestId:r,allowed:s}=e.body||{};if(!t||!r){n.status(400).json({error:"sessionId and requestId are required"});return}const o=f.get(t);if(!o){n.status(404).json({error:"SDK session not found"});return}try{const i=o.providerId||"claude-code",a=T.get(i);if(!a.submitToolPermissionDecision){n.status(400).json({error:"adapter does not support tool authorization"});return}const c=a.submitToolPermissionDecision(t,String(r),!!s);n.json({ok:!0,existed:c})}catch(i){const a=i instanceof Error?i.message:String(i);n.status(500).json({error:a})}}),h.get("/tool-auth/pending/:sessionId",I,(e,n)=>{const t=e.params.sessionId;if(!t){n.status(400).json({error:"sessionId is required"});return}const r=f.get(t);if(!r){n.status(404).json({error:"SDK session not found"});return}try{const s=r.providerId||"claude-code",i=T.get(s).getPendingToolAuthRequests?.(t)??[];n.json({ok:!0,sessionId:t,agentId:r.agentId,pendingRequests:i,fetchedAt:Date.now()})}catch(s){const o=s instanceof Error?s.message:String(s);n.status(500).json({error:o})}}),h.post("/sdk/confirm",I,async(e,n)=>{const{sessionId:t,accept:r}=e.body||{};if(!t){n.status(400).json({error:"sessionId is required"});return}const s=f.get(t);if(!s){n.status(404).json({error:"SDK session not found"});return}try{const o=s.providerId||"claude-code";await T.get(o).sendConfirmation(t,!!r),n.json({ok:!0})}catch(o){const i=o instanceof Error?o.message:String(o);n.status(500).json({error:i})}}),h.post("/sdk/abort",I,async(e,n)=>{const{sessionId:t}=e.body||{};if(!t){n.status(400).json({error:"sessionId is required"});return}const r=f.get(t);if(!r){n.status(404).json({error:"SDK session not found"});return}try{const s=r.providerId||"claude-code";await T.get(s).abortCurrentTurn(t),n.json({ok:!0})}catch(s){const o=s instanceof Error?s.message:String(s);n.status(500).json({error:o})}}),h.post("/sdk/stop",I,async(e,n)=>{const{sessionId:t}=e.body||{};if(!t){n.status(400).json({error:"sessionId is required"});return}const r=f.get(t);if(!r){n.json({ok:!0,status:"stopped"});return}try{const s=r.providerId||"claude-code",o=T.get(s);o.abortCurrentTurn(t).catch(()=>{}),await o.terminateSession(t),M(t),f.delete(t),v(t),fe(t),ae(r.agentId),await H(t),await Ee().removeProcess(r.agentId),await $(r.agentId,null,"stopped",void 0,void 0,{runtimeAccessToken:r.runtimeAccessToken,schedulerBaseUrl:r.schedulerBaseUrl}),n.json({ok:!0,status:"stopped"})}catch(s){const o=s instanceof Error?s.message:String(s);n.status(500).json({error:o})}}),h.get("/sdk/snapshot/:sessionId",I,(e,n)=>{const t=e.params.sessionId;if(!t){n.status(400).json({error:"sessionId is required"});return}const r=f.get(t);if(!r){n.status(404).json({error:"SDK session not found"});return}try{const s=r.providerId||"claude-code",o=T.get(s),i=o.getConversation(t),a=un(i);let c=null;if(s==="acode"){const d=o;typeof d.exportRawTranscript!="function"?l.warn(`[HIBERNATE-EXPORT] adapter \u65E0 exportRawTranscript \u65B9\u6CD5 \u2014 bridge \u8FDB\u7A0B\u53EF\u80FD\u8FD0\u884C\u7684\u662F\u65E7\u6784\u5EFA\uFF08\u8BF7\u91CD\u542F bridge\uFF09\u3002providerId=${s}`):(c=d.exportRawTranscript?.(t)??null,c===null&&l.warn(`[HIBERNATE-EXPORT] exportRawTranscript \u8FD4\u56DE\u7A7A \u2014 runtime \u53EF\u80FD\u672A\u5B8C\u6210 start() \u6216\u4E0D\u652F\u6301\u3002providerId=${s}`))}else l.info(`[HIBERNATE-EXPORT] provider=${s} \u4E0D\u652F\u6301\u5B8C\u6574\u91CD\u653E\uFF0C\u6309\u4EC5\u6458\u8981\u4F11\u7720`);const u=o.getTotalUsage?.(t);l.info(`[HIBERNATE-EXPORT] \u5FEB\u7167\u5BFC\u51FA: sessionId=${t} agentId=${r.agentId} providerId=${s} messages=${i.length} summaryChars=${a.snapshot.length} truncated=${a.truncated} transcript=${c?`${c.length}\u6761`:"null"} usage=${u?`in=${u.inputTokens??"?"}/out=${u.outputTokens??"?"}`:"null"}`),n.json({sessionId:t,agentId:r.agentId,workspacePath:r.workspacePath,messageCount:i.length,truncated:a.truncated,snapshot:a.snapshot,transcript:c,tokenUsage:u?{inputTokens:u.inputTokens??null,outputTokens:u.outputTokens??null}:null,providerId:s})}catch(s){const o=s instanceof Error?s.message:String(s);n.status(500).json({error:o})}}),h.get("/sdk/status/:sessionId",I,(e,n)=>{const t=e.params.sessionId;if(!t){n.status(400).json({error:"sessionId is required"});return}const r=f.get(t);if(!r){n.status(404).json({error:"SDK session not found"});return}try{const s=r.providerId||"claude-code",o=T.get(s),i=o.getSessionStatus(t),a=o.getConversation(t);n.json({sessionId:t,status:i,agentId:r.agentId,workspacePath:r.workspacePath,messageCount:a.length})}catch(s){const o=s instanceof Error?s.message:String(s);n.status(500).json({error:o})}}),h.get("/sdk/capabilities/:sessionId",I,(e,n)=>{const t=e.params.sessionId;if(!t){n.status(400).json({error:"sessionId is required"});return}const r=f.get(t);if(!r){n.status(404).json({error:"SDK session not found"});return}try{const s=r.providerId||"claude-code",i=T.get(s).getCapabilities?.(t)??null;n.json({ok:!0,sessionId:t,agentId:r.agentId,capabilities:i,fetchedAt:Date.now()})}catch(s){const o=s instanceof Error?s.message:String(s);n.status(500).json({error:o})}}),h.get("/sdk/pending-questions/:sessionId",I,(e,n)=>{const t=e.params.sessionId;if(!t){n.status(400).json({error:"sessionId is required"});return}const r=f.get(t);if(!r){n.status(404).json({error:"SDK session not found"});return}try{const s=r.providerId||"claude-code",i=T.get(s).getPendingQuestion?.(t)??null;n.json({ok:!0,sessionId:t,agentId:r.agentId,pendingQuestion:i?{toolCallId:i.toolCallId,questions:i.questions}:null,fetchedAt:Date.now()})}catch(s){const o=s instanceof Error?s.message:String(s);n.status(500).json({error:o})}}),h.post("/command",I,async(e,n)=>{const{sessionId:t,command:r}=e.body||{};if(!t||r===void 0||r===null){n.status(400).json({error:"sessionId and command are required"});return}try{const s=await Ln(String(t),r);n.json({ok:!0,mode:"terminal",...s})}catch(s){const o=s instanceof Error?s.message:String(s);n.status(500).json({error:o})}});function pr(e,n){if(typeof e!="string"||!e||!n||typeof n!="object")return e;const{userId:t,name:r,type:s}=n,o=typeof t=="string"&&t.trim()?t.trim():"",i=typeof r=="string"&&r.trim()?r.trim():o;if(!o&&!i)return e;const a=typeof s=="string"&&s.trim()?s.trim().toUpperCase():"HUMAN",c=i||o,u=o?`, userId: ${o}`:"";return`\u3010${c}\uFF08${a}${u}\uFF09\u53D1\u6765\u3011
41
- ${e}`}h.post("/input",I,async(e,n)=>{const{sessionId:t,input:r,mode:s,sender:o}=e.body||{};if(!t||r===void 0||r===null){n.status(400).json({error:"sessionId and input are required"});return}const i=f.get(t);if(!i){n.status(404).json({error:"SDK session not found"});return}try{const a=i.providerId||"claude-code",c=T.get(a);if(s==="shortcut"){if(!c.sendShortcutInput){n.status(400).json({error:"shortcut input is not supported by this SDK provider"});return}await c.sendShortcutInput(t,String(r)),n.json({ok:!0,mode:"shortcut"});return}await c.sendMessage(t,pr(await xn(r),o)),n.json({ok:!0,mode:"sdk"})}catch(a){const c=a instanceof Error?a.message:String(a);n.status(500).json({error:c})}}),h.post("/update-auto-commands",I,async(e,n)=>{const{agentId:t,idleInputAutoCommand:r="",nonInputAutoCommand:s=""}=e.body||{},o=String(t||"").trim();if(!o){n.status(400).json({error:"agentId is required"});return}const i=[...f.values()].find(c=>c.agentId===o),a={idleInputCommand:String(r||"").trim()||Ne,nonInputCommand:String(s||"")};try{let c=!1;i&&(T.get(i.providerId||"claude-code").setIdleCommands?.(i.sessionId,a),c=!0);const u=await en(o,{idleInputAutoCommand:a.idleInputCommand,nonInputAutoCommand:a.nonInputCommand});n.json({ok:!0,mode:"sdk",sessionUpdated:c,persistedUpdated:u})}catch(c){const u=c instanceof Error?c.message:String(c);n.status(500).json({ok:!1,mode:"sdk",error:u})}}),h.post("/resize",I,(e,n)=>{const{sessionId:t,cols:r,rows:s}=e.body||{};if(!t||!r||!s){n.status(400).json({error:"sessionId, cols, rows are required"});return}if(!f.has(t)){n.status(404).json({error:"SDK session not found"});return}n.json({ok:!0,mode:"sdk",noop:!0,cols:Number(r),rows:Number(s)})}),h.post("/reset-context",I,async(e,n)=>{const{sessionId:t,reason:r}=e.body||{};if(!t){n.status(400).json({error:"sessionId is required"});return}const s=f.get(t);if(!s){n.status(404).json({error:"SDK session not found"});return}const o=s.providerId||"claude-code",i=T.get(o),a=i.resetContext?.bind(i),c=mn(o,!!a);if(!c.supported){n.status(c.statusCode).json({error:c.error});return}if(!a){n.status(500).json({error:"ACode adapter does not expose resetContext"});return}try{await a(String(t));const u=Z(i.getSessionStatus(String(t)),s.currentRuntimeStatus,s.currentRuntimeActionType);n.json({ok:!0,contextReset:!0,sessionId:t,status:u,runtimeStatus:u,agentId:s.agentId,mode:"sdk",providerId:o,reason:typeof r=="string"&&r.trim()?r.trim():void 0})}catch(u){const d=u instanceof Error?u.message:String(u);n.status(500).json({ok:!1,contextReset:!1,mode:"sdk",error:d})}}),h.post("/compact-context",I,async(e,n)=>{const{sessionId:t}=e.body||{};if(!t){n.status(400).json({ok:!1,error:"sessionId is required"});return}const r=f.get(t);if(!r){n.status(404).json({ok:!1,error:"SDK session not found"});return}const s=r.providerId||"claude-code",o=T.get(s),i=o.compactContext?.bind(o);if(!i){n.status(400).json({ok:!1,error:`context compaction is not supported by provider: ${s}`});return}try{const a=i(String(t)),c=Z(o.getSessionStatus(String(t)),r.currentRuntimeStatus,r.currentRuntimeActionType);n.json({ok:!0,requested:!0,compacted:!0,sessionId:t,agentId:r.agentId,mode:"sdk",providerId:s,status:c,runtimeStatus:c,result:a??null})}catch(a){const c=a instanceof Error?a.message:String(a);l.warn(`[Runtime] compact-context failed: sessionId=${t}, error=${c}`),n.status(500).json({ok:!1,compacted:!1,mode:"sdk",error:c})}}),h.post("/stop",I,async(e,n)=>{const{sessionId:t}=e.body||{},r=gn(e.body);if(!t){n.status(400).json({error:"sessionId is required"});return}const s=f.get(t);if(!s){await H(t),n.json({ok:!0,status:"stopped",mode:"none",statusNotified:!1,reason:r.reason});return}const o=s.agentId;try{l.info(`[Runtime] Stopping SDK session ${t}; suppressStatus=${!r.statusNotified}, reason=${r.reason||"unspecified"}`);const i=s.providerId||"claude-code",a=T.get(i);a.abortCurrentTurn(t).catch(()=>{}),await a.terminateSession(t),M(t),f.delete(t),v(t),fe(t),ae(o),await H(t),await Ee().removeProcess(o),r.statusNotified?await $(o,null,"stopped",void 0,void 0,{runtimeAccessToken:s.runtimeAccessToken,schedulerBaseUrl:s.schedulerBaseUrl}):l.info(`[Runtime] Stopped status notification suppressed for SDK session ${t}; reason=${r.reason||"unspecified"}`),n.json({ok:!0,status:"stopped",mode:"sdk",statusNotified:r.statusNotified,reason:r.reason})}catch(i){const a=i instanceof Error?i.message:String(i);console.error(`[Runtime] Failed to terminate SDK session ${t}:`,a),n.status(500).json({ok:!1,status:"stop_failed",mode:"sdk",error:a})}}),h.post("/stop-all",I,async(e,n)=>{const t=[],r=[];for(const[s,o]of f.entries())try{const i=o.providerId||"claude-code",a=T.get(i);a.abortCurrentTurn(s).catch(()=>{}),await a.terminateSession(s),M(s),f.delete(s),v(s),fe(s),ae(o.agentId),t.push(s),await $(o.agentId,null,"stopped",void 0,void 0,{runtimeAccessToken:o.runtimeAccessToken,schedulerBaseUrl:o.schedulerBaseUrl})}catch(i){const a=i instanceof Error?i.message:String(i);r.push(`SDK ${s}: ${a}`)}try{await Zt([]),l.info("[Runtime] \u5DF2\u6E05\u7A7A\u6240\u6709\u6301\u4E45\u5316\u4F1A\u8BDD")}catch(s){const o=s instanceof Error?s.message:String(s);r.push(`Persistence: ${o}`)}n.json({ok:!0,stopped:{sdk:t.length},errors:r.length>0?r:void 0})}),h.get("/events/last/:n",I,(e,n)=>{const t=parseInt(e.params.n,10);if(!Number.isFinite(t)||t<1){n.status(400).json({error:":n must be a positive integer"});return}const r=Qe.getLastN(t);n.json({ok:!0,count:r.length,entries:r})}),h.get("/events/since/:index",I,(e,n)=>{const t=parseInt(e.params.index,10);if(!Number.isFinite(t)||t<0){n.status(400).json({error:":index must be a non-negative integer"});return}const r=Qe.getSinceIndex(t);n.json({ok:!0,entries:r.entries,nextIndex:r.nextIndex,oldestIndex:r.oldestIndex,dataLoss:r.oldestIndex>t+1})}),h.get("/events/push-stats",I,(e,n)=>{const t=Ot();n.json({ok:!0,count:t.length,agents:t})});export{An as buildAcodeCommandOutputPath,ft as buildClaudeCodeLaunchConfig,lt as buildRuntimeEnv,Kn as buildSdkOutputMetadata,Fn as buildToolResultTimelineActionInfo,Yr as cleanupSdkSessionByAgentId,Tn as countTerminalOutputLines,ut as createTerminalOutputDecoder,le as decodeTerminalOutputChunk,ir as enqueueCompactionSummaryChunk,Dn as evaluatePersistedSessionReuse,Oe as flushCompactionSummaryAccumulator,bn as formatCommandInactivityTimeoutNotice,_n as formatCommandOutputSpilloverNotice,vn as formatSdkOutputEvent,$e as formatTerminalPrompt,Sn as isIdleStatusChangeRetryable,In as isUsageOnlyStatusChange,kn as normalizeTerminalCommandInput,ln as parseResumeTranscript,gn as parseRuntimeStopOptions,Rn as parseTerminalDirectoryChangeTarget,ge as raceSendOutputWithRetry,un as renderSessionSnapshot,mn as resolveRuntimeContextResetSupport,Zn as resolveRuntimeStatusFromProviderEvent,xn as resolveSdkInputMessage,yt as resolveSdkProviderId,Z as resolveSdkSessionDisplayStatus,yn as resolveStatusChangeRuntimeState,V as resolveStatusChangeUsage,Cn as resolveTerminalOutputEncoding,f as sdkSessions,pn as shouldProbeSdkProcessPid,h as terminalRouter,pr as withSenderSignature};
40
+ `):void 0}const x={command:s||"acode",workingDirectory:o,agentId:T,...Le?{scopeKey:Le}:{},...typeof Ue=="boolean"?{browserAllowPrivate:Ue}:{},autoAccept:!!i,initialPrompt:a,systemPrompt:xe,...Ce!==void 0?{globalPrompt:Ce}:{},...Ee!==void 0?{rolePrompt:Ee}:{},...oe!==void 0?{memory:oe}:{},...re!==void 0?{resumeContext:re}:{},...M==="acode"&&Array.isArray(W)&&W.length>0?{resumeTranscript:W}:{},...M==="acode"&&te?{resumeTokenUsage:te}:{},model:Y,mcpConfigPath:be,...X?{instanceAiConfig:X}:{},...typeof Te=="string"&&Te.trim()?{subAgentModel:Te.trim()}:{},...typeof Ae=="string"&&Ae.trim()?{subAgentEffort:Ae.trim()}:{},extraMcpServers:y||{},envOverrides:pt(String(t),String(o),process.env,_e,typeof r=="string"?r:void 0)};G.log({level:"info",category:"launch",message:"\u4F20\u9012\u7ED9 Adapter \u7684\u5B8C\u6574 AdapterSessionConfig",source:"bridge",agentId:T,sessionId:$,details:{adapterModel:x.model??null,adapterInstanceAiConfig:x.instanceAiConfig?ue(x.instanceAiConfig):null,adapterMcpConfigPath:x.mcpConfigPath??null}}),await G.flush(),f.set($,{agentId:T,workspacePath:o,sessionId:$,config:x,providerId:M,seq:0,runtimeAccessToken:ke,schedulerBaseUrl:j}),n.json({sessionId:$,status:"starting",runtimeStatus:"starting",agentId:T,workspacePath:o,command:x.command,mode:"sdk"}),go({sessionId:$,agentId:T,config:x,adapter:ht,providerId:M,idleInputAutoCommand:k,nonInputAutoCommand:B,runtimeAccessToken:ke,requestedSchedulerBaseUrl:j})}catch(F){if($&&(P($),f.delete($),v($)),T&&z.delete(T),!n.headersSent){const _=F instanceof Error?F.message:String(F);n.status(500).json({error:`Failed to start SDK session: ${_}`})}}}async function go(e){const{sessionId:n,agentId:t,config:o,adapter:s,providerId:r,idleInputAutoCommand:i,nonInputAutoCommand:a,runtimeAccessToken:c,requestedSchedulerBaseUrl:u}=e;try{await s.startSession(n,o),s.setIdleCommands?.(n,{idleInputCommand:i||je,nonInputCommand:a||""});let d;if(In(r))try{if(await new Promise(m=>setTimeout(m,500)),d=s.getSessionPid?.(n),!d){const g=(await zt()).find(b=>b.agentId===t||b.cwd===o.workingDirectory||b.command.includes(o.workingDirectory));g&&(d=g.pid,l.info(`[Runtime] Found SDK process PID: ${d} for agentId=${t}`))}}catch(m){console.warn(`[Runtime] Failed to get SDK PID for agentId=${t}:`,m)}const p=Z(s.getSessionStatus(n),f.get(n)?.currentRuntimeStatus,f.get(n)?.currentRuntimeActionType);await nn({sessionId:n,agentId:t,workspacePath:o.workingDirectory,command:o.command,startedAt:new Date().toISOString(),status:"running",runtimeStatus:p,mode:"sdk",pid:d,providerSessionId:s.getProviderSessionId(n)}),d&&await Re().startProcess({agentId:t,sessionId:n,pid:d,mode:"sdk",workspacePath:o.workingDirectory,command:o.command}),await yo({agentId:t,sessionId:n,sdkPid:d,status:p,schedulerBaseUrl:u,runtimeAccessToken:c})}catch(d){P(n),f.delete(n),v(n),await q(n);const p=d instanceof Error?d.message:String(d);console.error(`[Runtime] Background SDK session startup failed for agentId=${t}: ${p}`),await Io({agentId:t,sessionId:n,schedulerBaseUrl:u,runtimeAccessToken:c,errorMessage:p})}finally{z.delete(t)}}async function yo(e){const{agentId:n,sessionId:t,sdkPid:o,status:s,schedulerBaseUrl:r,runtimeAccessToken:i}=e;if(!r||!i){l.debug(`[Runtime] notifyServerSessionReady skipped: missing schedulerBaseUrl or runtimeAccessToken for agentId=${n}`);return}const a=`${r.replace(/\/+$/,"")}/api/runtime/callback/status`;try{await Ne.post(a,{agentId:n,sessionId:t,status:s,pid:o},{headers:{"X-Runtime-Token":i,"Content-Type":"application/json"},timeout:5e3}),l.debug(`[Runtime] Notified server session ready: agentId=${n}, sessionId=${t}, status=${s}`)}catch(c){const u=c instanceof Error?c.message:String(c);l.warn(`[Runtime] Failed to notify server session ready: agentId=${n}, error=${u}`)}}async function Io(e){const{agentId:n,sessionId:t,schedulerBaseUrl:o,runtimeAccessToken:s}=e;if(!o||!s)return;const r=`${o.replace(/\/+$/,"")}/api/runtime/callback/status`;try{await Ne.post(r,{agentId:n,sessionId:t,status:"stopped"},{headers:{"X-Runtime-Token":s,"Content-Type":"application/json"},timeout:5e3}),l.debug(`[Runtime] Notified server session failed: agentId=${n}, sessionId=${t}`)}catch(i){const a=i instanceof Error?i.message:String(i);l.warn(`[Runtime] Failed to notify server session failed: agentId=${n}, error=${a}`)}}h.post("/sdk/message",S,async(e,n)=>{const{sessionId:t,message:o}=e.body||{};if(!t||!o){n.status(400).json({error:"sessionId and message are required"});return}const s=f.get(t);if(!s){n.status(404).json({error:"SDK session not found"});return}try{const r=s.providerId||"claude-code";await A.get(r).sendMessage(t,o),n.json({ok:!0})}catch(r){const i=r instanceof Error?r.message:String(r);n.status(500).json({error:i})}}),h.post("/sdk/answer",S,async(e,n)=>{const{sessionId:t,answers:o,cancelled:s,reason:r}=e.body||{},i=s===!0;if(!t||!i&&!o){n.status(400).json({error:i?"sessionId is required":"sessionId and answers are required"});return}const a=f.get(t);if(!a){n.status(404).json({error:"SDK session not found"});return}try{const c=a.providerId||"claude-code",u=A.get(c);if(i){if(!u.cancelQuestionAnswer){n.status(400).json({error:"adapter does not support cancelling a question"});return}l.debug(`[sdk/answer] cancel question: sessionId=${t}, providerId=${c}, hasReason=${!!String(r||"").trim()}`),await u.cancelQuestionAnswer(t,typeof r=="string"?r:void 0)}else u.sendQuestionAnswer&&await u.sendQuestionAnswer(t,o);n.json({ok:!0})}catch(c){const u=c instanceof Error?c.message:String(c);n.status(500).json({error:u})}}),h.post("/tool-auth/answer",S,async(e,n)=>{const{sessionId:t,requestId:o,allowed:s}=e.body||{};if(!t||!o){n.status(400).json({error:"sessionId and requestId are required"});return}const r=f.get(t);if(!r){n.status(404).json({error:"SDK session not found"});return}try{const i=r.providerId||"claude-code",a=A.get(i);if(!a.submitToolPermissionDecision){n.status(400).json({error:"adapter does not support tool authorization"});return}const c=a.submitToolPermissionDecision(t,String(o),!!s);n.json({ok:!0,existed:c})}catch(i){const a=i instanceof Error?i.message:String(i);n.status(500).json({error:a})}}),h.get("/tool-auth/pending/:sessionId",S,(e,n)=>{const t=e.params.sessionId;if(!t){n.status(400).json({error:"sessionId is required"});return}const o=f.get(t);if(!o){n.status(404).json({error:"SDK session not found"});return}try{const s=o.providerId||"claude-code",i=A.get(s).getPendingToolAuthRequests?.(t)??[];n.json({ok:!0,sessionId:t,agentId:o.agentId,pendingRequests:i,fetchedAt:Date.now()})}catch(s){const r=s instanceof Error?s.message:String(s);n.status(500).json({error:r})}}),h.post("/sdk/confirm",S,async(e,n)=>{const{sessionId:t,accept:o}=e.body||{};if(!t){n.status(400).json({error:"sessionId is required"});return}const s=f.get(t);if(!s){n.status(404).json({error:"SDK session not found"});return}try{const r=s.providerId||"claude-code";await A.get(r).sendConfirmation(t,!!o),n.json({ok:!0})}catch(r){const i=r instanceof Error?r.message:String(r);n.status(500).json({error:i})}}),h.post("/sdk/abort",S,async(e,n)=>{const{sessionId:t}=e.body||{};if(!t){n.status(400).json({error:"sessionId is required"});return}const o=f.get(t);if(!o){n.status(404).json({error:"SDK session not found"});return}try{const s=o.providerId||"claude-code";await A.get(s).abortCurrentTurn(t),n.json({ok:!0})}catch(s){const r=s instanceof Error?s.message:String(s);n.status(500).json({error:r})}}),h.post("/sdk/stop",S,async(e,n)=>{const{sessionId:t}=e.body||{};if(!t){n.status(400).json({error:"sessionId is required"});return}const o=f.get(t);if(!o){n.json({ok:!0,status:"stopped"});return}try{const s=o.providerId||"claude-code",r=A.get(s);r.abortCurrentTurn(t).catch(()=>{}),await r.terminateSession(t),P(t),f.delete(t),v(t),pe(t),ce(o.agentId),await q(t),await Re().removeProcess(o.agentId),await R(o.agentId,null,"stopped",void 0,void 0,{runtimeAccessToken:o.runtimeAccessToken,schedulerBaseUrl:o.schedulerBaseUrl}),n.json({ok:!0,status:"stopped"})}catch(s){const r=s instanceof Error?s.message:String(s);n.status(500).json({error:r})}}),h.get("/sdk/snapshot/:sessionId",S,(e,n)=>{const t=e.params.sessionId;if(!t){n.status(400).json({error:"sessionId is required"});return}const o=f.get(t);if(!o){n.status(404).json({error:"SDK session not found"});return}try{const s=o.providerId||"claude-code",r=A.get(s),i=r.getConversation(t),a=ln(i);let c=null;if(s==="acode"){const d=r;typeof d.exportRawTranscript!="function"?l.warn(`[HIBERNATE-EXPORT] adapter \u65E0 exportRawTranscript \u65B9\u6CD5 \u2014 bridge \u8FDB\u7A0B\u53EF\u80FD\u8FD0\u884C\u7684\u662F\u65E7\u6784\u5EFA\uFF08\u8BF7\u91CD\u542F bridge\uFF09\u3002providerId=${s}`):(c=d.exportRawTranscript?.(t)??null,c===null&&l.warn(`[HIBERNATE-EXPORT] exportRawTranscript \u8FD4\u56DE\u7A7A \u2014 runtime \u53EF\u80FD\u672A\u5B8C\u6210 start() \u6216\u4E0D\u652F\u6301\u3002providerId=${s}`))}else l.info(`[HIBERNATE-EXPORT] provider=${s} \u4E0D\u652F\u6301\u5B8C\u6574\u91CD\u653E\uFF0C\u6309\u4EC5\u6458\u8981\u4F11\u7720`);const u=r.getTotalUsage?.(t);l.info(`[HIBERNATE-EXPORT] \u5FEB\u7167\u5BFC\u51FA: sessionId=${t} agentId=${o.agentId} providerId=${s} messages=${i.length} summaryChars=${a.snapshot.length} truncated=${a.truncated} transcript=${c?`${c.length}\u6761`:"null"} usage=${u?`in=${u.inputTokens??"?"}/out=${u.outputTokens??"?"}`:"null"} totalUsage=${u?`in=${u.totalInputTokens??"?"}/out=${u.totalOutputTokens??"?"}`:"null"}`),n.json({sessionId:t,agentId:o.agentId,workspacePath:o.workspacePath,messageCount:i.length,truncated:a.truncated,snapshot:a.snapshot,transcript:c,tokenUsage:u?{inputTokens:u.inputTokens??null,outputTokens:u.outputTokens??null,totalInputTokens:u.totalInputTokens??null,totalOutputTokens:u.totalOutputTokens??null,cacheHitTokens:u.cacheHitTokens??null,cacheMissTokens:u.cacheMissTokens??null}:null,providerId:s})}catch(s){const r=s instanceof Error?s.message:String(s);n.status(500).json({error:r})}}),h.get("/sdk/status/:sessionId",S,(e,n)=>{const t=e.params.sessionId;if(!t){n.status(400).json({error:"sessionId is required"});return}const o=f.get(t);if(!o){n.status(404).json({error:"SDK session not found"});return}try{const s=o.providerId||"claude-code",r=A.get(s),i=r.getSessionStatus(t),a=r.getConversation(t);n.json({sessionId:t,status:i,agentId:o.agentId,workspacePath:o.workspacePath,messageCount:a.length})}catch(s){const r=s instanceof Error?s.message:String(s);n.status(500).json({error:r})}}),h.get("/sdk/capabilities/:sessionId",S,(e,n)=>{const t=e.params.sessionId;if(!t){n.status(400).json({error:"sessionId is required"});return}const o=f.get(t);if(!o){n.status(404).json({error:"SDK session not found"});return}try{const s=o.providerId||"claude-code",i=A.get(s).getCapabilities?.(t)??null;n.json({ok:!0,sessionId:t,agentId:o.agentId,capabilities:i,fetchedAt:Date.now()})}catch(s){const r=s instanceof Error?s.message:String(s);n.status(500).json({error:r})}}),h.get("/sdk/pending-questions/:sessionId",S,(e,n)=>{const t=e.params.sessionId;if(!t){n.status(400).json({error:"sessionId is required"});return}const o=f.get(t);if(!o){n.status(404).json({error:"SDK session not found"});return}try{const s=o.providerId||"claude-code",i=A.get(s).getPendingQuestion?.(t)??null;n.json({ok:!0,sessionId:t,agentId:o.agentId,pendingQuestion:i?{toolCallId:i.toolCallId,questions:i.questions}:null,fetchedAt:Date.now()})}catch(s){const r=s instanceof Error?s.message:String(s);n.status(500).json({error:r})}}),h.post("/command",S,async(e,n)=>{const{sessionId:t,command:o}=e.body||{};if(!t||o===void 0||o===null){n.status(400).json({error:"sessionId and command are required"});return}try{const s=await xn(String(t),o);n.json({ok:!0,mode:"terminal",...s})}catch(s){const r=s instanceof Error?s.message:String(s);n.status(500).json({error:r})}});function So(e,n){if(typeof e!="string"||!e||!n||typeof n!="object")return e;const{userId:t,name:o,type:s}=n,r=typeof t=="string"&&t.trim()?t.trim():"",i=typeof o=="string"&&o.trim()?o.trim():r;if(!r&&!i)return e;const a=typeof s=="string"&&s.trim()?s.trim().toUpperCase():"HUMAN",c=i||r,u=r?`, userId: ${r}`:"";return`\u3010${c}\uFF08${a}${u}\uFF09\u53D1\u6765\u3011
41
+ ${e}`}h.post("/input",S,async(e,n)=>{const{sessionId:t,input:o,mode:s,sender:r}=e.body||{};if(!t||o===void 0||o===null){n.status(400).json({error:"sessionId and input are required"});return}const i=f.get(t);if(!i){n.status(404).json({error:"SDK session not found"});return}try{const a=i.providerId||"claude-code",c=A.get(a);if(s==="shortcut"){if(!c.sendShortcutInput){n.status(400).json({error:"shortcut input is not supported by this SDK provider"});return}await c.sendShortcutInput(t,String(o)),n.json({ok:!0,mode:"shortcut"});return}await c.sendMessage(t,So(await Bn(o),r)),n.json({ok:!0,mode:"sdk"})}catch(a){const c=a instanceof Error?a.message:String(a);n.status(500).json({error:c})}}),h.post("/update-auto-commands",S,async(e,n)=>{const{agentId:t,idleInputAutoCommand:o="",nonInputAutoCommand:s=""}=e.body||{},r=String(t||"").trim();if(!r){n.status(400).json({error:"agentId is required"});return}const i=[...f.values()].find(c=>c.agentId===r),a={idleInputCommand:String(o||"").trim()||je,nonInputCommand:String(s||"")};try{let c=!1;i&&(A.get(i.providerId||"claude-code").setIdleCommands?.(i.sessionId,a),c=!0);const u=await en(r,{idleInputAutoCommand:a.idleInputCommand,nonInputAutoCommand:a.nonInputCommand});n.json({ok:!0,mode:"sdk",sessionUpdated:c,persistedUpdated:u})}catch(c){const u=c instanceof Error?c.message:String(c);n.status(500).json({ok:!1,mode:"sdk",error:u})}}),h.post("/resize",S,(e,n)=>{const{sessionId:t,cols:o,rows:s}=e.body||{};if(!t||!o||!s){n.status(400).json({error:"sessionId, cols, rows are required"});return}if(!f.has(t)){n.status(404).json({error:"SDK session not found"});return}n.json({ok:!0,mode:"sdk",noop:!0,cols:Number(o),rows:Number(s)})}),h.post("/reset-context",S,async(e,n)=>{const{sessionId:t,reason:o}=e.body||{};if(!t){n.status(400).json({error:"sessionId is required"});return}const s=f.get(t);if(!s){n.status(404).json({error:"SDK session not found"});return}const r=s.providerId||"claude-code",i=A.get(r),a=i.resetContext?.bind(i),c=yn(r,!!a);if(!c.supported){n.status(c.statusCode).json({error:c.error});return}if(!a){n.status(500).json({error:"ACode adapter does not expose resetContext"});return}try{await a(String(t));const u=Z(i.getSessionStatus(String(t)),s.currentRuntimeStatus,s.currentRuntimeActionType);n.json({ok:!0,contextReset:!0,sessionId:t,status:u,runtimeStatus:u,agentId:s.agentId,mode:"sdk",providerId:r,reason:typeof o=="string"&&o.trim()?o.trim():void 0})}catch(u){const d=u instanceof Error?u.message:String(u);n.status(500).json({ok:!1,contextReset:!1,mode:"sdk",error:d})}}),h.post("/compact-context",S,async(e,n)=>{const{sessionId:t}=e.body||{};if(!t){n.status(400).json({ok:!1,error:"sessionId is required"});return}const o=f.get(t);if(!o){n.status(404).json({ok:!1,error:"SDK session not found"});return}const s=o.providerId||"claude-code",r=A.get(s),i=r.compactContext?.bind(r);if(!i){n.status(400).json({ok:!1,error:`context compaction is not supported by provider: ${s}`});return}try{const a=i(String(t)),c=Z(r.getSessionStatus(String(t)),o.currentRuntimeStatus,o.currentRuntimeActionType);n.json({ok:!0,requested:!0,compacted:!0,sessionId:t,agentId:o.agentId,mode:"sdk",providerId:s,status:c,runtimeStatus:c,result:a??null})}catch(a){const c=a instanceof Error?a.message:String(a);l.warn(`[Runtime] compact-context failed: sessionId=${t}, error=${c}`),n.status(500).json({ok:!1,compacted:!1,mode:"sdk",error:c})}}),h.post("/stop",S,async(e,n)=>{const{sessionId:t}=e.body||{},o=Sn(e.body);if(!t){n.status(400).json({error:"sessionId is required"});return}const s=f.get(t);if(!s){await q(t),n.json({ok:!0,status:"stopped",mode:"none",statusNotified:!1,reason:o.reason});return}const r=s.agentId;try{l.info(`[Runtime] Stopping SDK session ${t}; suppressStatus=${!o.statusNotified}, reason=${o.reason||"unspecified"}`);const i=s.providerId||"claude-code",a=A.get(i);a.abortCurrentTurn(t).catch(()=>{}),await a.terminateSession(t),P(t),f.delete(t),v(t),pe(t),ce(r),await q(t),await Re().removeProcess(r),o.statusNotified?await R(r,null,"stopped",void 0,void 0,{runtimeAccessToken:s.runtimeAccessToken,schedulerBaseUrl:s.schedulerBaseUrl}):l.info(`[Runtime] Stopped status notification suppressed for SDK session ${t}; reason=${o.reason||"unspecified"}`),n.json({ok:!0,status:"stopped",mode:"sdk",statusNotified:o.statusNotified,reason:o.reason})}catch(i){const a=i instanceof Error?i.message:String(i);console.error(`[Runtime] Failed to terminate SDK session ${t}:`,a),n.status(500).json({ok:!1,status:"stop_failed",mode:"sdk",error:a})}}),h.post("/stop-all",S,async(e,n)=>{const t=[],o=[];for(const[s,r]of f.entries())try{const i=r.providerId||"claude-code",a=A.get(i);a.abortCurrentTurn(s).catch(()=>{}),await a.terminateSession(s),P(s),f.delete(s),v(s),pe(s),ce(r.agentId),t.push(s),await R(r.agentId,null,"stopped",void 0,void 0,{runtimeAccessToken:r.runtimeAccessToken,schedulerBaseUrl:r.schedulerBaseUrl})}catch(i){const a=i instanceof Error?i.message:String(i);o.push(`SDK ${s}: ${a}`)}try{await Zt([]),l.info("[Runtime] \u5DF2\u6E05\u7A7A\u6240\u6709\u6301\u4E45\u5316\u4F1A\u8BDD")}catch(s){const r=s instanceof Error?s.message:String(s);o.push(`Persistence: ${r}`)}n.json({ok:!0,stopped:{sdk:t.length},errors:o.length>0?o:void 0})}),h.get("/events/last/:n",S,(e,n)=>{const t=parseInt(e.params.n,10);if(!Number.isFinite(t)||t<1){n.status(400).json({error:":n must be a positive integer"});return}const o=et.getLastN(t);n.json({ok:!0,count:o.length,entries:o})}),h.get("/events/since/:index",S,(e,n)=>{const t=parseInt(e.params.index,10);if(!Number.isFinite(t)||t<0){n.status(400).json({error:":index must be a non-negative integer"});return}const o=et.getSinceIndex(t);n.json({ok:!0,entries:o.entries,nextIndex:o.nextIndex,oldestIndex:o.oldestIndex,dataLoss:o.oldestIndex>t+1})}),h.get("/events/push-stats",S,(e,n)=>{const t=Ot();n.json({ok:!0,count:t.length,agents:t})});export{_n as buildAcodeCommandOutputPath,jn as buildClaudeCodeLaunchConfig,pt as buildRuntimeEnv,zn as buildSdkOutputMetadata,Hn as buildToolResultTimelineActionInfo,Zo as cleanupSdkSessionByAgentId,bn as countTerminalOutputLines,lt as createTerminalOutputDecoder,fe as decodeTerminalOutputChunk,uo as enqueueCompactionSummaryChunk,Pn as evaluatePersistedSessionReuse,Pe as flushCompactionSummaryAccumulator,En as formatCommandInactivityTimeoutNotice,Cn as formatCommandOutputSpilloverNotice,qn as formatSdkOutputEvent,De as formatTerminalPrompt,Tn as isIdleStatusChangeRetryable,An as isUsageOnlyStatusChange,$n as normalizeTerminalCommandInput,mn as parseResumeTokenUsage,pn as parseResumeTranscript,Sn as parseRuntimeStopOptions,Dn as parseTerminalDirectoryChangeTarget,ye as raceSendOutputWithRetry,ln as renderSessionSnapshot,yn as resolveRuntimeContextResetSupport,no as resolveRuntimeStatusFromProviderEvent,Bn as resolveSdkInputMessage,It as resolveSdkProviderId,Z as resolveSdkSessionDisplayStatus,hn as resolveStatusChangeRuntimeState,J as resolveStatusChangeUsage,Rn as resolveTerminalOutputEncoding,f as sdkSessions,In as shouldProbeSdkProcessPid,h as terminalRouter,So as withSenderSignature};
42
42