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,4 +1,6 @@
1
- import h from"node:path";import w,{WebSocketServer as m}from"ws";import{isUpgradeAllowed as P}from"../services/access-control.js";import{LspProcessBridge as S}from"../services/lsp-stdio-bridge.js";import{createLogger as $}from"../utils/logger.js";const o=$("lsp-ws"),k=6e4,b={typescript:"typescript",ts:"typescript",javascript:"javascript",js:"javascript",tsx:"typescript",jsx:"javascript"};function v(e){return b[e.toLowerCase()]??null}const l=new Map;function L(e){return h.resolve(e)}function E(e){const s=e.toString("utf8");if(!s.trim())return null;try{return JSON.parse(s)}catch{return null}}function u(e){e.idleTimer&&(clearTimeout(e.idleTimer),e.idleTimer=null)}function T(e){u(e),e.idleTimer=setTimeout(()=>{if(!(e.ws!==null&&e.ws.readyState===w.OPEN)){for(const[t,a]of l)if(a===e){l.delete(t);break}e.bridge.dispose()}},k)}function d(e,s){const t=new S({workspacePath:s.workspacePath,language:s.language},{onMessage:a=>{const r=l.get(e)?.ws;if(r&&r.readyState===w.OPEN)try{r.send(JSON.stringify(a))}catch(n){o.warn(`[lsp-ws] \u8F6C\u53D1 server \u6D88\u606F\u5931\u8D25: ${n.message}`)}},onExit:()=>{l.get(e)?.bridge===t&&l.delete(e)},onError:a=>{o.warn(`[lsp-ws] \u8BED\u8A00\u670D\u52A1\u9519\u8BEF ${s.workspacePath}: ${a.message}`)}});return t.start(),t}function y(e,s){return{bridge:d(e,s),ws:null,idleTimer:null,initialized:!1}}function z(e,s){const t=L(s.workspacePath);let a=l.get(t);a||(a=y(t,s),l.set(t,a)),u(a);const r=a;r.ws&&r.ws!==e&&r.ws.readyState===w.OPEN&&(o.info(`[lsp-ws] \u6324\u5360\u65E7\u8FDE\u63A5 workspace=${s.workspacePath}\uFF08\u65B0\u8FDE\u63A5\u63A5\u7BA1\u540C\u4E00\u8FDB\u7A0B\uFF09`),r.ws.close(1e3,"superseded by new lsp connection")),r.ws=e,e.on("message",n=>{const i=E(n);if(i===null){o.warn(`[lsp-ws] \u5FFD\u7565\u65E0\u6CD5\u89E3\u6790\u7684\u6D88\u606F: ${n.toString("utf8").slice(0,200)}`);return}i.method==="initialize"&&(r.initialized&&(o.info(`[lsp-ws] \u590D\u7528\u8FDB\u7A0B\u6536\u5230\u4E8C\u6B21 initialize\uFF0C\u91CD\u5EFA\u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B workspace=${s.workspacePath}`),r.bridge.dispose(),r.bridge=d(t,s)),r.initialized=!0),r.bridge.send(i)}),e.on("close",()=>{r.ws===e&&(r.ws=null),T(r)}),e.on("error",n=>{o.warn(`[lsp-ws] \u8FDE\u63A5\u5F02\u5E38 workspace=${s.workspacePath}: ${n.message}`)}),o.info(`[lsp-ws] \u8FDE\u63A5\u5EFA\u7ACB workspace=${s.workspacePath} file=${s.filePath} language=${s.language} reused=${a.bridge.running}`)}function U(e){const s=new m({noServer:!0});e.on("upgrade",(t,a,r)=>{if(!P(t,a))return;const n=t.headers.host||"localhost",i=new URL(t.url||"/",`http://${n}`);if(i.pathname!=="/ws/lsp")return;const c=i.searchParams.get("workspacePath")||"",p=i.searchParams.get("file")||"",g=v(i.searchParams.get("language")||"");if(!c||!p||!g){o.warn(`[lsp-ws] upgrade \u53C2\u6570\u7F3A\u5931: workspacePath=${!!c}, file=${!!p}, language=${g}`),a.write(`HTTP/1.1 400 Bad Request\r
1
+ import $ from"node:path";import u,{WebSocketServer as b}from"ws";import{isRuntimeTokenValid as y}from"../middleware/auth.js";import{isUpgradeAllowed as A}from"../services/access-control.js";import{buildLaunchSpec as g,checkProviderAvailability as T,getProvider as f,resolveLanguageId as E,resolveProviderForFile as L}from"../services/lsp/provider-registry.js";import{buildUriRewriteRules as R,canonicalizePath as v,invertRules as N,rewriteMessageUris as h}from"../services/lsp/uri-rewrite.js";import{LspProcessBridge as z}from"../services/lsp-stdio-bridge.js";import{createLogger as O}from"../utils/logger.js";const a=O("lsp-ws"),M=6e4,_=Number(process.env.AWS_LSP_MAX_PROCESSES||6),d=new Map;function W(e){return $.resolve(e)}function m(e){return[W(e.workspacePath),e.providerId||"typescript",e.clientId||"default"].join("::")}function C(e){const r=e.toString("utf8");if(!r.trim())return null;try{return JSON.parse(r)}catch{return null}}function w(e){e.idleTimer&&(clearTimeout(e.idleTimer),e.idleTimer=null)}function F(e){w(e),e.idleTimer=setTimeout(()=>{if(!(e.ws!==null&&e.ws.readyState===u.OPEN)){for(const[i,o]of d)if(o===e){d.delete(i);break}e.bridge.dispose(),a.info(`[lsp-ws] \u7A7A\u95F2\u56DE\u6536\u8BED\u8A00\u670D\u52A1 provider=${e.providerId}`)}},M)}function U(){for(;d.size>_;){let e=null,r=Number.POSITIVE_INFINITY;for(const[o,t]of d)t.ws!==null&&t.ws.readyState===u.OPEN||t.lastActiveAt<r&&(r=t.lastActiveAt,e=o);if(!e)break;const i=d.get(e);d.delete(e),i?.bridge.dispose(),a.info(`[lsp-ws] \u8FDB\u7A0B\u4E0A\u9650\u6DD8\u6C70 provider=${i?.providerId} key=${e}`)}}function P(e,r,i,o=[]){const t=new z({workspacePath:r.workspacePath,language:r.language,providerId:r.providerId,launch:i},{onMessage:s=>{const n=d.get(e)?.ws;if(n&&n.readyState===u.OPEN)try{const l=o.length>0?h(s,o):s;n.send(JSON.stringify(l))}catch(l){a.warn(`[lsp-ws] \u8F6C\u53D1 server \u6D88\u606F\u5931\u8D25: ${l.message}`)}},onExit:()=>{d.get(e)?.bridge===t&&d.delete(e)},onError:s=>{a.warn(`[lsp-ws] \u8BED\u8A00\u670D\u52A1\u9519\u8BEF provider=${r.providerId} ${r.workspacePath}: ${s.message}`)}});return t.start(),t}async function B(e,r,i){const o=await g(i,{workspacePath:r.workspacePath,filePath:r.filePath});if(!o){const p=T(i);return a.warn(`[lsp-ws] provider \u4E0D\u53EF\u7528 provider=${i.id} reason=${p.reason??"unknown"}`),null}const t=await v(r.workspacePath),s=await v(r.filePath),n=R(r.workspacePath,t,r.filePath,s),l=N(n);return n.length>0&&a.info(`[lsp-ws] URI \u89C4\u8303\u5316\u542F\u7528 workspace=${r.workspacePath} -> ${t}`),U(),{bridge:P(e,r,o,l),ws:null,idleTimer:null,initialized:!1,lastActiveAt:Date.now(),providerId:i.id,toServerRules:n,toClientRules:l}}function D(e){const r=e.searchParams.get("workspacePath")||"",i=e.searchParams.get("file")||"",o=e.searchParams.get("language")||"",t=(e.searchParams.get("provider")||"").trim().toLowerCase(),s=(e.searchParams.get("clientId")||"default").trim()||"default";if(!r||!i)return{ctx:{workspacePath:r,filePath:i,language:"plaintext",providerId:"",clientId:s},provider:null,error:"workspacePath and file are required"};let n=t?f(t):null;if(n||(n=L(i)),n||(o==="typescript"||o==="javascript")&&(n=f("typescript")),!n)return{ctx:{workspacePath:r,filePath:i,language:o||"plaintext",providerId:"",clientId:s},provider:null,error:`no lsp provider for file: ${i}`};const l=E(n,i);return{ctx:{workspacePath:r,filePath:i,language:l,providerId:n.id,clientId:s},provider:n}}function J(e,r,i){const o=m(r),t=d.get(o);if(!t){B(o,r,i).then(s=>{if(!s){e.close(1011,"lsp provider unavailable");return}d.set(o,s),I(s,e,r)}).catch(s=>{a.warn(`[lsp-ws] \u521B\u5EFA\u8BED\u8A00\u670D\u52A1\u5931\u8D25 provider=${r.providerId}: ${s.message}`),e.close(1011,"lsp provider start failed")});return}I(t,e,r)}function I(e,r,i){const o=m(i);w(e);const t=e;t.ws&&t.ws!==r&&t.ws.readyState===u.OPEN&&(a.info(`[lsp-ws] \u6324\u5360\u65E7\u8FDE\u63A5 workspace=${i.workspacePath} provider=${i.providerId}`),t.ws.close(1e3,"superseded by new lsp connection")),t.ws=r,t.lastActiveAt=Date.now(),r.on("message",s=>{t.lastActiveAt=Date.now();const n=C(s);if(n===null){a.warn(`[lsp-ws] \u5FFD\u7565\u65E0\u6CD5\u89E3\u6790\u7684\u6D88\u606F: ${s.toString("utf8").slice(0,200)}`);return}const l=h(n,t.toServerRules);if(l.method==="initialize"){if(t.initialized){a.info(`[lsp-ws] \u590D\u7528\u8FDB\u7A0B\u6536\u5230\u4E8C\u6B21 initialize\uFF0C\u91CD\u5EFA\u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B workspace=${i.workspacePath} provider=${i.providerId}`);const p=t.bridge;g(f(i.providerId)??f("typescript"),{workspacePath:i.workspacePath,filePath:i.filePath}).then(c=>{if(!c){r.close(1011,"lsp provider unavailable");return}p.dispose(),t.bridge=P(o,i,c,t.toClientRules),t.bridge.send(l)}).catch(c=>{a.warn(`[lsp-ws] \u91CD\u5EFA\u8BED\u8A00\u670D\u52A1\u5931\u8D25: ${c.message}`),r.close(1011,"lsp provider restart failed")});return}t.initialized=!0}t.bridge.send(l)}),r.on("close",()=>{t.ws===r&&(t.ws=null),F(t)}),r.on("error",s=>{a.warn(`[lsp-ws] \u8FDE\u63A5\u5F02\u5E38 workspace=${i.workspacePath} provider=${i.providerId}: ${s.message}`)}),a.info(`[lsp-ws] \u8FDE\u63A5\u5EFA\u7ACB workspace=${i.workspacePath} file=${i.filePath} provider=${i.providerId} language=${i.language} client=${i.clientId} reused=${e.bridge.running}`)}function K(e,r){const i=r.searchParams.get("token")||"";if(i.trim())return i.trim();const o=e.headers["x-runtime-token"];return Array.isArray(o)?o[0]?.trim()||"":typeof o=="string"?o.trim():String(e.headers.authorization||"").match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||""}function V(e){const r=String(e.socket?.remoteAddress||"");return r==="127.0.0.1"||r==="::1"||r==="::ffff:127.0.0.1"||r.startsWith("127.")}function x(e){const r=new b({noServer:!0});e.on("upgrade",(i,o,t)=>{if(!A(i,o))return;const s=i.headers.host||"localhost",n=new URL(i.url||"/",`http://${s}`);if(n.pathname!=="/ws/lsp")return;const l=K(i,n);if(!y(l)&&!V(i)){a.warn("[lsp-ws] upgrade \u9274\u6743\u5931\u8D25\uFF1A\u7F3A\u5C11\u6216\u975E\u6CD5 runtime token"),o.write(`HTTP/1.1 401 Unauthorized\r
2
2
  \r
3
- `),a.destroy();return}s.handleUpgrade(t,a,r,f=>{z(f,{workspacePath:c,filePath:p,language:g})})})}export{U as attachLspWebSocketServer};
3
+ `),o.destroy();return}const p=D(n);if(!p.provider){a.warn(`[lsp-ws] upgrade \u53C2\u6570\u65E0\u6548: ${p.error}`),o.write(`HTTP/1.1 400 Bad Request\r
4
+ \r
5
+ `),o.destroy();return}const{ctx:c,provider:k}=p;r.handleUpgrade(i,o,t,S=>{J(S,c,k)})})}function ee(){return[...d.entries()].map(([e,r])=>({key:e,providerId:r.providerId,running:r.bridge.running,connected:r.ws!==null&&r.ws.readyState===u.OPEN}))}function re(){for(const e of d.values())w(e),e.bridge.dispose();d.clear()}export{x as attachLspWebSocketServer,re as disposeAllLspProcesses,ee as listLspProcesses,D as resolveLspSocketContext};
4
6
 
