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
@@ -0,0 +1,2 @@
1
+ import{promises as k}from"node:fs";import g from"node:path";import{detectLanguage as v,extractFileIndex as C,getParserForLanguage as M}from"@agentswork/acode";import{createLogger as S}from"../../utils/logger.js";import{isIgnoredByGitIgnore as P,loadGitIgnoreRules as T}from"../gitignore.js";import{resolveImports as $}from"./resolver.js";import{DEFAULT_INDEX_OPTIONS as z,INDEX_SKIP_DIRS as L,INDEX_SUPPORTED_EXTENSIONS as _,symbolKey as B,toPosixPath as F}from"./types.js";const D=S("workspace-index"),A=4;async function R(i,n){const s=[];let e=0,r=!1,c=0,t=[];try{t=await T(i)}catch{}const y=[{dir:i,depth:0}];for(;y.length>0;){if(s.length>=n.maxFiles){r=!0;break}const l=y.shift();if(!l)break;if(l.depth>40){e+=1;continue}let h;try{h=await k.readdir(l.dir,{withFileTypes:!0})}catch{e+=1;continue}for(const u of h){const f=g.join(l.dir,u.name);if(u.isDirectory()){if(L.has(u.name))continue;const a=F(g.relative(i,f))+"/";if(P(a,!0,t))continue;y.push({dir:f,depth:l.depth+1});continue}if(!u.isFile())continue;const I=g.extname(u.name).toLowerCase();if(!_.has(I))continue;const d=F(g.relative(i,f));if(P(d,!1,t))continue;let m;try{m=await k.stat(f)}catch{e+=1;continue}if(m.size>n.maxFileBytes){e+=1;continue}if(c+=m.size,c>n.maxTotalBytes){r=!0;break}if(s.push(f),s.length>=n.maxFiles){r=!0;break}}}return{files:s,skipped:e,truncated:r}}async function O(i){const n=v(i);if(!n)return null;let s;try{s=await k.stat(i)}catch{return null}if(!s.isFile())return null;let e;try{e=await k.readFile(i,"utf8")}catch{return null}try{const r=await M(n);if(!r)return null;const c=r.parse(e);if(!c)return null;const t=C(c,n);return c.delete(),{index:t,mtimeMs:s.mtimeMs,size:s.size}}catch(r){return D.debug(`[workspace-index] \u89E3\u6790\u5931\u8D25 ${i}: ${r.message}`),null}}async function X(i,n,s){const e=new Array(i.length);let r=0;const c=Array.from({length:Math.min(n,i.length)},async()=>{for(;;){const t=r;if(r+=1,t>=i.length)return;e[t]=await s(i[t])}});return await Promise.all(c),e}async function H(i,n={}){const s=Date.now(),e=g.resolve(String(i||"").trim()),r={...z,...n.maxFiles!==void 0?{maxFiles:n.maxFiles}:{},...n.maxFileBytes!==void 0?{maxFileBytes:n.maxFileBytes}:{},...n.maxTotalBytes!==void 0?{maxTotalBytes:n.maxTotalBytes}:{}};let c;try{c=await k.stat(e)}catch{throw new Error(`workspace does not exist: ${e}`)}if(!c.isDirectory())throw new Error(`workspace is not a directory: ${e}`);const t=await R(e,r);D.info(`[workspace-index] \u626B\u63CF\u5B8C\u6210 workspace=${e} files=${t.files.length} skipped=${t.skipped} truncated=${t.truncated}`);const y=await X(t.files,A,O),l=new Map,h=new Map,u=new Map,f=new Map;let I=0;for(let d=0;d<t.files.length;d+=1){const m=t.files[d],a=y[d];if(!a)continue;const w=F(g.resolve(m)),E=F(g.relative(e,m)),N=a.index.symbols.map(o=>({name:o.name,kind:o.kind,filePath:w,line:o.line,column:o.column,endLine:o.endLine,endColumn:o.endColumn,signature:o.signature})),b={filePath:w,relativePath:E,language:a.index.language,mtimeMs:a.mtimeMs,size:a.size,symbols:N,imports:[],identifierNames:a.index.identifierNames,packageName:a.index.packageName};l.set(w,b),f.set(w,a.index),I+=N.length;for(const o of N){const p=B(o.name);if(!p)continue;const x=h.get(p);x?x.push(o):h.set(p,[o])}for(const o of a.index.identifierNames){const p=B(o);if(!p)continue;const x=u.get(p);x?x.add(w):u.set(p,new Set([w]))}}for(const[d,m]of l){const a=f.get(d);a&&(m.imports=$({workspaceRoot:F(e),filePath:d,language:a.language,packageName:a.packageName,rawImports:a.imports,files:l}))}return{workspacePath:e,builtAt:Date.now(),files:l,byName:h,filesByIdentifier:u,truncated:t.truncated,stats:{fileCount:l.size,symbolCount:I,skippedCount:t.skipped,durationMs:Date.now()-s}}}export{H as buildWorkspaceIndex};
2
+
@@ -0,0 +1,74 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+ import { type WorkspaceIndexSnapshot } from "./types.js";
17
+ export interface IndexLocation {
18
+
19
+ filePath: string;
20
+
21
+ line: number;
22
+
23
+ column: number;
24
+ endLine: number;
25
+ endColumn: number;
26
+
27
+ name: string;
28
+ kind: string;
29
+
30
+ preview: string;
31
+
32
+ isDeclaration: boolean;
33
+ }
34
+ export interface IndexQueryResult {
35
+ ok: boolean;
36
+ provider: "syntax-index";
37
+ kind: "definition" | "references" | "symbols" | "outline";
38
+
39
+ symbol: string;
40
+ locations: IndexLocation[];
41
+
42
+ truncated: boolean;
43
+
44
+ indexed: boolean;
45
+
46
+ stats?: WorkspaceIndexSnapshot["stats"];
47
+ }
48
+
49
+ export declare function resolveSymbolAtPosition(filePath: string, line: number, column: number): Promise<string | null>;
50
+
51
+ export declare function querySymbols(snapshot: WorkspaceIndexSnapshot, name: string, limit?: number): IndexQueryResult;
52
+
53
+ export declare function queryDefinition(snapshot: WorkspaceIndexSnapshot, params: {
54
+ filePath: string;
55
+ line: number;
56
+ column: number;
57
+ name?: string;
58
+ }): Promise<IndexQueryResult>;
59
+
60
+ export declare function queryReferences(snapshot: WorkspaceIndexSnapshot, params: {
61
+ filePath: string;
62
+ line: number;
63
+ column: number;
64
+ name?: string;
65
+ includeDeclaration?: boolean;
66
+ }, limit?: number): Promise<IndexQueryResult>;
67
+
68
+ export declare function queryOutline(snapshot: WorkspaceIndexSnapshot, params: {
69
+ filePath: string;
70
+ }): Promise<IndexQueryResult>;
71
+
72
+ export declare function readLine(filePath: string, line: number): Promise<string>;
73
+
74
+ export declare function fillPreviews(snapshot: WorkspaceIndexSnapshot, locations: IndexLocation[]): Promise<IndexLocation[]>;
@@ -0,0 +1,5 @@
1
+ import{promises as p}from"node:fs";import m from"node:path";import{detectLanguage as b,findIdentifierOccurrences as I,getParserForLanguage as D,identifierAtPosition as M}from"@agentswork/acode";import{toPosixPath as x}from"./types.js";function C(e,t){if(e.filePath===t.currentFile)return 0;if(t.importedFiles.has(e.filePath))return 1;if(m.dirname(e.filePath)===t.currentDir)return 2;const r=t.files.get(e.filePath);return t.packageName&&r?.packageName===t.packageName?3:4}function N(e,t){return{filePath:x(e.filePath),line:e.line,column:e.column,endLine:e.endLine,endColumn:e.endColumn,name:e.name,kind:e.kind,preview:e.signature,isDeclaration:t}}function S(e,t){return x(m.relative(e.workspacePath,t))}function $(e,t){return{...t,filePath:S(e,t.filePath)}}function O(e,t){return m.resolve(e.workspacePath,t)}async function q(e,t,r){const i=b(e);if(!i)return null;let n;try{n=await p.readFile(e,"utf8")}catch{return null}const a=await D(i);if(!a)return null;const o=a.parse(n);if(!o)return null;try{const d=n.split(`
2
+ `);let f=0;for(let u=0;u<t-1&&u<d.length;u+=1)f+=d[u].length+1;return f+=Math.max(0,r-1),M(o,f,i)}finally{o.delete()}}function j(e,t,r=100){const i=t.trim().toLowerCase(),n=[];let a=!1;if(i)for(const o of e.byName.get(i)??[]){if(n.length>=r){a=!0;break}n.push($(e,N(o,!0)))}return{ok:!0,provider:"syntax-index",kind:"symbols",symbol:t,locations:n,truncated:a,indexed:!0,stats:e.stats}}async function G(e,t){const r=x(m.resolve(e.workspacePath,t.filePath)),i=t.name?.trim()||await q(r,t.line,t.column);if(!i)return{ok:!0,provider:"syntax-index",kind:"definition",symbol:"",locations:[],truncated:!1,indexed:!0,stats:e.stats};const n=e.files.get(r),a=new Set;for(const l of n?.imports??[])l.resolvedFile&&a.add(l.resolvedFile);const o={currentFile:r,currentDir:m.dirname(r),importedFiles:a,packageName:n?.packageName??null,files:e.files},d=e.byName.get(i.trim().toLowerCase())??[],f=[...d].sort((l,y)=>C(l,o)-C(y,o)),u=new Set,s=[];for(const l of f){const y=`${l.filePath}:${l.line}:${l.column}`;if(!u.has(y)&&(u.add(y),s.push($(e,N(l,!0))),s.length>=50))break}return{ok:!0,provider:"syntax-index",kind:"definition",symbol:i,locations:s,truncated:d.length>s.length,indexed:!0,stats:e.stats}}async function H(e,t,r=300){const i=x(m.resolve(e.workspacePath,t.filePath)),n=t.name?.trim()||await q(i,t.line,t.column);if(!n)return{ok:!0,provider:"syntax-index",kind:"references",symbol:"",locations:[],truncated:!1,indexed:!0,stats:e.stats};const a=n.trim().toLowerCase(),o=new Set(e.filesByIdentifier.get(a)??[]);o.add(i);const d=t.includeDeclaration!==!1,f=new Map;for(const c of e.byName.get(a)??[])f.set(`${c.filePath}:${c.line}:${c.column}`,c);const u=e.files.get(i),s=new Set;for(const c of u?.imports??[])c.resolvedFile&&s.add(c.resolvedFile);const l={currentFile:i,currentDir:m.dirname(i),importedFiles:s,packageName:u?.packageName??null,files:e.files},y=[...o].sort((c,k)=>{const h=c===l.currentFile?0:l.importedFiles.has(c)?1:m.dirname(c)===l.currentDir?2:4,v=k===l.currentFile?0:l.importedFiles.has(k)?1:m.dirname(k)===l.currentDir?2:4;return h-v}),w=[];let P=!1;for(const c of y){if(w.length>=r){P=!0;break}const k=b(c);if(!k)continue;let h;try{h=await p.readFile(c,"utf8")}catch{continue}const v=await D(k);if(!v)continue;const L=v.parse(h);if(L)try{const A=I(L,k,n,r);for(const g of A){const B=`${c}:${g.line}:${g.column}`,F=f.get(B);if(!(F&&!d)&&(w.push({filePath:S(e,c),line:g.line,column:g.column,endLine:g.line,endColumn:g.column+n.length,name:F?.name??n,kind:F?.kind??"reference",preview:g.context,isDeclaration:!!F}),w.length>=r)){P=!0;break}}}finally{L.delete()}}return{ok:!0,provider:"syntax-index",kind:"references",symbol:n,locations:w,truncated:P,indexed:!0,stats:e.stats}}async function J(e,t){const r=x(m.resolve(e.workspacePath,t.filePath)),i=e.files.get(r);if(!i){const n=b(r);if(!n)return{ok:!0,provider:"syntax-index",kind:"outline",symbol:"",locations:[],truncated:!1,indexed:!0,stats:e.stats};try{const a=await p.readFile(r,"utf8"),o=await D(n),d=o?.parse(a);if(o&&d){const{extractFileIndex:f}=await import("@agentswork/acode"),u=f(d,n);return d.delete(),{ok:!0,provider:"syntax-index",kind:"outline",symbol:"",locations:u.symbols.map(s=>({filePath:x(t.filePath),line:s.line,column:s.column,endLine:s.endLine,endColumn:s.endColumn,name:s.name,kind:s.kind,preview:s.signature,isDeclaration:!0})),truncated:!1,indexed:!0,stats:e.stats}}}catch{}return{ok:!0,provider:"syntax-index",kind:"outline",symbol:"",locations:[],truncated:!1,indexed:!0,stats:e.stats}}return{ok:!0,provider:"syntax-index",kind:"outline",symbol:"",locations:i.symbols.map(n=>$(e,N(n,!0))),truncated:!1,indexed:!0,stats:e.stats}}async function Q(e,t){try{return((await p.readFile(e,"utf8")).split(`
3
+ `)[t-1]??"").trim().slice(0,200)}catch{return""}}async function T(e,t){const r=new Map,i=[];for(const n of t){if(n.preview){i.push(n);continue}const a=O(e,n.filePath);let o=r.get(a);if(!o){try{o=(await p.readFile(a,"utf8")).split(`
4
+ `)}catch{o=[]}r.set(a,o)}i.push({...n,preview:(o[n.line-1]??"").trim().slice(0,200)})}return i}export{T as fillPreviews,G as queryDefinition,J as queryOutline,H as queryReferences,j as querySymbols,Q as readLine,q as resolveSymbolAtPosition};
5
+
@@ -0,0 +1,26 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+ import { type IndexedFile, type IndexedImport } from "./types.js";
10
+ export interface ResolveImportsInput {
11
+ workspaceRoot: string;
12
+ filePath: string;
13
+ language: string;
14
+ packageName: string | null;
15
+ rawImports: Array<{
16
+ text: string;
17
+ line: number;
18
+ }>;
19
+
20
+ files: Map<string, IndexedFile>;
21
+ }
22
+
23
+
24
+
25
+
26
+ export declare function resolveImports(input: ResolveImportsInput): IndexedImport[];
@@ -0,0 +1,2 @@
1
+ import a from"node:path";import{toPosixPath as k}from"./types.js";const b={typescript:[".ts",".tsx",".mts",".cts",".js",".jsx",".json"],javascript:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".json"],python:[".py",".pyi"],go:[".go"],rust:[".rs"],java:[".java"],c:[".c",".h"],cpp:[".cpp",".cc",".cxx",".hpp",".hxx",".h"],"c-sharp":[".cs"],ruby:[".rb"],php:[".php"],lua:[".lua"]};function $(t){return k(a.resolve(t))}function u(t,s){const i=$(s);if(t.has(i))return i;const r=i.toLowerCase();for(const e of t.keys())if(e.toLowerCase()===r)return e;return null}function j(t,s,i,r){const e=a.dirname(t),o=a.resolve(e,s),c=b[i]??[],l=[o];for(const n of c)l.push(`${o}${n}`);for(const n of c)l.push(a.join(o,`index${n}`));for(const n of c)l.push(a.join(o,`mod${n}`));l.push(a.join(o,"__init__.py"));for(const n of l){const p=u(r,n);if(p)return p}return null}function N(t,s,i){const r=/\bfrom\s+['"]([^'"]+)['"]/.exec(s)??/\bimport\s+['"]([^'"]+)['"]/.exec(s);if(!r)return null;const e=r[1],o=[],c=/\{([^}]*)\}/.exec(s);if(c)for(const p of c[1].split(",")){const f=p.trim().split(/\s+as\s+/)[0]?.trim();f&&o.push(f)}const l=/^import\s+([A-Za-z_$][\w$]*)/.exec(s);l&&o.push(l[1]);const n=/\*\s+as\s+([A-Za-z_$][\w$]*)/.exec(s);return n&&o.push(n[1]),e.startsWith(".")?{text:s,line:0,resolvedFile:j(t,e,"typescript",i),importedNames:o,moduleSpecifier:e}:{text:s,line:0,resolvedFile:null,importedNames:o,moduleSpecifier:e}}function S(t,s,i){const r=/^\s*from\s+([.\w]+)\s+import\s+(.+)$/.exec(s);if(r){const o=r[1],c=r[2].replace(/[()]/g,"").split(",").map(n=>n.trim().split(/\s+as\s+/)[0]?.trim()).filter(Boolean);let l=null;if(o.startsWith(".")){const n=/^\.+/.exec(o)?.[0].length??1,p=o.slice(n).replace(/\./g,"/");let f=a.dirname(t);for(let d=1;d<n;d+=1)f=a.dirname(f);const m=a.join(f,p);l=u(i,`${m}.py`)??u(i,a.join(m,"__init__.py"))}else{const p=o.split(".").join("/");for(const f of i.keys())if(f.endsWith(`/${p}.py`)||f.endsWith(`/${p}/__init__.py`)){l=f;break}}return{text:s,line:0,resolvedFile:l,importedNames:c,moduleSpecifier:o}}const e=/^\s*import\s+(.+)$/.exec(s);if(e){const o=e[1].split(",")[0]?.trim().split(/\s+as\s+/)[0]?.trim();if(!o)return null;const c=o.replace(/\./g,"/");let l=null;for(const n of i.keys())if(n.endsWith(`/${c}.py`)||n.endsWith(`/${c}/__init__.py`)){l=n;break}return{text:s,line:0,resolvedFile:l,importedNames:[o.split(".").pop()??o],moduleSpecifier:o}}return null}function F(t,s,i){const r=/^\s*import\s+(static\s+)?([\w.]+)(?:\.\*)?\s*;/.exec(s);if(!r)return null;const e=!!r[1],o=r[2],c=o.split("."),l=c[c.length-1],n=c.join("/"),p=e?[`${n}.java`,`${c.slice(0,-1).join("/")}.java`]:[`${n}.java`];for(const f of p)for(const m of i.keys())if(m.endsWith(`/${f}`))return{text:s,line:0,resolvedFile:m,importedNames:[l],moduleSpecifier:o};return{text:s,line:0,resolvedFile:null,importedNames:[l],moduleSpecifier:o}}function g(t,s,i){const r=/"([^"]+)"/.exec(s);if(!r)return null;const e=r[1],o=e.split("/").pop()??e;let c=null;for(const l of i.keys())if(!l.endsWith(`/${e}/`)&&(l.includes(`/${e}/`)||l.endsWith(`/${o}/${o}.go`))){c=l;break}return{text:s,line:0,resolvedFile:c,importedNames:o?[o]:[],moduleSpecifier:e}}function x(t,s,i){const r=/^\s*use\s+([^;]+);/.exec(s);if(!r)return null;const e=r[1].trim(),o=e.startsWith("crate::")||e.startsWith("self::")||e.startsWith("super::"),c=[],l=/\{([^}]*)\}/.exec(e);if(l)for(const p of l[1].split(",")){const f=p.trim().split(/\s+as\s+/)[0]?.trim();f&&f!=="self"&&c.push(f.split("::").pop()??f)}else c.push(e.split("::").pop()??e);let n=null;if(o){const p=a.dirname(t),f=e.replace(/^(crate|self|super)::/,"").replace(/\{.*$/,"").split("::").filter(Boolean);for(let m=f.length;m>0;m-=1){const d=f.slice(0,m).join("/"),v=[a.join(p,`${d}.rs`),a.join(p,d,"mod.rs")];for(const y of v){const h=u(i,y);if(h){n=h;break}}if(n)break}}return{text:s,line:0,resolvedFile:n,importedNames:c,moduleSpecifier:e}}function _(t,s,i){const r=/#\s*include\s*[<"]([^>"]+)[>"]/.exec(s);if(!r)return null;const e=r[1],o=a.dirname(t),c=[a.resolve(o,e),a.resolve(o,"..",e)];for(const l of c){const n=u(i,l);if(n)return{text:s,line:0,resolvedFile:n,importedNames:[],moduleSpecifier:e}}for(const l of i.keys())if(l.endsWith(`/${e}`))return{text:s,line:0,resolvedFile:l,importedNames:[],moduleSpecifier:e};return{text:s,line:0,resolvedFile:null,importedNames:[],moduleSpecifier:e}}function P(t){const s=/^\s*using\s+(?:static\s+)?([\w.]+)\s*;/.exec(t);if(!s)return null;const i=s[1],r=[i.split(".").pop()??i];return{text:t,line:0,resolvedFile:null,importedNames:r,moduleSpecifier:i}}function W(t,s,i){const r=/^\s*require(?:_relative)?\s+['"]([^'"]+)['"]/.exec(s);if(!r)return null;const e=r[1],o=a.dirname(t),c=[a.resolve(o,`${e}.rb`),a.resolve(o,e),a.resolve(o,`${e}.rb`)];for(const l of c){const n=u(i,l);if(n)return{text:s,line:0,resolvedFile:n,importedNames:[],moduleSpecifier:e}}for(const l of i.keys())if(l.endsWith(`/${e}.rb`))return{text:s,line:0,resolvedFile:l,importedNames:[],moduleSpecifier:e};return{text:s,line:0,resolvedFile:null,importedNames:[],moduleSpecifier:e}}function I(t,s,i){const r=/^\s*use\s+([\w\\]+)(?:\s+as\s+(\w+))?\s*;/.exec(s);if(!r)return null;const e=r[1].replace(/\\/g,"."),o=e.split("."),c=r[2]||o[o.length-1],l=o.join("/");for(const n of i.keys())if(n.endsWith(`/${l}.php`))return{text:s,line:0,resolvedFile:n,importedNames:[c],moduleSpecifier:e};return{text:s,line:0,resolvedFile:null,importedNames:[c],moduleSpecifier:e}}function w(t,s,i){const r=/require\s*\(?\s*['"]([^'"]+)['"]/.exec(s);if(!r)return null;const e=r[1],o=a.dirname(t),c=e.replace(/\./g,"/"),l=[a.resolve(o,`${c}.lua`),a.resolve(o,`${e}.lua`)];for(const n of l){const p=u(i,n);if(p)return{text:s,line:0,resolvedFile:p,importedNames:[],moduleSpecifier:e}}for(const n of i.keys())if(n.endsWith(`/${c}.lua`))return{text:s,line:0,resolvedFile:n,importedNames:[],moduleSpecifier:e};return{text:s,line:0,resolvedFile:null,importedNames:[],moduleSpecifier:e}}function L(t){const s=[];for(const i of t.rawImports){let r=null;switch(t.language){case"typescript":case"tsx":case"javascript":case"jsx":r=N(t.filePath,i.text,t.files);break;case"python":r=S(t.filePath,i.text,t.files);break;case"java":r=F(t.filePath,i.text,t.files);break;case"go":r=g(t.filePath,i.text,t.files);break;case"rust":r=x(t.filePath,i.text,t.files);break;case"c":case"cpp":r=_(t.filePath,i.text,t.files);break;case"c-sharp":r=P(i.text);break;case"ruby":r=W(t.filePath,i.text,t.files);break;case"php":r=I(t.filePath,i.text,t.files);break;case"lua":r=w(t.filePath,i.text,t.files);break;default:r=null}r&&s.push({...r,line:i.line})}return s}export{L as resolveImports};
2
+
@@ -0,0 +1,89 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+ export interface IndexedSymbol {
14
+ name: string;
15
+ kind: string;
16
+ filePath: string;
17
+
18
+ line: number;
19
+
20
+ column: number;
21
+ endLine: number;
22
+ endColumn: number;
23
+ signature: string;
24
+ }
25
+
26
+ export interface IndexedImport {
27
+
28
+ text: string;
29
+ line: number;
30
+
31
+ resolvedFile: string | null;
32
+
33
+ importedNames: string[];
34
+
35
+ moduleSpecifier: string;
36
+ }
37
+
38
+ export interface IndexedFile {
39
+
40
+ filePath: string;
41
+
42
+ relativePath: string;
43
+ language: string;
44
+ mtimeMs: number;
45
+ size: number;
46
+ symbols: IndexedSymbol[];
47
+ imports: IndexedImport[];
48
+
49
+ identifierNames: string[];
50
+
51
+ packageName: string | null;
52
+ }
53
+ export interface WorkspaceIndexSnapshot {
54
+ workspacePath: string;
55
+
56
+ builtAt: number;
57
+ files: Map<string, IndexedFile>;
58
+
59
+ byName: Map<string, IndexedSymbol[]>;
60
+
61
+ filesByIdentifier: Map<string, Set<string>>;
62
+
63
+ truncated: boolean;
64
+
65
+ stats: {
66
+ fileCount: number;
67
+ symbolCount: number;
68
+ skippedCount: number;
69
+ durationMs: number;
70
+ };
71
+ }
72
+ export interface IndexBuildOptions {
73
+
74
+ maxFiles?: number;
75
+
76
+ maxFileBytes?: number;
77
+
78
+ maxTotalBytes?: number;
79
+
80
+ force?: boolean;
81
+ }
82
+ export declare const DEFAULT_INDEX_OPTIONS: Required<Omit<IndexBuildOptions, "force">>;
83
+
84
+ export declare const INDEX_SKIP_DIRS: Set<string>;
85
+
86
+ export declare const INDEX_SUPPORTED_EXTENSIONS: Set<string>;
87
+ export declare function toPosixPath(value: string): string;
88
+
89
+ export declare function symbolKey(name: string): string;
@@ -0,0 +1,2 @@
1
+ const t={maxFiles:Number(process.env.AWS_WORKSPACE_INDEX_MAX_FILES||2e4),maxFileBytes:Number(process.env.AWS_WORKSPACE_INDEX_MAX_FILE_BYTES||1048576),maxTotalBytes:Number(process.env.AWS_WORKSPACE_INDEX_MAX_TOTAL_BYTES||268435456)},s=new Set([".git",".svn",".hg",".idea",".vscode",".gradle",".next",".nuxt",".turbo",".cache","node_modules","bower_components","vendor","target","dist","build","out","bin","obj","coverage","__pycache__",".venv","venv"]),o=new Set([".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".py",".go",".rs",".java",".c",".h",".cpp",".cc",".cxx",".hpp",".hxx",".cs",".rb",".php",".lua",".sh",".bash"]);function r(e){return String(e||"").replace(/\\/g,"/")}function _(e){return String(e||"").trim().toLowerCase()}export{t as DEFAULT_INDEX_OPTIONS,s as INDEX_SKIP_DIRS,o as INDEX_SUPPORTED_EXTENSIONS,_ as symbolKey,r as toPosixPath};
2
+
@@ -3,12 +3,16 @@ interface WorkspaceFileWatchParams {
3
3
  filePath: string;
4
4
  }
5
5
 
6
+
7
+
6
8
  export declare function watchWorkspaceFile(params: WorkspaceFileWatchParams): Promise<{
7
9
  ok: true;
8
10
  workspacePath: string;
9
11
  filePath: string;
10
12
  }>;
11
13
 
14
+
15
+
12
16
  export declare function unwatchWorkspaceFile(params: WorkspaceFileWatchParams): Promise<{
13
17
  ok: true;
14
18
  }>;
@@ -1,4 +1,16 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
2
14
  export interface TaskContext {
3
15
  agentId: string;
4
16
  taskInstanceId: string;
@@ -20,30 +32,67 @@ export interface FileChangeRecord {
20
32
  reason: string;
21
33
  }
22
34
 
35
+
36
+
37
+
23
38
  export declare function setTaskContext(ctx: TaskContext): void;
24
39
 
40
+
41
+
42
+
25
43
  export declare function clearTaskContext(): void;
26
44
 
45
+
46
+
27
47
  export declare function getTaskContext(): TaskContext | null;
28
48
 
49
+
50
+
29
51
  export declare function hasActiveTask(): boolean;
30
52
 
53
+
54
+
55
+
31
56
  export declare function startWatching(targetWorkspacePath: string): Promise<void>;
32
57
 
58
+
59
+
33
60
  export declare function stopWatching(): Promise<void>;
34
61
 
62
+
63
+
35
64
  export declare function readBeforeContentFromCache(workspacePath: string, cacheKey: string): Promise<string | null>;
36
65
 
66
+
67
+
37
68
  export declare function readDiffFromCache(workspacePath: string, cacheKey: string): Promise<string | null>;
38
69
 
70
+
71
+
72
+
73
+
74
+
75
+
76
+
39
77
  export declare function sweepExpiredChangeCache(): Promise<void>;
40
78
 
79
+
80
+
41
81
  export declare function getPendingChangeCountForTest(): number;
42
82
 
83
+
84
+
43
85
  export declare function isWatching(): boolean;
44
86
 
87
+
88
+
45
89
  export declare function getWorkspaceRoot(): string;
46
90
 
91
+
92
+
93
+
94
+
95
+
47
96
  export declare function recordAgentFileChange(record: {
48
97
  filePath: string;
49
98
  operation: 'CREATE' | 'UPDATE' | 'DELETE';
@@ -1,4 +1,4 @@
1
- import{createHash as E}from"node:crypto";import{promises as r}from"node:fs";import c from"node:path";import X from"axios";import*as J from"diff";import{resolveSchedulerBaseUrl as V,getRuntimeHomeDir as C}from"../config.js";import{createLogger as Z}from"../utils/logger.js";import{getChangeCacheRetentionDays as $,setChangeCacheRetentionDays as q}from"./change-cache-retention.js";import{getSnapshotRetentionDays as T,setSnapshotRetentionDays as Q}from"./snapshot-retention.js";import{sweepExpiredSnapshots as Y}from"./fileSnapshotStore.js";import{getRuntimeAccessToken as L}from"./runtime-binding.js";const h=Z("workspace-task-change-watcher"),ee=10*1024*1024,te=".agentswork/change-cache",m="change-cache",ne=60*60*1e3,ae=24*60*60*1e3;let l=null,b=!1,y="",p=null;const g=new Map,d=new Map;let R=!1;function me(e){l&&l.taskNodeId!==e.taskNodeId&&z().catch(()=>{}),l=e,h.info(`Task context set: agent=${e.agentId}, taskInstance=${e.taskInstanceId}, node=${e.taskNodeId}`)}function ye(){l&&(h.info(`Task context cleared: agent=${l.agentId}`),z().catch(()=>{})),l=null}function ke(){return l}function De(){return l!==null}async function Ie(e){const t=c.resolve(e.trim());try{if(!(await r.stat(t)).isDirectory())throw new Error(`Not a directory: ${t}`)}catch{throw new Error(`Workspace path does not exist or inaccessible: ${t}`)}if(p){try{p.close()}catch{}p=null}y=t,b=!0,h.info(`Workspace path set (fs.watch disabled, using tool interception only): ${y}`)}async function Ee(){if(b=!1,p){try{p.close()}catch{}p=null}g.clear(),d.clear(),y="",h.info("Workspace watch stopped")}function F(e,t,a){return E("sha256").update(`${e||"no-task"}:${t}:${a}`,"utf-8").digest("hex").slice(0,32)}function N(e){return E("sha256").update(c.resolve(e),"utf-8").digest("hex").slice(0,16)}function k(e){return c.join(C(),".aws-bridge",m,N(e))}function oe(e){return c.join(C(),m,N(e))}function W(e){return c.join(e,te)}const j=new Set;async function _(e){if(!j.has(e)){j.add(e);try{const t=W(e),a=k(e);await r.access(t),await r.mkdir(c.dirname(a),{recursive:!0}),await r.rename(t,a),h.info(`Migrated legacy change-cache: ${t} -> ${a}`)}catch{}}}async function v(e,t,a){if(a===null)return;await _(e);const o=k(e);await r.mkdir(o,{recursive:!0});const n=c.join(o,`${t}.before`);await r.writeFile(n,a,"utf-8"),B(),h.debug(`Saved beforeContent cache: ${n}`)}async function M(e,t,a,o){const n=J.createPatch("file",a,o);await _(e);const i=k(e);await r.mkdir(i,{recursive:!0});const f=c.join(i,`${t}.diff`);await r.writeFile(f,n,"utf-8"),B(),h.debug(`Saved diff cache: ${f}`)}async function U(e,t){const a=[c.join(k(e),t),c.join(oe(e),t),c.join(W(e),t)];for(const o of a)try{return await r.readFile(o,"utf-8")}catch{}return null}async function $e(e,t){return U(e,`${t}.before`)}async function Te(e,t){return U(e,`${t}.diff`)}let x=0,S=null,A=Promise.resolve();function P(){return A=A.then(()=>ie()),A}async function ie(){const e=$();if(!(e===null||e<=0))try{const t=[c.join(C(),".aws-bridge",m),c.join(C(),m)],a=Date.now()-e*24*60*60*1e3;let o=0;for(const n of t){let i=[];try{i=(await r.readdir(n)).filter(f=>!f.startsWith("."))}catch{continue}for(const f of i){const s=c.join(n,f);try{const u=await r.readdir(s);let w=!0;for(const I of u){if(!I.endsWith(".diff")&&!I.endsWith(".before")){w=!1;continue}const H=c.join(s,I);try{(await r.stat(H)).mtimeMs<a?(await r.unlink(H),o++):w=!1}catch{w=!1}}w&&await r.rmdir(s).catch(()=>{})}catch{}}}o>0&&h.info(`Change-cache TTL sweep: removed ${o} expired file(s), retentionDays=${e}`)}catch(t){h.warn(`Change-cache TTL sweep failed: ${t.message}`)}}function B(){const e=Date.now();e-x>=ne&&(x=e,P().catch(()=>{})),S||(S=setInterval(()=>{P().catch(()=>{})},ae),S.unref?.())}async function O(e){try{return(await r.stat(e)).size>ee?null:await r.readFile(e,"utf-8")}catch{return null}}function D(e){return e===null?null:E("sha256").update(e,"utf-8").digest("hex").slice(0,16)}async function se(e){const t=g.get(e);if(!t)return;g.delete(e),t.timer&&clearTimeout(t.timer);const a=l;if(!a){if(t.operation==="DELETE")d.delete(e);else{const u=await O(e);u!==null&&d.set(e,u)}return}const o=c.relative(a.workspacePath,e).replace(/\\/g,"/");if(o.startsWith(".."))return;let n=t.beforeContent,i=null;t.operation==="DELETE"?(n=n??d.get(e)??null,i=null):(i=await O(e),t.operation==="UPDATE"&&n===null&&(n=d.get(e)??null)),t.operation==="DELETE"?d.delete(e):d.set(e,i);const f=new Date().toISOString(),s=F(a.taskInstanceId,o,f);t.operation==="UPDATE"&&n!==null&&i!==null?await M(a.workspacePath,s,n,i):t.operation==="DELETE"&&await v(a.workspacePath,s,n),await K(a,{workspacePath:a.workspacePath,filePath:o,operation:t.operation,beforeContent:n,afterContent:i,beforeHash:D(n),afterHash:D(i),timestamp:f,reason:G(t.operation,n,i)},s)}async function K(e,t,a){try{const o=V().url,n=L(o)||L();if(!n){h.warn("Cannot send change record: no auth token");return}const i=JSON.stringify({toolRecorded:!0,cacheKey:a,timestamp:t.timestamp}),s=(await X.post(`${o}/api/runtime/callback/task-file-changed`,{agentId:e.agentId,taskInstanceId:e.taskInstanceId,taskNodeId:e.taskNodeId,tenantId:e.tenantId,operation:t.operation,targetType:"FILE",targetPath:t.filePath,beforeHash:t.beforeHash,afterHash:t.afterHash,metadata:i,reason:t.reason,workspacePath:e.workspacePath},{headers:{"X-Runtime-Token":n},timeout:1e4})).data;if(s?.ignored===!0?h.warn(`Change record ignored by server: ${t.filePath} (${t.operation}), reason: ${String(s.reason??"unknown")}`):h.info(`Change record sent: ${t.filePath} (${t.operation})`),s&&s.changeCacheRetentionDays!==void 0){const u=$();q(s.changeCacheRetentionDays),u!==$()&&(x=0,P().catch(()=>{}))}if(s&&s.snapshotRetentionDays!==void 0){const u=T();Q(s.snapshotRetentionDays),u!==T()&&Y(T()).catch(()=>{})}}catch(o){h.warn(`Failed to send change record: ${o.message}`)}}async function z(){if(R)return;R=!0;const e=Array.from(g.keys());for(const t of e)try{await se(t)}catch{}R=!1}function be(){return g.size}function Re(){return b&&p!==null}function ve(){return y}function G(e,t,a){const o=t?t.split(`
1
+ import{createHash as E}from"node:crypto";import{promises as r}from"node:fs";import c from"node:path";import X from"axios";import*as J from"diff";import{resolveSchedulerBaseUrl as V,getRuntimeHomeDir as C}from"../config.js";import{createLogger as Z}from"../utils/logger.js";import{getChangeCacheRetentionDays as $,setChangeCacheRetentionDays as q}from"./change-cache-retention.js";import{sweepExpiredSnapshots as Q}from"./fileSnapshotStore.js";import{getRuntimeAccessToken as L}from"./runtime-binding.js";import{getSnapshotRetentionDays as T,setSnapshotRetentionDays as Y}from"./snapshot-retention.js";const h=Z("workspace-task-change-watcher"),ee=10*1024*1024,te=".agentswork/change-cache",m="change-cache",ne=60*60*1e3,ae=24*60*60*1e3;let l=null,b=!1,y="",p=null;const g=new Map,d=new Map;let R=!1;function me(e){l&&l.taskNodeId!==e.taskNodeId&&z().catch(()=>{}),l=e,h.info(`Task context set: agent=${e.agentId}, taskInstance=${e.taskInstanceId}, node=${e.taskNodeId}`)}function ye(){l&&(h.info(`Task context cleared: agent=${l.agentId}`),z().catch(()=>{})),l=null}function ke(){return l}function De(){return l!==null}async function Ie(e){const t=c.resolve(e.trim());try{if(!(await r.stat(t)).isDirectory())throw new Error(`Not a directory: ${t}`)}catch{throw new Error(`Workspace path does not exist or inaccessible: ${t}`)}if(p){try{p.close()}catch{}p=null}y=t,b=!0,h.info(`Workspace path set (fs.watch disabled, using tool interception only): ${y}`)}async function Ee(){if(b=!1,p){try{p.close()}catch{}p=null}g.clear(),d.clear(),y="",h.info("Workspace watch stopped")}function F(e,t,a){return E("sha256").update(`${e||"no-task"}:${t}:${a}`,"utf-8").digest("hex").slice(0,32)}function N(e){return E("sha256").update(c.resolve(e),"utf-8").digest("hex").slice(0,16)}function k(e){return c.join(C(),".aws-bridge",m,N(e))}function oe(e){return c.join(C(),m,N(e))}function W(e){return c.join(e,te)}const j=new Set;async function _(e){if(!j.has(e)){j.add(e);try{const t=W(e),a=k(e);await r.access(t),await r.mkdir(c.dirname(a),{recursive:!0}),await r.rename(t,a),h.info(`Migrated legacy change-cache: ${t} -> ${a}`)}catch{}}}async function v(e,t,a){if(a===null)return;await _(e);const o=k(e);await r.mkdir(o,{recursive:!0});const n=c.join(o,`${t}.before`);await r.writeFile(n,a,"utf-8"),B(),h.debug(`Saved beforeContent cache: ${n}`)}async function M(e,t,a,o){const n=J.createPatch("file",a,o);await _(e);const i=k(e);await r.mkdir(i,{recursive:!0});const f=c.join(i,`${t}.diff`);await r.writeFile(f,n,"utf-8"),B(),h.debug(`Saved diff cache: ${f}`)}async function U(e,t){const a=[c.join(k(e),t),c.join(oe(e),t),c.join(W(e),t)];for(const o of a)try{return await r.readFile(o,"utf-8")}catch{}return null}async function $e(e,t){return U(e,`${t}.before`)}async function Te(e,t){return U(e,`${t}.diff`)}let x=0,S=null,A=Promise.resolve();function P(){return A=A.then(()=>ie()),A}async function ie(){const e=$();if(!(e===null||e<=0))try{const t=[c.join(C(),".aws-bridge",m),c.join(C(),m)],a=Date.now()-e*24*60*60*1e3;let o=0;for(const n of t){let i=[];try{i=(await r.readdir(n)).filter(f=>!f.startsWith("."))}catch{continue}for(const f of i){const s=c.join(n,f);try{const u=await r.readdir(s);let w=!0;for(const I of u){if(!I.endsWith(".diff")&&!I.endsWith(".before")){w=!1;continue}const H=c.join(s,I);try{(await r.stat(H)).mtimeMs<a?(await r.unlink(H),o++):w=!1}catch{w=!1}}w&&await r.rmdir(s).catch(()=>{})}catch{}}}o>0&&h.info(`Change-cache TTL sweep: removed ${o} expired file(s), retentionDays=${e}`)}catch(t){h.warn(`Change-cache TTL sweep failed: ${t.message}`)}}function B(){const e=Date.now();e-x>=ne&&(x=e,P().catch(()=>{})),S||(S=setInterval(()=>{P().catch(()=>{})},ae),S.unref?.())}async function O(e){try{return(await r.stat(e)).size>ee?null:await r.readFile(e,"utf-8")}catch{return null}}function D(e){return e===null?null:E("sha256").update(e,"utf-8").digest("hex").slice(0,16)}async function se(e){const t=g.get(e);if(!t)return;g.delete(e),t.timer&&clearTimeout(t.timer);const a=l;if(!a){if(t.operation==="DELETE")d.delete(e);else{const u=await O(e);u!==null&&d.set(e,u)}return}const o=c.relative(a.workspacePath,e).replace(/\\/g,"/");if(o.startsWith(".."))return;let n=t.beforeContent,i=null;t.operation==="DELETE"?(n=n??d.get(e)??null,i=null):(i=await O(e),t.operation==="UPDATE"&&n===null&&(n=d.get(e)??null)),t.operation==="DELETE"?d.delete(e):d.set(e,i);const f=new Date().toISOString(),s=F(a.taskInstanceId,o,f);t.operation==="UPDATE"&&n!==null&&i!==null?await M(a.workspacePath,s,n,i):t.operation==="DELETE"&&await v(a.workspacePath,s,n),await K(a,{workspacePath:a.workspacePath,filePath:o,operation:t.operation,beforeContent:n,afterContent:i,beforeHash:D(n),afterHash:D(i),timestamp:f,reason:G(t.operation,n,i)},s)}async function K(e,t,a){try{const o=V().url,n=L(o)||L();if(!n){h.warn("Cannot send change record: no auth token");return}const i=JSON.stringify({toolRecorded:!0,cacheKey:a,timestamp:t.timestamp}),s=(await X.post(`${o}/api/runtime/callback/task-file-changed`,{agentId:e.agentId,taskInstanceId:e.taskInstanceId,taskNodeId:e.taskNodeId,tenantId:e.tenantId,operation:t.operation,targetType:"FILE",targetPath:t.filePath,beforeHash:t.beforeHash,afterHash:t.afterHash,metadata:i,reason:t.reason,workspacePath:e.workspacePath},{headers:{"X-Runtime-Token":n},timeout:1e4})).data;if(s?.ignored===!0?h.warn(`Change record ignored by server: ${t.filePath} (${t.operation}), reason: ${String(s.reason??"unknown")}`):h.info(`Change record sent: ${t.filePath} (${t.operation})`),s&&s.changeCacheRetentionDays!==void 0){const u=$();q(s.changeCacheRetentionDays),u!==$()&&(x=0,P().catch(()=>{}))}if(s&&s.snapshotRetentionDays!==void 0){const u=T();Y(s.snapshotRetentionDays),u!==T()&&Q(T()).catch(()=>{})}}catch(o){h.warn(`Failed to send change record: ${o.message}`)}}async function z(){if(R)return;R=!0;const e=Array.from(g.keys());for(const t of e)try{await se(t)}catch{}R=!1}function be(){return g.size}function Re(){return b&&p!==null}function ve(){return y}function G(e,t,a){const o=t?t.split(`
2
2
  `).length:0,n=a?a.split(`
3
3
  `).length:0;if(e==="CREATE")return`\u521B\u5EFA\u6587\u4EF6\uFF0C\u5171 ${n} \u884C`;if(e==="DELETE")return`\u5220\u9664\u6587\u4EF6\uFF0C\u539F ${o} \u884C`;if(o===n)return`\u4FEE\u6539\u6587\u4EF6\uFF08\u884C\u6570\u4E0D\u53D8\uFF0C${n} \u884C\uFF09`;const i=n-o;return`\u4FEE\u6539\u6587\u4EF6\uFF1A${o} \u884C -> ${n} \u884C\uFF08${i>0?"+":""}${i} \u884C\uFF09`}async function xe(e){const t=l,a=e.agentId||t?.agentId,o=e.workspacePath||t?.workspacePath;if(!a||!o){h.warn(`Agent file change skipped (no identity): ${e.filePath} (${e.operation})`);return}h.info(`Recording agent file change: ${e.filePath} (${e.operation}), taskNode=${t?.taskNodeId??"(no task)"}`);const n=t??{agentId:a,taskInstanceId:"",taskNodeId:"",tenantId:"",workspacePath:o,projectId:""},i=new Date().toISOString(),f=F(n.taskInstanceId,e.filePath,i);e.operation==="UPDATE"&&e.beforeContent!==null&&e.afterContent!==null?(await M(n.workspacePath,f,e.beforeContent,e.afterContent),await v(n.workspacePath,f,e.beforeContent)):e.operation==="DELETE"&&await v(n.workspacePath,f,e.beforeContent);const s=e.reason?.trim()||G(e.operation,e.beforeContent,e.afterContent);await K(n,{workspacePath:n.workspacePath,filePath:e.filePath,operation:e.operation,beforeContent:e.beforeContent,afterContent:e.afterContent,beforeHash:D(e.beforeContent),afterHash:D(e.afterContent),timestamp:i,reason:s},f)}export{ye as clearTaskContext,be as getPendingChangeCountForTest,ke as getTaskContext,ve as getWorkspaceRoot,De as hasActiveTask,Re as isWatching,$e as readBeforeContentFromCache,Te as readDiffFromCache,xe as recordAgentFileChange,me as setTaskContext,Ie as startWatching,Ee as stopWatching,P as sweepExpiredChangeCache};
4
4
 
package/dist/types.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import type { Request, Response, NextFunction } from 'express';
2
2
 
3
+
4
+
5
+
3
6
  export interface CreateMcpServerInput {
4
7
  name: string;
5
8
  server: McpServerConfig;
@@ -7,6 +10,9 @@ export interface CreateMcpServerInput {
7
10
  apps?: Partial<SdkApps>;
8
11
  }
9
12
 
13
+
14
+
15
+
10
16
  export interface UpdateMcpServerInput {
11
17
  name?: string;
12
18
  server?: McpServerConfig;
@@ -50,6 +56,9 @@ export interface McpPayload {
50
56
 
51
57
  description?: string;
52
58
 
59
+
60
+
61
+
53
62
  packageUrl?: string;
54
63
 
55
64
  packageSha256?: string;
@@ -1,3 +1,14 @@
1
1
 
2
2
 
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
3
14
  export declare function runExclusiveConfigWrite<T>(filePath: string, task: () => T | Promise<T>): Promise<T>;
@@ -1,8 +1,20 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
2
10
  export declare const BLOCKED_ENV_KEYS: ReadonlySet<string>;
3
11
 
4
12
  export declare const ENV_KEY_PATTERN: RegExp;
5
13
 
14
+
15
+
16
+
17
+
6
18
  export declare const SPAWN_ENV_KEY_PATTERN: RegExp;
7
19
 
8
20
  export interface RejectedEnvKey {
@@ -10,6 +22,15 @@ export interface RejectedEnvKey {
10
22
  reason: "blocked" | "invalid-name" | "empty-value";
11
23
  }
12
24
 
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
13
34
  export declare function sanitizeEnvForChild(env: unknown, options?: {
14
35
  onReject?: (item: RejectedEnvKey) => void;
15
36
  }): Record<string, string>;
@@ -3,11 +3,23 @@ export declare function ensureDir(targetDir: string): Promise<string>;
3
3
  export declare function withFileLock<T>(targetPath: string, operation: () => Promise<T>): Promise<T>;
4
4
  export declare function stringifyStableJson(value: unknown): string;
5
5
 
6
+
7
+
8
+
9
+
10
+
11
+
6
12
  export declare function sanitizeAgentId(agentId: string): string;
7
13
 
14
+
15
+
16
+
8
17
  export declare function sanitizeArchiveFileName(fileName: string, fallback: string): string;
9
18
  export declare function atomicWriteFile(targetPath: string, content: string): Promise<void>;
10
19
 
20
+
21
+
22
+
11
23
  export declare function renameFileWithRetry(fromPath: string, toPath: string, attempts?: number): Promise<void>;
12
24
 
13
25
  export declare function atomicWriteFileSync(targetPath: string, content: string): void;
@@ -16,6 +28,9 @@ export declare function downloadSkillZip(skillPackage: SkillPackage, targetDir:
16
28
  export declare function runCommand(command: string, args: string[]): Promise<void>;
17
29
  export declare function escapePowerShellLiteral(text: string): string;
18
30
 
31
+
32
+
33
+
19
34
  export declare function extractSkillZip(zipFilePath: string, extractRootDir: string): Promise<void>;
20
35
  export declare function resolveSkillSourceDirFromExtractRoot(extractRootDir: string): Promise<string>;
21
36
  export declare function downloadPluginZip(pluginPackage: PluginPackage, targetDir: string): Promise<DownloadResult | null>;
@@ -1,4 +1,9 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
2
7
  export interface DebugLogEntry {
3
8
  level: "info" | "warn" | "error";
4
9
  category: string;
@@ -9,13 +14,23 @@ export interface DebugLogEntry {
9
14
  details?: Record<string, unknown>;
10
15
  }
11
16
 
17
+
18
+
19
+
12
20
  export declare class InstanceAiConfigDebugLogger {
13
21
  private readonly logPath;
14
22
  constructor(logPath?: string);
15
23
 
24
+
25
+
26
+
16
27
  log(entry: DebugLogEntry): Promise<void>;
17
28
 
29
+
30
+
18
31
  flush(): Promise<void>;
19
32
  }
20
33
 
34
+
35
+
21
36
  export declare function getInstanceAiConfigDebugLogger(): InstanceAiConfigDebugLogger;
@@ -1,4 +1,9 @@
1
1
 
2
2
  export declare function flushLifecycleLogForTest(): Promise<void>;
3
3
 
4
+
5
+
6
+
7
+
8
+
4
9
  export declare function recordLifecycleEvent(event: string, fields: Record<string, unknown>): void;
@@ -1,8 +1,17 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
2
7
  export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
3
8
 
4
9
  export declare function pushLog(level: LogLevel, prefix: string, message: string): void;
5
10
 
11
+
12
+
13
+
14
+
6
15
  export declare function getRecentLogs(maxCount?: number, filterLevel?: LogLevel): Array<{
7
16
  level: LogLevel;
8
17
  timestamp: string;
@@ -19,6 +28,8 @@ export interface LogConfig {
19
28
  timestamp?: boolean;
20
29
  }
21
30
 
31
+
32
+
22
33
  export declare class Logger {
23
34
  private readonly level;
24
35
  private readonly prefix;
@@ -31,6 +42,8 @@ export declare class Logger {
31
42
  warn(...args: unknown[]): void;
32
43
  error(...args: unknown[]): void;
33
44
 
45
+
46
+
34
47
  child(prefix: string): Logger;
35
48
  }
36
49
  export declare const logger: {
@@ -1,2 +1,3 @@
1
- const g=500,s=[];let u=!0;function f(t,e,r){u&&(s.push({level:t,timestamp:new Date().toISOString(),prefix:e,message:r}),s.length>500&&s.splice(0,s.length-500))}function m(t=200,e){let r=s;if(e){const o=["debug","info","warn","error"],p=o.indexOf(e);r=r.filter(c=>o.indexOf(c.level)>=p)}return r.slice(-t).reverse()}function d(t){u=t}function L(){s.length=0}const h={debug:0,info:1,warn:2,error:3};function a(){return new Date().toISOString()}function n(t){return t.map(e=>{if(typeof e=="object"&&e!==null)try{return JSON.stringify(e,null,2)}catch{return String(e)}return String(e)}).join(" ")}class l{constructor(e={level:"info"}){this.level=e.level,this.prefix=e.prefix||"",this.timestamp=e.timestamp??!0}shouldLog(e){return h[e]>=h[this.level]}formatMessage(e,r){const o=[];return this.timestamp&&o.push(`[${a()}]`),o.push(`[${e.toUpperCase()}]`),this.prefix&&o.push(`[${this.prefix}]`),o.push(n(r)),o.join(" ")}debug(...e){if(this.shouldLog("debug")){const r=this.formatMessage("debug",e);console.debug(r),f("debug",this.prefix,n(e))}}info(...e){if(this.shouldLog("info")){const r=this.formatMessage("info",e);console.info(r),f("info",this.prefix,n(e))}}warn(...e){if(this.shouldLog("warn")){const r=this.formatMessage("warn",e);console.warn(r),f("warn",this.prefix,n(e))}}error(...e){if(this.shouldLog("error")){const r=this.formatMessage("error",e);console.error(r),f("error",this.prefix,n(e))}}child(e){return new l({level:this.level,prefix:this.prefix?`${this.prefix}:${e}`:e,timestamp:this.timestamp})}}const i=new l({level:process.env.LOG_LEVEL||"info"}),x={debug:(...t)=>i.debug(...t),info:(...t)=>i.info(...t),warn:(...t)=>i.warn(...t),error:(...t)=>i.error(...t),child:t=>i.child(t)};function w(t,e){return new l({level:e?.level||process.env.LOG_LEVEL||"info",prefix:t,timestamp:e?.timestamp})}export{l as Logger,L as clearLogBuffer,w as createLogger,m as getRecentLogs,x as logger,f as pushLog,d as setLogBufferEnabled};
1
+ const m=500,s=[];let u=!0;function f(t,e,r){u&&(s.push({level:t,timestamp:new Date().toISOString(),prefix:e,message:r}),s.length>500&&s.splice(0,s.length-500))}function g(t=200,e){let r=s;if(e){const o=["debug","info","warn","error"],h=o.indexOf(e);r=r.filter(p=>o.indexOf(p.level)>=h)}return r.slice(-t).reverse()}function d(t){u=t}function L(){s.length=0}const c={debug:0,info:1,warn:2,error:3};function a(){return new Date().toISOString()}function n(t){return t.map(e=>{if(e instanceof Error){const r=e.code,o=`${e.name||"Error"}${r?` [${r}]`:""}: ${e.message}`;return e.stack?`${o}
2
+ ${e.stack}`:o}if(typeof e=="object"&&e!==null)try{return JSON.stringify(e,null,2)}catch{return String(e)}return String(e)}).join(" ")}class l{constructor(e={level:"info"}){this.level=e.level,this.prefix=e.prefix||"",this.timestamp=e.timestamp??!0}shouldLog(e){return c[e]>=c[this.level]}formatMessage(e,r){const o=[];return this.timestamp&&o.push(`[${a()}]`),o.push(`[${e.toUpperCase()}]`),this.prefix&&o.push(`[${this.prefix}]`),o.push(n(r)),o.join(" ")}debug(...e){if(this.shouldLog("debug")){const r=this.formatMessage("debug",e);console.debug(r),f("debug",this.prefix,n(e))}}info(...e){if(this.shouldLog("info")){const r=this.formatMessage("info",e);console.info(r),f("info",this.prefix,n(e))}}warn(...e){if(this.shouldLog("warn")){const r=this.formatMessage("warn",e);console.warn(r),f("warn",this.prefix,n(e))}}error(...e){if(this.shouldLog("error")){const r=this.formatMessage("error",e);console.error(r),f("error",this.prefix,n(e))}}child(e){return new l({level:this.level,prefix:this.prefix?`${this.prefix}:${e}`:e,timestamp:this.timestamp})}}const i=new l({level:process.env.LOG_LEVEL||"info"}),x={debug:(...t)=>i.debug(...t),info:(...t)=>i.info(...t),warn:(...t)=>i.warn(...t),error:(...t)=>i.error(...t),child:t=>i.child(t)};function E(t,e){return new l({level:e?.level||process.env.LOG_LEVEL||"info",prefix:t,timestamp:e?.timestamp})}export{l as Logger,L as clearLogBuffer,E as createLogger,g as getRecentLogs,x as logger,f as pushLog,d as setLogBufferEnabled};
2
3
 
@@ -1,8 +1,18 @@
1
1
 
2
+
3
+
4
+
5
+
2
6
  export declare function compareVersions(a: string, b: string): number;
3
7
 
8
+
9
+
10
+
4
11
  export declare function fetchLatestNpmVersion(): Promise<string>;
5
12
 
13
+
14
+
15
+
6
16
  export declare function checkBridgeUpdate(): Promise<{
7
17
  ok: boolean;
8
18
  hasUpdate: boolean;
@@ -1,5 +1,11 @@
1
1
 
2
2
 
3
+
4
+
5
+
6
+
7
+
8
+
3
9
  export interface PropertiesPathResult {
4
10
  normalizedWorkspace: string;
5
11
  resolvedTarget: string;
@@ -8,4 +14,10 @@ export declare function resolveWorkspaceRoot(workspacePath: string | unknown): s
8
14
  export declare function ensureInsideWorkspace(workspaceRoot: string, targetPath: string): string;
9
15
  export declare function resolveWorkspaceFilePath(workspacePath: string | unknown, relativeOrAbsolutePath: string | unknown, defaultRelativePath: string): PropertiesPathResult;
10
16
 
17
+
18
+
19
+
20
+
21
+
22
+
11
23
  export declare function resolvePropertiesTargetPath(workspacePath: string | unknown, relativeOrAbsolutePath: string | unknown): PropertiesPathResult;
@@ -0,0 +1,18 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+ export declare function normalizeSchedulerUrl(value: unknown): string | undefined;
@@ -0,0 +1,2 @@
1
+ function n(t){return t.replace(/^((?:https?|wss?):\/\/(?:\[[^\]]+\]|[^/:?#]+):\d+):\d+(?=\/|$)/i,"$1")}function c(t){const r=t.toLowerCase();return r==="localhost"||r==="::1"||r==="[::1]"?"127.0.0.1":r}function i(t){const r=String(t??"").trim();if(!r)return;const e=n(r);try{const o=new URL(e);return o.protocol==="ws:"?o.protocol="http:":o.protocol==="wss:"?o.protocol="https:":o.protocol=o.protocol.toLowerCase(),o.hostname=c(o.hostname),o.origin}catch{return e.replace(/\/+$/,"")}}export{i as normalizeSchedulerUrl};
2
+