aws-runtime-bridge 1.9.175 → 1.9.179

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 +188 -0
  2. package/README.md +61 -2
  3. package/dist/adapter/AcodeSdkAdapter.d.ts +369 -0
  4. package/dist/adapter/AcodeSdkAdapter.js +2 -2
  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 +182 -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 +122 -0
  113. package/dist/routes/terminal.js +16 -16
  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 +21 -21
  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 +179 -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,11 +1,23 @@
1
1
 
2
+
3
+
4
+
5
+
2
6
  import { type AxiosResponse } from "axios";
3
7
  import type { RuntimeToolBatchMetrics } from "../adapter/types.js";
4
8
  import type { Session } from "../types.js";
5
9
  import { RingBuffer, type RingBufferEntry, type RingBufferSlice } from "./ring-buffer.js";
6
10
 
11
+
12
+
13
+
7
14
  export type BridgeEventCategory = "status" | "output" | "question" | "file_changed";
8
15
 
16
+
17
+
18
+
19
+
20
+
9
21
  export interface BridgeEventPayload {
10
22
  readonly category: BridgeEventCategory;
11
23
  readonly agentId: string;
@@ -44,6 +56,11 @@ export interface BridgeEventPayload {
44
56
 
45
57
  export type { RingBufferEntry, RingBufferSlice };
46
58
 
59
+
60
+
61
+
62
+
63
+
47
64
  export declare const bridgeEventBuffer: RingBuffer<BridgeEventPayload>;
48
65
  interface RuntimeStatusActionInfo {
49
66
  actionType?: string;
@@ -68,6 +85,12 @@ export interface RuntimeCallbackAuthOptions {
68
85
  export interface RuntimeOutputMetadata {
69
86
  sourceEventType?: string;
70
87
 
88
+
89
+
90
+
91
+
92
+
93
+
71
94
  skipLocalPersist?: boolean;
72
95
  logLevel?: "info" | "warn" | "error";
73
96
  logMessage?: string;
@@ -81,6 +104,13 @@ export interface RuntimeOutputMetadata {
81
104
 
82
105
  export declare const sessions: Map<string, Session>;
83
106
 
107
+
108
+
109
+
110
+
111
+
112
+
113
+
84
114
  export declare function sendStatus(agentId: string, sessionId: string | null, status: string, actionInfo?: RuntimeStatusActionInfo, usage?: {
85
115
  inputTokens: number;
86
116
  outputTokens: number;
@@ -94,8 +124,23 @@ export declare function sendStatus(agentId: string, sessionId: string | null, st
94
124
  cacheMissTokens?: number;
95
125
  }, authOptions?: RuntimeCallbackAuthOptions, timestamp?: number, sourceEventType?: string): Promise<AxiosResponse<unknown> | undefined>;
96
126
 
127
+
128
+
129
+
130
+
131
+
132
+
133
+
97
134
  export declare function sendOutput(agentId: string, output: string, sessionId: string, seq: number, metadata?: RuntimeOutputMetadata, authOptions?: RuntimeCallbackAuthOptions, signal?: AbortSignal): Promise<void>;
98
135
 
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
99
144
  export declare function sendQuestionRequest(agentId: string, sessionId: string, questions: unknown[], authOptions?: RuntimeCallbackAuthOptions, toolCallId?: string): Promise<void>;
100
145
  export interface RuntimeFileChangedPayload {
101
146
  bridgeBaseUrl?: string;
@@ -114,12 +159,30 @@ export interface ToolAuthRequestPayload {
114
159
  operation?: string;
115
160
  }
116
161
 
162
+
163
+
164
+
165
+
117
166
  export declare function sendToolAuthRequest(agentId: string, sessionId: string, request: ToolAuthRequestPayload, authOptions?: RuntimeCallbackAuthOptions): Promise<void>;
118
167
 
168
+
169
+
119
170
  export declare function sendFileChanged(payload: RuntimeFileChangedPayload): Promise<void>;
120
171
 
172
+
173
+
174
+
175
+
121
176
  export declare function appendSessionOutput(sessionId: string, data: string): void;
122
177
 
178
+
179
+
180
+
181
+
123
182
  export declare function scheduleOutputFlush(sessionId: string): void;
124
183
 
184
+
185
+
186
+
187
+
125
188
  export declare function flushSessionOutput(sessionId: string): Promise<void>;
@@ -1,5 +1,5 @@
1
- import h from"axios";import{resolveSchedulerBaseUrlFrom as H}from"../config.js";import{requestRuntimeAccessTokenRefreshForServer as P}from"../services/auto-register.js";import{logger as f}from"../utils/logger.js";import{agentEventStore as S}from"./agent-event-store.js";import{scheduleEventPush as $}from"./event-delta-pusher.js";import{RingBuffer as C}from"./ring-buffer.js";import{getRuntimeAccessToken as _}from"./runtime-binding.js";const B=new C(2e3);function m(t,r=y(t)){const c=t?.runtimeAccessToken||_(r)||_();return c?{"X-Runtime-Token":c}:void 0}function x(t){if(t)return{schedulerBaseUrl:t.schedulerBaseUrl}}function y(t){return H(t?.schedulerBaseUrl).url}const O=100;function w(t){if(typeof t!="object"||t===null)return;const r=t.response;if(typeof r!="object"||r===null)return;const c=r.status;return typeof c=="number"?c:void 0}let L=null;async function R(t){if(L)return L;L=(async()=>{try{const r=await P(t);return r.success&&r.runtimeAccessToken?(f.info("[session-output] Runtime token refreshed after 401"),!0):(f.warn("[session-output] Runtime token refresh failed",{error:r.error}),!1)}catch(r){return f.warn("[session-output] Runtime token refresh threw",{error:r}),!1}})();try{return await L}finally{L=null}}const E=8e3,M=64*1024,g=32*1024,A=15e3,U=new Map;async function J(t,r,c,e,i,o,u,s){const n={agentId:t,sessionId:r,status:c};u!==void 0&&(n.timestamp=u),e&&(e.actionType&&(n.actionType=e.actionType),e.actionLabel&&(n.actionLabel=e.actionLabel),e.actionDetail&&(n.actionDetail=e.actionDetail),e.actionInput&&(n.actionInput=e.actionInput),e.actionResult&&(n.actionResult=e.actionResult),e.actionError&&(n.actionError=e.actionError),e.actionId&&(n.actionId=e.actionId),e.parentId&&(n.parentId=e.parentId),e.batchId&&(n.batchId=e.batchId),e.batchMetrics&&(n.batchMetrics=e.batchMetrics)),i&&(n.inputTokens=i.inputTokens,n.outputTokens=i.outputTokens,i.contextLimit&&(n.contextLimit=i.contextLimit),i.maxOutput&&(n.maxOutput=i.maxOutput),i.inputLimit&&(n.inputLimit=i.inputLimit),i.compactionThreshold&&(n.compactionThreshold=i.compactionThreshold),i.cacheHitTokens!==void 0&&(n.cacheHitTokens=i.cacheHitTokens),i.cacheMissTokens!==void 0&&(n.cacheMissTokens=i.cacheMissTokens)),s&&(n.sourceEventType=s),process.env.ACODE_TOKEN_DEBUG==="1"&&(n.inputTokens!==void 0||n.outputTokens!==void 0||n.cacheHitTokens!==void 0||n.cacheMissTokens!==void 0)&&console.log(`[TokenDebug][SendStatus] status=${c} inputTokens=${n.inputTokens??"(none)"} outputTokens=${n.outputTokens??"(none)"} cacheHitTokens=${n.cacheHitTokens??"(none)"} cacheMissTokens=${n.cacheMissTokens??"(none)"} contextLimit=${n.contextLimit??"(none)"} actionType=${n.actionType??"(none)"}`);const a=y(o),k=m(o,a);if(!k){f.warn("Skip runtime status callback because runtime token is missing",{agentId:t,sessionId:r,status:c,schedulerBaseUrl:a});return}const p=e?.actionType==="context_compaction";p&&f.info("[compaction-diag] sendStatus enter",{agentId:t,sessionId:r,status:c,actionId:e?.actionId,parentId:e?.parentId,actionLabel:e?.actionLabel});try{const l=await h.post(`${a}/api/runtime/callback/status`,n,{headers:k,timeout:15e3});if(p){const d=l?.data;f.info("[compaction-diag] sendStatus success",{agentId:t,actionId:e?.actionId,actionLabel:e?.actionLabel,httpStatus:l?.status,ignored:d?.ignored,responseBody:d})}return l}catch(l){if(w(l)===401&&await R(a)){const T=m(x(o),a);if(T)try{const b=await h.post(`${a}/api/runtime/callback/status`,n,{headers:T,timeout:15e3});if(p){const v=b?.data;f.info("[compaction-diag] sendStatus retry success",{agentId:t,actionId:e?.actionId,actionLabel:e?.actionLabel,httpStatus:b?.status,ignored:v?.ignored})}return b}catch(b){f.warn("Runtime status callback retry failed after token refresh",{agentId:t,sessionId:r,status:c,error:b});return}}f.warn("Runtime status callback failed",{agentId:t,sessionId:r,status:c,schedulerBaseUrl:a,error:l});return}finally{const l={category:"status",agentId:t,sessionId:r,status:c,actionType:e?.actionType,actionLabel:e?.actionLabel,actionDetail:e?.actionDetail,actionInput:e?.actionInput,actionResult:e?.actionResult,actionError:e?.actionError,actionId:e?.actionId,parentId:e?.parentId,batchId:e?.batchId,batchMetrics:e?.batchMetrics,inputTokens:i?.inputTokens,outputTokens:i?.outputTokens,cacheHitTokens:i?.cacheHitTokens,cacheMissTokens:i?.cacheMissTokens,sourceEventType:s};B.append(l);const d=S.append(t,l);$(t,d,o)}}async function D(t,r,c,e,i,o,u){const s=y(o);try{const n=m(o,s);if(!n){f.warn("Skip runtime output callback because runtime token is missing",{agentId:t,sessionId:c,schedulerBaseUrl:s});return}const a={headers:n,timeout:A};u&&(a.signal=u),await h.post(`${s}/api/runtime/callback/output`,{agentId:t,output:r,sessionId:c,seq:e,...i},a)}catch(n){if(u?.aborted||n?.name==="AbortError"||n?.code==="ERR_CANCELED")throw n;if(w(n)===401&&await R(s)){const k=m(x(o),s);if(k)try{const p={headers:k,timeout:A};u&&(p.signal=u),await h.post(`${s}/api/runtime/callback/output`,{agentId:t,output:r,sessionId:c,seq:e,...i},p);return}catch{}}throw f.warn("Runtime output callback failed",{agentId:t,sessionId:c,error:n}),n}finally{if(!i?.skipLocalPersist){const n=r.length>E?`...(truncated)
2
- ${r.slice(-E)}`:r,a={category:"output",agentId:t,sessionId:c,output:n,seq:e,sourceEventType:i?.sourceEventType,logLevel:i?.logLevel,logCategory:i?.logCategory};B.appendOrMerge(a,p=>{const l=p.data;if(l.category!=="output"||l.sessionId!==c||l.sourceEventType!==i?.sourceEventType||Date.now()-p.timestamp>1e4)return!1;const d=(l.output||"").length,T=(a.output||"").length;return d+T<=E},(p,l)=>{const d=p.output||"",T=l.output||"";return d.includes(T)?p:{...p,output:`${d}${T}`}});const k=S.appendOrMergeOutput(t,a);$(t,k,o)}}}async function V(t,r,c,e,i){const o=y(e),u={agentId:t,sessionId:r,questions:c,...i?{toolCallId:i}:{}};try{const s=m(e,o);if(!s)return;await h.post(`${o}/api/runtime/callback/question`,u,{headers:s})}catch(s){if(w(s)===401&&await R(o)){const a=m(x(e),o);if(a)try{await h.post(`${o}/api/runtime/callback/question`,u,{headers:a});return}catch{}}}finally{const s={category:"question",agentId:t,sessionId:r,...i?{toolCallId:i}:{},questions:c};B.append(s);const n=S.append(t,s);$(t,n,e)}}async function Y(t,r,c,e){const i=y(e),o={agentId:t,sessionId:r,...c};try{const u=m(e,i);if(!u)return;await h.post(`${i}/api/runtime/callback/tool-auth`,o,{headers:u})}catch(u){if(w(u)===401&&await R(i)){const n=m(x(e),i);if(n)try{await h.post(`${i}/api/runtime/callback/tool-auth`,o,{headers:n});return}catch{}}}}async function Z(t){const r=y();try{const c=m(void 0,r);if(!c)return;await h.post(`${r}/api/runtime/callback/file-changed`,t,{headers:c})}catch(c){if(w(c)===401&&await R(r)){const i=m(void 0,r);if(i)try{await h.post(`${r}/api/runtime/callback/file-changed`,t,{headers:i});return}catch{}}}finally{const c={category:"file_changed",agentId:"",sessionId:null,workspacePath:t.workspacePath,filePath:t.filePath,eventType:t.eventType,size:t.size};B.append(c)}}function I(t,r){const c=U.get(t);if(!c||!r)return;const e=`${c.outputBuffer}${r}`;if(e.length<=M){c.outputBuffer=e;return}const o=`\r
1
+ import m from"axios";import{resolveSchedulerBaseUrlFrom as H}from"../config.js";import{requestRuntimeAccessTokenRefreshForServer as P,resolveTargetIdentityFromToken as C}from"../services/auto-register.js";import{logger as d}from"../utils/logger.js";import{agentEventStore as S}from"./agent-event-store.js";import{scheduleEventPush as $}from"./event-delta-pusher.js";import{RingBuffer as O}from"./ring-buffer.js";import{getRuntimeAccessToken as _}from"./runtime-binding.js";const B=new O(2e3);function k(t,n=b(t)){const c=t?.runtimeAccessToken||_(n)||_();return c?{"X-Runtime-Token":c}:void 0}function x(t){if(t)return{schedulerBaseUrl:t.schedulerBaseUrl}}function b(t){return H(t?.schedulerBaseUrl).url}const D=100;function w(t){if(typeof t!="object"||t===null)return;const n=t.response;if(typeof n!="object"||n===null)return;const c=n.status;return typeof c=="number"?c:void 0}let R=null;async function L(t,n){if(R)return R;R=(async()=>{try{const c=n?C(n)?.identityKey:void 0,e=await P(t,c);return e.success&&e.runtimeAccessToken?(d.info("[session-output] Runtime token refreshed after 401"),!0):(d.warn("[session-output] Runtime token refresh failed",{error:e.error}),!1)}catch(c){return d.warn("[session-output] Runtime token refresh threw",{error:c}),!1}})();try{return await R}finally{R=null}}const E=8e3,M=64*1024,g=32*1024,v=15e3,U=new Map;async function V(t,n,c,e,r,o,a,l){const i={agentId:t,sessionId:n,status:c};a!==void 0&&(i.timestamp=a),e&&(e.actionType&&(i.actionType=e.actionType),e.actionLabel&&(i.actionLabel=e.actionLabel),e.actionDetail&&(i.actionDetail=e.actionDetail),e.actionInput&&(i.actionInput=e.actionInput),e.actionResult&&(i.actionResult=e.actionResult),e.actionError&&(i.actionError=e.actionError),e.actionId&&(i.actionId=e.actionId),e.parentId&&(i.parentId=e.parentId),e.batchId&&(i.batchId=e.batchId),e.batchMetrics&&(i.batchMetrics=e.batchMetrics)),r&&(i.inputTokens=r.inputTokens,i.outputTokens=r.outputTokens,r.contextLimit&&(i.contextLimit=r.contextLimit),r.maxOutput&&(i.maxOutput=r.maxOutput),r.inputLimit&&(i.inputLimit=r.inputLimit),r.compactionThreshold&&(i.compactionThreshold=r.compactionThreshold),r.cacheHitTokens!==void 0&&(i.cacheHitTokens=r.cacheHitTokens),r.cacheMissTokens!==void 0&&(i.cacheMissTokens=r.cacheMissTokens)),l&&(i.sourceEventType=l),process.env.ACODE_TOKEN_DEBUG==="1"&&(i.inputTokens!==void 0||i.outputTokens!==void 0||i.cacheHitTokens!==void 0||i.cacheMissTokens!==void 0)&&console.log(`[TokenDebug][SendStatus] status=${c} inputTokens=${i.inputTokens??"(none)"} outputTokens=${i.outputTokens??"(none)"} cacheHitTokens=${i.cacheHitTokens??"(none)"} cacheMissTokens=${i.cacheMissTokens??"(none)"} contextLimit=${i.contextLimit??"(none)"} actionType=${i.actionType??"(none)"}`);const s=b(o),f=k(o,s);if(!f){d.warn("Skip runtime status callback because runtime token is missing",{agentId:t,sessionId:n,status:c,schedulerBaseUrl:s});return}const T=e?.actionType==="context_compaction";T&&d.info("[compaction-diag] sendStatus enter",{agentId:t,sessionId:n,status:c,actionId:e?.actionId,parentId:e?.parentId,actionLabel:e?.actionLabel});try{const u=await m.post(`${s}/api/runtime/callback/status`,i,{headers:f,timeout:15e3});if(T){const p=u?.data;d.info("[compaction-diag] sendStatus success",{agentId:t,actionId:e?.actionId,actionLabel:e?.actionLabel,httpStatus:u?.status,ignored:p?.ignored,responseBody:p})}return u}catch(u){if(w(u)===401&&await L(s,f?.["X-Runtime-Token"])){const y=k(x(o),s);if(y)try{const h=await m.post(`${s}/api/runtime/callback/status`,i,{headers:y,timeout:15e3});if(T){const A=h?.data;d.info("[compaction-diag] sendStatus retry success",{agentId:t,actionId:e?.actionId,actionLabel:e?.actionLabel,httpStatus:h?.status,ignored:A?.ignored})}return h}catch(h){d.warn("Runtime status callback retry failed after token refresh",{agentId:t,sessionId:n,status:c,error:h});return}}d.warn("Runtime status callback failed",{agentId:t,sessionId:n,status:c,schedulerBaseUrl:s,error:u});return}finally{const u={category:"status",agentId:t,sessionId:n,status:c,actionType:e?.actionType,actionLabel:e?.actionLabel,actionDetail:e?.actionDetail,actionInput:e?.actionInput,actionResult:e?.actionResult,actionError:e?.actionError,actionId:e?.actionId,parentId:e?.parentId,batchId:e?.batchId,batchMetrics:e?.batchMetrics,inputTokens:r?.inputTokens,outputTokens:r?.outputTokens,cacheHitTokens:r?.cacheHitTokens,cacheMissTokens:r?.cacheMissTokens,sourceEventType:l};B.append(u);const p=S.append(t,u);$(t,p,o)}}async function F(t,n,c,e,r,o,a){const l=b(o),i=k(o,l);try{if(!i){d.warn("Skip runtime output callback because runtime token is missing",{agentId:t,sessionId:c,schedulerBaseUrl:l});return}const s={headers:i,timeout:v};a&&(s.signal=a),await m.post(`${l}/api/runtime/callback/output`,{agentId:t,output:n,sessionId:c,seq:e,...r},s)}catch(s){if(a?.aborted||s?.name==="AbortError"||s?.code==="ERR_CANCELED")throw s;if(w(s)===401&&await L(l,i?.["X-Runtime-Token"])){const T=k(x(o),l);if(T)try{const u={headers:T,timeout:v};a&&(u.signal=a),await m.post(`${l}/api/runtime/callback/output`,{agentId:t,output:n,sessionId:c,seq:e,...r},u);return}catch{}}throw d.warn("Runtime output callback failed",{agentId:t,sessionId:c,error:s}),s}finally{if(!r?.skipLocalPersist){const s=n.length>E?`...(truncated)
2
+ ${n.slice(-E)}`:n,f={category:"output",agentId:t,sessionId:c,output:s,seq:e,sourceEventType:r?.sourceEventType,logLevel:r?.logLevel,logCategory:r?.logCategory};B.appendOrMerge(f,u=>{const p=u.data;if(p.category!=="output"||p.sessionId!==c||p.sourceEventType!==r?.sourceEventType||Date.now()-u.timestamp>1e4)return!1;const y=(p.output||"").length,h=(f.output||"").length;return y+h<=E},(u,p)=>{const y=u.output||"",h=p.output||"";return y.includes(h)?u:{...u,output:`${y}${h}`}});const T=S.appendOrMergeOutput(t,f);$(t,T,o)}}}async function Y(t,n,c,e,r){const o=b(e),a={agentId:t,sessionId:n,questions:c,...r?{toolCallId:r}:{}},l=k(e,o);try{if(!l)return;await m.post(`${o}/api/runtime/callback/question`,a,{headers:l})}catch(i){if(w(i)===401&&await L(o,l?.["X-Runtime-Token"])){const f=k(x(e),o);if(f)try{await m.post(`${o}/api/runtime/callback/question`,a,{headers:f});return}catch{}}}finally{const i={category:"question",agentId:t,sessionId:n,...r?{toolCallId:r}:{},questions:c};B.append(i);const s=S.append(t,i);$(t,s,e)}}async function Z(t,n,c,e){const r=b(e),o={agentId:t,sessionId:n,...c},a=k(e,r);try{if(!a)return;await m.post(`${r}/api/runtime/callback/tool-auth`,o,{headers:a})}catch(l){if(w(l)===401&&await L(r,a?.["X-Runtime-Token"])){const s=k(x(e),r);if(s)try{await m.post(`${r}/api/runtime/callback/tool-auth`,o,{headers:s});return}catch{}}}}async function I(t){const n=b(),c=k(void 0,n);try{if(!c)return;await m.post(`${n}/api/runtime/callback/file-changed`,t,{headers:c})}catch(e){if(w(e)===401&&await L(n,c?.["X-Runtime-Token"])){const o=k(void 0,n);if(o)try{await m.post(`${n}/api/runtime/callback/file-changed`,t,{headers:o});return}catch{}}}finally{const e={category:"file_changed",agentId:"",sessionId:null,workspacePath:t.workspacePath,filePath:t.filePath,eventType:t.eventType,size:t.size};B.append(e)}}function ee(t,n){const c=U.get(t);if(!c||!n)return;const e=`${c.outputBuffer}${n}`;if(e.length<=M){c.outputBuffer=e;return}const o=`\r
3
3
  [AgentsWorkStudio: omitted ${e.length-M} chars of old terminal output]\r
4
- `,u=Math.max(0,M-o.length);c.outputBuffer=`${o}${e.slice(-u)}`}function F(t){const r=U.get(t);r&&(r.flushTimer||(r.flushTimer=setTimeout(()=>{r.flushTimer=null,q(t).catch(()=>{})},O)))}async function q(t){const r=U.get(t);if(!r||r.flushInFlight||!r.outputBuffer)return;const c=r.outputBuffer.slice(0,g);r.outputBuffer=r.outputBuffer.slice(g);const e=(async()=>{const i=r.seq+1;r.seq=i,await D(r.agentId,c,t,i),U.get(t)?.outputBuffer&&F(t)})();r.flushInFlight=e;try{await e}finally{const i=U.get(t);i&&(i.flushInFlight=null)}}export{I as appendSessionOutput,B as bridgeEventBuffer,q as flushSessionOutput,F as scheduleOutputFlush,Z as sendFileChanged,D as sendOutput,V as sendQuestionRequest,J as sendStatus,Y as sendToolAuthRequest,U as sessions};
4
+ `,a=Math.max(0,M-o.length);c.outputBuffer=`${o}${e.slice(-a)}`}function X(t){const n=U.get(t);n&&(n.flushTimer||(n.flushTimer=setTimeout(()=>{n.flushTimer=null,q(t).catch(()=>{})},D)))}async function q(t){const n=U.get(t);if(!n||n.flushInFlight||!n.outputBuffer)return;const c=n.outputBuffer.slice(0,g);n.outputBuffer=n.outputBuffer.slice(g);const e=(async()=>{const r=n.seq+1;n.seq=r,await F(n.agentId,c,t,r),U.get(t)?.outputBuffer&&X(t)})();n.flushInFlight=e;try{await e}finally{const r=U.get(t);r&&(r.flushInFlight=null)}}export{ee as appendSessionOutput,B as bridgeEventBuffer,q as flushSessionOutput,X as scheduleOutputFlush,I as sendFileChanged,F as sendOutput,Y as sendQuestionRequest,V as sendStatus,Z as sendToolAuthRequest,U as sessions};
5
5
 
@@ -1,4 +1,23 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+ import { type UserScope } from "./user-scope.js";
2
21
  export interface DeployedSkillEntry {
3
22
  skillName: string;
4
23
  zipFile: string;
@@ -16,9 +35,15 @@ export interface DeployedSkillResult {
16
35
 
17
36
  export declare function isValidSkillName(name: unknown): name is string;
18
37
  export declare class SkillManager {
38
+ private readonly scope;
19
39
  private readonly rootDir;
20
- private static _instance;
21
- static getInstance(): SkillManager;
40
+ private static instances;
41
+
42
+
43
+
44
+
45
+
46
+ static forScope(scope: UserScope): SkillManager;
22
47
  private constructor();
23
48
  private manifestFile;
24
49
  private skillDir;
@@ -26,6 +51,11 @@ export declare class SkillManager {
26
51
  private readManifest;
27
52
  private writeManifest;
28
53
 
54
+
55
+
56
+
57
+
58
+
29
59
  saveSharedSkill(zipBuffer: Buffer, originalName: string, defaultEnabled?: boolean, sha256?: string, requestedSkillName?: string): Promise<DeployedSkillResult>;
30
60
 
31
61
  removeDeployedSkill(skillName: string): Promise<{
@@ -39,6 +69,9 @@ export declare class SkillManager {
39
69
  private readPrivateManifest;
40
70
  private writePrivateManifest;
41
71
 
72
+
73
+
74
+
42
75
  savePrivateSkill(agentId: string, zipBuffer: Buffer, originalName: string, sha256?: string, requestedSkillName?: string): Promise<DeployedSkillResult>;
43
76
 
44
77
  removePrivateSkill(agentId: string, skillName: string): Promise<{
@@ -50,7 +83,11 @@ export declare class SkillManager {
50
83
 
51
84
  deployedDefaultEnabled(): Record<string, boolean>;
52
85
 
53
- private applyToKnownAgents;
86
+
87
+
88
+
89
+ private applyToUserAgents;
54
90
  }
55
- export declare const skillManager: SkillManager;
56
- export declare const reconcileSkillsDefaultsFromDeployed: () => number;
91
+
92
+ export declare function getSkillManager(scope: UserScope): SkillManager;
93
+ export declare const reconcileSkillsDefaultsFromDeployed: (scope: UserScope) => number;
@@ -1,4 +1,4 @@
1
- import{promises as F,cpSync as S,existsSync as l,mkdirSync as D,readFileSync as E,readdirSync as x,rmSync as f,writeFileSync as P}from"node:fs";import i from"node:path";import{getBridgeInstancePrivateSkillsDir as b,getBridgeInstancePrivateSkillsManifest as O,getBridgeTemplateSkillsDir as _}from"../config.js";import{extractSkillZip as z,resolveSkillSourceDirFromExtractRoot as N}from"../utils/file-utils.js";import{createLogger as J}from"../utils/logger.js";import{getSkillFarmRoot as R,syncAgentSkillFarm as j}from"./agent-capability-sync.js";import{setDeployedDefaultsProvider as T,reconcileDefaultsFromDeployed as H}from"./capability-config.js";import{getAgentInitRoot as L}from"./instance-state.js";const d=J("skill-manager");function w(v){return typeof v=="string"&&v.length>0&&v.length<=128&&/^[a-zA-Z0-9_.-]+$/.test(v)}const A=1;class ${static getInstance(){return this._instance||(this._instance=new $(i.join(_(),"deployed"))),this._instance}constructor(r){this.rootDir=r}manifestFile(){return i.join(this.rootDir,"manifest.json")}skillDir(r){const e=i.join(this.rootDir,r),t=i.resolve(this.rootDir);if(i.resolve(e)!==i.join(t,r))throw new Error(`\u6280\u80FD\u76EE\u5F55\u8D8A\u51FA\u90E8\u7F72\u533A: ${r}`);return e}isHealthy(r){return l(i.join(this.skillDir(r),"SKILL.md"))}readManifest(){try{const r=JSON.parse(E(this.manifestFile(),"utf8"));return Array.isArray(r.skills)?r.skills.filter(e=>e&&e.skillName):[]}catch{return[]}}writeManifest(r){D(this.rootDir,{recursive:!0}),P(this.manifestFile(),`${JSON.stringify({version:A,skills:r},null,2)}
2
- `,"utf8")}async saveSharedSkill(r,e,t=!0,o,g){if(!r||r.length===0)return{ok:!1,error:"zip \u5305\u5185\u5BB9\u4E3A\u7A7A"};const y=i.join(L("_tmp"),`skill-deploy-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{await K(r,y);const n=await N(y),a=i.basename(i.resolve(n)),M=String(e||"").replace(/\.zip$/i,"").trim(),s=g&&g.trim()||(a&&!a.startsWith("skill-deploy-")?a:"")||M;if(!w(s))return{ok:!1,error:`\u6280\u80FD\u540D\u975E\u6CD5: ${JSON.stringify(s)}`};if(!l(i.join(n,"SKILL.md")))return{ok:!1,error:`\u6280\u80FD\u5305\u7F3A\u5C11 SKILL.md: ${e}`};const c=this.readManifest().find(m=>m.skillName===s);if(c&&c.sha256===o&&this.isHealthy(s))return{ok:!0,skillName:s};D(this.rootDir,{recursive:!0});const u=this.skillDir(s),h=i.join(this.rootDir,`.old-${s}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);if(l(u))try{S(u,h,{recursive:!0})}catch{f(u,{recursive:!0,force:!0})}try{S(n,u,{recursive:!0})}catch(m){throw l(h)&&(f(u,{recursive:!0,force:!0}),S(h,u,{recursive:!0})),m}l(h)&&f(h,{recursive:!0,force:!0});const k=this.readManifest().filter(m=>m.skillName!==s);return k.push({skillName:s,zipFile:c?.zipFile??`${s}.zip`,fileName:e,defaultEnabled:t,sha256:o}),this.writeManifest(k),d.info("[shared] \u6280\u80FD\u5DF2\u90E8\u7F72\u5230 bridge: %s\uFF08\u6765\u6E90 %s%s\uFF09",s,e,o?`, sha256=${o.slice(0,12)}\u2026`:""),this.applyToKnownAgents(),{ok:!0,skillName:s}}catch(n){const a=n instanceof Error?n.message:String(n);return d.warn("[shared] \u6280\u80FD\u90E8\u7F72\u5931\u8D25\uFF08%s\uFF09: %s",e,a),{ok:!1,error:`\u6280\u80FD\u90E8\u7F72\u5931\u8D25: ${a}`}}finally{try{f(y,{recursive:!0,force:!0})}catch{}}}async removeDeployedSkill(r){if(!w(r))return{ok:!1,error:"skillName \u975E\u6CD5"};const e=this.readManifest().filter(t=>t.skillName!==r);this.writeManifest(e);try{f(this.skillDir(r),{recursive:!0,force:!0})}catch(t){return{ok:!1,error:`\u90E8\u7F72\u76EE\u5F55\u6E05\u7406\u5931\u8D25: ${t instanceof Error?t.message:String(t)}`}}return this.applyToKnownAgents(),d.info("[shared] \u6280\u80FD\u5DF2\u4ECE bridge \u79FB\u9664\u90E8\u7F72: %s",r),{ok:!0}}listDeployed(){return this.readManifest().filter(r=>!/^skill-deploy-/.test(r.skillName)).map(r=>({...r,deployed:this.isHealthy(r.skillName)}))}privateManifestFile(r){return O(r)}privateSkillDir(r,e){const t=i.resolve(b(r)),o=i.join(t,e);if(i.resolve(o)!==i.join(t,e))throw new Error(`\u79C1\u6709\u6280\u80FD\u76EE\u5F55\u8D8A\u51FA\u5B9E\u4F8B\u79C1\u6709\u533A: ${e}`);return o}readPrivateManifest(r){try{const e=JSON.parse(E(this.privateManifestFile(r),"utf8"));return Array.isArray(e.skills)?e.skills.filter(t=>t&&t.skillName):[]}catch{return[]}}writePrivateManifest(r,e){const t=this.privateManifestFile(r);D(i.dirname(t),{recursive:!0}),P(t,`${JSON.stringify({version:A,skills:e},null,2)}
3
- `,"utf8")}async savePrivateSkill(r,e,t,o,g){if(!r)return{ok:!1,error:"agentId is required"};if(!e||e.length===0)return{ok:!1,error:"zip \u5305\u5185\u5BB9\u4E3A\u7A7A"};const y=i.join(L("_tmp"),`skill-private-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{await K(e,y);const n=await N(y),a=i.basename(i.resolve(n)),M=String(t||"").replace(/\.zip$/i,"").trim(),s=g&&g.trim()||(a&&!a.startsWith("skill-private-")?a:"")||M;if(!w(s))return{ok:!1,error:`\u6280\u80FD\u540D\u975E\u6CD5: ${JSON.stringify(s)}`};if(!l(i.join(n,"SKILL.md")))return{ok:!1,error:`\u6280\u80FD\u5305\u7F3A\u5C11 SKILL.md: ${t}`};const c=this.privateSkillDir(r,s),u=b(r);D(u,{recursive:!0});const h=this.readPrivateManifest(r).find(p=>p.skillName===s);if(h&&h.sha256===o&&l(i.join(c,"SKILL.md")))return{ok:!0,skillName:s};const k=i.join(u,`.old-${s}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);if(l(c))try{S(c,k,{recursive:!0})}catch{f(c,{recursive:!0,force:!0})}try{S(n,c,{recursive:!0})}catch(p){throw l(k)&&(f(c,{recursive:!0,force:!0}),S(k,c,{recursive:!0})),p}l(k)&&f(k,{recursive:!0,force:!0});const m=this.readPrivateManifest(r).filter(p=>p.skillName!==s);m.push({skillName:s,zipFile:h?.zipFile??`${s}.zip`,fileName:t,defaultEnabled:!0,sha256:o}),this.writePrivateManifest(r,m),d.info("[private] agent=%s \u79C1\u6709\u6280\u80FD\u5DF2\u5B89\u88C5: %s\uFF08\u6765\u6E90 %s%s\uFF09",r,s,t,o?`, sha256=${o.slice(0,12)}\u2026`:"");try{j(r)}catch(p){d.warn("[private] agent=%s \u79C1\u6709\u6280\u80FD\u5B89\u88C5\u540E\u540C\u6B65\u519C\u573A\u5931\u8D25: %s",r,p instanceof Error?p.message:String(p))}return{ok:!0,skillName:s}}catch(n){const a=n instanceof Error?n.message:String(n);return d.warn("[private] \u79C1\u6709\u6280\u80FD\u5B89\u88C5\u5931\u8D25\uFF08%s\uFF09: %s",t,a),{ok:!1,error:`\u79C1\u6709\u6280\u80FD\u5B89\u88C5\u5931\u8D25: ${a}`}}finally{try{f(y,{recursive:!0,force:!0})}catch{}}}async removePrivateSkill(r,e){if(!r)return{ok:!1,error:"agentId is required"};if(!w(e))return{ok:!1,error:"skillName \u975E\u6CD5"};const t=this.readPrivateManifest(r).filter(o=>o.skillName!==e);this.writePrivateManifest(r,t);try{f(this.privateSkillDir(r,e),{recursive:!0,force:!0})}catch(o){return{ok:!1,error:`\u79C1\u6709\u6280\u80FD\u76EE\u5F55\u6E05\u7406\u5931\u8D25: ${o instanceof Error?o.message:String(o)}`}}try{j(r)}catch{}return d.info("[private] agent=%s \u79C1\u6709\u6280\u80FD\u5DF2\u79FB\u9664: %s",r,e),{ok:!0}}listPrivateSkills(r){return r?this.readPrivateManifest(r).filter(e=>!/^skill-private-/.test(e.skillName)).map(e=>({...e,deployed:l(i.join(this.privateSkillDir(r,e.skillName),"SKILL.md"))})):[]}deployedDefaultEnabled(){const r={};for(const e of this.readManifest())/^skill-deploy-/.test(e.skillName)||(r[e.skillName]=e.defaultEnabled);return r}applyToKnownAgents(){const r=new Set,e=R();try{if(l(e))for(const t of x(e))t.startsWith(".")||r.add(t)}catch{}for(const t of r)try{j(t)}catch(o){d.warn("[shared] \u540C\u6B65\u6280\u80FD\u519C\u573A\u5931\u8D25 agent=%s: %s",t,o instanceof Error?o.message:String(o))}}}$._instance=null;async function K(v,r){const e=i.join(L("_tmp"),`skill-${Date.now()}-${Math.random().toString(36).slice(2,8)}.zip`);await F.mkdir(i.dirname(e),{recursive:!0}),await F.writeFile(e,v);try{await z(e,r)}finally{await F.rm(e,{force:!0}).catch(()=>{})}}const I=$.getInstance();T("skills",()=>I.deployedDefaultEnabled());const U=()=>H("skills");export{$ as SkillManager,w as isValidSkillName,U as reconcileSkillsDefaultsFromDeployed,I as skillManager};
1
+ import{promises as F,cpSync as d,existsSync as p,mkdirSync as D,readFileSync as E,rmSync as h,writeFileSync as P}from"node:fs";import i from"node:path";import{getBridgeInstancePrivateSkillsDir as N,getBridgeInstancePrivateSkillsManifest as z}from"../config.js";import{runExclusiveConfigWrite as w}from"../utils/config-write-queue.js";import{extractSkillZip as K,resolveSkillSourceDirFromExtractRoot as A}from"../utils/file-utils.js";import{createLogger as J}from"../utils/logger.js";import{syncAgentSkillFarm as L}from"./agent-capability-sync.js";import{listAgentsOwnedBy as R}from"./agent-ownership.js";import{setDeployedDefaultsProvider as _,reconcileDefaultsFromDeployed as T}from"./capability-config.js";import{getAgentInitRoot as j}from"./instance-state.js";import{getUserSkillsDeployedDir as U}from"./user-scope.js";const v=J("skill-manager");function M(a){return typeof a=="string"&&a.length>0&&a.length<=128&&/^[a-zA-Z0-9_.-]+$/.test(a)}const x=1;class g{static forScope(r){const e=U(r),t=i.resolve(e);let o=this.instances.get(t);return o||(o=new g(r,e),this.instances.set(t,o)),o}constructor(r,e){this.scope=r,this.rootDir=e}manifestFile(){return i.join(this.rootDir,"manifest.json")}skillDir(r){const e=i.join(this.rootDir,r),t=i.resolve(this.rootDir);if(i.resolve(e)!==i.join(t,r))throw new Error(`\u6280\u80FD\u76EE\u5F55\u8D8A\u51FA\u90E8\u7F72\u533A: ${r}`);return e}isHealthy(r){return p(i.join(this.skillDir(r),"SKILL.md"))}readManifest(){try{const r=JSON.parse(E(this.manifestFile(),"utf8"));return Array.isArray(r.skills)?r.skills.filter(e=>e&&e.skillName):[]}catch{return[]}}writeManifest(r){D(this.rootDir,{recursive:!0}),P(this.manifestFile(),`${JSON.stringify({version:x,skills:r},null,2)}
2
+ `,"utf8")}async saveSharedSkill(r,e,t=!0,o,S){if(!r||r.length===0)return{ok:!1,error:"zip \u5305\u5185\u5BB9\u4E3A\u7A7A"};const y=i.join(j("_tmp"),`skill-deploy-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{await b(r,y);const n=await A(y),l=i.basename(i.resolve(n)),$=String(e||"").replace(/\.zip$/i,"").trim(),s=S&&S.trim()||(l&&!l.startsWith("skill-deploy-")?l:"")||$;if(!M(s))return{ok:!1,error:`\u6280\u80FD\u540D\u975E\u6CD5: ${JSON.stringify(s)}`};if(!p(i.join(n,"SKILL.md")))return{ok:!1,error:`\u6280\u80FD\u5305\u7F3A\u5C11 SKILL.md: ${e}`};const u=this.readManifest().find(c=>c.skillName===s);if(u&&u.sha256===o&&this.isHealthy(s))return{ok:!0,skillName:s};D(this.rootDir,{recursive:!0});const m=this.skillDir(s),k=i.join(this.rootDir,`.old-${s}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);if(p(m))try{d(m,k,{recursive:!0})}catch{h(m,{recursive:!0,force:!0})}try{d(n,m,{recursive:!0})}catch(c){throw p(k)&&(h(m,{recursive:!0,force:!0}),d(k,m,{recursive:!0})),c}return p(k)&&h(k,{recursive:!0,force:!0}),await w(this.manifestFile(),()=>{const c=this.readManifest().filter(f=>f.skillName!==s);c.push({skillName:s,zipFile:u?.zipFile??`${s}.zip`,fileName:e,defaultEnabled:t,sha256:o}),this.writeManifest(c)}),v.info("[shared] \u6280\u80FD\u5DF2\u90E8\u7F72\u5230\u7528\u6237\u5E93: %s\uFF08scope=%s/%s \u6765\u6E90 %s%s\uFF09",s,this.scope.tenantId,this.scope.userId,e,o?`, sha256=${o.slice(0,12)}\u2026`:""),this.applyToUserAgents(),{ok:!0,skillName:s}}catch(n){const l=n instanceof Error?n.message:String(n);return v.warn("[shared] \u6280\u80FD\u90E8\u7F72\u5931\u8D25\uFF08%s\uFF09: %s",e,l),{ok:!1,error:`\u6280\u80FD\u90E8\u7F72\u5931\u8D25: ${l}`}}finally{try{h(y,{recursive:!0,force:!0})}catch{}}}async removeDeployedSkill(r){if(!M(r))return{ok:!1,error:"skillName \u975E\u6CD5"};await w(this.manifestFile(),()=>{const e=this.readManifest().filter(t=>t.skillName!==r);this.writeManifest(e)});try{h(this.skillDir(r),{recursive:!0,force:!0})}catch(e){return{ok:!1,error:`\u90E8\u7F72\u76EE\u5F55\u6E05\u7406\u5931\u8D25: ${e instanceof Error?e.message:String(e)}`}}return this.applyToUserAgents(),v.info("[shared] \u6280\u80FD\u5DF2\u4ECE\u7528\u6237\u5E93\u79FB\u9664\u90E8\u7F72: %s",r),{ok:!0}}listDeployed(){return this.readManifest().filter(r=>!/^skill-deploy-/.test(r.skillName)).map(r=>({...r,deployed:this.isHealthy(r.skillName)}))}privateManifestFile(r){return z(r)}privateSkillDir(r,e){const t=i.resolve(N(r)),o=i.join(t,e);if(i.resolve(o)!==i.join(t,e))throw new Error(`\u79C1\u6709\u6280\u80FD\u76EE\u5F55\u8D8A\u51FA\u5B9E\u4F8B\u79C1\u6709\u533A: ${e}`);return o}readPrivateManifest(r){try{const e=JSON.parse(E(this.privateManifestFile(r),"utf8"));return Array.isArray(e.skills)?e.skills.filter(t=>t&&t.skillName):[]}catch{return[]}}writePrivateManifest(r,e){const t=this.privateManifestFile(r);D(i.dirname(t),{recursive:!0}),P(t,`${JSON.stringify({version:x,skills:e},null,2)}
3
+ `,"utf8")}async savePrivateSkill(r,e,t,o,S){if(!r)return{ok:!1,error:"agentId is required"};if(!e||e.length===0)return{ok:!1,error:"zip \u5305\u5185\u5BB9\u4E3A\u7A7A"};const y=i.join(j("_tmp"),`skill-private-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{await b(e,y);const n=await A(y),l=i.basename(i.resolve(n)),$=String(t||"").replace(/\.zip$/i,"").trim(),s=S&&S.trim()||(l&&!l.startsWith("skill-private-")?l:"")||$;if(!M(s))return{ok:!1,error:`\u6280\u80FD\u540D\u975E\u6CD5: ${JSON.stringify(s)}`};if(!p(i.join(n,"SKILL.md")))return{ok:!1,error:`\u6280\u80FD\u5305\u7F3A\u5C11 SKILL.md: ${t}`};const u=this.privateSkillDir(r,s),m=N(r);D(m,{recursive:!0});const k=this.readPrivateManifest(r).find(f=>f.skillName===s);if(k&&k.sha256===o&&p(i.join(u,"SKILL.md")))return{ok:!0,skillName:s};const c=i.join(m,`.old-${s}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);if(p(u))try{d(u,c,{recursive:!0})}catch{h(u,{recursive:!0,force:!0})}try{d(n,u,{recursive:!0})}catch(f){throw p(c)&&(h(u,{recursive:!0,force:!0}),d(c,u,{recursive:!0})),f}p(c)&&h(c,{recursive:!0,force:!0}),await w(this.privateManifestFile(r),()=>{const f=this.readPrivateManifest(r).filter(O=>O.skillName!==s);f.push({skillName:s,zipFile:k?.zipFile??`${s}.zip`,fileName:t,defaultEnabled:!0,sha256:o}),this.writePrivateManifest(r,f)}),v.info("[private] agent=%s \u79C1\u6709\u6280\u80FD\u5DF2\u5B89\u88C5: %s\uFF08\u6765\u6E90 %s%s\uFF09",r,s,t,o?`, sha256=${o.slice(0,12)}\u2026`:"");try{L(r)}catch(f){v.warn("[private] agent=%s \u79C1\u6709\u6280\u80FD\u5B89\u88C5\u540E\u540C\u6B65\u519C\u573A\u5931\u8D25: %s",r,f instanceof Error?f.message:String(f))}return{ok:!0,skillName:s}}catch(n){const l=n instanceof Error?n.message:String(n);return v.warn("[private] \u79C1\u6709\u6280\u80FD\u5B89\u88C5\u5931\u8D25\uFF08%s\uFF09: %s",t,l),{ok:!1,error:`\u79C1\u6709\u6280\u80FD\u5B89\u88C5\u5931\u8D25: ${l}`}}finally{try{h(y,{recursive:!0,force:!0})}catch{}}}async removePrivateSkill(r,e){if(!r)return{ok:!1,error:"agentId is required"};if(!M(e))return{ok:!1,error:"skillName \u975E\u6CD5"};await w(this.privateManifestFile(r),()=>{const t=this.readPrivateManifest(r).filter(o=>o.skillName!==e);this.writePrivateManifest(r,t)});try{h(this.privateSkillDir(r,e),{recursive:!0,force:!0})}catch(t){return{ok:!1,error:`\u79C1\u6709\u6280\u80FD\u76EE\u5F55\u6E05\u7406\u5931\u8D25: ${t instanceof Error?t.message:String(t)}`}}try{L(r)}catch{}return v.info("[private] agent=%s \u79C1\u6709\u6280\u80FD\u5DF2\u79FB\u9664: %s",r,e),{ok:!0}}listPrivateSkills(r){return r?this.readPrivateManifest(r).filter(e=>!/^skill-private-/.test(e.skillName)).map(e=>({...e,deployed:p(i.join(this.privateSkillDir(r,e.skillName),"SKILL.md"))})):[]}deployedDefaultEnabled(){const r={};for(const e of this.readManifest())/^skill-deploy-/.test(e.skillName)||(r[e.skillName]=e.defaultEnabled);return r}applyToUserAgents(){for(const r of R(this.scope))try{L(r)}catch(e){v.warn("[shared] \u540C\u6B65\u6280\u80FD\u519C\u573A\u5931\u8D25 agent=%s: %s",r,e instanceof Error?e.message:String(e))}}}g.instances=new Map;function Y(a){return g.forScope(a)}async function b(a,r){const e=i.join(j("_tmp"),`skill-${Date.now()}-${Math.random().toString(36).slice(2,8)}.zip`);await F.mkdir(i.dirname(e),{recursive:!0}),await F.writeFile(e,a);try{await K(e,r)}finally{await F.rm(e,{force:!0}).catch(()=>{})}}_("skills",a=>a?g.forScope(a).deployedDefaultEnabled():{});const rr=a=>T(a,"skills");export{g as SkillManager,Y as getSkillManager,M as isValidSkillName,rr as reconcileSkillsDefaultsFromDeployed};
4
4
 
@@ -1,5 +1,28 @@
1
1
 
2
2
 
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
3
26
  export declare function setSnapshotRetentionDays(days: unknown, fromConfig?: boolean): void;
4
27
 
5
28
  export declare function getSnapshotRetentionDays(): number | null;
@@ -6,11 +6,14 @@ interface AutoRegisterTargetConfig {
6
6
  [key: string]: unknown;
7
7
  }
8
8
  interface StartupConfigFile {
9
- connectionKey?: string;
10
9
  autoRegisterTargets?: AutoRegisterTargetConfig[];
11
10
  [key: string]: unknown;
12
11
  }
13
12
 
13
+
14
+
15
+
16
+
14
17
  export declare const MINIMAL_CONFIG_TEMPLATE: StartupConfigFile;
15
18
 
16
19
  export declare function formatConfigExample(template?: object): string;
@@ -29,5 +32,8 @@ export type StartupConfigWizardResult = "exists" | "created" | "configured" | "s
29
32
  export declare function ensureStartupConfig(options?: EnsureStartupConfigOptions): Promise<StartupConfigWizardResult>;
30
33
  export declare function configureStartupConfig(options?: EnsureStartupConfigOptions): Promise<StartupConfigWizardResult>;
31
34
 
35
+
36
+
37
+
32
38
  export declare function printConfigExampleCommand(options?: EnsureStartupConfigOptions): Promise<StartupConfigWizardResult>;
33
39
  export {};
@@ -1,14 +1,14 @@
1
- import{randomBytes as R}from"node:crypto";import{existsSync as m,readFileSync as T}from"node:fs";import v from"node:os";import{stdin as E,stdout as i}from"node:process";import{createInterface as x}from"node:readline/promises";import{atomicWriteJsonFile as _}from"../utils/file-utils.js";import{logger as o}from"../utils/logger.js";import{getAutoRegisterConfigFilePath as d}from"./auto-register.js";const w={autoRegisterTargets:[{instanceName:"<\u5B9E\u4F8B\u540D\u79F0\uFF0C\u4F8B\u5982 \u6211\u7684\u4E3B\u673A>",serverUrl:"http://<\u8C03\u5EA6\u4E2D\u5FC3IP>:<\u7AEF\u53E3>",userKey:"<\u4F60\u7684 userKey>",instanceId:"<\u5B9E\u4F8BID\uFF0C\u9996\u6B21\u53EF\u7559\u7A7A\u7531\u670D\u52A1\u7AEF\u751F\u6210>"}],connectionKey:"<\u9762\u677F\u8FDE\u63A5 Bridge \u7684\u5BC6\u94A5>",panelUsername:"<\u9762\u677F\u7528\u6237\u540D>",panelPassword:"<\u9762\u677F\u5BC6\u7801>"};function $(t=w){return`[runtime-bridge] \u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\uFF08\u8BF7\u5C06 <\u5360\u4F4D\u7B26> \u66FF\u6362\u4E3A\u771F\u5B9E\u503C\u540E\u4FDD\u5B58\uFF09:
1
+ import{randomBytes as T}from"node:crypto";import{existsSync as m,readFileSync as R}from"node:fs";import E from"node:os";import{stdin as x,stdout as i}from"node:process";import{createInterface as _}from"node:readline/promises";import{atomicWriteJsonFile as U}from"../utils/file-utils.js";import{logger as o}from"../utils/logger.js";import{getAutoRegisterConfigFilePath as d}from"./auto-register.js";const w={autoRegisterTargets:[{instanceName:"<\u5B9E\u4F8B\u540D\u79F0\uFF0C\u4F8B\u5982 \u6211\u7684\u4E3B\u673A>",serverUrl:"http://<\u8C03\u5EA6\u4E2D\u5FC3IP>:<\u7AEF\u53E3>",userKey:"<\u4F60\u7684 userKey>",connectionKey:"<\u8BE5 target \u4E13\u7528\u8FDE\u63A5\u5BC6\u94A5\uFF0C\u53EF\u7531\u5411\u5BFC\u751F\u6210>",instanceId:"<\u5B9E\u4F8BID\uFF0C\u9996\u6B21\u53EF\u7559\u7A7A\u7531\u670D\u52A1\u7AEF\u751F\u6210>"}],panelUsername:"<\u9762\u677F\u7528\u6237\u540D>",panelPassword:"<\u9762\u677F\u5BC6\u7801>"};function K(t=w){return`[runtime-bridge] \u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\uFF08\u8BF7\u5C06 <\u5360\u4F4D\u7B26> \u66FF\u6362\u4E3A\u771F\u5B9E\u503C\u540E\u4FDD\u5B58\uFF09:
2
2
  ${JSON.stringify(t,null,2)}
3
- [runtime-bridge] \u8BF4\u660E\uFF1AautoRegisterTargets \u53EF\u5305\u542B\u591A\u4E2A\u76EE\u6807\uFF1BinstanceId \u9996\u6B21\u53EF\u7701\u7565\uFF0C\u7531\u670D\u52A1\u7AEF\u751F\u6210\uFF1BpanelUsername / panelPassword \u4E3A\u53EF\u9009\u9762\u677F\u8BA4\u8BC1\u3002`}function l(t){return t.trim().toLowerCase()}function U(t){return["","y","yes","\u662F","\u597D","\u914D\u7F6E"].includes(l(t))}function B(t){return["n","no","\u5426","\u4E0D","\u8DF3\u8FC7","skip","s"].includes(l(t))}function N(t){if(!m(t))return{};try{const e=JSON.parse(T(t,"utf-8"));return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch(e){const r=e;return o.warn(`[runtime-bridge] \u8BFB\u53D6\u73B0\u6709\u914D\u7F6E\u5931\u8D25\uFF0C\u5C06\u4F7F\u7528\u7A7A\u9ED8\u8BA4\u503C: ${r.message}`),{}}}function k(){return`awsb_${R(24).toString("base64url")}`}async function g(t,e){await _(t,e)}async function p(t,e){const r=e();await g(t,{connectionKey:r});const n=`[runtime-bridge] \u5DF2\u521B\u5EFA\u914D\u7F6E\u6587\u4EF6: ${t}
4
- [runtime-bridge] \u81EA\u52A8\u751F\u6210 connectionKey: ${r}
5
- [runtime-bridge] \u8BF7\u4FDD\u5B58\u8BE5 connectionKey\uFF1Bserver/\u9762\u677F\u8FDE\u63A5\u6B64 Bridge \u65F6\u9700\u8981\u4F7F\u7528\u5B83\u3002`;o.info(n),i.write(`${n}
6
- `)}async function y(t,e,r){return(await t.question(`${e}\uFF08\u9ED8\u8BA4\u4F7F\u7528\u5F53\u524D\u503C ${r}\uFF0C\u76F4\u63A5\u56DE\u8F66\u4FDD\u7559\uFF09: `)).trim()||r}const h=10;async function b(t,e,r){let n=0;for(;;){const a=(await t.question(r?`${e}\uFF08\u9ED8\u8BA4\u4F7F\u7528\u5F53\u524D\u503C ${r}\uFF0C\u76F4\u63A5\u56DE\u8F66\u4FDD\u7559\uFF09: `:`${e}: `)).trim();if(a)return a;if(r)return r;if(n++,n>=h)throw new Error(`${e} \u8F93\u5165\u8D85\u8FC7\u6700\u5927\u91CD\u8BD5\u6B21\u6570\uFF08${h}\uFF09\uFF0C\u9000\u51FA\u914D\u7F6E\u5F15\u5BFC`);i.write(`${e} \u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165\u3002
7
- `)}}async function Y(t){for(;;){const e=await t.question(`\u672A\u68C0\u6D4B\u5230 ${d()}\uFF0C\u662F\u5426\u73B0\u5728\u8FDB\u5165\u81EA\u52A8\u6CE8\u518C\u914D\u7F6E\u5F15\u5BFC\uFF1F(Y/n): `);if(U(e))return!0;if(B(e))return!1;i.write(`\u8BF7\u8F93\u5165 Y \u7EE7\u7EED\u914D\u7F6E\uFF0C\u6216\u8F93\u5165 n \u8DF3\u8FC7\u3002
8
- `)}}async function q(t){for(;;){const e=await t.question("\u672A\u68C0\u6D4B\u5230\u914D\u7F6E\u6587\u4EF6\uFF0C\u8BF7\u9009\u62E9\u914D\u7F6E\u65B9\u5F0F\uFF1A[1] \u5B8C\u6574\u9010\u6B65\u5F15\u5BFC [2] \u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\uFF08\u751F\u6210\u5360\u4F4D\u7B26\u6A21\u677F\uFF0C\u7A0D\u540E\u624B\u52A8\u586B\u5199\uFF09 (\u9ED8\u8BA4 1): "),r=l(e);if(r===""||r==="1"||r==="full"||r==="\u5B8C\u6574"||r==="\u5F15\u5BFC")return"full";if(r==="2"||r==="minimal"||r==="\u6700\u5C0F"||r==="\u793A\u4F8B")return"minimal";i.write(`\u8BF7\u8F93\u5165 1\uFF08\u5B8C\u6574\u5F15\u5BFC\uFF09\u6216 2\uFF08\u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\uFF09\u3002
9
- `)}}async function I(t,e={}){const r=e.autoRegisterTargets?.[0]||{},n="http://127.0.0.1:8080",a=v.hostname()||"AgentsWork Runtime Bridge",c=r.registerAddr||r.registerIp||"127.0.0.1",u=await b(t,"connectionKey\uFF08\u9762\u677F\u8FDE\u63A5 Bridge \u7684\u5BC6\u94A5\uFF09",e.connectionKey),f=await y(t,"serverUrl\uFF08\u8C03\u5EA6\u4E2D\u5FC3\u5730\u5740\uFF09",r.serverUrl||n),S=await y(t,"instanceName\uFF08\u5B9E\u4F8B\u540D\u79F0\uFF09",r.instanceName||a),A=await b(t,"userKey\uFF08\u7528\u6237 API Key\uFF09",r.userKey),P=await y(t,"registerAddr\uFF08Bridge \u5BF9\u5916\u8BBF\u95EE\u5730\u5740\uFF0C\u652F\u6301 host:port / \u7EAF host / \u5B8C\u6574 URL\uFF09",c),C={...r};return delete C.registerIp,{...e,connectionKey:u,autoRegisterTargets:[{...C,serverUrl:f,instanceName:S,userKey:A,registerAddr:P}]}}async function K(t){return{prompt:t.prompt||x({input:E,output:i,terminal:!0}),shouldClosePrompt:!t.prompt}}async function J(t={}){const e=t.configPath||d(),r=t.generateConnectionKey||k;if(m(e))return"exists";if((t.env||process.env).AWS_BRIDGE_SKIP_SETUP==="true")return await p(e,r),o.info("[runtime-bridge] AWS_BRIDGE_SKIP_SETUP=true\uFF0C\u8DF3\u8FC7\u9996\u6B21\u914D\u7F6E\u5F15\u5BFC"),"skipped";if(!(t.interactive??!!(process.stdin.isTTY&&process.stdout.isTTY)))return await p(e,r),o.info(`[runtime-bridge] \u672A\u68C0\u6D4B\u5230\u914D\u7F6E\u6587\u4EF6: ${e}\uFF1B\u5F53\u524D\u4E3A\u975E\u4EA4\u4E92\u73AF\u5883\uFF0C\u8DF3\u8FC7\u9996\u6B21\u914D\u7F6E\u5F15\u5BFC`),"non-interactive";const{prompt:s,shouldClosePrompt:c}=await K(t);try{if(!await Y(s))return await p(e,r),o.info("[runtime-bridge] \u5DF2\u8DF3\u8FC7\u9996\u6B21\u914D\u7F6E\u5F15\u5BFC"),"skipped";const f=await I(s);return await g(e,f),o.info(`[runtime-bridge] \u5DF2\u5199\u5165\u914D\u7F6E\u6587\u4EF6: ${e}`),"created"}catch(u){const f=u;return o.warn(`[runtime-bridge] \u9996\u6B21\u914D\u7F6E\u5F15\u5BFC\u5931\u8D25: ${f.message}`),"failed"}finally{c&&s.close()}}async function z(t={}){const e=t.configPath||d();if(!(t.interactive??!!(process.stdin.isTTY&&process.stdout.isTTY)))return o.warn("[runtime-bridge] awsb config \u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF"),"failed";const{prompt:n,shouldClosePrompt:a}=await K(t);try{const s=N(e);if(!m(e)&&await q(n)==="minimal")return i.write($()),await g(e,w),i.write(`[runtime-bridge] \u5DF2\u5C06\u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\u6A21\u677F\u5199\u5165: ${e}
3
+ [runtime-bridge] \u8BF4\u660E\uFF1AconnectionKey \u5C5E\u4E8E\u6BCF\u4E2A target\uFF0C\u591A\u4E2A target \u4E0D\u5F97\u5171\u7528\uFF1BinstanceId \u9996\u6B21\u53EF\u7701\u7565\uFF0C\u7531\u670D\u52A1\u7AEF\u751F\u6210\uFF1BpanelUsername / panelPassword \u4E3A\u53EF\u9009\u9762\u677F\u8BA4\u8BC1\u3002`}function l(t){return t.trim().toLowerCase()}function N(t){return["","y","yes","\u662F","\u597D","\u914D\u7F6E"].includes(l(t))}function k(t){return["n","no","\u5426","\u4E0D","\u8DF3\u8FC7","skip","s"].includes(l(t))}function B(t){if(!m(t))return{};try{const e=JSON.parse(R(t,"utf-8"));return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch(e){const n=e;return o.warn(`[runtime-bridge] \u8BFB\u53D6\u73B0\u6709\u914D\u7F6E\u5931\u8D25\uFF0C\u5C06\u4F7F\u7528\u7A7A\u9ED8\u8BA4\u503C: ${n.message}`),{}}}function Y(){return`awsb_${T(24).toString("base64url")}`}async function g(t,e){await U(t,e)}async function p(t,e){const n=e();await g(t,{connectionKey:n});const r=`[runtime-bridge] \u5DF2\u521B\u5EFA\u914D\u7F6E\u6587\u4EF6: ${t}
4
+ [runtime-bridge] \u81EA\u52A8\u751F\u6210 connectionKey: ${n}
5
+ [runtime-bridge] \u8BF7\u4FDD\u5B58\u8BE5 connectionKey\uFF1Bserver/\u9762\u677F\u8FDE\u63A5\u6B64 Bridge \u65F6\u9700\u8981\u4F7F\u7528\u5B83\u3002`;o.info(r),i.write(`${r}
6
+ `)}async function y(t,e,n){return(await t.question(`${e}\uFF08\u9ED8\u8BA4\u4F7F\u7528\u5F53\u524D\u503C ${n}\uFF0C\u76F4\u63A5\u56DE\u8F66\u4FDD\u7559\uFF09: `)).trim()||n}const $=10;async function b(t,e,n){let r=0;for(;;){const a=(await t.question(n?`${e}\uFF08\u9ED8\u8BA4\u4F7F\u7528\u5F53\u524D\u503C ${n}\uFF0C\u76F4\u63A5\u56DE\u8F66\u4FDD\u7559\uFF09: `:`${e}: `)).trim();if(a)return a;if(n)return n;if(r++,r>=$)throw new Error(`${e} \u8F93\u5165\u8D85\u8FC7\u6700\u5927\u91CD\u8BD5\u6B21\u6570\uFF08${$}\uFF09\uFF0C\u9000\u51FA\u914D\u7F6E\u5F15\u5BFC`);i.write(`${e} \u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165\u3002
7
+ `)}}async function W(t){for(;;){const e=await t.question(`\u672A\u68C0\u6D4B\u5230 ${d()}\uFF0C\u662F\u5426\u73B0\u5728\u8FDB\u5165\u81EA\u52A8\u6CE8\u518C\u914D\u7F6E\u5F15\u5BFC\uFF1F(Y/n): `);if(N(e))return!0;if(k(e))return!1;i.write(`\u8BF7\u8F93\u5165 Y \u7EE7\u7EED\u914D\u7F6E\uFF0C\u6216\u8F93\u5165 n \u8DF3\u8FC7\u3002
8
+ `)}}async function q(t){for(;;){const e=await t.question("\u672A\u68C0\u6D4B\u5230\u914D\u7F6E\u6587\u4EF6\uFF0C\u8BF7\u9009\u62E9\u914D\u7F6E\u65B9\u5F0F\uFF1A[1] \u5B8C\u6574\u9010\u6B65\u5F15\u5BFC [2] \u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\uFF08\u751F\u6210\u5360\u4F4D\u7B26\u6A21\u677F\uFF0C\u7A0D\u540E\u624B\u52A8\u586B\u5199\uFF09 (\u9ED8\u8BA4 1): "),n=l(e);if(n===""||n==="1"||n==="full"||n==="\u5B8C\u6574"||n==="\u5F15\u5BFC")return"full";if(n==="2"||n==="minimal"||n==="\u6700\u5C0F"||n==="\u793A\u4F8B")return"minimal";i.write(`\u8BF7\u8F93\u5165 1\uFF08\u5B8C\u6574\u5F15\u5BFC\uFF09\u6216 2\uFF08\u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\uFF09\u3002
9
+ `)}}async function S(t,e={}){const n=e.autoRegisterTargets?.[0]||{},r="http://127.0.0.1:8080",a=E.hostname()||"AgentsWork Runtime Bridge",c=n.registerAddr||n.registerIp||"127.0.0.1",u=await b(t,"connectionKey\uFF08\u8BE5 target \u4E13\u7528\u8FDE\u63A5\u5BC6\u94A5\uFF09",String(n.connectionKey||e.connectionKey||"").trim()||void 0),f=await y(t,"serverUrl\uFF08\u8C03\u5EA6\u4E2D\u5FC3\u5730\u5740\uFF09",n.serverUrl||r),v=await y(t,"instanceName\uFF08\u5B9E\u4F8B\u540D\u79F0\uFF09",n.instanceName||a),A=await b(t,"userKey\uFF08\u7528\u6237 API Key\uFF09",n.userKey),P=await y(t,"registerAddr\uFF08Bridge \u5BF9\u5916\u8BBF\u95EE\u5730\u5740\uFF0C\u652F\u6301 host:port / \u7EAF host / \u5B8C\u6574 URL\uFF09",c),C={...n};delete C.registerIp;const h={...e};return delete h.connectionKey,{...h,autoRegisterTargets:[{...C,serverUrl:f,instanceName:v,userKey:A,connectionKey:u,registerAddr:P}]}}async function I(t){return{prompt:t.prompt||_({input:x,output:i,terminal:!0}),shouldClosePrompt:!t.prompt}}async function z(t={}){const e=t.configPath||d(),n=t.generateConnectionKey||Y;if(m(e))return"exists";if((t.env||process.env).AWS_BRIDGE_SKIP_SETUP==="true")return await p(e,n),o.info("[runtime-bridge] AWS_BRIDGE_SKIP_SETUP=true\uFF0C\u8DF3\u8FC7\u9996\u6B21\u914D\u7F6E\u5F15\u5BFC"),"skipped";if(!(t.interactive??!!(process.stdin.isTTY&&process.stdout.isTTY)))return await p(e,n),o.info(`[runtime-bridge] \u672A\u68C0\u6D4B\u5230\u914D\u7F6E\u6587\u4EF6: ${e}\uFF1B\u5F53\u524D\u4E3A\u975E\u4EA4\u4E92\u73AF\u5883\uFF0C\u8DF3\u8FC7\u9996\u6B21\u914D\u7F6E\u5F15\u5BFC`),"non-interactive";const{prompt:s,shouldClosePrompt:c}=await I(t);try{if(!await W(s))return await p(e,n),o.info("[runtime-bridge] \u5DF2\u8DF3\u8FC7\u9996\u6B21\u914D\u7F6E\u5F15\u5BFC"),"skipped";const f=await S(s);return await g(e,f),o.info(`[runtime-bridge] \u5DF2\u5199\u5165\u914D\u7F6E\u6587\u4EF6: ${e}`),"created"}catch(u){const f=u;return o.warn(`[runtime-bridge] \u9996\u6B21\u914D\u7F6E\u5F15\u5BFC\u5931\u8D25: ${f.message}`),"failed"}finally{c&&s.close()}}async function Q(t={}){const e=t.configPath||d();if(!(t.interactive??!!(process.stdin.isTTY&&process.stdout.isTTY)))return o.warn("[runtime-bridge] awsb config \u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF"),"failed";const{prompt:r,shouldClosePrompt:a}=await I(t);try{const s=B(e);if(!m(e)&&await q(r)==="minimal")return i.write(K()),await g(e,w),i.write(`[runtime-bridge] \u5DF2\u5C06\u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\u6A21\u677F\u5199\u5165: ${e}
10
10
  `),i.write(`[runtime-bridge] \u8BF7\u5C06 <\u5360\u4F4D\u7B26> \u66FF\u6362\u4E3A\u771F\u5B9E\u503C\u540E\u4FDD\u5B58\u3002
11
- `),"created";const u=await I(n,s);return await g(e,u),o.info(`[runtime-bridge] \u5DF2\u66F4\u65B0\u914D\u7F6E\u6587\u4EF6: ${e}`),"configured"}catch(s){const c=s;return o.warn(`[runtime-bridge] \u914D\u7F6E\u5F15\u5BFC\u5931\u8D25: ${c.message}`),"failed"}finally{a&&n.close()}}async function Q(t={}){const e=t.configPath||d();i.write($());try{return await g(e,w),i.write(`[runtime-bridge] \u5DF2\u5C06\u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\u6A21\u677F\u5199\u5165: ${e}
11
+ `),"created";const u=await S(r,s);return await g(e,u),o.info(`[runtime-bridge] \u5DF2\u66F4\u65B0\u914D\u7F6E\u6587\u4EF6: ${e}`),"configured"}catch(s){const c=s;return o.warn(`[runtime-bridge] \u914D\u7F6E\u5F15\u5BFC\u5931\u8D25: ${c.message}`),"failed"}finally{a&&r.close()}}async function X(t={}){const e=t.configPath||d();i.write(K());try{return await g(e,w),i.write(`[runtime-bridge] \u5DF2\u5C06\u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\u6A21\u677F\u5199\u5165: ${e}
12
12
  `),i.write(`[runtime-bridge] \u8BF7\u5C06 <\u5360\u4F4D\u7B26> \u66FF\u6362\u4E3A\u771F\u5B9E\u503C\u540E\u4FDD\u5B58\u3002
13
- `),"created"}catch(r){const n=r;return o.warn(`[runtime-bridge] \u5199\u5165\u793A\u4F8B\u6A21\u677F\u5931\u8D25: ${n.message}`),"failed"}}export{w as MINIMAL_CONFIG_TEMPLATE,z as configureStartupConfig,J as ensureStartupConfig,$ as formatConfigExample,Q as printConfigExampleCommand};
13
+ `),"created"}catch(n){const r=n;return o.warn(`[runtime-bridge] \u5199\u5165\u793A\u4F8B\u6A21\u677F\u5931\u8D25: ${r.message}`),"failed"}}export{w as MINIMAL_CONFIG_TEMPLATE,Q as configureStartupConfig,z as ensureStartupConfig,K as formatConfigExample,X as printConfigExampleCommand};
14
14
 
@@ -33,4 +33,7 @@ export interface SystemMetricsSnapshot {
33
33
  network: SystemNetworkMetrics;
34
34
  }
35
35
 
36
+
37
+
38
+
36
39
  export declare function collectSystemMetrics(): Promise<SystemMetricsSnapshot>;
@@ -1,5 +1,13 @@
1
1
 
2
2
 
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
3
11
  export type LaunchStackType = "generic" | "java" | "python" | "node" | "go" | "php";
4
12
  export interface TechStackCandidate {
5
13
 
@@ -28,4 +36,8 @@ export interface TechStackScanResult {
28
36
  candidates: TechStackCandidate[];
29
37
  }
30
38
 
39
+
40
+
41
+
42
+
31
43
  export declare function scanTechStack(workspacePath: string): Promise<TechStackScanResult>;
@@ -1,19 +1,48 @@
1
1
 
2
+
3
+
4
+
5
+
2
6
  import type { PersistedSession } from '../types.js';
3
7
 
8
+
9
+
10
+
11
+
4
12
  export declare function getPersistedSessionsFile(): string;
5
13
 
14
+
15
+
16
+
17
+
6
18
  export declare function loadPersistedSessions(): Promise<PersistedSession[]>;
7
19
 
20
+
21
+
22
+
23
+
8
24
  export declare function savePersistedSessions(sessions: PersistedSession[]): Promise<void>;
9
25
 
26
+
27
+
28
+
29
+
10
30
  export declare function upsertPersistedSession(session: PersistedSession): Promise<void>;
11
31
 
32
+
33
+
34
+
35
+
12
36
  export declare function updatePersistedSessionAutoCommands(agentId: string, commands: {
13
37
  idleInputAutoCommand: string;
14
38
  nonInputAutoCommand: string;
15
39
  }): Promise<boolean>;
16
40
 
41
+
42
+
43
+
44
+
45
+
17
46
  export declare function updatePersistedSessionRuntimeState(sessionId: string, runtimeState: {
18
47
  runtimeStatus: string;
19
48
  runtimeActionType?: string;
@@ -21,8 +50,22 @@ export declare function updatePersistedSessionRuntimeState(sessionId: string, ru
21
50
  runtimeActionDetail?: string;
22
51
  }): Promise<boolean>;
23
52
 
53
+
54
+
55
+
56
+
24
57
  export declare function removePersistedSession(sessionId: string): Promise<void>;
25
58
 
59
+
60
+
61
+
62
+
63
+
26
64
  export declare function findPersistedSessionByAgentId(agentId: string): Promise<PersistedSession | undefined>;
27
65
 
66
+
67
+
68
+
69
+
70
+
28
71
  export declare function removePersistedSessionByAgentId(agentId: string): Promise<void>;
@@ -11,8 +11,12 @@ type ToolCommand = {
11
11
  export declare const SUPPORTED_INSTALLABLE_TOOLS: readonly string[];
12
12
  export declare const SUPPORTED_UNINSTALLABLE_TOOLS: readonly string[];
13
13
 
14
+
15
+
14
16
  export declare function getToolUninstallCommands(tool: string): string[];
15
17
 
18
+
19
+
16
20
  export declare function getToolCommandSpecs(tool: string, phase: "install" | "uninstall"): Array<{
17
21
  command: string;
18
22
  args: string[];
@@ -29,11 +33,19 @@ export declare function buildSdkCliInstallStatus(tool: string, sdkResult: {
29
33
  error: string | null;
30
34
  }, requiresCli: boolean): ToolInstallStatus;
31
35
 
36
+
37
+
32
38
  export declare function detectToolInstallStatus(tool: string): Promise<ToolInstallStatus>;
33
39
 
40
+
41
+
34
42
  export declare function detectToolStatuses(tools: string[]): Promise<Record<string, ToolInstallStatus>>;
35
43
 
44
+
45
+
36
46
  export declare function ensureToolsInstalled(tools: string[]): Promise<Record<string, ToolInstallStatus>>;
37
47
 
48
+
49
+
38
50
  export declare function uninstallTools(tools: string[]): Promise<Record<string, ToolInstallStatus>>;
39
51
  export {};
@@ -1,4 +1,18 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
2
16
  import WebSocket from "ws";
3
17
  interface LocalStream {
4
18
  ws: WebSocket;
@@ -11,6 +25,13 @@ interface LocalStream {
11
25
  interface TunnelState {
12
26
 
13
27
  serverUrl: string;
28
+
29
+
30
+
31
+
32
+ targetKey: string;
33
+
34
+ userKey?: string;
14
35
  instanceId: string;
15
36
  ws?: WebSocket;
16
37
 
@@ -24,6 +45,10 @@ interface TunnelState {
24
45
  shuttingDown: boolean;
25
46
  }
26
47
 
48
+
49
+
50
+
51
+
27
52
  interface PendingRequestChunks {
28
53
  method: string;
29
54
  path: string;
@@ -32,13 +57,39 @@ interface PendingRequestChunks {
32
57
  timer: NodeJS.Timeout;
33
58
  }
34
59
 
35
- export declare function startTunnelClient(serverUrl: string, instanceId: string): void;
60
+
61
+
62
+
63
+ export declare function startTunnelClient(serverUrl: string, instanceId: string, userKey?: string): void;
36
64
 
37
65
  export declare function stopTunnelClient(): void;
38
66
 
67
+
68
+
69
+
70
+
71
+ export declare function stopTunnelClientForTarget(serverUrl: string, userKey?: string): void;
72
+
73
+
74
+
75
+
39
76
  export declare function stopTunnelClientForServer(serverUrl: string): void;
40
77
 
41
- export declare function stopTunnelClientsExcept(serverUrls: string[]): void;
78
+
79
+
80
+
81
+
82
+
83
+
84
+ export declare function stopTunnelClientsExcept(targetKeys: string[]): void;
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
42
93
 
43
94
  export declare const __tunnelClientTestHooks: {
44
95
  createState(serverUrl?: string, instanceId?: string): TunnelState;
@@ -46,6 +97,10 @@ export declare const __tunnelClientTestHooks: {
46
97
 
47
98
  pendingChunkIds(state: TunnelState): string[];
48
99
 
100
+ activeTargetKeys(): string[];
101
+
49
102
  cleanup(state: TunnelState): void;
103
+
104
+ teardown(state: TunnelState): void;
50
105
  };
51
106
  export {};