@@ -1,2 +1,17 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
2
17
  export declare const mcpExtraRouter: import("express-serve-static-core").Router;
@@ -1,6 +1,22 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
2
13
  import { type McpDeploySpec } from "../services/mcp-deploy.js";
3
14
  export declare const mcpRouter: import("express-serve-static-core").Router;
4
15
  export declare function normalizeSpec(raw: unknown): McpDeploySpec | null;
5
16
 
17
+
18
+
19
+
20
+
21
+
6
22
  export declare function stripBuiltinMcpDisable(map: Record<string, unknown>): Record<string, unknown>;
@@ -1,2 +1,2 @@
1
- import{Router as y}from"express";import{validateToken as a}from"../middleware/auth.js";import{getEffective as f,setDefault as g,setInherited as b,setOverride as j}from"../services/capability-config.js";import{mcpDeployManager as d}from"../services/mcp-deploy.js";import{isBuiltinMcpName as m}from"../services/mcp-env-injector.js";import{probeDeployedMcp as k}from"../services/mcp-probe-client.js";import{getPanelEnvVars as v,getAgentMeta as S}from"../services/panel-env.js";import{sanitizeEnvForChild as h}from"../utils/env-safety.js";import{createLogger as M}from"../utils/logger.js";const I=M("mcp"),i=y();function c(r){return(e,o)=>{r(e,o).catch(t=>{I.error("[mcp] %s %s \u5931\u8D25: %s",e.method,e.path,t.message),o.headersSent||o.status(500).json({ok:!1,error:t.message})})}}function E(r){if(!r||typeof r!="object")return null;const e=r,t={type:String(e.type||e.transport||"stdio").trim().toLowerCase()||"stdio"};e.command!==null&&e.command!==void 0&&String(e.command).trim()&&(t.command=String(e.command).trim()),e.url!==null&&e.url!==void 0&&String(e.url).trim()&&(t.url=String(e.url).trim()),Array.isArray(e.args)&&(t.args=e.args.map(s=>String(s))),e.env&&typeof e.env=="object"&&(t.env=e.env),e.headers&&typeof e.headers=="object"&&(t.headers=e.headers),e.collapsed===!0&&(t.collapsed=!0);const n=e.description===null||e.description===void 0?"":String(e.description).trim();return n&&(t.description=n),t}function C(r){const e={};for(const[o,t]of Object.entries(r))m(o)&&t===!1||(e[o]=t);return e}i.post("/mcp/deployed/list",a,c(async(r,e)=>{const t=d.listDeployed().map(n=>({...n,enabled:f("","mcp",n.name)}));e.json({ok:!0,deployedMcp:t})})),i.get("/mcp/deployed",a,c(async(r,e)=>{const t=d.listDeployed().map(n=>({...n,enabled:f("","mcp",n.name)}));e.json({ok:!0,deployedMcp:t})})),i.post("/mcp/deployed/default",a,c(async(r,e)=>{const o=String((r.body??{})?.name??"").trim();if(!o){e.status(400).json({ok:!1,error:"name is required"});return}const t=String((r.body??{})?.agentId??"").trim(),n=(r.body??{})?.enabled,s=n==null?null:!!n;if(m(o)&&s===!1){e.status(400).json({ok:!1,error:`\u300C${o}\u300D\u662F\u5185\u7F6E\u901A\u8BAF MCP\uFF0C\u6052\u4E3A\u9ED8\u8BA4\u542F\u7528\uFF0C\u4E0D\u53EF\u5173\u95ED`});return}t?j(t,"mcp",o,s):g("mcp",o,s),e.json({ok:!0,name:o,agentId:t,enabled:s})})),i.post("/mcp/deployed/inherited",a,c(async(r,e)=>{const o=String((r.body??{})?.agentId??"").trim();if(!o){e.status(400).json({ok:!1,error:"agentId is required"});return}const t=(r.body??{})?.map,n=t&&typeof t=="object"&&!Array.isArray(t)?C(t):t??null;b(o,"mcp",n),e.json({ok:!0,agentId:o,count:n&&typeof n=="object"?Object.keys(n).length:0})})),i.post("/mcp/deployed/save",a,c(async(r,e)=>{const{name:o,spec:t,defaultEnabled:n,sha256:s}=r.body??{},p=String(o??"").trim();if(!p){e.status(400).json({ok:!1,error:"name is required"});return}const l=E(t);if(!l){e.status(400).json({ok:!1,error:"spec \u975E\u6CD5"});return}if(m(p)){e.status(400).json({ok:!1,error:`\u300C${p}\u300D\u662F\u5185\u7F6E\u901A\u8BAF MCP\uFF0C\u7531\u5B9E\u4F8B\u521D\u59CB\u5316\u81EA\u52A8\u90E8\u7F72\uFF0C\u4E0D\u53EF\u8986\u76D6`});return}const u=d.saveMcp(p,l,n!==!1,s?String(s):void 0);e.status(u.ok?200:400).json(u)})),i.post("/mcp/deployed/remove",a,c(async(r,e)=>{const o=String((r.body??{})?.name??"").trim(),t=d.removeMcp(o);e.status(t.ok?200:400).json(t)})),i.post("/mcp/probe",a,c(async(r,e)=>{const o=r.body??{},t=String(o.name??"").trim();if(!t){e.status(400).json({ok:!1,error:"name is required"});return}if(Object.prototype.hasOwnProperty.call(o,"spec")){e.status(400).json({ok:!1,error:"probe \u53EA\u63A5\u53D7\u5DF2\u90E8\u7F72 MCP \u7684 name\uFF0C\u4E0D\u63A5\u53D7\u8C03\u7528\u65B9\u4F20\u5165 spec"});return}const n=String(o.agentId??"").trim(),s={...n?v(n):{},...h(o.env)},p=await k(t,{effectiveEnv:s,agentMeta:n?S(n):void 0});e.json(p)})),i.post("/mcp/cc-switch/list",a,c(async(r,e)=>{e.json({ok:!0,mcpServers:[],state:{skills:[],mcpServers:[]}})}));export{i as mcpRouter,E as normalizeSpec,C as stripBuiltinMcpDisable};
1
+ import{Router as h}from"express";import{validateToken as a}from"../middleware/auth.js";import{assertAgentOwnership as g}from"../services/agent-ownership.js";import{getEffective as b,setDefault as S,setInherited as k,setOverride as v}from"../services/capability-config.js";import{McpDeployManager as l}from"../services/mcp-deploy.js";import{isBuiltinMcpName as u}from"../services/mcp-env-injector.js";import{probeDeployedMcp as M}from"../services/mcp-probe-client.js";import{getPanelEnvVars as w,getAgentMeta as I}from"../services/panel-env.js";import{getUserScopeOrThrow as d,requireAgentOwnership as O,requireUserScope as m}from"../services/user-scope.js";import{sanitizeEnvForChild as A}from"../utils/env-safety.js";import{createLogger as E}from"../utils/logger.js";const C=E("mcp"),c=h();function p(n){return(e,t)=>{n(e,t).catch(o=>{if(C.error("[mcp] %s %s \u5931\u8D25: %s",e.method,e.path,o.message),!t.headersSent){const s=o.message.includes("agent-ownership-mismatch")?403:500;t.status(s).json({ok:!1,error:o.message})}})}}function D(n){if(!n||typeof n!="object")return null;const e=n,o={type:String(e.type||e.transport||"stdio").trim().toLowerCase()||"stdio"};e.command!==null&&e.command!==void 0&&String(e.command).trim()&&(o.command=String(e.command).trim()),e.url!==null&&e.url!==void 0&&String(e.url).trim()&&(o.url=String(e.url).trim()),Array.isArray(e.args)&&(o.args=e.args.map(r=>String(r))),e.env&&typeof e.env=="object"&&(o.env=e.env),e.headers&&typeof e.headers=="object"&&(o.headers=e.headers),e.collapsed===!0&&(o.collapsed=!0);const s=e.description===null||e.description===void 0?"":String(e.description).trim();return s&&(o.description=s),o}function P(n){const e={};for(const[t,o]of Object.entries(n))u(t)&&o===!1||(e[t]=o);return e}c.post("/mcp/deployed/list",a,m,p(async(n,e)=>{const t=d(n),s=l.forScope(t).listDeployed().map(r=>({...r,enabled:b(t,"","mcp",r.name)}));e.json({ok:!0,deployedMcp:s})})),c.get("/mcp/deployed",a,m,p(async(n,e)=>{const t=d(n),s=l.forScope(t).listDeployed().map(r=>({...r,enabled:b(t,"","mcp",r.name)}));e.json({ok:!0,deployedMcp:s})})),c.post("/mcp/deployed/default",a,m,p(async(n,e)=>{const t=String((n.body??{})?.name??"").trim();if(!t){e.status(400).json({ok:!1,error:"name is required"});return}const o=String((n.body??{})?.agentId??"").trim(),s=(n.body??{})?.enabled,r=s==null?null:!!s;if(u(t)&&r===!1){e.status(400).json({ok:!1,error:`\u300C${t}\u300D\u662F\u5185\u7F6E\u901A\u8BAF MCP\uFF0C\u6052\u4E3A\u9ED8\u8BA4\u542F\u7528\uFF0C\u4E0D\u53EF\u5173\u95ED`});return}const i=d(n);if(o){if(!g(o,i)){e.status(403).json({ok:!1,error:"agent-ownership-mismatch"});return}v(i,o,"mcp",t,r)}else S(i,"mcp",t,r);e.json({ok:!0,name:t,agentId:o,enabled:r})})),c.post("/mcp/deployed/inherited",a,m,p(async(n,e)=>{const t=String((n.body??{})?.agentId??"").trim();if(!t){e.status(400).json({ok:!1,error:"agentId is required"});return}const o=d(n);if(!g(t,o)){e.status(403).json({ok:!1,error:"agent-ownership-mismatch"});return}const s=(n.body??{})?.map,r=s&&typeof s=="object"&&!Array.isArray(s)?P(s):s??null;k(o,t,"mcp",r),e.json({ok:!0,agentId:t,count:r&&typeof r=="object"?Object.keys(r).length:0})})),c.post("/mcp/deployed/save",a,m,p(async(n,e)=>{const{name:t,spec:o,defaultEnabled:s,sha256:r}=n.body??{},i=String(t??"").trim();if(!i){e.status(400).json({ok:!1,error:"name is required"});return}const f=D(o);if(!f){e.status(400).json({ok:!1,error:"spec \u975E\u6CD5"});return}if(u(i)){e.status(400).json({ok:!1,error:`\u300C${i}\u300D\u662F\u5185\u7F6E\u901A\u8BAF MCP\uFF0C\u7531\u5B9E\u4F8B\u521D\u59CB\u5316\u81EA\u52A8\u90E8\u7F72\uFF0C\u4E0D\u53EF\u8986\u76D6`});return}const j=d(n),y=l.forScope(j).saveMcp(i,f,s!==!1,r?String(r):void 0);e.status(y.ok?200:400).json(y)})),c.post("/mcp/deployed/remove",a,m,p(async(n,e)=>{const t=String((n.body??{})?.name??"").trim(),o=d(n),s=l.forScope(o).removeMcp(t);e.status(s.ok?200:400).json(s)})),c.post("/mcp/probe",a,m,O,p(async(n,e)=>{const t=n.body??{},o=String(t.name??"").trim();if(!o){e.status(400).json({ok:!1,error:"name is required"});return}if(Object.prototype.hasOwnProperty.call(t,"spec")){e.status(400).json({ok:!1,error:"probe \u53EA\u63A5\u53D7\u5DF2\u90E8\u7F72 MCP \u7684 name\uFF0C\u4E0D\u63A5\u53D7\u8C03\u7528\u65B9\u4F20\u5165 spec"});return}const s=String(t.agentId??"").trim(),r={...s?w(s):{},...A(t.env)},i=await M(o,{scope:d(n),effectiveEnv:r,agentMeta:s?I(s):void 0});e.json(i)})),c.post("/mcp/cc-switch/list",a,p(async(n,e)=>{e.json({ok:!0,mcpServers:[],state:{skills:[],mcpServers:[]}})}));export{c as mcpRouter,D as normalizeSpec,P as stripBuiltinMcpDisable};
2
2
 
