aws-runtime-bridge 1.9.175 → 1.9.180

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/CHANGELOG.md +223 -0
  2. package/README.md +61 -2
  3. package/dist/adapter/AcodeSdkAdapter.d.ts +382 -0
  4. package/dist/adapter/AcodeSdkAdapter.js +3 -3
  5. package/dist/adapter/AdapterRegistry.d.ts +28 -0
  6. package/dist/adapter/ClaudeSdkAdapter.d.ts +71 -0
  7. package/dist/adapter/CodexSdkAdapter.d.ts +14 -0
  8. package/dist/adapter/OpencodeSdkAdapter.d.ts +44 -0
  9. package/dist/adapter/acode-tool-names.d.ts +9 -0
  10. package/dist/adapter/idle-poll-loop.d.ts +20 -0
  11. package/dist/adapter/index.d.ts +3 -0
  12. package/dist/adapter/instance-ai-config-resolver.d.ts +20 -0
  13. package/dist/adapter/prompts.d.ts +12 -0
  14. package/dist/adapter/types.d.ts +201 -0
  15. package/dist/browser/browser-bootstrap.d.ts +15 -0
  16. package/dist/browser/browser-connect-token.d.ts +11 -0
  17. package/dist/browser/browser-frame-encode.d.ts +32 -0
  18. package/dist/browser/browser-pool.d.ts +129 -0
  19. package/dist/browser/browser-profile-store.d.ts +41 -0
  20. package/dist/browser/browser-ws-bridge.d.ts +20 -0
  21. package/dist/browser/built-in-browser-tools.d.ts +44 -0
  22. package/dist/browser/element-locator.d.ts +25 -0
  23. package/dist/browser/element-picker.d.ts +30 -0
  24. package/dist/browser/frame-encode.d.ts +19 -0
  25. package/dist/browser/input-dispatcher.d.ts +35 -0
  26. package/dist/browser/listener-store.d.ts +44 -0
  27. package/dist/browser/page-listener-manager.d.ts +88 -0
  28. package/dist/browser/page-listener-types.d.ts +38 -0
  29. package/dist/browser/screencast-differ.d.ts +10 -0
  30. package/dist/browser/screencast-manager.d.ts +94 -0
  31. package/dist/browser/snapshot-serializer.d.ts +56 -0
  32. package/dist/browser/ssrf-guard.d.ts +44 -0
  33. package/dist/browser/stealth.d.ts +21 -0
  34. package/dist/browser/step-archive.d.ts +13 -0
  35. package/dist/browser/types.d.ts +100 -0
  36. package/dist/browser/ws-server.d.ts +54 -0
  37. package/dist/config.d.ts +138 -2
  38. package/dist/config.js +2 -2
  39. package/dist/desktop/built-in-desktop-tools.d.ts +68 -0
  40. package/dist/desktop/built-in-desktop-tools.js +2 -1
  41. package/dist/desktop/desktop-control.d.ts +142 -0
  42. package/dist/desktop/desktop-control.js +2 -0
  43. package/dist/desktop/desktop-mcp-client.d.ts +28 -0
  44. package/dist/desktop/desktop-staleness.d.ts +66 -0
  45. package/dist/desktop/desktop-staleness.js +2 -0
  46. package/dist/index.d.ts +4 -0
  47. package/dist/index.js +1 -1
  48. package/dist/middleware/auth.d.ts +26 -0
  49. package/dist/middleware/auth.js +1 -1
  50. package/dist/remote-desktop/computer-control.d.ts +3 -0
  51. package/dist/remote-desktop/coords.d.ts +6 -0
  52. package/dist/remote-desktop/frame-backpressure.d.ts +10 -0
  53. package/dist/remote-desktop/frame-encode.d.ts +3 -0
  54. package/dist/remote-desktop/index.js +2 -2
  55. package/dist/remote-desktop/input-dispatcher.d.ts +4 -0
  56. package/dist/remote-desktop/permission-manager.d.ts +3 -0
  57. package/dist/remote-desktop/screen-capture.d.ts +91 -0
  58. package/dist/remote-desktop/session-manager.d.ts +47 -0
  59. package/dist/remote-desktop/session-manager.js +1 -1
  60. package/dist/remote-desktop/system-backend.d.ts +64 -0
  61. package/dist/remote-desktop/types.d.ts +25 -0
  62. package/dist/remote-desktop/ui-automation.d.ts +11 -0
  63. package/dist/remote-desktop/win32-api.d.ts +10 -0
  64. package/dist/routes/acode-todos.d.ts +13 -0
  65. package/dist/routes/agent-state.d.ts +15 -0
  66. package/dist/routes/ai-sources.js +1 -1
  67. package/dist/routes/background-tasks.d.ts +18 -0
  68. package/dist/routes/background-tasks.js +2 -2
  69. package/dist/routes/browser-listeners.d.ts +17 -0
  70. package/dist/routes/browser-sessions.d.ts +10 -0
  71. package/dist/routes/capabilities.js +1 -1
  72. package/dist/routes/dashboard-icon.d.ts +9 -0
  73. package/dist/routes/dashboard-icon.js +2 -0
  74. package/dist/routes/dashboard-theme.d.ts +24 -0
  75. package/dist/routes/dashboard-theme.js +157 -0
  76. package/dist/routes/dashboard.d.ts +9 -0
  77. package/dist/routes/dashboard.js +1988 -625
  78. package/dist/routes/debug-mount.d.ts +16 -0
  79. package/dist/routes/desktop-control.d.ts +15 -0
  80. package/dist/routes/desktop-control.js +2 -0
  81. package/dist/routes/events.d.ts +4 -0
  82. package/dist/routes/file-browser.d.ts +11 -0
  83. package/dist/routes/file-change-diff.d.ts +25 -0
  84. package/dist/routes/file-diff-rollback.d.ts +28 -0
  85. package/dist/routes/file-snapshot.d.ts +7 -0
  86. package/dist/routes/git.d.ts +143 -0
  87. package/dist/routes/instance-tool-status.d.ts +5 -0
  88. package/dist/routes/instance.d.ts +8 -0
  89. package/dist/routes/instance.js +1 -1
  90. package/dist/routes/jdks.d.ts +4 -0
  91. package/dist/routes/launch.d.ts +5 -0
  92. package/dist/routes/lsp-providers.d.ts +11 -0
  93. package/dist/routes/lsp-providers.js +2 -0
  94. package/dist/routes/lsp.d.ts +41 -0
  95. package/dist/routes/lsp.js +4 -2
  96. package/dist/routes/mcp-extra.d.ts +15 -0
  97. package/dist/routes/mcp.d.ts +16 -0
  98. package/dist/routes/mcp.js +1 -1
  99. package/dist/routes/plugins.d.ts +19 -0
  100. package/dist/routes/plugins.js +1 -1
  101. package/dist/routes/processes.d.ts +4 -0
  102. package/dist/routes/properties.d.ts +4 -0
  103. package/dist/routes/pty.d.ts +29 -0
  104. package/dist/routes/runtime-binding.d.ts +3 -0
  105. package/dist/routes/sessions.d.ts +22 -0
  106. package/dist/routes/skills.d.ts +15 -0
  107. package/dist/routes/skills.js +1 -1
  108. package/dist/routes/sub-agents.d.ts +11 -0
  109. package/dist/routes/sub-agents.js +1 -1
  110. package/dist/routes/task-context.d.ts +5 -0
  111. package/dist/routes/tech-stack.d.ts +4 -0
  112. package/dist/routes/terminal.d.ts +131 -0
  113. package/dist/routes/terminal.js +25 -25
  114. package/dist/routes/workspace-index.d.ts +12 -0
  115. package/dist/routes/workspace-index.js +2 -0
  116. package/dist/routes/yml.d.ts +4 -0
  117. package/dist/scripts/migrate-user-scopes.d.ts +26 -0
  118. package/dist/scripts/migrate-user-scopes.js +2 -0
  119. package/dist/services/access-control.d.ts +21 -0
  120. package/dist/services/acode-bg-manager.d.ts +21 -0
  121. package/dist/services/acode-package.d.ts +10 -0
  122. package/dist/services/acode-package.js +1 -1
  123. package/dist/services/agent-capability-sync.d.ts +26 -0
  124. package/dist/services/agent-capability-sync.js +1 -1
  125. package/dist/services/agent-event-store.d.ts +20 -0
  126. package/dist/services/agent-ownership.d.ts +58 -0
  127. package/dist/services/agent-ownership.js +3 -0
  128. package/dist/services/agent-process-manager.d.ts +154 -0
  129. package/dist/services/agent-pty-manager.d.ts +37 -0
  130. package/dist/services/agent-startup-memory.d.ts +34 -0
  131. package/dist/services/agent-startup-memory.js +1 -1
  132. package/dist/services/ai-config-service.d.ts +26 -52
  133. package/dist/services/ai-config-service.js +1 -3
  134. package/dist/services/ai-source-apply.d.ts +7 -15
  135. package/dist/services/ai-source-apply.js +1 -1
  136. package/dist/services/auto-register.d.ts +165 -1
  137. package/dist/services/auto-register.js +1 -1
  138. package/dist/services/aws-client-agent-mcp.d.ts +14 -0
  139. package/dist/services/aws-client-agent-mcp.js +2 -2
  140. package/dist/services/bridge-package-publish-hooks.d.ts +14 -0
  141. package/dist/services/bridge-pairing.d.ts +82 -0
  142. package/dist/services/bridge-pairing.js +2 -0
  143. package/dist/services/bridge-temp-files.d.ts +29 -0
  144. package/dist/services/browser-session-manager.d.ts +71 -0
  145. package/dist/services/capability-config.d.ts +60 -15
  146. package/dist/services/capability-config.js +2 -2
  147. package/dist/services/change-cache-retention.d.ts +9 -0
  148. package/dist/services/changelog.d.ts +9 -0
  149. package/dist/services/cli-commands.d.ts +82 -0
  150. package/dist/services/cli-commands.js +6 -6
  151. package/dist/services/connection-key-rotation.d.ts +27 -0
  152. package/dist/services/connection-key-rotation.js +2 -0
  153. package/dist/services/debug-mount.d.ts +49 -0
  154. package/dist/services/desktop-mcp-manager.d.ts +103 -1
  155. package/dist/services/desktop-mcp-manager.js +1 -1
  156. package/dist/services/event-delta-pusher.d.ts +15 -0
  157. package/dist/services/fileSnapshotStore.d.ts +33 -0
  158. package/dist/services/gitignore.d.ts +9 -0
  159. package/dist/services/instance-ai-config-service.d.ts +9 -0
  160. package/dist/services/instance-ai-config-service.js +1 -1
  161. package/dist/services/instance-features.d.ts +127 -0
  162. package/dist/services/instance-features.js +1 -1
  163. package/dist/services/instance-init-service.d.ts +3 -0
  164. package/dist/services/instance-init-service.js +1 -1
  165. package/dist/services/instance-state.d.ts +23 -0
  166. package/dist/services/jdk-scanner.d.ts +15 -0
  167. package/dist/services/launch-manager.d.ts +138 -0
  168. package/dist/services/launch-metrics.d.ts +42 -0
  169. package/dist/services/launch-streams.d.ts +19 -0
  170. package/dist/services/lifecycle-state.d.ts +5 -0
  171. package/dist/services/log-retention.d.ts +38 -0
  172. package/dist/services/lsp/install-manager.d.ts +55 -0
  173. package/dist/services/lsp/install-manager.js +2 -0
  174. package/dist/services/lsp/provider-registry.d.ts +108 -0
  175. package/dist/services/lsp/provider-registry.js +2 -0
  176. package/dist/services/lsp/uri-rewrite.d.ts +44 -0
  177. package/dist/services/lsp/uri-rewrite.js +2 -0
  178. package/dist/services/lsp-stdio-bridge.d.ts +41 -4
  179. package/dist/services/lsp-stdio-bridge.js +3 -3
  180. package/dist/services/mcp-deploy.d.ts +45 -4
  181. package/dist/services/mcp-deploy.js +4 -4
  182. package/dist/services/mcp-env-injector.d.ts +52 -0
  183. package/dist/services/mcp-launch-binding-queue.d.ts +12 -0
  184. package/dist/services/mcp-package.d.ts +22 -0
  185. package/dist/services/mcp-package.js +1 -1
  186. package/dist/services/mcp-probe-client.d.ts +19 -0
  187. package/dist/services/mcp-probe-client.js +1 -1
  188. package/dist/services/open-doc-events.d.ts +22 -0
  189. package/dist/services/open-doc-registry.d.ts +35 -0
  190. package/dist/services/orphan-monitor.d.ts +43 -0
  191. package/dist/services/panel-auth.d.ts +24 -0
  192. package/dist/services/panel-env.d.ts +28 -0
  193. package/dist/services/plugin-deployment.d.ts +34 -1
  194. package/dist/services/plugin-deployment.js +2 -2
  195. package/dist/services/plugin-event-buffer.d.ts +21 -0
  196. package/dist/services/plugin-fs.d.ts +11 -0
  197. package/dist/services/plugin-handler-adapter.d.ts +13 -0
  198. package/dist/services/plugin-listener-runner.d.ts +10 -0
  199. package/dist/services/plugin-loader.d.ts +15 -0
  200. package/dist/services/plugin-manager.d.ts +95 -9
  201. package/dist/services/plugin-manager.js +4 -4
  202. package/dist/services/plugin-manifest.d.ts +14 -0
  203. package/dist/services/plugin-package.d.ts +13 -0
  204. package/dist/services/plugin-runtime.d.ts +15 -0
  205. package/dist/services/port-detector.d.ts +15 -0
  206. package/dist/services/process-detail.d.ts +3 -0
  207. package/dist/services/process-detector.d.ts +132 -0
  208. package/dist/services/process-registry.d.ts +120 -0
  209. package/dist/services/process-top.d.ts +6 -0
  210. package/dist/services/request-identity.d.ts +77 -0
  211. package/dist/services/request-identity.js +2 -0
  212. package/dist/services/request-invalid-dump.d.ts +4 -0
  213. package/dist/services/ring-buffer.d.ts +33 -0
  214. package/dist/services/runtime-binding.d.ts +56 -4
  215. package/dist/services/runtime-binding.js +4 -4
  216. package/dist/services/runtime-lifecycle-policy.d.ts +17 -0
  217. package/dist/services/runtime-resources-snapshot.d.ts +26 -0
  218. package/dist/services/sdk-tool-file-change-recorder.d.ts +9 -0
  219. package/dist/services/session-output.d.ts +63 -0
  220. package/dist/services/session-output.js +3 -3
  221. package/dist/services/skill-manager.d.ts +42 -5
  222. package/dist/services/skill-manager.js +3 -3
  223. package/dist/services/snapshot-retention.d.ts +23 -0
  224. package/dist/services/startup-config-wizard.d.ts +7 -1
  225. package/dist/services/startup-config-wizard.js +10 -10
  226. package/dist/services/system-metrics.d.ts +3 -0
  227. package/dist/services/tech-stack-scanner.d.ts +12 -0
  228. package/dist/services/terminal-persistence.d.ts +43 -0
  229. package/dist/services/tool-installer.d.ts +12 -0
  230. package/dist/services/tunnel-client.d.ts +57 -2
  231. package/dist/services/tunnel-client.js +1 -1
  232. package/dist/services/update-log.d.ts +6 -0
  233. package/dist/services/update-notifier.d.ts +17 -0
  234. package/dist/services/update-notifier.js +2 -2
  235. package/dist/services/user-scope.d.ts +115 -0
  236. package/dist/services/user-scope.js +2 -0
  237. package/dist/services/windows-service-manager.d.ts +12 -0
  238. package/dist/services/workspace-files.d.ts +64 -0
  239. package/dist/services/workspace-index/index-manager.d.ts +46 -0
  240. package/dist/services/workspace-index/index-manager.js +2 -0
  241. package/dist/services/workspace-index/indexer.d.ts +15 -0
  242. package/dist/services/workspace-index/indexer.js +2 -0
  243. package/dist/services/workspace-index/query.d.ts +74 -0
  244. package/dist/services/workspace-index/query.js +5 -0
  245. package/dist/services/workspace-index/resolver.d.ts +26 -0
  246. package/dist/services/workspace-index/resolver.js +2 -0
  247. package/dist/services/workspace-index/types.d.ts +89 -0
  248. package/dist/services/workspace-index/types.js +2 -0
  249. package/dist/services/workspace-watch.d.ts +4 -0
  250. package/dist/services/workspaceTaskChangeWatcher.d.ts +49 -0
  251. package/dist/services/workspaceTaskChangeWatcher.js +1 -1
  252. package/dist/types.d.ts +9 -0
  253. package/dist/utils/config-write-queue.d.ts +11 -0
  254. package/dist/utils/env-safety.d.ts +21 -0
  255. package/dist/utils/file-utils.d.ts +15 -0
  256. package/dist/utils/instance-ai-config-debug-logger.d.ts +15 -0
  257. package/dist/utils/lifecycle-log.d.ts +5 -0
  258. package/dist/utils/logger.d.ts +13 -0
  259. package/dist/utils/logger.js +2 -1
  260. package/dist/utils/npm-version.d.ts +10 -0
  261. package/dist/utils/path-utils.d.ts +12 -0
  262. package/dist/utils/scheduler-url.d.ts +18 -0
  263. package/dist/utils/scheduler-url.js +2 -0
  264. package/dist/utils/sdk-package-loader.d.ts +13 -0
  265. package/dist/utils/sdk-package-loader.js +1 -1
  266. package/dist/utils/target-identity.d.ts +31 -0
  267. package/dist/utils/target-identity.js +2 -0
  268. package/dist/utils/validation.d.ts +17 -0
  269. package/dist/utils/yaml-utils.d.ts +48 -0
  270. package/package/acode/dist/__tests__/summary-request-helper.d.ts +10 -0
  271. package/package/acode/dist/ask-user-question-tool.d.ts +17 -0
  272. package/package/acode/dist/await-complete-tool.d.ts +12 -0
  273. package/package/acode/dist/background-command-manager.d.ts +105 -0
  274. package/package/acode/dist/background-command-store.d.ts +27 -0
  275. package/package/acode/dist/background-command-tools.d.ts +8 -0
  276. package/package/acode/dist/background-output-ringbuffer.d.ts +15 -0
  277. package/package/acode/dist/built-in-file-tools.d.ts +65 -0
  278. package/package/acode/dist/built-in-symbols-tool.d.ts +3 -0
  279. package/package/acode/dist/builtins/commandArtifacts.d.ts +3 -0
  280. package/package/acode/dist/builtins/shellCommandPreparation.d.ts +17 -0
  281. package/package/acode/dist/builtins/shellCommandRunner.d.ts +4 -0
  282. package/package/acode/dist/builtins/shellOutputDecoder.d.ts +15 -0
  283. package/package/acode/dist/cache-control.d.ts +45 -0
  284. package/package/acode/dist/commands/commandLoader.d.ts +3 -0
  285. package/package/acode/dist/commands/commandParser.d.ts +3 -0
  286. package/package/acode/dist/commands/commandRegistry.d.ts +3 -0
  287. package/package/acode/dist/compaction.d.ts +354 -0
  288. package/package/acode/dist/config.d.ts +3 -0
  289. package/package/acode/dist/context-overflow.d.ts +32 -0
  290. package/package/acode/dist/fs-utils.d.ts +18 -0
  291. package/package/acode/dist/hooks/hookBus.d.ts +3 -0
  292. package/package/acode/dist/image-utils.d.ts +35 -0
  293. package/package/acode/dist/index.d.ts +1 -0
  294. package/package/acode/dist/index.js +1 -1
  295. package/package/acode/dist/mcpToolNames.d.ts +32 -0
  296. package/package/acode/dist/microcompact.d.ts +53 -0
  297. package/package/acode/dist/parsers/ast-cache.d.ts +41 -0
  298. package/package/acode/dist/parsers/file-index.d.ts +83 -0
  299. package/package/acode/dist/parsers/file-index.js +4 -0
  300. package/package/acode/dist/parsers/language-detector.d.ts +4 -0
  301. package/package/acode/dist/parsers/tree-sitter-loader.d.ts +12 -0
  302. package/package/acode/dist/parsers/types.d.ts +11 -0
  303. package/package/acode/dist/paths.d.ts +14 -0
  304. package/package/acode/dist/plugin-types.d.ts +34 -0
  305. package/package/acode/dist/read-file-state.d.ts +15 -0
  306. package/package/acode/dist/runtime-environment.d.ts +16 -0
  307. package/package/acode/dist/runtime.d.ts +824 -9
  308. package/package/acode/dist/runtime.js +22 -22
  309. package/package/acode/dist/skill-tool.d.ts +20 -0
  310. package/package/acode/dist/sub-agent-manager.d.ts +169 -0
  311. package/package/acode/dist/sub-agent-manager.js +1 -1
  312. package/package/acode/dist/sub-agent-store.d.ts +50 -0
  313. package/package/acode/dist/sub-agent-tools.d.ts +15 -0
  314. package/package/acode/dist/sub-agent-types.d.ts +13 -0
  315. package/package/acode/dist/terminal-tool.d.ts +15 -0
  316. package/package/acode/dist/terminal-types.d.ts +10 -0
  317. package/package/acode/dist/todo-store.d.ts +15 -0
  318. package/package/acode/dist/token-estimator.d.ts +17 -0
  319. package/package/acode/dist/tool-allocation.d.ts +113 -0
  320. package/package/acode/dist/tool-concurrency/index.d.ts +8 -0
  321. package/package/acode/dist/tool-concurrency/observability.d.ts +32 -0
  322. package/package/acode/dist/tool-concurrency/resource-lock.d.ts +30 -0
  323. package/package/acode/dist/tool-concurrency/scheduler.d.ts +19 -0
  324. package/package/acode/dist/tool-concurrency/types.d.ts +57 -0
  325. package/package/acode/dist/tool-group-manager.d.ts +195 -0
  326. package/package/acode/dist/tool-group-manager.js +4 -4
  327. package/package/acode/dist/types.d.ts +194 -0
  328. package/package/aws-client-agent-mcp/README.md +130 -215
  329. package/package/aws-client-agent-mcp/dist/ability-market-tools.d.ts +57 -0
  330. package/package/aws-client-agent-mcp/dist/agent-client.d.ts +277 -3
  331. package/package/aws-client-agent-mcp/dist/agent-client.js +1 -1
  332. package/package/aws-client-agent-mcp/dist/config.d.ts +18 -0
  333. package/package/aws-client-agent-mcp/dist/constants.d.ts +2 -0
  334. package/package/aws-client-agent-mcp/dist/context-manager.d.ts +70 -0
  335. package/package/aws-client-agent-mcp/dist/http-client.d.ts +61 -0
  336. package/package/aws-client-agent-mcp/dist/index.d.ts +10 -0
  337. package/package/aws-client-agent-mcp/dist/logger.d.ts +24 -0
  338. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +606 -1
  339. package/package/aws-client-agent-mcp/dist/mcp-server.js +4 -4
  340. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +158 -0
  341. package/package/aws-client-agent-mcp/dist/mcp-tools.js +38 -22
  342. package/package/aws-client-agent-mcp/dist/memory-store.d.ts +81 -0
  343. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +18 -0
  344. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +86 -0
  345. package/package/aws-client-agent-mcp/dist/messageContent.d.ts +24 -0
  346. package/package/aws-client-agent-mcp/dist/office/office-equation.d.ts +19 -0
  347. package/package/aws-client-agent-mcp/dist/office/office-image.d.ts +18 -0
  348. package/package/aws-client-agent-mcp/dist/office/office-workspace.d.ts +29 -0
  349. package/package/aws-client-agent-mcp/dist/parent-lifecycle.d.ts +18 -0
  350. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.d.ts +6 -0
  351. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +4 -0
  352. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts +41 -0
  353. package/package/aws-client-agent-mcp/dist/tool-groups.d.ts +136 -0
  354. package/package/aws-client-agent-mcp/dist/types.d.ts +123 -0
  355. package/package/aws-client-agent-mcp/dist/watchdog.d.ts +7 -0
  356. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +108 -0
  357. package/package.json +1 -1