@@ -1,2 +1,21 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
2
21
  export declare const pluginsRouter: import("express-serve-static-core").Router;
@@ -1,2 +1,2 @@
1
- import{Router as b}from"express";import{raw as I}from"express";import{validateToken as g,validateTokenOrLoopback as m}from"../middleware/auth.js";import{getEffective as j,setDefault as k,setInherited as S,setOverride as w}from"../services/capability-config.js";import{isValidPluginName as p,pluginManager as u}from"../services/plugin-manager.js";import{createLogger as N}from"../utils/logger.js";const v=N("plugins"),r=b();function i(s){return(e,n)=>{s(e,n).catch(t=>{v.error("[plugins] %s %s \u5931\u8D25: %s",e.method,e.path,t.message),n.headersSent||n.status(500).json({ok:!1,error:t.message})})}}r.get("/plugins/deployed",g,i(async(s,e)=>{const t=(await u.listDeployed()).map(a=>({...a,enabled:j("","plugins",a.pluginName)}));e.json({ok:!0,deployedPlugins:t})})),r.post("/plugins/deployed/default",g,i(async(s,e)=>{const n=String((s.body??{})?.pluginName??"").trim();if(!p(n)){e.status(400).json({ok:!1,error:"pluginName \u975E\u6CD5\uFF08\u987B\u4E3A kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const t=String((s.body??{})?.agentId??"").trim(),a=(s.body??{})?.enabled,o=a==null?null:!!a;t?w(t,"plugins",n,o):k("plugins",n,o),e.json({ok:!0,pluginName:n,agentId:t,enabled:o})})),r.post("/plugins/deployed/inherited",g,i(async(s,e)=>{const n=String((s.body??{})?.agentId??"").trim();if(!n){e.status(400).json({ok:!1,error:"agentId is required"});return}const t=(s.body??{})?.map;S(n,"plugins",t??null),e.json({ok:!0,agentId:n,count:Object.keys(t??{}).length})})),r.post("/plugins/deployed/remove",g,i(async(s,e)=>{const n=String((s.body??{})?.pluginName??"").trim();if(!p(n)){e.status(400).json({ok:!1,error:"pluginName \u975E\u6CD5\uFF08\u987B\u4E3A kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const t=await u.removeDeployedPlugin(n);e.status(t.ok?200:400).json(t)})),r.get("/plugins/:agentId",g,i(async(s,e)=>{const n=String(s.params.agentId??"").trim();if(!n){e.status(400).json({ok:!1,error:"agentId is required"});return}const t=await u.list(n);e.json({ok:!0,agentId:n,plugins:t})})),r.post("/plugins/:agentId/install",g,i(async(s,e)=>{const n=String(s.params.agentId??"").trim(),t=s.body??{},a=typeof t.source=="string"?t.source:"",o=t.config&&typeof t.config=="object"&&!Array.isArray(t.config)?Object.fromEntries(Object.entries(t.config).filter(d=>typeof d[1]=="string")):void 0;if(!n){e.status(400).json({ok:!1,error:"agentId is required"});return}const c={action:"install",source:a,...o?{config:o}:{}},l=await u.manage(n,c);e.status(l.ok?200:400).json(l)}));function f(s){return[g,i(async(e,n)=>{const t=String(e.params.agentId??"").trim(),a=String(e.params.name??"").trim();if(!t||t==="deployed"||!p(a)){n.status(400).json({ok:!1,error:"agentId \u4E14 name \u987B\u4E3A\u5408\u6CD5\u63D2\u4EF6\u540D\uFF08kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const o=await u.manage(t,{action:s,name:a});n.status(o.ok?200:400).json(o)})]}r.post("/plugins/:agentId/:name/reload",...f("reload")),r.post("/plugins/:agentId/:name/enable",...f("enable")),r.post("/plugins/:agentId/:name/disable",...f("disable")),r.delete("/plugins/:agentId/:name",...f("uninstall")),r.get("/plugins/:agentId/:name/logs",g,i(async(s,e)=>{const n=String(s.params.agentId??"").trim(),t=String(s.params.name??"").trim();if(!n||!p(t)){e.status(400).json({ok:!1,error:"agentId \u4E14 name \u987B\u4E3A\u5408\u6CD5\u63D2\u4EF6\u540D\uFF08kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const a=await u.getLogs(n,t);e.status(a.ok?200:404).json(a)})),r.get("/plugins/:agentId/commands",g,i(async(s,e)=>{const n=String(s.params.agentId??"").trim();if(!n){e.status(400).json({ok:!1,error:"agentId is required"});return}const t=await u.getPluginCommands(n);e.json({ok:!0,agentId:n,commands:t.map(a=>({name:a.name,description:a.description??"",argumentHint:a.argumentHint??"",sourcePath:a.sourcePath,plugin:a.plugin}))})})),r.get("/plugin-events/:agentId/events",m,i(async(s,e)=>{const n=String(s.params.agentId??"").trim();if(!n){e.status(400).json({ok:!1,error:"agentId is required"});return}const t=Number(s.query.maxPerKey),a=Number.isFinite(t)&&t>0?t:void 0,o=await u.drainEvents(n,{maxPerKey:a});e.json({ok:!0,agentId:n,...o})})),r.post("/plugin-events/:agentId/callback/:plugin",m,i(async(s,e)=>{const n=String(s.params.agentId??"").trim(),t=String(s.params.plugin??"").trim(),a=s.body??{};if(!n||!t){e.status(400).json({ok:!1,error:"agentId and plugin are required"});return}const o=await u.enqueueExternalEvent(n,t,a);e.status(o.ok?200:400).json(o)})),r.post("/plugins/:agentId/private-save",g,i(async(s,e)=>{const n=String(s.params.agentId??"").trim();if(!n){e.status(400).json({ok:!1,error:"agentId is required"});return}const t=s.body??{},a=Buffer.from(String(t.contentBase64??""),"base64");if(a.length===0){e.status(400).json({ok:!1,error:"contentBase64 \u4E3A\u7A7A"});return}const o=String(t.fileName??"plugin.zip"),c=t.config&&typeof t.config=="object"&&!Array.isArray(t.config)?Object.fromEntries(Object.entries(t.config).filter(d=>typeof d[1]=="string")):void 0,l=await u.installFromZip(n,a,o,c);e.status(l.ok?200:400).json(l)})),r.post("/plugins/:agentId/private-remove",g,i(async(s,e)=>{const n=String(s.params.agentId??"").trim(),t=String((s.body??{})?.pluginName??"").trim();if(!n||!p(t)){e.status(400).json({ok:!1,error:"agentId \u4E0E pluginName \u5FC5\u586B\uFF08kebab-case\uFF09"});return}const a=await u.manage(n,{action:"uninstall",name:t});e.status(a.ok?200:400).json(a)})),r.post("/plugins/:agentId/upload",g,I({type:()=>!0,limit:"100mb"}),i(async(s,e)=>{const n=String(s.params.agentId??"").trim();if(!n){e.status(400).json({ok:!1,error:"agentId is required"});return}const t=s.body;if(!Buffer.isBuffer(t)||t.length===0){e.status(400).json({ok:!1,error:"\u7F3A\u5C11 zip \u5185\u5BB9\uFF08raw body, Content-Type: application/zip\uFF09"});return}const a=String(s.query.filename??"plugin.zip");if(!a.toLowerCase().endsWith(".zip")){e.status(400).json({ok:!1,error:"\u4EC5\u652F\u6301 .zip \u63D2\u4EF6\u5305"});return}let o;const c=String(s.query.config??"").trim();if(c)try{const d=JSON.parse(c);if(d&&typeof d=="object"&&!Array.isArray(d))o=Object.fromEntries(Object.entries(d).filter(y=>typeof y[1]=="string"));else{e.status(400).json({ok:!1,error:"config \u5FC5\u987B\u662F JSON \u5BF9\u8C61"});return}}catch{e.status(400).json({ok:!1,error:"config \u4E0D\u662F\u5408\u6CD5\u7684 JSON \u5BF9\u8C61"});return}const l=await u.installFromZip(n,t,a,o);e.status(l.ok?200:400).json(l)}));export{r as pluginsRouter};
1
+ import{Router as S}from"express";import{raw as w}from"express";import{validateToken as g,validateTokenOrLoopback as I}from"../middleware/auth.js";import{assertAgentOwnership as j}from"../services/agent-ownership.js";import{getEffective as h,setDefault as N,setInherited as v,setOverride as O}from"../services/capability-config.js";import{isValidPluginName as f,pluginManager as u}from"../services/plugin-manager.js";import{getUserScopeOrThrow as y,requireAgentOwnership as m,requireUserScope as l}from"../services/user-scope.js";import{createLogger as E}from"../utils/logger.js";const P=E("plugins"),r=S();function i(s){return(n,e)=>{s(n,e).catch(t=>{if(P.error("[plugins] %s %s \u5931\u8D25: %s",n.method,n.path,t.message),!e.headersSent){const a=t.message.includes("agent-ownership-mismatch")?403:500;e.status(a).json({ok:!1,error:t.message})}})}}r.get("/plugins/deployed",g,l,i(async(s,n)=>{const e=y(s),a=(await u.listDeployed(e)).map(o=>({...o,enabled:h(e,"","plugins",o.pluginName)}));n.json({ok:!0,deployedPlugins:a})})),r.post("/plugins/deployed/default",g,l,i(async(s,n)=>{const e=String((s.body??{})?.pluginName??"").trim();if(!f(e)){n.status(400).json({ok:!1,error:"pluginName \u975E\u6CD5\uFF08\u987B\u4E3A kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const t=String((s.body??{})?.agentId??"").trim(),a=(s.body??{})?.enabled,o=a==null?null:!!a,c=y(s);if(t){if(!j(t,c)){n.status(403).json({ok:!1,error:"agent-ownership-mismatch"});return}O(c,t,"plugins",e,o)}else N(c,"plugins",e,o);n.json({ok:!0,pluginName:e,agentId:t,enabled:o})})),r.post("/plugins/deployed/inherited",g,l,i(async(s,n)=>{const e=String((s.body??{})?.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=y(s);if(!j(e,t)){n.status(403).json({ok:!1,error:"agent-ownership-mismatch"});return}const a=(s.body??{})?.map;v(t,e,"plugins",a??null),n.json({ok:!0,agentId:e,count:Object.keys(a??{}).length})})),r.post("/plugins/deployed/remove",g,l,i(async(s,n)=>{const e=String((s.body??{})?.pluginName??"").trim();if(!f(e)){n.status(400).json({ok:!1,error:"pluginName \u975E\u6CD5\uFF08\u987B\u4E3A kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const t=y(s),a=await u.removeDeployedPlugin(e,t);n.status(a.ok?200:400).json(a)})),r.get("/plugins/:agentId",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=await u.list(e);n.json({ok:!0,agentId:e,plugins:t})})),r.post("/plugins/:agentId/install",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim(),t=s.body??{},a=typeof t.source=="string"?t.source:"",o=t.config&&typeof t.config=="object"&&!Array.isArray(t.config)?Object.fromEntries(Object.entries(t.config).filter(d=>typeof d[1]=="string")):void 0;if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const c={action:"install",source:a,...o?{config:o}:{}},p=await u.manage(e,c);n.status(p.ok?200:400).json(p)}));function b(s){return[g,l,m,i(async(n,e)=>{const t=String(n.params.agentId??"").trim(),a=String(n.params.name??"").trim();if(!t||t==="deployed"||!f(a)){e.status(400).json({ok:!1,error:"agentId \u4E14 name \u987B\u4E3A\u5408\u6CD5\u63D2\u4EF6\u540D\uFF08kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const o=await u.manage(t,{action:s,name:a});e.status(o.ok?200:400).json(o)})]}r.post("/plugins/:agentId/:name/reload",...b("reload")),r.post("/plugins/:agentId/:name/enable",...b("enable")),r.post("/plugins/:agentId/:name/disable",...b("disable")),r.delete("/plugins/:agentId/:name",...b("uninstall")),r.get("/plugins/:agentId/:name/logs",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim(),t=String(s.params.name??"").trim();if(!e||!f(t)){n.status(400).json({ok:!1,error:"agentId \u4E14 name \u987B\u4E3A\u5408\u6CD5\u63D2\u4EF6\u540D\uFF08kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const a=await u.getLogs(e,t);n.status(a.ok?200:404).json(a)})),r.get("/plugins/:agentId/commands",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=await u.getPluginCommands(e);n.json({ok:!0,agentId:e,commands:t.map(a=>({name:a.name,description:a.description??"",argumentHint:a.argumentHint??"",sourcePath:a.sourcePath,plugin:a.plugin}))})})),r.get("/plugin-events/:agentId/events",I,i(async(s,n)=>{const e=String(s.params.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=Number(s.query.maxPerKey),a=Number.isFinite(t)&&t>0?t:void 0,o=await u.drainEvents(e,{maxPerKey:a});n.json({ok:!0,agentId:e,...o})})),r.post("/plugin-events/:agentId/callback/:plugin",I,i(async(s,n)=>{const e=String(s.params.agentId??"").trim(),t=String(s.params.plugin??"").trim(),a=s.body??{};if(!e||!t){n.status(400).json({ok:!1,error:"agentId and plugin are required"});return}const o=await u.enqueueExternalEvent(e,t,a);n.status(o.ok?200:400).json(o)})),r.post("/plugins/:agentId/private-save",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=s.body??{},a=Buffer.from(String(t.contentBase64??""),"base64");if(a.length===0){n.status(400).json({ok:!1,error:"contentBase64 \u4E3A\u7A7A"});return}const o=String(t.fileName??"plugin.zip"),c=t.config&&typeof t.config=="object"&&!Array.isArray(t.config)?Object.fromEntries(Object.entries(t.config).filter(d=>typeof d[1]=="string")):void 0,p=await u.installFromZip(e,a,o,c);n.status(p.ok?200:400).json(p)})),r.post("/plugins/:agentId/private-remove",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim(),t=String((s.body??{})?.pluginName??"").trim();if(!e||!f(t)){n.status(400).json({ok:!1,error:"agentId \u4E0E pluginName \u5FC5\u586B\uFF08kebab-case\uFF09"});return}const a=await u.manage(e,{action:"uninstall",name:t});n.status(a.ok?200:400).json(a)})),r.post("/plugins/:agentId/upload",g,l,m,w({type:()=>!0,limit:"100mb"}),i(async(s,n)=>{const e=String(s.params.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=s.body;if(!Buffer.isBuffer(t)||t.length===0){n.status(400).json({ok:!1,error:"\u7F3A\u5C11 zip \u5185\u5BB9\uFF08raw body, Content-Type: application/zip\uFF09"});return}const a=String(s.query.filename??"plugin.zip");if(!a.toLowerCase().endsWith(".zip")){n.status(400).json({ok:!1,error:"\u4EC5\u652F\u6301 .zip \u63D2\u4EF6\u5305"});return}let o;const c=String(s.query.config??"").trim();if(c)try{const d=JSON.parse(c);if(d&&typeof d=="object"&&!Array.isArray(d))o=Object.fromEntries(Object.entries(d).filter(k=>typeof k[1]=="string"));else{n.status(400).json({ok:!1,error:"config \u5FC5\u987B\u662F JSON \u5BF9\u8C61"});return}}catch{n.status(400).json({ok:!1,error:"config \u4E0D\u662F\u5408\u6CD5\u7684 JSON \u5BF9\u8C61"});return}const p=await u.installFromZip(e,t,a,o);n.status(p.ok?200:400).json(p)}));export{r as pluginsRouter};
2
2
 
@@ -1,2 +1,6 @@
1
1
 
2
+
3
+
4
+
5
+
2
6
  export declare const processesRouter: import("express-serve-static-core").Router;
@@ -1,2 +1,6 @@
1
1
 
2
+
3
+
4
+
5
+
2
6
  export declare const propertiesRouter: import("express-serve-static-core").Router;
@@ -38,24 +38,44 @@ export interface PtySessionEntry extends PtySessionSummary {
38
38
  }
39
39
  export declare const ptySessions: Map<string, PtySessionEntry>;
40
40
 
41
+
42
+
43
+
41
44
  export declare function resolvePtyIdleTtlMs(env?: NodeJS.ProcessEnv): number;
42
45
 
46
+
47
+
48
+
49
+
50
+
43
51
  export declare function resolveDefaultShell(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv, existsSync?: (path: fs.PathLike) => boolean): {
44
52
  shell: string;
45
53
  args: string[];
46
54
  };
47
55
 
56
+
57
+
58
+
48
59
  export declare function resolveRequestedShell(requestedShell: unknown, platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): {
49
60
  shell: string;
50
61
  args: string[];
51
62
  };
52
63
 
64
+
65
+
66
+
53
67
  export declare function isPathInsideRoot(candidatePath: string, rootPath: string): boolean;
54
68
 
69
+
70
+
71
+
55
72
  export declare function resolvePtyWorkspacePath(workspacePath: unknown, env?: NodeJS.ProcessEnv): string;
56
73
 
57
74
  export declare function readPtyOutputBuffer(session: PtySessionEntry): string;
58
75
 
76
+
77
+
78
+
59
79
  export declare function createPtySession(input: {
60
80
  workspacePath: unknown;
61
81
  title?: unknown;
@@ -73,15 +93,24 @@ export declare function resolveMaxPtySessions(env?: NodeJS.ProcessEnv): number;
73
93
  export declare function listPtySessions(): PtySessionSummary[];
74
94
  export declare function getPtySessionSummary(id: string): PtySessionSummary | undefined;
75
95
 
96
+
97
+
98
+
76
99
  export declare function createPtyConnectToken(sessionId: string): {
77
100
  token: string;
78
101
  expiresAt: string;
79
102
  } | undefined;
80
103
 
104
+
105
+
106
+
81
107
  export declare function closePtySession(id: string, reason?: string): boolean;
82
108
  export declare function closeAllPtySessions(reason?: string): void;
83
109
  export declare const ptyRouter: Router;
84
110
 
111
+
112
+
113
+
85
114
  export declare function attachPtyWebSocketServer(server: {
86
115
  on: (event: "upgrade", listener: (request: IncomingMessage, socket: Socket, head: Buffer) => void) => unknown;
87
116
  }): void;
@@ -13,5 +13,8 @@ export interface RuntimeTokenRequestResult {
13
13
  error?: string;
14
14
  }
15
15
 
16
+
17
+
18
+
16
19
  export declare function resolveRuntimeTokenRequest(input: RuntimeTokenRequestInput): RuntimeTokenRequestResult;
17
20
  export declare function logRuntimeBindingStartupState(): void;
@@ -1,4 +1,8 @@
1
1
 
2
+
3
+
4
+
5
+
2
6
  export declare const sessionsRouter: import("express-serve-static-core").Router;
3
7
  export interface HandleCapabilityToolsRequestInput {
4
8
  agentId: string;
@@ -11,6 +15,14 @@ export interface HandleCapabilityToolsRequestInput {
11
15
  resolveAdapter?: (providerId: string) => unknown;
12
16
  }
13
17
 
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
14
26
  export declare function handleCapabilityToolsRequest(input: HandleCapabilityToolsRequestInput): Promise<{
15
27
  status: number;
16
28
  body: Record<string, unknown>;
@@ -27,9 +39,19 @@ export interface HandleCapabilityToolCallRequestInput {
27
39
  resolveAdapter?: (providerId: string) => unknown;
28
40
  }
29
41
 
42
+
43
+
44
+
45
+
46
+
47
+
48
+
30
49
  export declare function handleCapabilityToolCallRequest(input: HandleCapabilityToolCallRequestInput): Promise<{
31
50
  status: number;
32
51
  body: Record<string, unknown>;
33
52
  }>;
34
53
 
54
+
55
+
56
+
35
57
  export declare function resolveActiveSdkSessionSnapshotStatus(adapterStatus?: string, currentRuntimeStatus?: string, currentRuntimeActionType?: string): string;
@@ -1,2 +1,17 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
2
17
  export declare const skillsRouter: import("express-serve-static-core").Router;
@@ -1,2 +1,2 @@
1
- import{Router as y}from"express";import{raw as p}from"express";import{validateToken as a}from"../middleware/auth.js";import{getEffective as g,setDefault as S,setInherited as b,setOverride as j}from"../services/capability-config.js";import{skillManager as d,isValidSkillName as m}from"../services/skill-manager.js";import{createLogger as h}from"../utils/logger.js";const v=h("skills"),n=y();function o(t){return(e,s)=>{t(e,s).catch(l=>{v.error("[skills] %s %s \u5931\u8D25: %s",e.method,e.path,l.message),s.headersSent||s.status(500).json({ok:!1,error:l.message})})}}n.post("/skills/deployed/list",a,o(async(t,e)=>{const l=d.listDeployed().map(i=>({...i,enabled:g("","skills",i.skillName)}));e.json({ok:!0,deployedSkills:l})})),n.get("/skills/deployed",a,o(async(t,e)=>{const l=d.listDeployed().map(i=>({...i,enabled:g("","skills",i.skillName)}));e.json({ok:!0,deployedSkills:l})})),n.post("/skills/deployed/default",a,o(async(t,e)=>{const s=String((t.body??{})?.skillName??"").trim();if(!m(s)){e.status(400).json({ok:!1,error:"skillName \u975E\u6CD5"});return}const l=String((t.body??{})?.agentId??"").trim(),i=(t.body??{})?.enabled,r=i==null?null:!!i;l?j(l,"skills",s,r):S("skills",s,r),e.json({ok:!0,skillName:s,agentId:l,enabled:r})})),n.post("/skills/deployed/inherited",a,o(async(t,e)=>{const s=String((t.body??{})?.agentId??"").trim();if(!s){e.status(400).json({ok:!1,error:"agentId is required"});return}const l=(t.body??{})?.map;b(s,"skills",l??null),e.json({ok:!0,agentId:s,count:Object.keys(l??{}).length})})),n.post("/skills/deployed/upload",a,p({type:"application/zip",limit:"200mb"}),o(async(t,e)=>{const s=t.body??{},l=Buffer.isBuffer(s)?s:Buffer.from(s??"");if(!l||l.length===0){e.status(400).json({ok:!1,error:"zip \u5185\u5BB9\u4E3A\u7A7A"});return}const i=String(t.query.filename??t.headers["x-filename"]??"skill.zip"),r=String(t.query.sha256??"").trim()||void 0,k=t.query.defaultEnabled!=="false",u=await d.saveSharedSkill(l,String(i),k,r);e.status(u.ok?200:400).json(u)})),n.post("/skills/deployed/remove",a,o(async(t,e)=>{const s=String((t.body??{})?.skillName??"").trim();if(!m(s)){e.status(400).json({ok:!1,error:"skillName \u975E\u6CD5"});return}const l=await d.removeDeployedSkill(s);e.status(l.ok?200:400).json(l)})),n.post("/skills/private/:agentId/upload",a,p({type:()=>!0,limit:"200mb"}),o(async(t,e)=>{const s=String(t.params.agentId??"").trim();if(!s){e.status(400).json({ok:!1,error:"agentId is required"});return}const l=t.body;if(!Buffer.isBuffer(l)||l.length===0){e.status(400).json({ok:!1,error:"zip \u5185\u5BB9\u4E3A\u7A7A"});return}const i=t.query,r=String(i.filename??t.headers["x-filename"]??"skill.zip"),k=String(i.sha256??"").trim()||void 0,u=String(i.skillName??"").trim()||void 0,f=await d.savePrivateSkill(s,l,r,k,u);e.status(f.ok?200:400).json(f)})),n.post("/skills/private/:agentId/save",a,o(async(t,e)=>{const s=String(t.params.agentId??"").trim();if(!s){e.status(400).json({ok:!1,error:"agentId is required"});return}const l=t.body??{},i=String(l.contentBase64??""),r=Buffer.from(i,"base64");if(r.length===0){e.status(400).json({ok:!1,error:"contentBase64 \u4E3A\u7A7A"});return}const k=String(l.fileName??"skill.zip"),u=String(l.sha256??"").trim()||void 0,f=String(l.skillName??"").trim()||void 0,c=await d.savePrivateSkill(s,r,k,u,f);e.status(c.ok?200:400).json(c)})),n.post("/skills/private/:agentId/remove",a,o(async(t,e)=>{const s=String(t.params.agentId??"").trim(),l=String((t.body??{})?.skillName??"").trim();if(!s||!m(l)){e.status(400).json({ok:!1,error:"agentId \u4E0E skillName \u5FC5\u586B"});return}const i=await d.removePrivateSkill(s,l);e.status(i.ok?200:400).json(i)})),n.post("/skills/private/:agentId/list",a,o(async(t,e)=>{const s=String(t.params.agentId??"").trim();if(!s){e.status(400).json({ok:!1,error:"agentId is required"});return}e.json({ok:!0,agentId:s,privateSkills:d.listPrivateSkills(s)})})),n.post("/skills/cc-switch/list",a,o(async(t,e)=>{e.json({ok:!0,skills:[],state:{skills:[],mcpServers:[]}})}));export{n as skillsRouter};
1
+ import{Router as j}from"express";import{raw as h}from"express";import{validateToken as a}from"../middleware/auth.js";import{assertAgentOwnership as v}from"../services/agent-ownership.js";import{getEffective as b,setDefault as I,setInherited as N,setOverride as w}from"../services/capability-config.js";import{SkillManager as u,isValidSkillName as y}from"../services/skill-manager.js";import{getUserScopeOrThrow as r,requireUserScope as c}from"../services/user-scope.js";import{createLogger as B}from"../utils/logger.js";const z=B("skills"),d=j();function f(s){return(e,t)=>{s(e,t).catch(o=>{if(z.error("[skills] %s %s \u5931\u8D25: %s",e.method,e.path,o.message),!t.headersSent){const n=o.message.includes("agent-ownership-mismatch")?403:500;t.status(n).json({ok:!1,error:o.message})}})}}function m(s,e,t){const o=r(s);return v(t,o)?!0:(e.status(403).json({ok:!1,error:"agent-ownership-mismatch",message:"\u8BE5\u5B9E\u4F8B\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7528\u6237"}),!1)}d.post("/skills/deployed/list",a,c,f(async(s,e)=>{const t=r(s),i=u.forScope(t).listDeployed().map(l=>({...l,enabled:b(t,"","skills",l.skillName)}));e.json({ok:!0,deployedSkills:i})})),d.get("/skills/deployed",a,c,f(async(s,e)=>{const t=r(s),i=u.forScope(t).listDeployed().map(l=>({...l,enabled:b(t,"","skills",l.skillName)}));e.json({ok:!0,deployedSkills:i})})),d.post("/skills/deployed/default",a,c,f(async(s,e)=>{const t=r(s),o=String((s.body??{})?.skillName??"").trim();if(!y(o)){e.status(400).json({ok:!1,error:"skillName \u975E\u6CD5"});return}const n=String((s.body??{})?.agentId??"").trim();if(n&&!m(s,e,n))return;const i=(s.body??{})?.enabled,l=i==null?null:!!i;n?w(t,n,"skills",o,l):I(t,"skills",o,l),e.json({ok:!0,skillName:o,agentId:n,enabled:l})})),d.post("/skills/deployed/inherited",a,c,f(async(s,e)=>{const t=r(s),o=String((s.body??{})?.agentId??"").trim();if(!o){e.status(400).json({ok:!1,error:"agentId is required"});return}if(!m(s,e,o))return;const n=(s.body??{})?.map;N(t,o,"skills",n??null),e.json({ok:!0,agentId:o,count:Object.keys(n??{}).length})})),d.post("/skills/deployed/upload",a,c,h({type:"application/zip",limit:"200mb"}),f(async(s,e)=>{const t=r(s),o=s.body??{},n=Buffer.isBuffer(o)?o:Buffer.from(o??"");if(!n||n.length===0){e.status(400).json({ok:!1,error:"zip \u5185\u5BB9\u4E3A\u7A7A"});return}const i=String(s.query.filename??s.headers["x-filename"]??"skill.zip"),l=String(s.query.sha256??"").trim()||void 0,k=s.query.defaultEnabled!=="false",p=await u.forScope(t).saveSharedSkill(n,String(i),k,l);e.status(p.ok?200:400).json(p)})),d.post("/skills/deployed/remove",a,c,f(async(s,e)=>{const t=r(s),o=String((s.body??{})?.skillName??"").trim();if(!y(o)){e.status(400).json({ok:!1,error:"skillName \u975E\u6CD5"});return}const n=await u.forScope(t).removeDeployedSkill(o);e.status(n.ok?200:400).json(n)})),d.post("/skills/private/:agentId/upload",a,c,h({type:()=>!0,limit:"200mb"}),f(async(s,e)=>{const t=String(s.params.agentId??"").trim();if(!t){e.status(400).json({ok:!1,error:"agentId is required"});return}if(!m(s,e,t))return;const o=r(s),n=s.body;if(!Buffer.isBuffer(n)||n.length===0){e.status(400).json({ok:!1,error:"zip \u5185\u5BB9\u4E3A\u7A7A"});return}const i=s.query,l=String(i.filename??s.headers["x-filename"]??"skill.zip"),k=String(i.sha256??"").trim()||void 0,p=String(i.skillName??"").trim()||void 0,g=await u.forScope(o).savePrivateSkill(t,n,l,k,p);e.status(g.ok?200:400).json(g)})),d.post("/skills/private/:agentId/save",a,c,f(async(s,e)=>{const t=String(s.params.agentId??"").trim();if(!t){e.status(400).json({ok:!1,error:"agentId is required"});return}if(!m(s,e,t))return;const o=r(s),n=s.body??{},i=String(n.contentBase64??""),l=Buffer.from(i,"base64");if(l.length===0){e.status(400).json({ok:!1,error:"contentBase64 \u4E3A\u7A7A"});return}const k=String(n.fileName??"skill.zip"),p=String(n.sha256??"").trim()||void 0,g=String(n.skillName??"").trim()||void 0,S=await u.forScope(o).savePrivateSkill(t,l,k,p,g);e.status(S.ok?200:400).json(S)})),d.post("/skills/private/:agentId/remove",a,c,f(async(s,e)=>{const t=String(s.params.agentId??"").trim(),o=String((s.body??{})?.skillName??"").trim();if(!t||!y(o)){e.status(400).json({ok:!1,error:"agentId \u4E0E skillName \u5FC5\u586B"});return}if(!m(s,e,t))return;const n=r(s),i=await u.forScope(n).removePrivateSkill(t,o);e.status(i.ok?200:400).json(i)})),d.post("/skills/private/:agentId/list",a,c,f(async(s,e)=>{const t=String(s.params.agentId??"").trim();if(!t){e.status(400).json({ok:!1,error:"agentId is required"});return}if(!m(s,e,t))return;const o=r(s);e.json({ok:!0,agentId:t,privateSkills:u.forScope(o).listPrivateSkills(t)})})),d.post("/skills/cc-switch/list",a,c,f(async(s,e)=>{e.json({ok:!0,skills:[],state:{skills:[],mcpServers:[]}})}));export{d as skillsRouter};
2
2
 
@@ -1,2 +1,13 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
2
13
  export declare const subAgentsRouter: import("express-serve-static-core").Router;
@@ -1,4 +1,4 @@
1
- import{Router as m}from"express";import{validateToken as c}from"../middleware/auth.js";import{noteDashboardActivity as l}from"./dashboard.js";import{subAgentManager as u,subAgentStore as g}from"../services/sub-agent-manager-instance.js";import{createLogger as f}from"../utils/logger.js";const b=f("sub-agents"),p=m();p.get("/sub-agents/:agentId",c,async(r,t)=>{const s=String(r.params.agentId??"");if(!s.trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}try{const e=await g.list(s),n=u.listActiveByParent(s),o=new Set(n.map(a=>a.subId)),i=n.map(a=>({subId:a.subId,parentAgentId:a.parentAgentId,parentSessionId:a.parentSessionId,subagentType:a.subagentType,description:a.description,prompt:a.prompt,status:a.status,startedAt:a.startedAt,contextSnapshot:a.contextSnapshot,availableTools:a.availableTools})),d=e.filter(a=>!o.has(a.subId)&&a.status!=="running"&&a.status!=="pending"),I=await g.read(s);t.json({ok:!0,agentId:s,updatedAt:I.updatedAt,running:i,history:d})}catch(e){const n=e;b.error("[sub-agents] \u5217\u8868\u5931\u8D25: %s",n.message),t.status(500).json({ok:!1,error:n.message})}}),p.get("/sub-agents/:agentId/events",c,async(r,t)=>{l();const s=String(r.params.agentId??"");if(!s.trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}t.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),t.write(`: connected
1
+ import{Router as m}from"express";import{validateToken as c}from"../middleware/auth.js";import{subAgentManager as u,subAgentStore as g}from"../services/sub-agent-manager-instance.js";import{createLogger as f}from"../utils/logger.js";import{noteDashboardActivity as l}from"./dashboard.js";const b=f("sub-agents"),p=m();p.get("/sub-agents/:agentId",c,async(r,t)=>{const s=String(r.params.agentId??"");if(!s.trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}try{const e=await g.list(s),n=u.listActiveByParent(s),o=new Set(n.map(a=>a.subId)),i=n.map(a=>({subId:a.subId,parentAgentId:a.parentAgentId,parentSessionId:a.parentSessionId,subagentType:a.subagentType,description:a.description,prompt:a.prompt,status:a.status,startedAt:a.startedAt,contextSnapshot:a.contextSnapshot,availableTools:a.availableTools})),d=e.filter(a=>!o.has(a.subId)&&a.status!=="running"&&a.status!=="pending"),I=await g.read(s);t.json({ok:!0,agentId:s,updatedAt:I.updatedAt,running:i,history:d})}catch(e){const n=e;b.error("[sub-agents] \u5217\u8868\u5931\u8D25: %s",n.message),t.status(500).json({ok:!1,error:n.message})}}),p.get("/sub-agents/:agentId/events",c,async(r,t)=>{l();const s=String(r.params.agentId??"");if(!s.trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}t.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),t.write(`: connected
2
2
 
3
3
  `);const e=u.listActiveByParent(s);e.length>0&&t.write(`data: ${JSON.stringify({type:"snapshot",agentId:s,timestamp:new Date().toISOString(),data:{running:e.map(i=>({subId:i.subId,subagentType:i.subagentType,description:i.description,status:i.status,startedAt:i.startedAt}))}})}
4
4
 
@@ -1,2 +1,7 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
2
7
  export declare const taskContextRouter: import("express-serve-static-core").Router;
@@ -1,2 +1,6 @@
1
1
 
2
+
3
+
4
+
5
+
2
6
  export declare const techStackRouter: import("express-serve-static-core").Router;
@@ -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,6 +55,15 @@ 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;
37
68
  export interface RuntimeStopOptions {
38
69
  statusNotified: boolean;
@@ -47,8 +78,14 @@ export type RuntimeContextResetSupport = {
47
78
  };
48
79
  export declare function resolveRuntimeContextResetSupport(providerId: string, hasResetContext: boolean): RuntimeContextResetSupport;
49
80
 
81
+
82
+
83
+
50
84
  export declare function shouldProbeSdkProcessPid(providerId: string): boolean;
51
85
 
86
+
87
+
88
+
52
89
  export declare function parseRuntimeStopOptions(body: unknown): RuntimeStopOptions;
53
90
  export declare function resolveStatusChangeUsage(actionInfo?: RuntimeStatusActionInfo): {
54
91
  inputTokens: number;
@@ -65,6 +102,14 @@ export declare function resolveStatusChangeRuntimeState(status: string, actionIn
65
102
  actionInfo?: RuntimeStatusActionInfo;
66
103
  };
67
104
 
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
68
113
  export declare function isIdleStatusChangeRetryable(params: {
69
114
  status: string;
70
115
  actionInfo?: RuntimeStatusActionInfo;
@@ -73,6 +118,17 @@ export declare function isIdleStatusChangeRetryable(params: {
73
118
  shouldPreservePrevAction: boolean;
74
119
  }): boolean;
75
120
 
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
76
132
  export declare function isUsageOnlyStatusChange(params: {
77
133
  actionInfo?: RuntimeStatusActionInfo;
78
134
  usage?: ReturnType<typeof resolveStatusChangeUsage>;
@@ -82,45 +138,87 @@ export declare function countTerminalOutputLines(output: string): number;
82
138
  export declare function formatCommandOutputSpilloverNotice(outputPath: string, lineLimit?: number): string;
83
139
  export declare function formatCommandInactivityTimeoutNotice(timeoutMs?: number): string;
84
140
 
141
+
142
+
85
143
  export declare function normalizeTerminalCommandInput(value: unknown): string;
86
144
 
145
+
146
+
147
+
87
148
  export declare function resolveTerminalOutputEncoding(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string;
88
149
 
150
+
151
+
89
152
  interface TerminalOutputDecoder {
90
153
  decode(chunk?: Uint8Array | ArrayBuffer | null, options?: {
91
154
  stream?: boolean;
92
155
  }): string;
93
156
  }
94
157
 
158
+
159
+
160
+
161
+
162
+
95
163
  export declare function createTerminalOutputDecoder(encoding?: string): TerminalOutputDecoder;
96
164
 
165
+
166
+
97
167
  export declare function decodeTerminalOutputChunk(decoder: TerminalOutputDecoder | TextDecoder, chunk?: Buffer, end?: boolean): string;
98
168
 
169
+
170
+
99
171
  export declare function parseTerminalDirectoryChangeTarget(command: string): string | null | undefined;
100
172
 
173
+
174
+
175
+
101
176
  export declare function resolveSdkSessionDisplayStatus(adapterStatus?: string, currentRuntimeStatus?: string, currentRuntimeActionType?: string): string;
102
177
  export interface PersistedSessionReuseDecision {
103
178
  reusable: boolean;
104
179
  reason: "active-pid" | "missing-pid" | "dead-pid" | "in-process-provider";
105
180
  }
106
181
 
182
+
183
+
184
+
107
185
  export declare function evaluatePersistedSessionReuse(session: Pick<PersistedSession, "pid"> & Partial<Pick<PersistedSession, "command">>, isPidRunning?: (pid: number) => boolean | Promise<boolean>): Promise<PersistedSessionReuseDecision>;
108
186
 
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
109
197
  export declare function cleanupSdkSessionByAgentId(agentId: string): string | undefined;
110
198
 
199
+
200
+
111
201
  export declare function formatTerminalPrompt(currentDirectory: string): string;
112
202
  export declare function buildRuntimeEnv(agentId: string, workspacePath: string | undefined, baseEnv: NodeJS.ProcessEnv, envOverrides?: Record<string, unknown>, projectRoot?: string | undefined): Record<string, string>;
113
203
 
204
+
205
+
206
+
114
207
  export declare function resolveSdkInputMessage(input: unknown): Promise<string>;
115
208
  export interface ClaudeCodeLaunchConfig {
116
209
  envOverrides: Record<string, string>;
117
210
  model?: string;
118
211
  }
119
212
 
213
+
214
+
120
215
  export declare function buildClaudeCodeLaunchConfig(savedClaudeConfig: {
121
216
  env?: Record<string, unknown>;
122
217
  } | null | undefined, requestEnvOverrides?: Record<string, unknown>): ClaudeCodeLaunchConfig;
123
218
 
219
+
220
+
221
+
124
222
  export declare function buildToolResultTimelineActionInfo(event: ProviderEvent): RuntimeStatusActionInfo | undefined;
125
223
  export declare function formatSdkOutputEvent(event: ProviderEvent): string | undefined;
126
224
  export declare function buildSdkOutputMetadata(event: ProviderEvent): RuntimeOutputMetadata;
@@ -129,11 +227,35 @@ export declare function resolveRuntimeStatusFromProviderEvent(event: ProviderEve
129
227
  actionInfo?: RuntimeStatusActionInfo;
130
228
  } | undefined;
131
229
 
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
132
245
  export declare function raceSendOutputWithRetry(factory: (signal: AbortSignal) => Promise<void>, timeoutMs?: number, maxRetries?: number): Promise<void>;
133
246
  export declare function enqueueCompactionSummaryChunk(entry: SdkSessionEntry, sessionId: string, output: string, seq: number): void;
134
247
 
248
+
249
+
250
+
135
251
  export declare function flushCompactionSummaryAccumulator(sessionId: string): void;
136
252
  export declare function resolveSdkProviderId(command?: string): string;
137
253
 
254
+
255
+
256
+
257
+
258
+
259
+
138
260
  export declare function withSenderSignature(input: unknown, sender: unknown): unknown;
139
261
  export {};