@@ -2,6 +2,11 @@ import type { RemoteDesktopQuality, ScreenInfo, CaptureFrame } from "./types.js"
2
2
 
3
3
  export declare function getSharpLoadStatus(): string;
4
4
 
5
+
6
+
7
+
8
+
9
+
5
10
  export declare function extractRawRegion(raw: Buffer, srcWidth: number, left: number, top: number, w: number, h: number): Buffer | null;
6
11
  export declare class ScreenCapture {
7
12
 
@@ -11,6 +16,11 @@ export declare class ScreenCapture {
11
16
 
12
17
  private static readonly IDLE_INTERVAL_MS;
13
18
 
19
+
20
+
21
+
22
+
23
+
14
24
  private static readonly PERIODIC_FULL_FRAME_INTERVAL_MS;
15
25
  private screens;
16
26
 
@@ -33,10 +43,18 @@ export declare class ScreenCapture {
33
43
 
34
44
  private inputBoostFrames;
35
45
 
46
+
47
+
48
+
36
49
  private lastRaw;
37
50
  private lastRawWidth;
38
51
  private lastRawHeight;
39
52
 
53
+
54
+
55
+
56
+
57
+
40
58
  private pendingReference;
41
59
  frameStats: {
42
60
  full: number;
@@ -48,54 +66,127 @@ export declare class ScreenCapture {
48
66
  resetFrameStats(): void;
49
67
  listScreens(): Promise<ScreenInfo[]>;
50
68
 
69
+
70
+
71
+
72
+
73
+
51
74
  private cachedMonitors;
52
75
  private getActiveMonitor;
53
76
 
77
+
78
+
79
+
80
+
54
81
  private acquireShot;
55
82
 
83
+
84
+
85
+
56
86
  private encodeShot;
57
87
 
88
+
89
+
90
+
91
+
92
+
93
+
58
94
  captureVirtualDesktop(force?: boolean): Promise<CaptureFrame | null>;
59
95
 
60
96
  private totalTileCount;
61
97
 
62
98
  private mapLimit;
63
99
 
100
+
101
+
102
+
103
+
104
+
105
+
64
106
  private outputRectToSource;
65
107
 
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
66
116
  private detectChangedTiles;
67
117
 
68
118
  private commitReferenceFrame;
69
119
 
70
120
  private discardReferenceFrame;
71
121
 
122
+
123
+
72
124
  setActiveScreen(screenId: string | null): void;
73
125
 
126
+
127
+
128
+
129
+
74
130
  startLoop(onFrame: (frame: CaptureFrame) => boolean | void): void;
75
131
 
132
+
76
133
  private scheduleLoop;
77
134
 
78
135
  private lastFullFrameAt;
79
136
 
137
+
138
+
139
+
140
+
141
+
80
142
  private captureOnce;
81
143
 
144
+
145
+
146
+
147
+
82
148
  private drainEncode;
83
149
 
84
150
  private consecutiveNullCaptures;
85
151
 
152
+
153
+
154
+
155
+
156
+
86
157
  private captureSafeFullFrame;
87
158
 
88
159
  private currentIntervalMs;
89
160
 
161
+
162
+
163
+
164
+
90
165
  requestFrame(): void;
91
166
 
92
167
  private backpressureThrottleUntil;
93
168
 
169
+
170
+
171
+
172
+
173
+
94
174
  notifyFrameDropped(): void;
95
175
 
176
+
177
+
178
+
179
+
96
180
  requestFullFrame(): void;
97
181
  stopLoop(): void;
98
182
 
183
+
184
+
185
+
186
+
187
+
188
+
189
+
99
190
  setQuality(quality?: RemoteDesktopQuality, fps?: number): void;
100
191
  getQuality(): RemoteDesktopQuality;
101
192
  getScreens(): ScreenInfo[];
@@ -15,6 +15,11 @@ export declare class RemoteDesktopSession {
15
15
  computerControl: ComputerControl;
16
16
  state: "active" | "closed" | "error";
17
17
  ws: WebSocket | null;
18
+
19
+
20
+
21
+
22
+ controlEnabled: boolean;
18
23
  private inputBackend;
19
24
 
20
25
  private onFrame;
@@ -27,23 +32,53 @@ export declare class RemoteDesktopSession {
27
32
  screens: ScreenInfo[];
28
33
  }>;
29
34
 
35
+
36
+
37
+
38
+
30
39
  switchScreen(screenId: string | null): Promise<void>;
31
40
 
41
+
42
+
32
43
  startInputBackend(): void;
33
44
 
45
+
46
+
47
+
48
+
49
+
34
50
  enableControl(): Promise<void>;
35
51
 
52
+
53
+
36
54
  stopInputBackend(): void;
37
55
 
56
+
57
+
58
+
59
+
38
60
  private startFocusPolling;
39
61
 
40
62
  private stopFocusPolling;
41
63
 
64
+
65
+
66
+
42
67
  private sendFocusState;
43
68
  attachWebSocket(ws: WebSocket): void;
44
69
  startFrameLoop(onFrame: (frame: CaptureFrame) => boolean | void): void;
45
70
  stopFrameLoop(): void;
46
71
 
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
47
82
  handleInput(message: InputMessage): Promise<void>;
48
83
  close(): void;
49
84
  }
@@ -54,6 +89,18 @@ export declare class SessionManager {
54
89
  constructor(permissionManager: PermissionManager);
55
90
  createSession(agentId: string, token: string): Promise<StartResult>;
56
91
  getSession(sessionId: string): RemoteDesktopSession | undefined;
92
+
93
+
94
+
95
+
96
+ isHumanControlling(agentId: string): boolean;
97
+
98
+ getScreensFor(agentId: string): ScreenInfo[] | null;
99
+
100
+
101
+
102
+
103
+ broadcastToAgent(agentId: string, type: string, data: unknown): boolean;
57
104
  handleInput(sessionId: string, message: InputMessage): Promise<void>;
58
105
  closeSession(sessionId: string): void;
59
106
  closeAll(): void;
@@ -1,2 +1,2 @@
1
- import{randomUUID as a}from"node:crypto";import{ComputerControl as c}from"./computer-control.js";import{InputDispatcher as h}from"./input-dispatcher.js";import{ScreenCapture as u}from"./screen-capture.js";import{SystemBackend as p}from"./system-backend.js";class o{constructor(s,t,e){this.inputDispatcher=null,this.state="active",this.ws=null,this.onFrame=null,this.focusPollTimer=null,this.lastFocusState=null,this.inputChain=Promise.resolve(),this.id=s,this.agentId=t,this.permissions=e,this.screenCapture=new u,this.inputBackend=new p,this.computerControl=new c(this.screenCapture,this.inputBackend)}async init(){const s=await this.screenCapture.listScreens(),t=s[0];return t&&(this.inputDispatcher=new h(this.inputBackend,this.permissions,t),this.inputBackend.setScreenSize(t.width,t.height),this.inputBackend.setActiveScreen(t)),{screens:s}}async switchScreen(s){this.screenCapture.setActiveScreen(s);const t=this.screenCapture.getScreens(),e=s?t.find(i=>i.id===s):t[0];e&&this.inputDispatcher&&(this.inputDispatcher.setScreen(e),this.inputBackend.setScreenSize(e.width,e.height),this.inputBackend.setActiveScreen(e))}startInputBackend(){this.inputBackend.startPersistentProcess()}async enableControl(){this.inputBackend.startPersistentProcess(),this.startFocusPolling(),await this.inputBackend.centerMouse()}stopInputBackend(){this.stopFocusPolling(),this.inputBackend.stopPersistentProcess()}startFocusPolling(){this.stopFocusPolling(),this.focusPollTimer=setInterval(()=>{const s=this.inputBackend.isInputFocused();s!==this.lastFocusState&&(this.lastFocusState=s,this.sendFocusState(s))},o.FOCUS_POLL_INTERVAL_MS)}stopFocusPolling(){this.focusPollTimer&&(clearInterval(this.focusPollTimer),this.focusPollTimer=null),this.lastFocusState=null}sendFocusState(s){!this.ws||this.ws.readyState!==this.ws.OPEN||this.ws.send(JSON.stringify({type:"remote-desktop:focus-state",sessionId:this.id,data:{hasInputFocus:s}}))}attachWebSocket(s){this.ws=s}startFrameLoop(s){this.onFrame=s,this.screenCapture.startLoop(s)}stopFrameLoop(){this.screenCapture.stopLoop(),this.onFrame=null}handleInput(s){const t=this.inputDispatcher;if(!t)return Promise.resolve();this.screenCapture.requestFrame();const e=this.inputChain.then(async()=>{await t.handle(s),this.screenCapture.requestFrame()});return this.inputChain=e.catch(()=>{}),e}close(){this.state="closed",this.stopFocusPolling(),this.stopFrameLoop(),this.inputBackend.stopPersistentProcess(),this.ws=null}}o.FOCUS_POLL_INTERVAL_MS=1e3;class P{constructor(s){this.sessions=new Map,this.agentSessions=new Map,this.permissionManager=s}async createSession(s,t){if(!this.permissionManager.validateToken(t))throw new Error("Invalid token");const e=this.agentSessions.get(s);e&&this.closeSession(e);const i=this.permissionManager.resolvePermissions(t),n=a(),r=new o(n,s,i);return await r.init(),this.sessions.set(n,r),this.agentSessions.set(s,n),{sessionId:n,screens:r.screenCapture.getScreens(),permissions:Array.from(i)}}getSession(s){return this.sessions.get(s)}async handleInput(s,t){const e=this.sessions.get(s);!e||e.state!=="active"||await e.handleInput(t)}closeSession(s){const t=this.sessions.get(s);if(t){t.close(),this.sessions.delete(s);for(const[e,i]of this.agentSessions)if(i===s){this.agentSessions.delete(e);break}}}closeAll(){for(const s of this.sessions.values())s.close();this.sessions.clear(),this.agentSessions.clear()}}export{o as RemoteDesktopSession,P as SessionManager};
1
+ import{randomUUID as a}from"node:crypto";import{ComputerControl as c}from"./computer-control.js";import{InputDispatcher as h}from"./input-dispatcher.js";import{ScreenCapture as u}from"./screen-capture.js";import{SystemBackend as l}from"./system-backend.js";class o{constructor(s,t,e){this.inputDispatcher=null,this.state="active",this.ws=null,this.controlEnabled=!1,this.onFrame=null,this.focusPollTimer=null,this.lastFocusState=null,this.inputChain=Promise.resolve(),this.id=s,this.agentId=t,this.permissions=e,this.screenCapture=new u,this.inputBackend=new l,this.computerControl=new c(this.screenCapture,this.inputBackend)}async init(){const s=await this.screenCapture.listScreens(),t=s[0];return t&&(this.inputDispatcher=new h(this.inputBackend,this.permissions,t),this.inputBackend.setScreenSize(t.width,t.height),this.inputBackend.setActiveScreen(t)),{screens:s}}async switchScreen(s){this.screenCapture.setActiveScreen(s);const t=this.screenCapture.getScreens(),e=s?t.find(n=>n.id===s):t[0];e&&this.inputDispatcher&&(this.inputDispatcher.setScreen(e),this.inputBackend.setScreenSize(e.width,e.height),this.inputBackend.setActiveScreen(e))}startInputBackend(){this.inputBackend.startPersistentProcess()}async enableControl(){this.controlEnabled=!0,this.inputBackend.startPersistentProcess(),this.startFocusPolling(),await this.inputBackend.centerMouse()}stopInputBackend(){this.controlEnabled=!1,this.stopFocusPolling(),this.inputBackend.stopPersistentProcess()}startFocusPolling(){this.stopFocusPolling(),this.focusPollTimer=setInterval(()=>{const s=this.inputBackend.isInputFocused();s!==this.lastFocusState&&(this.lastFocusState=s,this.sendFocusState(s))},o.FOCUS_POLL_INTERVAL_MS)}stopFocusPolling(){this.focusPollTimer&&(clearInterval(this.focusPollTimer),this.focusPollTimer=null),this.lastFocusState=null}sendFocusState(s){!this.ws||this.ws.readyState!==this.ws.OPEN||this.ws.send(JSON.stringify({type:"remote-desktop:focus-state",sessionId:this.id,data:{hasInputFocus:s}}))}attachWebSocket(s){this.ws=s}startFrameLoop(s){this.onFrame=s,this.screenCapture.startLoop(s)}stopFrameLoop(){this.screenCapture.stopLoop(),this.onFrame=null}handleInput(s){const t=this.inputDispatcher;if(!t)return Promise.resolve();this.screenCapture.requestFrame();const e=this.inputChain.then(async()=>{await t.handle(s),this.screenCapture.requestFrame()});return this.inputChain=e.catch(()=>{}),e}close(){this.state="closed",this.controlEnabled=!1,this.stopFocusPolling(),this.stopFrameLoop(),this.inputBackend.stopPersistentProcess(),this.ws=null}}o.FOCUS_POLL_INTERVAL_MS=1e3;class w{constructor(s){this.sessions=new Map,this.agentSessions=new Map,this.permissionManager=s}async createSession(s,t){if(!this.permissionManager.validateToken(t))throw new Error("Invalid token");const e=this.agentSessions.get(s);e&&this.closeSession(e);const n=this.permissionManager.resolvePermissions(t),i=a(),r=new o(i,s,n);return await r.init(),this.sessions.set(i,r),this.agentSessions.set(s,i),{sessionId:i,screens:r.screenCapture.getScreens(),permissions:Array.from(n)}}getSession(s){return this.sessions.get(s)}isHumanControlling(s){const t=this.agentSessions.get(s);if(!t)return!1;const e=this.sessions.get(t);return!!e&&e.state==="active"&&e.controlEnabled}getScreensFor(s){const t=this.agentSessions.get(s);if(!t)return null;const e=this.sessions.get(t);return e&&e.state==="active"?e.screenCapture.getScreens():null}broadcastToAgent(s,t,e){const n=this.agentSessions.get(s);if(!n)return!1;const i=this.sessions.get(n);return!i||i.state!=="active"||!i.ws||i.ws.readyState!==i.ws.OPEN?!1:(i.ws.send(JSON.stringify({type:t,sessionId:n,data:e})),!0)}async handleInput(s,t){const e=this.sessions.get(s);!e||e.state!=="active"||await e.handleInput(t)}closeSession(s){const t=this.sessions.get(s);if(t){t.close(),this.sessions.delete(s);for(const[e,n]of this.agentSessions)if(n===s){this.agentSessions.delete(e);break}}}closeAll(){for(const s of this.sessions.values())s.close();this.sessions.clear(),this.agentSessions.clear()}}export{o as RemoteDesktopSession,w as SessionManager};
2
2
 
@@ -6,10 +6,18 @@ export declare class SystemBackend implements InputBackend {
6
6
 
7
7
  private activeScreen;
8
8
 
9
+
10
+
11
+
12
+
9
13
  private win32Api;
10
14
 
15
+
16
+
11
17
  constructor(platformOverride?: "windows" | "macos" | "linux");
12
18
 
19
+
20
+
13
21
  private static readonly WIN32_INIT_TYPES;
14
22
  private psProcess;
15
23
  private psReady;
@@ -18,29 +26,71 @@ export declare class SystemBackend implements InputBackend {
18
26
  private cliclickProcess;
19
27
  private xdotoolProcess;
20
28
 
29
+
30
+
31
+
32
+
33
+
21
34
  startPersistentProcess(): void;
22
35
 
36
+
37
+
38
+
39
+
23
40
  private startPowerShellProcess;
24
41
 
42
+
43
+
44
+
45
+
25
46
  private ensurePowerShell;
26
47
 
48
+
49
+
50
+
27
51
  stopPersistentProcess(): void;
28
52
 
53
+
54
+
55
+
56
+
57
+
29
58
  private psCmd;
30
59
 
60
+
61
+
31
62
  moveMouse(x: number, y: number): Promise<void>;
32
63
 
64
+
65
+
66
+
67
+
68
+
69
+
70
+
33
71
  moveMouseRelative(dx: number, dy: number): Promise<void>;
34
72
 
73
+
74
+
75
+
76
+
77
+
35
78
  centerMouse(): Promise<void>;
36
79
 
80
+
81
+
37
82
  click(x: number, y: number, button: 'left' | 'right'): Promise<void>;
38
83
 
84
+
85
+
39
86
  doubleClick(x: number, y: number): Promise<void>;
40
87
  mouseDown(button: 'left' | 'right'): Promise<void>;
41
88
  mouseUp(button: 'left' | 'right'): Promise<void>;
42
89
  scroll(direction: 'up' | 'down' | 'left' | 'right', amount: number): Promise<void>;
43
90
 
91
+
92
+
93
+
44
94
  type(text: string): Promise<void>;
45
95
  keyPress(keys: string[]): Promise<void>;
46
96
  keyDown(key: string): Promise<void>;
@@ -51,15 +101,29 @@ export declare class SystemBackend implements InputBackend {
51
101
  };
52
102
  setScreenSize(width: number, height: number): void;
53
103
 
104
+
105
+
106
+
54
107
  setActiveScreen(screen: ScreenInfo): void;
55
108
  getMousePos(): Promise<{
56
109
  x: number;
57
110
  y: number;
58
111
  }>;
59
112
 
113
+
114
+
115
+
116
+
117
+
60
118
  isInputFocused(): boolean;
61
119
 
120
+
121
+
122
+
123
+
62
124
  private warnInputErr;
63
125
 
126
+
127
+
64
128
  private getVirtualKeyCode;
65
129
  }
@@ -31,6 +31,9 @@ export interface ScreenshotResult {
31
31
  height: number;
32
32
  }
33
33
 
34
+
35
+
36
+
34
37
  export interface TileRect {
35
38
 
36
39
  x: number;
@@ -44,6 +47,10 @@ export interface TileRect {
44
47
  data: Buffer;
45
48
  }
46
49
 
50
+
51
+
52
+
53
+
47
54
  export type CaptureFrame = {
48
55
  kind: "full";
49
56
  data: Buffer;
@@ -64,6 +71,10 @@ export interface StartResult {
64
71
  }
65
72
  export type ConnectionState = 'idle' | 'connecting' | 'authenticating' | 'connected' | 'disconnected' | 'error';
66
73
 
74
+
75
+
76
+
77
+
67
78
  export interface DesktopWindowInfo {
68
79
  hwnd: string;
69
80
  title: string;
@@ -71,6 +82,13 @@ export interface DesktopWindowInfo {
71
82
  processName?: string;
72
83
  }
73
84
 
85
+
86
+
87
+
88
+
89
+
90
+
91
+
74
92
  export interface OpenWithApp {
75
93
 
76
94
  name: string;
@@ -80,6 +98,10 @@ export interface OpenWithApp {
80
98
  isDefault?: boolean;
81
99
  }
82
100
 
101
+
102
+
103
+
104
+
83
105
  export interface DesktopFileEntry {
84
106
 
85
107
  name: string;
@@ -127,6 +149,9 @@ export interface UIElement {
127
149
  isEditable?: boolean;
128
150
  }
129
151
 
152
+
153
+
154
+
130
155
  export interface FlatNode {
131
156
  path: string;
132
157
  role: string;
@@ -28,12 +28,23 @@ export interface UIElement {
28
28
  }
29
29
  export declare class UIAutomation {
30
30
 
31
+
32
+
33
+
34
+
35
+
31
36
  listApplications(): Promise<AppInfo[]>;
32
37
 
38
+
39
+
33
40
  getUIElements(pid: number): Promise<UIElement[]>;
34
41
 
42
+
43
+
35
44
  clickElement(_elementId: string): Promise<void>;
36
45
 
46
+
47
+
37
48
  setElementValue(_elementId: string, _value: string): Promise<void>;
38
49
  private listAppsWindows;
39
50
  private parseWindowsApps;
@@ -7,6 +7,9 @@ export declare const MOUSEEVENTF_WHEEL = 2048;
7
7
  export declare const MOUSEEVENTF_HWHEEL = 4096;
8
8
  export declare const KEYEVENTF_KEYUP = 2;
9
9
 
10
+
11
+
12
+
10
13
  export declare function isInputControlClassName(className: string): boolean;
11
14
  export interface Win32Api {
12
15
 
@@ -21,9 +24,16 @@ export interface Win32Api {
21
24
 
22
25
  keybdEvent(vk: number, flags: number): void;
23
26
 
27
+
28
+
29
+
24
30
  isInputFocused(): boolean;
25
31
  }
26
32
 
33
+
34
+
35
+
36
+
27
37
  export declare function initWin32Api(): Win32Api | null;
28
38
 
29
39
  export declare function resetWin32ApiForTest(): void;
@@ -1,2 +1,15 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
2
15
  export declare const acodeTodosRouter: import("express-serve-static-core").Router;
@@ -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 agentStateRouter: import("express-serve-static-core").Router;
@@ -1,2 +1,2 @@
1
- import m from"axios";import{Router as U}from"express";import{validateToken as f}from"../middleware/auth.js";import{createAiConfigService as $}from"../services/ai-config-service.js";import{applyCurrentAiConfigToInstalledTools as k}from"../services/ai-source-apply.js";import{detectToolStatuses as z}from"../services/tool-installer.js";import{createLogger as C}from"../utils/logger.js";import{ensureEnabledTools as F}from"../utils/validation.js";const u=C("ai-sources"),g=U();function S(r){if(!r||typeof r!="object"||Array.isArray(r))return[];const o=r,d=Array.isArray(o.data)?o.data:[],e=new Set;for(const a of d){if(!a||typeof a!="object"||Array.isArray(a))continue;const t=String(a.id||"").trim();t&&e.add(t)}return[...e]}async function R(r,o,d){const e=r.replace(/\/+$/,"");if(d==="anthropic-compatible"){const t=`${e.endsWith("/v1")?e.replace(/\/v1$/,""):e}/v1/models`,s=await m.get(t,{headers:{"x-api-key":o,"anthropic-version":"2023-06-01"},timeout:1e4});return S(s.data)}const a=e.endsWith("/v1")?[`${e}/models`]:[`${e}/models`,`${e}/v1/models`];for(const t of a)try{const s=await m.get(t,{headers:{Authorization:`Bearer ${o}`},timeout:1e4}),i=S(s.data);if(i.length>0)return i}catch{}return[]}g.post("/cc-switch/apply-ai-sources",f,async(r,o)=>{const{agentId:d,template:e,ccSwitchEnabledTools:a,acodeTemplateId:t,claudecodeTemplateId:s,codexTemplateId:i,opencodeTemplateId:n,acodeModelEffort:y,claudecodeModelEffort:T,codexModelEffort:A,opencodeModelEffort:I,acodeSubAgentTemplateId:b,acodeSubAgentModel:h,acodeSubAgentModelEffort:M,acode:E,claudecode:v,codex:w,opencode:j}=r.body||{};if(!d){o.status(400).json({error:"agentId is required"});return}try{const l=$(),c=F(a),x=await z(c),p=await k({template:e,requestedSources:{acode:E,claudecode:v,codex:w,opencode:j},toolStatus:x,aiConfigService:l});o.json({ok:!0,agentId:String(d),acodeTemplateId:String(t||""),claudecodeTemplateId:String(s||""),codexTemplateId:String(i||""),opencodeTemplateId:String(n||""),acodeModelEffort:String(y||""),claudecodeModelEffort:String(T||""),codexModelEffort:String(A||""),opencodeModelEffort:String(I||""),acodeSubAgentTemplateId:String(b||""),acodeSubAgentModel:String(h||""),acodeSubAgentModelEffort:String(M||""),generatedFromUnifiedTemplate:p.generatedFromUnifiedTemplate,applied:p.applied,skippedTools:p.skippedTools})}catch(l){const c=l;u.error("Failed to apply AI sources",{error:c?.message,agentId:String(d||"")}),o.status(400).json({error:c?.message||"apply ai sources failed"})}}),g.post("/cc-switch/list-ai-models",f,async(r,o)=>{const{baseUrl:d,apiKey:e,protocolType:a}=r.body||{},t=String(d||"").trim(),s=String(e||"").trim();if(!t||!s){o.status(400).json({error:"baseUrl and apiKey are required"});return}try{const i=await R(t,s,a);o.json({ok:!0,models:i})}catch(i){const n=i;u.error("Failed to list remote AI models",{error:n?.message,baseUrl:t}),o.status(400).json({error:n?.message||"list ai models failed"})}});export{g as aiSourcesRouter};
1
+ import p from"axios";import{Router as v}from"express";import{validateToken as f}from"../middleware/auth.js";import{createAiConfigService as x}from"../services/ai-config-service.js";import{applyCurrentAiConfigToInstalledTools as $}from"../services/ai-source-apply.js";import{detectToolStatuses as k}from"../services/tool-installer.js";import{getUserScopeOrThrow as z,requireAgentOwnership as q,requireUserScope as u}from"../services/user-scope.js";import{createLogger as C}from"../utils/logger.js";import{ensureEnabledTools as F}from"../utils/validation.js";const g=C("ai-sources"),S=v();function y(r){if(!r||typeof r!="object"||Array.isArray(r))return[];const e=r,s=Array.isArray(e.data)?e.data:[],o=new Set;for(const a of s){if(!a||typeof a!="object"||Array.isArray(a))continue;const t=String(a.id||"").trim();t&&o.add(t)}return[...o]}async function R(r,e,s){const o=r.replace(/\/+$/,"");if(s==="anthropic-compatible"){const t=`${o.endsWith("/v1")?o.replace(/\/v1$/,""):o}/v1/models`,i=await p.get(t,{headers:{"x-api-key":e,"anthropic-version":"2023-06-01"},timeout:1e4});return y(i.data)}const a=o.endsWith("/v1")?[`${o}/models`]:[`${o}/models`,`${o}/v1/models`];for(const t of a)try{const i=await p.get(t,{headers:{Authorization:`Bearer ${e}`},timeout:1e4}),n=y(i.data);if(n.length>0)return n}catch{}return[]}S.post("/cc-switch/apply-ai-sources",f,u,q,async(r,e)=>{const{agentId:s,template:o,ccSwitchEnabledTools:a,acodeTemplateId:t,claudecodeTemplateId:i,codexTemplateId:n,opencodeTemplateId:c,acodeModelEffort:h,claudecodeModelEffort:T,codexModelEffort:A,opencodeModelEffort:I,acodeSubAgentTemplateId:b,acodeSubAgentModel:M,acodeSubAgentModelEffort:w,acode:E}=r.body||{};if(!s){e.status(400).json({error:"agentId is required"});return}try{const l=z(r),d=x(l),U=F(a),j=await k(U),m=await $({template:o,requestedSources:{acode:E},toolStatus:j,aiConfigService:d});e.json({ok:!0,agentId:String(s),acodeTemplateId:String(t||""),claudecodeTemplateId:String(i||""),codexTemplateId:String(n||""),opencodeTemplateId:String(c||""),acodeModelEffort:String(h||""),claudecodeModelEffort:String(T||""),codexModelEffort:String(A||""),opencodeModelEffort:String(I||""),acodeSubAgentTemplateId:String(b||""),acodeSubAgentModel:String(M||""),acodeSubAgentModelEffort:String(w||""),generatedFromUnifiedTemplate:m.generatedFromUnifiedTemplate,applied:m.applied,skippedTools:m.skippedTools})}catch(l){const d=l;if(g.error("Failed to apply AI sources",{error:d?.message,agentId:String(s||"")}),d?.message?.includes("agent-ownership-mismatch")){e.status(403).json({error:"agent-ownership-mismatch"});return}e.status(400).json({error:d?.message||"apply ai sources failed"})}}),S.post("/cc-switch/list-ai-models",f,u,async(r,e)=>{const{baseUrl:s,apiKey:o,protocolType:a}=r.body||{},t=String(s||"").trim(),i=String(o||"").trim();if(!t||!i){e.status(400).json({error:"baseUrl and apiKey are required"});return}try{const n=await R(t,i,a);e.json({ok:!0,models:n})}catch(n){const c=n;g.error("Failed to list remote AI models",{error:c?.message,baseUrl:t}),e.status(400).json({error:c?.message||"list ai models failed"})}});export{S as aiSourcesRouter};
2
2
 
@@ -1,2 +1,20 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
2
20
  export declare const backgroundTasksRouter: import("express-serve-static-core").Router;
@@ -1,5 +1,5 @@
1
- import{promises as S}from"node:fs";import y from"node:path";import{pathToFileURL as C}from"node:url";import{Router as j}from"express";import{getAcodeDataHome as T}from"../config.js";import{validateToken as k}from"../middleware/auth.js";import{noteDashboardActivity as B}from"./dashboard.js";import{getAcodeBgManager as h}from"../services/acode-bg-manager.js";import{getReleasedAcodeEntryPath as E}from"../services/acode-package.js";import{createLogger as _}from"../utils/logger.js";import{listPtySessions as L}from"./pty.js";let m=null;function I(){return m||(m=(async()=>{try{const e=E(),t=y.join(y.dirname(e),"background-command-store.js"),d=await import(C(t).href);return d.BackgroundCommandStore?new d.BackgroundCommandStore:(l.warn("[acode-bg-tasks] BackgroundCommandStore \u4E0D\u53EF\u7528,\u78C1\u76D8\u515C\u5E95\u7981\u7528"),null)}catch(e){return l.warn("[acode-bg-tasks] \u52A0\u8F7D BackgroundCommandStore \u5931\u8D25: %s",e?.message),null}})().then(e=>(e||(m=null),e)),m)}const l=_("acode-bg-tasks"),p=j();function v(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function P(e){return y.join(T(),"bg-tasks",v(e),"state.json")}p.get("/acode-bg-tasks/:agentId",k,async(e,t)=>{const d=e.params.agentId,o=Array.isArray(d)?d[0]:d;if(!o||!String(o).trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}try{const s=await h();if(s&&typeof s.listTasksWithReconcile=="function"){const r=e.query.status&&String(e.query.status)!=="all"?String(e.query.status):void 0,n=await s.listTasksWithReconcile(String(o),r);t.json({ok:!0,agentId:String(o),updatedAt:Date.now(),tasks:n});return}}catch(s){l.warn("[acode-bg-tasks] \u5185\u5B58\u5BF9\u8D26\u5217\u8868\u5931\u8D25\uFF0C\u964D\u7EA7\u78C1\u76D8\u8BFB\u53D6: %s",s?.message)}const i=P(String(o));try{const s=await S.readFile(i,"utf-8"),r=JSON.parse(s),u=(Array.isArray(r.tasks)?r.tasks:[]).map(c=>{const a=c;return{taskId:a.taskId,status:a.status,command:a.commandPreview??a.command,commandPreview:a.commandPreview,description:typeof a.description=="string"?a.description:void 0,cwd:a.cwd,startedAt:a.startedAt,finishedAt:a.finishedAt,exitCode:a.exitCode,signal:a.signal,outputLineCount:a.outputLineCount,outputBytes:a.outputBytes}});t.json({ok:!0,agentId:String(o),updatedAt:typeof r.updatedAt=="number"?r.updatedAt:null,tasks:u})}catch(s){if((typeof s=="object"&&s!==null?Reflect.get(s,"code"):void 0)==="ENOENT"){t.json({ok:!0,agentId:String(o),updatedAt:null,tasks:[]});return}if(s instanceof SyntaxError){l.warn("[acode-bg-tasks] \u6587\u4EF6\u635F\u574F\uFF08JSON \u89E3\u6790\u5931\u8D25\uFF09: %s",i),t.json({ok:!0,agentId:String(o),updatedAt:null,tasks:[]});return}const n=s;l.error("[acode-bg-tasks] \u8BFB\u53D6\u5931\u8D25: %s",n.message),t.status(500).json({ok:!1,error:n.message})}}),p.get("/acode-agent-pty-sessions/:agentId",k,(e,t)=>{const d=e.params.agentId,o=Array.isArray(d)?d[0]:d;if(!o||!String(o).trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}const i=String(o),r=L().filter(n=>n.ownerUserId===i);t.json({ok:!0,agentId:i,sessions:r})});const N=15e3;function w(e){return{taskId:e.taskId,status:e.status,exitCode:e.exitCode,signal:e.signal,startedAt:e.startedAt,finishedAt:e.finishedAt,command:e.command,lines:e.lines,nextSeq:e.nextSeq,totalLines:e.totalLines,totalBytes:e.totalBytes,truncated:e.truncated}}async function x(e,t){let o=null;try{o=await S.open(e,"r")}catch(i){if(i?.code==="ENOENT")return{text:[],fileExists:!1,truncated:!1};throw i}try{const s=(await o.stat()).size;if(s===0)return{text:[],fileExists:!0,truncated:!1};const r=Math.min(s,2097152),n=s-r,u=Buffer.alloc(r);await o.read(u,0,r,n);const a=u.toString("utf-8").split(`
2
- `);return n>0&&a.shift(),{text:a.slice(-t),fileExists:!0,truncated:r<s}}finally{await o.close()}}p.get("/acode-bg-tasks/:agentId/:taskId/output",k,(e,t)=>{(async()=>{const d=String(e.params.agentId),o=String(e.params.taskId),i=Math.min(2e3,Math.max(100,Number(e.query.tailLines)||500));try{const s=await h();if(s){const r=s.getTaskOutputSnapshot(d,o);if(r){t.json({ok:!0,source:"memory",...w(r)});return}}}catch(s){l.warn("[acode-bg-tasks] \u5185\u5B58\u5FEB\u7167\u8BFB\u53D6\u5931\u8D25,\u964D\u7EA7\u8D70\u78C1\u76D8: %s",s?.message)}try{const s=await I();if(!s){t.status(503).json({ok:!1,error:"store unavailable"});return}const r=await s.readSession(d);if(!r){t.status(404).json({ok:!1,error:"task_not_found"});return}const n=r.tasks.find(f=>f.taskId===o);if(!n){t.status(404).json({ok:!1,error:"task_not_found"});return}const{text:u,fileExists:c,truncated:a}=await x(n.outputPath,i);t.json({ok:!0,source:"file",taskId:n.taskId,status:n.status,exitCode:n.exitCode,signal:n.signal,startedAt:n.startedAt,finishedAt:n.finishedAt,command:n.command,lines:u,nextSeq:0,totalLines:n.outputLineCount,totalBytes:n.outputBytes,truncated:a||!c})}catch(s){l.error("[acode-bg-tasks] \u78C1\u76D8\u515C\u5E95\u8BFB\u53D6\u5931\u8D25: %s",s?.message),t.status(500).json({ok:!1,error:"internal_error"})}})().catch(d=>{l.error("[acode-bg-tasks] output \u8BFB\u53D6\u5931\u8D25: %s",d?.message),t.status(500).json({ok:!1,error:"internal_error"})})}),p.get("/acode-bg-tasks/:agentId/:taskId/stream",k,(e,t)=>{B(),(async()=>{const d=String(e.params.agentId),o=String(e.params.taskId);t.status(200),t.set({"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform",Connection:"keep-alive","X-Accel-Buffering":"no"}),t.flushHeaders?.();const i=(u,c)=>{t.writableEnded||t.destroyed||(c!==void 0&&t.write(`id: ${c}
1
+ import{promises as S}from"node:fs";import y from"node:path";import{pathToFileURL as C}from"node:url";import{Router as j}from"express";import{getAcodeDataHome as T}from"../config.js";import{validateToken as k}from"../middleware/auth.js";import{getAcodeBgManager as h}from"../services/acode-bg-manager.js";import{getReleasedAcodeEntryPath as B}from"../services/acode-package.js";import{createLogger as E}from"../utils/logger.js";import{noteDashboardActivity as _}from"./dashboard.js";import{listPtySessions as L}from"./pty.js";let m=null;function I(){return m||(m=(async()=>{try{const e=B(),t=y.join(y.dirname(e),"background-command-store.js"),d=await import(C(t).href);return d.BackgroundCommandStore?new d.BackgroundCommandStore:(l.warn("[acode-bg-tasks] BackgroundCommandStore \u4E0D\u53EF\u7528,\u78C1\u76D8\u515C\u5E95\u7981\u7528"),null)}catch(e){return l.warn("[acode-bg-tasks] \u52A0\u8F7D BackgroundCommandStore \u5931\u8D25: %s",e?.message),null}})().then(e=>(e||(m=null),e)),m)}const l=E("acode-bg-tasks"),p=j();function v(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function P(e){return y.join(T(),"bg-tasks",v(e),"state.json")}p.get("/acode-bg-tasks/:agentId",k,async(e,t)=>{const d=e.params.agentId,o=Array.isArray(d)?d[0]:d;if(!o||!String(o).trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}try{const s=await h();if(s&&typeof s.listTasksWithReconcile=="function"){const r=e.query.status&&String(e.query.status)!=="all"?String(e.query.status):void 0,n=await s.listTasksWithReconcile(String(o),r);t.json({ok:!0,agentId:String(o),updatedAt:Date.now(),tasks:n});return}}catch(s){l.warn("[acode-bg-tasks] \u5185\u5B58\u5BF9\u8D26\u5217\u8868\u5931\u8D25\uFF0C\u964D\u7EA7\u78C1\u76D8\u8BFB\u53D6: %s",s?.message)}const i=P(String(o));try{const s=await S.readFile(i,"utf-8"),r=JSON.parse(s),u=(Array.isArray(r.tasks)?r.tasks:[]).map(c=>{const a=c;return{taskId:a.taskId,status:a.status,command:a.commandPreview??a.command,commandPreview:a.commandPreview,description:typeof a.description=="string"?a.description:void 0,cwd:a.cwd,startedAt:a.startedAt,finishedAt:a.finishedAt,exitCode:a.exitCode,signal:a.signal,outputLineCount:a.outputLineCount,outputBytes:a.outputBytes}});t.json({ok:!0,agentId:String(o),updatedAt:typeof r.updatedAt=="number"?r.updatedAt:null,tasks:u})}catch(s){if((typeof s=="object"&&s!==null?Reflect.get(s,"code"):void 0)==="ENOENT"){t.json({ok:!0,agentId:String(o),updatedAt:null,tasks:[]});return}if(s instanceof SyntaxError){l.warn("[acode-bg-tasks] \u6587\u4EF6\u635F\u574F\uFF08JSON \u89E3\u6790\u5931\u8D25\uFF09: %s",i),t.json({ok:!0,agentId:String(o),updatedAt:null,tasks:[]});return}const n=s;l.error("[acode-bg-tasks] \u8BFB\u53D6\u5931\u8D25: %s",n.message),t.status(500).json({ok:!1,error:n.message})}}),p.get("/acode-agent-pty-sessions/:agentId",k,(e,t)=>{const d=e.params.agentId,o=Array.isArray(d)?d[0]:d;if(!o||!String(o).trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}const i=String(o),r=L().filter(n=>n.ownerUserId===i);t.json({ok:!0,agentId:i,sessions:r})});const N=15e3;function w(e){return{taskId:e.taskId,status:e.status,exitCode:e.exitCode,signal:e.signal,startedAt:e.startedAt,finishedAt:e.finishedAt,command:e.command,lines:e.lines,nextSeq:e.nextSeq,totalLines:e.totalLines,totalBytes:e.totalBytes,truncated:e.truncated}}async function x(e,t){let o=null;try{o=await S.open(e,"r")}catch(i){if(i?.code==="ENOENT")return{text:[],fileExists:!1,truncated:!1};throw i}try{const s=(await o.stat()).size;if(s===0)return{text:[],fileExists:!0,truncated:!1};const r=Math.min(s,2097152),n=s-r,u=Buffer.alloc(r);await o.read(u,0,r,n);const a=u.toString("utf-8").split(`
2
+ `);return n>0&&a.shift(),{text:a.slice(-t),fileExists:!0,truncated:r<s}}finally{await o.close()}}p.get("/acode-bg-tasks/:agentId/:taskId/output",k,(e,t)=>{(async()=>{const d=String(e.params.agentId),o=String(e.params.taskId),i=Math.min(2e3,Math.max(100,Number(e.query.tailLines)||500));try{const s=await h();if(s){const r=s.getTaskOutputSnapshot(d,o);if(r){t.json({ok:!0,source:"memory",...w(r)});return}}}catch(s){l.warn("[acode-bg-tasks] \u5185\u5B58\u5FEB\u7167\u8BFB\u53D6\u5931\u8D25,\u964D\u7EA7\u8D70\u78C1\u76D8: %s",s?.message)}try{const s=await I();if(!s){t.status(503).json({ok:!1,error:"store unavailable"});return}const r=await s.readSession(d);if(!r){t.status(404).json({ok:!1,error:"task_not_found"});return}const n=r.tasks.find(f=>f.taskId===o);if(!n){t.status(404).json({ok:!1,error:"task_not_found"});return}const{text:u,fileExists:c,truncated:a}=await x(n.outputPath,i);t.json({ok:!0,source:"file",taskId:n.taskId,status:n.status,exitCode:n.exitCode,signal:n.signal,startedAt:n.startedAt,finishedAt:n.finishedAt,command:n.command,lines:u,nextSeq:0,totalLines:n.outputLineCount,totalBytes:n.outputBytes,truncated:a||!c})}catch(s){l.error("[acode-bg-tasks] \u78C1\u76D8\u515C\u5E95\u8BFB\u53D6\u5931\u8D25: %s",s?.message),t.status(500).json({ok:!1,error:"internal_error"})}})().catch(d=>{l.error("[acode-bg-tasks] output \u8BFB\u53D6\u5931\u8D25: %s",d?.message),t.status(500).json({ok:!1,error:"internal_error"})})}),p.get("/acode-bg-tasks/:agentId/:taskId/stream",k,(e,t)=>{_(),(async()=>{const d=String(e.params.agentId),o=String(e.params.taskId);t.status(200),t.set({"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform",Connection:"keep-alive","X-Accel-Buffering":"no"}),t.flushHeaders?.();const i=(u,c)=>{t.writableEnded||t.destroyed||(c!==void 0&&t.write(`id: ${c}
3
3
  `),t.write(`data: ${JSON.stringify(u)}
4
4
 
5
5
  `))};let s,r=null,n=null;try{s=await h(),s&&(r=s,n=s.getTaskOutputSnapshot(d,o))}catch(u){l.warn("[acode-bg-tasks] \u5185\u5B58\u8BFB\u53D6\u5931\u8D25,\u964D\u7EA7\u8D70\u78C1\u76D8: %s",u?.message)}if(n){if(!r){i({type:"done",status:"killed",exitCode:null,signal:null}),t.end();return}if(i({type:"snapshot",source:"memory",...w(n)}),n.status!=="running"){i({type:"done",status:n.status,exitCode:n.exitCode,signal:n.signal}),t.end();return}let u=null,c=!1;const a=()=>{c||(c=!0,u?.(),clearInterval(f))},f=setInterval(()=>{if(t.writableEnded||t.destroyed){a();return}try{t.write(`: ping
@@ -1,2 +1,19 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
2
19
  export declare const browserListenersRouter: import("express-serve-static-core").Router;
@@ -1,2 +1,12 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
2
12
  export declare const browserSessionsRouter: import("express-serve-static-core").Router;
@@ -1,2 +1,2 @@
1
- import{readFileSync as b}from"node:fs";import{Router as S}from"express";import{getBridgeInstanceMcpExtraFile as v}from"../config.js";import{validateToken as M}from"../middleware/auth.js";import{getEffective as N,getEffectiveSource as j}from"../services/capability-config.js";import{mcpDeployManager as w}from"../services/mcp-deploy.js";import{pluginManager as y}from"../services/plugin-manager.js";import{skillManager as k}from"../services/skill-manager.js";import{createLogger as E}from"../utils/logger.js";const h=E("capabilities"),D=S();function n(s){return[...new Set(s.filter(t=>!!t))]}function P(s){try{const t=JSON.parse(b(v(s),"utf8"));return t.servers&&typeof t.servers=="object"?Object.keys(t.servers):[]}catch{return[]}}function l(s,t,r,a={}){const i={};for(const o of r){if(a[o]){i[o]=a[o];continue}i[o]={enabled:N(s,t,o),source:j(s,t,o)}}return i}D.post("/capabilities/state",M,async(s,t)=>{const r=String((s.body??{})?.agentId??"").trim();if(!r){t.status(400).json({ok:!1,error:"agentId is required"});return}try{const i=k.listPrivateSkills(r).filter(e=>e.deployed!==!1).map(e=>e.skillName),o=n([...k.listDeployed().map(e=>e.skillName),...i]),c=P(r),p=n([...w.listDeployed().map(e=>e.name),...c]),m=await y.list(r),f=n([...(await y.listDeployed()).map(e=>e.pluginName),...m.map(e=>e.name)]),u={};for(const e of i)u[e]={enabled:!0,source:"agent"};const d={};for(const e of c)d[e]={enabled:!0,source:"agent"};const g={};for(const e of m)String(e.source||"").startsWith("shared:")||(g[e.name]={enabled:e.enabled,source:"agent"});t.json({ok:!0,agentId:r,skills:l(r,"skills",o,u),mcp:l(r,"mcp",p,d),plugins:l(r,"plugins",f,g),deployedSkills:o,deployedMcp:p,deployedPlugins:f})}catch(a){h.warn("[capabilities/state] \u8BFB\u53D6\u80FD\u529B\u72B6\u6001\u5931\u8D25: %s",a.message),t.status(500).json({ok:!1,error:a.message||"read capability state failed"})}});export{D as capabilitiesRouter};
1
+ import{readFileSync as v}from"node:fs";import{Router as M}from"express";import{getBridgeInstanceMcpExtraFile as w}from"../config.js";import{validateToken as N}from"../middleware/auth.js";import{getEffective as h,getEffectiveSource as j}from"../services/capability-config.js";import{McpDeployManager as E}from"../services/mcp-deploy.js";import{pluginManager as b}from"../services/plugin-manager.js";import{SkillManager as D}from"../services/skill-manager.js";import{getUserScopeOrThrow as O,requireAgentOwnership as P,requireUserScope as q}from"../services/user-scope.js";import{createLogger as I}from"../utils/logger.js";const T=I("capabilities"),x=M();function l(s){return[...new Set(s.filter(t=>!!t))]}function B(s){try{const t=JSON.parse(v(w(s),"utf8"));return t.servers&&typeof t.servers=="object"?Object.keys(t.servers):[]}catch{return[]}}function c(s,t,r,o,n={}){const a={};for(const i of o){if(n[i]){a[i]=n[i];continue}a[i]={enabled:h(s,t,r,i),source:j(s,t,r,i)}}return a}x.post("/capabilities/state",N,q,P,async(s,t)=>{const r=String((s.body??{})?.agentId??"").trim();if(!r){t.status(400).json({ok:!1,error:"agentId is required"});return}try{const o=O(s),n=D.forScope(o),a=E.forScope(o),p=n.listPrivateSkills(r).filter(e=>e.deployed!==!1).map(e=>e.skillName),m=l([...n.listDeployed().map(e=>e.skillName),...p]),f=B(r),u=l([...a.listDeployed().map(e=>e.name),...f]),g=await b.list(r),d=l([...(await b.listDeployed(o)).map(e=>e.pluginName),...g.map(e=>e.name)]),S={};for(const e of p)S[e]={enabled:!0,source:"agent"};const k={};for(const e of f)k[e]={enabled:!0,source:"agent"};const y={};for(const e of g)String(e.source||"").startsWith("shared:")||(y[e.name]={enabled:e.enabled,source:"agent"});t.json({ok:!0,agentId:r,skills:c(o,r,"skills",m,S),mcp:c(o,r,"mcp",u,k),plugins:c(o,r,"plugins",d,y),deployedSkills:m,deployedMcp:u,deployedPlugins:d})}catch(o){T.warn("[capabilities/state] \u8BFB\u53D6\u80FD\u529B\u72B6\u6001\u5931\u8D25: %s",o.message),t.status(500).json({ok:!1,error:o.message||"read capability state failed"})}});export{x as capabilitiesRouter};
2
2
 
@@ -0,0 +1,9 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+ export declare const DASHBOARD_FAVICON_DATA_URI = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IkFnZW50c1dvcmtTdHVkaW8gQnJpZGdlIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImF3YkJnIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI1NjNlYiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFkNGVkOCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJhd2JNYXJrIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2RiZWFmZSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNjQiIGZpbGw9InVybCgjYXdiQmcpIi8+PGcgZmlsbD0idXJsKCNhd2JNYXJrKSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjkuMDkgMTcuODIpIHNjYWxlKDAuODYwNzYpIj48cGF0aCBkPSJNNjQgMTc2TDEwMiA4MEgxMjhMMTY2IDE3NkgxNDJMMTM0IDE1Mkg5NUw4OCAxNzZINjRaTTEwMSAxMzJIMTI4TDExNCA5NUwxMDEgMTMyWiIvPjxwYXRoIGQ9Ik0xNjggODBIMTkyTDIwNCAxMjlMMjE2IDgwSDI0MEwyMTkgMTc2SDE5NEwxODAgMTI1TDE2NiAxNzZIMTQxTDEyMCA4MEgxNDRMMTU2IDEyOUwxNjggODBaIi8+PHBhdGggZD0iTTAgODBINDBMNTYgOThWMTEyTDQ0IDEyNEw1NiAxMzZWMTU4TDQwIDE3NkgwWk0xOCA5NkgzNEw0MiAxMDRWMTA4TDM0IDExNkgxOFpNMTggMTQwSDM0TDQyIDE0OFYxNTJMMzQgMTYwSDE4WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjUzIDApIHRyYW5zbGF0ZSgwIDgwKSBza2V3WCgtMjEuNTk1KSB0cmFuc2xhdGUoMCAtODApIi8+PC9nPjwvc3ZnPg==";
8
+
9
+ export declare const DASHBOARD_FAVICON_LINK: string;