@superblocksteam/vite-plugin-file-sync 2.0.123-next.0 → 2.0.124-next.0

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 (271) hide show
  1. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts +16 -1
  2. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
  3. package/dist/ai-service/agent/prompts/build-base-system-prompt.js +27 -1
  4. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  5. package/dist/ai-service/agent/prompts/build-security-scan-prompt.d.ts.map +1 -1
  6. package/dist/ai-service/agent/prompts/build-security-scan-prompt.js +3 -1
  7. package/dist/ai-service/agent/prompts/build-security-scan-prompt.js.map +1 -1
  8. package/dist/ai-service/agent/tools/apis/api-comparator.d.ts.map +1 -1
  9. package/dist/ai-service/agent/tools/apis/api-comparator.js +1 -4
  10. package/dist/ai-service/agent/tools/apis/api-comparator.js.map +1 -1
  11. package/dist/ai-service/agent/tools/apis/api-testing-state.js +7 -0
  12. package/dist/ai-service/agent/tools/apis/api-testing-state.js.map +1 -1
  13. package/dist/ai-service/agent/tools/apis/get-api-docs.d.ts +1 -1
  14. package/dist/ai-service/agent/tools/apis/write-api.d.ts +2 -2
  15. package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts.map +1 -1
  16. package/dist/ai-service/agent/tools/build-capture-screenshot.js +11 -33
  17. package/dist/ai-service/agent/tools/build-capture-screenshot.js.map +1 -1
  18. package/dist/ai-service/agent/tools/build-copy-directory.d.ts +1 -1
  19. package/dist/ai-service/agent/tools/build-finalize.d.ts.map +1 -1
  20. package/dist/ai-service/agent/tools/build-finalize.js +11 -2
  21. package/dist/ai-service/agent/tools/build-finalize.js.map +1 -1
  22. package/dist/ai-service/agent/tools/build-install-packages.d.ts +41 -1
  23. package/dist/ai-service/agent/tools/build-install-packages.d.ts.map +1 -1
  24. package/dist/ai-service/agent/tools/build-install-packages.js +208 -0
  25. package/dist/ai-service/agent/tools/build-install-packages.js.map +1 -1
  26. package/dist/ai-service/agent/tools/build-lookup-npm-package.d.ts +28 -0
  27. package/dist/ai-service/agent/tools/build-lookup-npm-package.d.ts.map +1 -0
  28. package/dist/ai-service/agent/tools/build-lookup-npm-package.js +78 -0
  29. package/dist/ai-service/agent/tools/build-lookup-npm-package.js.map +1 -0
  30. package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +4 -4
  31. package/dist/ai-service/agent/tools/build-navigate-preview.d.ts +16 -0
  32. package/dist/ai-service/agent/tools/build-navigate-preview.d.ts.map +1 -0
  33. package/dist/ai-service/agent/tools/build-navigate-preview.js +68 -0
  34. package/dist/ai-service/agent/tools/build-navigate-preview.js.map +1 -0
  35. package/dist/ai-service/agent/tools/build-write-file.d.ts +1 -1
  36. package/dist/ai-service/agent/tools/databases/dev-database.d.ts +9 -9
  37. package/dist/ai-service/agent/tools/index.d.ts +2 -0
  38. package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
  39. package/dist/ai-service/agent/tools/index.js +2 -0
  40. package/dist/ai-service/agent/tools/index.js.map +1 -1
  41. package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +3 -3
  42. package/dist/ai-service/agent/tools/report-security-findings.d.ts +11 -5
  43. package/dist/ai-service/agent/tools/report-security-findings.d.ts.map +1 -1
  44. package/dist/ai-service/agent/tools/report-security-findings.js +1 -0
  45. package/dist/ai-service/agent/tools/report-security-findings.js.map +1 -1
  46. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  47. package/dist/ai-service/agent/tools.js +3 -1
  48. package/dist/ai-service/agent/tools.js.map +1 -1
  49. package/dist/ai-service/agent/tools2/tools/git.d.ts +2 -2
  50. package/dist/ai-service/agent/tools2/tools/grep.d.ts +2 -2
  51. package/dist/ai-service/agent/tools2/tools/update-test-case-status.d.ts +2 -2
  52. package/dist/ai-service/app-interface/npm-error-parser.d.ts +161 -0
  53. package/dist/ai-service/app-interface/npm-error-parser.d.ts.map +1 -0
  54. package/dist/ai-service/app-interface/npm-error-parser.js +510 -0
  55. package/dist/ai-service/app-interface/npm-error-parser.js.map +1 -0
  56. package/dist/ai-service/app-interface/npm-package-lookup.d.ts +286 -0
  57. package/dist/ai-service/app-interface/npm-package-lookup.d.ts.map +1 -0
  58. package/dist/ai-service/app-interface/npm-package-lookup.js +793 -0
  59. package/dist/ai-service/app-interface/npm-package-lookup.js.map +1 -0
  60. package/dist/ai-service/app-interface/npm-registry.d.ts +735 -47
  61. package/dist/ai-service/app-interface/npm-registry.d.ts.map +1 -1
  62. package/dist/ai-service/app-interface/npm-registry.js +1882 -153
  63. package/dist/ai-service/app-interface/npm-registry.js.map +1 -1
  64. package/dist/ai-service/app-interface/shell.d.ts +118 -1
  65. package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
  66. package/dist/ai-service/app-interface/shell.js +579 -157
  67. package/dist/ai-service/app-interface/shell.js.map +1 -1
  68. package/dist/ai-service/app-skills/manager.d.ts +1 -1
  69. package/dist/ai-service/app-skills/manager.d.ts.map +1 -1
  70. package/dist/ai-service/app-skills/manager.js +39 -7
  71. package/dist/ai-service/app-skills/manager.js.map +1 -1
  72. package/dist/ai-service/checklist/api-migration-checklist-gate.d.ts +9 -0
  73. package/dist/ai-service/checklist/api-migration-checklist-gate.d.ts.map +1 -0
  74. package/dist/ai-service/checklist/api-migration-checklist-gate.js +30 -0
  75. package/dist/ai-service/checklist/api-migration-checklist-gate.js.map +1 -0
  76. package/dist/ai-service/checklist/api-migration-origins.d.ts +4 -0
  77. package/dist/ai-service/checklist/api-migration-origins.d.ts.map +1 -0
  78. package/dist/ai-service/checklist/api-migration-origins.js +8 -0
  79. package/dist/ai-service/checklist/api-migration-origins.js.map +1 -0
  80. package/dist/ai-service/checklist/persisted-checklist-store.d.ts +2 -3
  81. package/dist/ai-service/checklist/persisted-checklist-store.d.ts.map +1 -1
  82. package/dist/ai-service/checklist/persisted-checklist-store.js +6 -7
  83. package/dist/ai-service/checklist/persisted-checklist-store.js.map +1 -1
  84. package/dist/ai-service/context-archive-paths.d.ts +4 -0
  85. package/dist/ai-service/context-archive-paths.d.ts.map +1 -0
  86. package/dist/ai-service/context-archive-paths.js +28 -0
  87. package/dist/ai-service/context-archive-paths.js.map +1 -0
  88. package/dist/ai-service/context-download.d.ts +3 -1
  89. package/dist/ai-service/context-download.d.ts.map +1 -1
  90. package/dist/ai-service/context-download.js +48 -9
  91. package/dist/ai-service/context-download.js.map +1 -1
  92. package/dist/ai-service/context-upload.d.ts +3 -2
  93. package/dist/ai-service/context-upload.d.ts.map +1 -1
  94. package/dist/ai-service/context-upload.js +44 -26
  95. package/dist/ai-service/context-upload.js.map +1 -1
  96. package/dist/ai-service/dev-database-client.d.ts +3 -11
  97. package/dist/ai-service/dev-database-client.d.ts.map +1 -1
  98. package/dist/ai-service/dev-database-client.js.map +1 -1
  99. package/dist/ai-service/features.d.ts +4 -0
  100. package/dist/ai-service/features.d.ts.map +1 -1
  101. package/dist/ai-service/features.js +8 -0
  102. package/dist/ai-service/features.js.map +1 -1
  103. package/dist/ai-service/filter-disabled-tools-for-migration.d.ts.map +1 -1
  104. package/dist/ai-service/filter-disabled-tools-for-migration.js +4 -0
  105. package/dist/ai-service/filter-disabled-tools-for-migration.js.map +1 -1
  106. package/dist/ai-service/index.d.ts +94 -0
  107. package/dist/ai-service/index.d.ts.map +1 -1
  108. package/dist/ai-service/index.js +564 -17
  109. package/dist/ai-service/index.js.map +1 -1
  110. package/dist/ai-service/llm/client.d.ts +38 -3
  111. package/dist/ai-service/llm/client.d.ts.map +1 -1
  112. package/dist/ai-service/llm/client.js +73 -22
  113. package/dist/ai-service/llm/client.js.map +1 -1
  114. package/dist/ai-service/llm/context-v2/adapter.d.ts +3 -1
  115. package/dist/ai-service/llm/context-v2/adapter.d.ts.map +1 -1
  116. package/dist/ai-service/llm/context-v2/adapter.js +11 -11
  117. package/dist/ai-service/llm/context-v2/adapter.js.map +1 -1
  118. package/dist/ai-service/llm/context-v2/compaction/client-side.d.ts +44 -0
  119. package/dist/ai-service/llm/context-v2/compaction/client-side.d.ts.map +1 -0
  120. package/dist/ai-service/llm/context-v2/compaction/client-side.js +170 -0
  121. package/dist/ai-service/llm/context-v2/compaction/client-side.js.map +1 -0
  122. package/dist/ai-service/llm/context-v2/compaction/compaction-strategy.d.ts +56 -0
  123. package/dist/ai-service/llm/context-v2/compaction/compaction-strategy.d.ts.map +1 -0
  124. package/dist/ai-service/llm/context-v2/compaction/compaction-strategy.js +9 -0
  125. package/dist/ai-service/llm/context-v2/compaction/compaction-strategy.js.map +1 -0
  126. package/dist/ai-service/llm/context-v2/compaction/index.d.ts +5 -0
  127. package/dist/ai-service/llm/context-v2/compaction/index.d.ts.map +1 -0
  128. package/dist/ai-service/llm/context-v2/compaction/index.js +3 -0
  129. package/dist/ai-service/llm/context-v2/compaction/index.js.map +1 -0
  130. package/dist/ai-service/llm/context-v2/compaction/server-side.d.ts +30 -0
  131. package/dist/ai-service/llm/context-v2/compaction/server-side.d.ts.map +1 -0
  132. package/dist/ai-service/llm/context-v2/compaction/server-side.js +130 -0
  133. package/dist/ai-service/llm/context-v2/compaction/server-side.js.map +1 -0
  134. package/dist/ai-service/llm/context-v2/context-management.d.ts +203 -0
  135. package/dist/ai-service/llm/context-v2/context-management.d.ts.map +1 -0
  136. package/dist/ai-service/llm/context-v2/context-management.js +183 -0
  137. package/dist/ai-service/llm/context-v2/context-management.js.map +1 -0
  138. package/dist/ai-service/llm/context-v2/context.d.ts +64 -22
  139. package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
  140. package/dist/ai-service/llm/context-v2/context.js +233 -157
  141. package/dist/ai-service/llm/context-v2/context.js.map +1 -1
  142. package/dist/ai-service/llm/context-v2/conversation-context.d.ts +24 -7
  143. package/dist/ai-service/llm/context-v2/conversation-context.d.ts.map +1 -1
  144. package/dist/ai-service/llm/context-v2/conversation-context.js +1 -1
  145. package/dist/ai-service/llm/context-v2/index.d.ts +0 -4
  146. package/dist/ai-service/llm/context-v2/index.d.ts.map +1 -1
  147. package/dist/ai-service/llm/context-v2/index.js +0 -4
  148. package/dist/ai-service/llm/context-v2/index.js.map +1 -1
  149. package/dist/ai-service/llm/context-v2/manager.d.ts +24 -3
  150. package/dist/ai-service/llm/context-v2/manager.d.ts.map +1 -1
  151. package/dist/ai-service/llm/context-v2/manager.js +146 -4
  152. package/dist/ai-service/llm/context-v2/manager.js.map +1 -1
  153. package/dist/ai-service/llm/context-v2/migrations/v1-to-v2.d.ts +2 -7
  154. package/dist/ai-service/llm/context-v2/migrations/v1-to-v2.d.ts.map +1 -1
  155. package/dist/ai-service/llm/context-v2/migrations/v1-to-v2.js +5 -73
  156. package/dist/ai-service/llm/context-v2/migrations/v1-to-v2.js.map +1 -1
  157. package/dist/ai-service/llm/context-v2/storage/event-store.d.ts +57 -0
  158. package/dist/ai-service/llm/context-v2/storage/event-store.d.ts.map +1 -0
  159. package/dist/ai-service/llm/context-v2/storage/event-store.js +10 -0
  160. package/dist/ai-service/llm/context-v2/storage/event-store.js.map +1 -0
  161. package/dist/ai-service/llm/context-v2/storage/event-types.d.ts +50 -0
  162. package/dist/ai-service/llm/context-v2/storage/event-types.d.ts.map +1 -0
  163. package/dist/ai-service/llm/context-v2/storage/event-types.js +10 -0
  164. package/dist/ai-service/llm/context-v2/storage/event-types.js.map +1 -0
  165. package/dist/ai-service/llm/context-v2/storage/jsonl-event-store.d.ts +87 -0
  166. package/dist/ai-service/llm/context-v2/storage/jsonl-event-store.d.ts.map +1 -0
  167. package/dist/ai-service/llm/context-v2/storage/jsonl-event-store.js +184 -0
  168. package/dist/ai-service/llm/context-v2/storage/jsonl-event-store.js.map +1 -0
  169. package/dist/ai-service/llm/context-v2/storage/migration.d.ts +49 -0
  170. package/dist/ai-service/llm/context-v2/storage/migration.d.ts.map +1 -0
  171. package/dist/ai-service/llm/context-v2/storage/migration.js +126 -0
  172. package/dist/ai-service/llm/context-v2/storage/migration.js.map +1 -0
  173. package/dist/ai-service/llm/context-v2/types.d.ts +16 -11
  174. package/dist/ai-service/llm/context-v2/types.d.ts.map +1 -1
  175. package/dist/ai-service/llm/context-v2/types.js +2 -2
  176. package/dist/ai-service/llm/context-v2/types.js.map +1 -1
  177. package/dist/ai-service/llm/impl/clark.d.ts +8 -0
  178. package/dist/ai-service/llm/impl/clark.d.ts.map +1 -1
  179. package/dist/ai-service/llm/impl/clark.js +8 -0
  180. package/dist/ai-service/llm/impl/clark.js.map +1 -1
  181. package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -1
  182. package/dist/ai-service/llm/interaction/adapters/vercel.js +17 -1
  183. package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -1
  184. package/dist/ai-service/llm/provider.d.ts.map +1 -1
  185. package/dist/ai-service/llm/provider.js +1 -3
  186. package/dist/ai-service/llm/provider.js.map +1 -1
  187. package/dist/ai-service/llm/stream/observers/context.d.ts +23 -0
  188. package/dist/ai-service/llm/stream/observers/context.d.ts.map +1 -1
  189. package/dist/ai-service/llm/stream/observers/context.js +62 -0
  190. package/dist/ai-service/llm/stream/observers/context.js.map +1 -1
  191. package/dist/ai-service/llm/tool-context-integrity.d.ts +25 -0
  192. package/dist/ai-service/llm/tool-context-integrity.d.ts.map +1 -0
  193. package/dist/ai-service/llm/tool-context-integrity.js +141 -0
  194. package/dist/ai-service/llm/tool-context-integrity.js.map +1 -0
  195. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts +1 -1
  196. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts.map +1 -1
  197. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js +6 -1
  198. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js.map +1 -1
  199. package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts +1 -1
  200. package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts.map +1 -1
  201. package/dist/ai-service/skills/system/third-party-migration/skill.generated.js +3 -2
  202. package/dist/ai-service/skills/system/third-party-migration/skill.generated.js.map +1 -1
  203. package/dist/ai-service/state-machine/clark-fsm.d.ts +23 -2
  204. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  205. package/dist/ai-service/state-machine/clark-fsm.js +37 -2
  206. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  207. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  208. package/dist/ai-service/state-machine/handlers/agent-planning.js +29 -2
  209. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  210. package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
  211. package/dist/ai-service/state-machine/handlers/awaiting-user.js +9 -0
  212. package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
  213. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  214. package/dist/ai-service/state-machine/handlers/llm-generating.js +25 -2
  215. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  216. package/dist/ai-service/state-machine/helpers/fetch-with-reconnect-retry.d.ts +6 -0
  217. package/dist/ai-service/state-machine/helpers/fetch-with-reconnect-retry.d.ts.map +1 -0
  218. package/dist/ai-service/state-machine/helpers/fetch-with-reconnect-retry.js +36 -0
  219. package/dist/ai-service/state-machine/helpers/fetch-with-reconnect-retry.js.map +1 -0
  220. package/dist/ai-service/state-machine/helpers/stable-peer.d.ts +30 -1
  221. package/dist/ai-service/state-machine/helpers/stable-peer.d.ts.map +1 -1
  222. package/dist/ai-service/state-machine/helpers/stable-peer.js +85 -2
  223. package/dist/ai-service/state-machine/helpers/stable-peer.js.map +1 -1
  224. package/dist/ai-service/state-machine/helpers/user-preferences.d.ts +8 -0
  225. package/dist/ai-service/state-machine/helpers/user-preferences.d.ts.map +1 -0
  226. package/dist/ai-service/state-machine/helpers/user-preferences.js +11 -0
  227. package/dist/ai-service/state-machine/helpers/user-preferences.js.map +1 -0
  228. package/dist/ai-service/template-renderer.d.ts +18 -1
  229. package/dist/ai-service/template-renderer.d.ts.map +1 -1
  230. package/dist/ai-service/template-renderer.js +73 -12
  231. package/dist/ai-service/template-renderer.js.map +1 -1
  232. package/dist/ai-service/types.d.ts +157 -0
  233. package/dist/ai-service/types.d.ts.map +1 -1
  234. package/dist/ai-service/types.js +137 -0
  235. package/dist/ai-service/types.js.map +1 -1
  236. package/dist/ai-service/util/llm-config-utils.d.ts +21 -22
  237. package/dist/ai-service/util/llm-config-utils.d.ts.map +1 -1
  238. package/dist/ai-service/util/llm-config-utils.js +40 -67
  239. package/dist/ai-service/util/llm-config-utils.js.map +1 -1
  240. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  241. package/dist/file-sync-vite-plugin.js +5 -0
  242. package/dist/file-sync-vite-plugin.js.map +1 -1
  243. package/dist/file-system-helpers.d.ts +17 -0
  244. package/dist/file-system-helpers.d.ts.map +1 -1
  245. package/dist/file-system-helpers.js +22 -0
  246. package/dist/file-system-helpers.js.map +1 -1
  247. package/dist/git-service/index.d.ts.map +1 -1
  248. package/dist/git-service/index.js +15 -1
  249. package/dist/git-service/index.js.map +1 -1
  250. package/dist/migration/migration-routes.d.ts.map +1 -1
  251. package/dist/migration/migration-routes.js +26 -3
  252. package/dist/migration/migration-routes.js.map +1 -1
  253. package/dist/migration/translation-prompt.d.ts.map +1 -1
  254. package/dist/migration/translation-prompt.js +5 -0
  255. package/dist/migration/translation-prompt.js.map +1 -1
  256. package/dist/migration-templates/app-fullstack/package.json +2 -2
  257. package/dist/policy-gate-callback-mapper.d.ts +24 -0
  258. package/dist/policy-gate-callback-mapper.d.ts.map +1 -0
  259. package/dist/policy-gate-callback-mapper.js +61 -0
  260. package/dist/policy-gate-callback-mapper.js.map +1 -0
  261. package/dist/policy-gate-runner.d.ts +32 -0
  262. package/dist/policy-gate-runner.d.ts.map +1 -0
  263. package/dist/policy-gate-runner.js +191 -0
  264. package/dist/policy-gate-runner.js.map +1 -0
  265. package/dist/router-parser.d.ts.map +1 -1
  266. package/dist/router-parser.js +107 -11
  267. package/dist/router-parser.js.map +1 -1
  268. package/dist/sync-service/list-dir.d.ts.map +1 -1
  269. package/dist/sync-service/list-dir.js +13 -3
  270. package/dist/sync-service/list-dir.js.map +1 -1
  271. package/package.json +28 -10
@@ -2,6 +2,7 @@ import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import z from "zod";
4
4
  import { getErrorMeta, getLogger } from "../../../util/logger.js";
5
+ import { NpmInstallBlocked } from "../../types.js";
5
6
  import { createToolFactory, ToolCategory } from "../tools2/types.js";
6
7
  async function readPackageJson(appRootDirPath) {
7
8
  try {
@@ -13,6 +14,161 @@ async function readPackageJson(appRootDirPath) {
13
14
  return null;
14
15
  }
15
16
  }
17
+ /** Sanitize a string before interpolating it into the agent-facing message.
18
+ *
19
+ * Package specs and registry hosts originate from npm's error.detail /
20
+ * error.summary — i.e. attacker-controllable for a hostile or misbehaving
21
+ * registry. Without sanitization, a value containing backticks/newlines
22
+ * could break out of the surrounding markdown code-span (or fake one),
23
+ * letting the registry inject instructions into the agent's read context.
24
+ *
25
+ * Three transforms, applied in order:
26
+ * - Strip ASCII control chars + newlines so injected line breaks can't
27
+ * forge a new "instruction" paragraph.
28
+ * - Strip backticks so the value can't terminate the surrounding span or
29
+ * introduce a fenced block.
30
+ * - Cap length so a multi-KB payload can't push downstream context out
31
+ * of the window. 100 chars accommodates the longest realistic scoped
32
+ * spec (`@some-org/some-package@1.2.3-rc.4+sha.abc1234`) with room. */
33
+ const SAFE_INTERP_MAX_LEN = 100;
34
+ function sanitizeForAgentMessage(value) {
35
+ // eslint-disable-next-line no-control-regex -- intentional: scrubbing CR/LF/control chars
36
+ const stripped = value.replace(/[`\u0000-\u001F\u007F]/g, "");
37
+ return stripped.length > SAFE_INTERP_MAX_LEN
38
+ ? `${stripped.slice(0, SAFE_INTERP_MAX_LEN)}…`
39
+ : stripped;
40
+ }
41
+ /** Whether `host` (already lowercased downstream by the URL parser, but we
42
+ * re-lowercase for defence) is one of the public npmjs.org registry hosts.
43
+ *
44
+ * `registry.npmjs.org` is the de facto URL npm uses in cloud-edit, SaaS,
45
+ * on-prem-without-private-registry, and the baked-in dev-server `.npmrc`.
46
+ * Legacy `npmjs.org` redirects to it but can still appear in error
47
+ * summaries from older npm clients. Anything else (Artifactory, GHPR,
48
+ * Verdaccio, a customer-hosted mirror) counts as a private host. */
49
+ function isPublicNpmHost(host) {
50
+ if (!host)
51
+ return false;
52
+ const h = host.toLowerCase();
53
+ return (h === "registry.npmjs.org" || h === "npmjs.org" || h.endsWith(".npmjs.org"));
54
+ }
55
+ /**
56
+ * Render a `NpmInstallBlocked` into an actionable one-paragraph message for
57
+ * the agent, plus the discriminator that selected the message branch. The
58
+ * structured `error` field carries the canonical inputs; this string is what
59
+ * the model reads first.
60
+ *
61
+ * Branch selection (see `NpmInstallBlockedMessageVariant`):
62
+ *
63
+ * - `unreachable_escalation` — `registry_unreachable` + zero configured
64
+ * rows + host is npmjs (or unknown). Covers both the SaaS "npmjs is down"
65
+ * case and the airgapped "egress is blocked and no private registry is
66
+ * wired up" case with one hybrid message, because the dev-server cannot
67
+ * distinguish them from the error alone.
68
+ * - `private_mirror_hint` — `not_in_registry` + at least one configured
69
+ * row + host is private. Appends "an org admin may need to mirror this
70
+ * package" because that's an actionable escalation on a private
71
+ * registry; same hint on npmjs would be misleading.
72
+ * - `default` — every other combination, including all
73
+ * `registry_auth_failed` failures.
74
+ *
75
+ * Exported so the matrix can be unit-tested directly without round-tripping
76
+ * through the AppShell + npm exec mock.
77
+ */
78
+ export function buildBlockedMessage(err) {
79
+ const safeHost = err.registryHost
80
+ ? sanitizeForAgentMessage(err.registryHost)
81
+ : "";
82
+ const host = safeHost ? ` (registry: ${safeHost})` : "";
83
+ const packagesPhrase = err.packages.length > 0
84
+ ? err.packages.map((p) => `\`${sanitizeForAgentMessage(p)}\``).join(", ")
85
+ : "the requested package";
86
+ // Tri-state: `undefined` means "no client wired in" (test fixtures, judge
87
+ // runner) and is treated as `true` — there is no escalation path to
88
+ // recommend if we don't know the deployment has a private-registry seam.
89
+ const hasRows = err.hasAnyRegistryConfigured !== false;
90
+ const hostIsPublic = isPublicNpmHost(err.registryHost);
91
+ const hostIsKnown = !!err.registryHost;
92
+ const errorCode = err.npmErrorCode;
93
+ switch (err.reason) {
94
+ case "not_in_registry": {
95
+ const privateHostWithRows = hostIsKnown && !hostIsPublic && hasRows;
96
+ if (privateHostWithRows) {
97
+ // Private host + rows present: the customer is on a private registry
98
+ // and this 404 most likely means the package isn't mirrored yet (or
99
+ // is genuinely missing). Append an actionable escalation pointing at
100
+ // the org admin without naming the registry URL or any token-bearing
101
+ // details — non-admin users still get something they can do.
102
+ return {
103
+ variant: "private_mirror_hint",
104
+ message: `The npm registry${host} returned 404 for ${packagesPhrase}. This may be a typo, an unpublished package, or a package that has not been mirrored into your private registry. Stop and confirm with the user before trying a different package — and if the package name is correct, an org admin may need to mirror it into your private registry.`,
105
+ };
106
+ }
107
+ // Mode-agnostic default: covers SaaS (npmjs → typo / unpublished /
108
+ // renamed), private host with no rows (degenerate EE ephemeral case),
109
+ // and unknown host (parser couldn't extract a URL).
110
+ return {
111
+ variant: "default",
112
+ message: `The npm registry${host} returned 404 for ${packagesPhrase}. This may be a typo, an unpublished or renamed package, or — if a private registry is configured — a package that has not been mirrored. Stop and confirm with the user before trying a different package.`,
113
+ };
114
+ }
115
+ case "registry_unreachable": {
116
+ // Escalation hint applies only when (a) we know zero rows are
117
+ // configured AND (b) the host npm attempted is npmjs.org or unknown
118
+ // (no host extracted from the error). When the host is a private
119
+ // registry the customer already has one wired up — telling them to
120
+ // configure one would be misleading.
121
+ const hostQualifiesForEscalation = !hostIsKnown || hostIsPublic;
122
+ const noRowsConfigured = err.hasAnyRegistryConfigured === false;
123
+ if (hostQualifiesForEscalation && noRowsConfigured) {
124
+ return {
125
+ variant: "unreachable_escalation",
126
+ message: `The npm registry${host} could not be reached (${errorCode ?? "network error"}). This may be a temporary outage of npmjs.org, or — if this deployment cannot reach public npm — egress may be blocked. Alternative packages will not help — stop and report this to the user. If this deployment is intended to use a private npm registry, ask an org admin to configure one in Org Settings → Package Registry.`,
127
+ };
128
+ }
129
+ // Subreason-specific hint (APPS-4381): the parser narrows the failure
130
+ // to dns / network / proxy / timeout where it can, so the operator
131
+ // gets a directed next step instead of the four-cause grab-bag. The
132
+ // hint is appended to the existing multi-cause sentence — keeping the
133
+ // structure stable lets existing model-eval prompts continue matching
134
+ // on the "could not be reached" / "alternative packages will not help"
135
+ // anchors that the rest of the test surface pins.
136
+ const subreasonHint = (() => {
137
+ switch (err.subreason) {
138
+ case "dns":
139
+ return " The registry hostname could not be resolved (DNS); the corporate or container DNS resolver may not see this host.";
140
+ case "network":
141
+ return " The TCP connection was refused or reset; a firewall, egress filter, or routing rule may be blocking the registry.";
142
+ case "proxy":
143
+ return " An HTTP proxy refused the request; the proxy URL, credentials, or NO_PROXY rules may be misconfigured.";
144
+ case "timeout":
145
+ return " The request timed out; the network path to the registry is slow or the registry is hung.";
146
+ default:
147
+ return "";
148
+ }
149
+ })();
150
+ // Revised default: drop the "transient" framing — unreachable can
151
+ // equally be DNS misconfig, an auth gateway rejecting the request at
152
+ // the network layer, expired credentials, or a misrouted scope. The
153
+ // common thread is "alternative packages will not help; surface this
154
+ // up the stack."
155
+ return {
156
+ variant: "default",
157
+ message: `The npm registry${host} could not be reached (${errorCode ?? "network error"}). This may be a registry outage, a network or auth misconfiguration, expired credentials at the network layer, or a misrouted scope.${subreasonHint} Alternative packages will not help — stop and report the failure to the user.`,
158
+ };
159
+ }
160
+ case "registry_auth_failed":
161
+ return {
162
+ variant: "default",
163
+ message: `The configured npm registry${host} rejected the authentication credentials (${errorCode ?? "auth error"}). This requires an administrator to fix the registry token. Stop and report the failure rather than trying alternative packages.`,
164
+ };
165
+ case "tls_failed":
166
+ return {
167
+ variant: "default",
168
+ message: `The TLS handshake with the npm registry${host} failed (${errorCode ?? "TLS error"}). Common causes: an untrusted private CA the registry serves, a self-signed certificate, or an expired certificate. An administrator must install the registry's CA bundle (e.g. via NODE_EXTRA_CA_CERTS or the npm cafile config) or rotate the expired certificate. Alternative packages will not help — stop and report the failure to the user.`,
169
+ };
170
+ }
171
+ }
16
172
  function detectVersionChanges(packages, currentPackageJson) {
17
173
  if (!currentPackageJson)
18
174
  return [];
@@ -100,11 +256,63 @@ export const buildInstallPackagesToolFactory = createToolFactory("build_installP
100
256
  }
101
257
  }
102
258
  catch (error) {
259
+ // Surface registry-blocked failures as a structured tool result so
260
+ // the agent can reason about the reason (404 vs auth vs network)
261
+ // on the same conversation turn, instead of letting the error
262
+ // bubble up to agent-planning's POST_PROCESSING_ERRORED branch
263
+ // (which only emits a raw stderr `debug()` message).
264
+ if (error instanceof NpmInstallBlocked) {
265
+ // `warn` (not `info`) because operators want this to surface in
266
+ // standard `level>=warn` alert queries: a blocked install is a
267
+ // handled, recoverable condition (the agent gets structured
268
+ // guidance) but operationally important to track. `error` would
269
+ // overstate severity since the agent loop is not crashing, and
270
+ // would force the strict `ErrorMeta` shape that drops the
271
+ // structured `toJSON()` payload operators actually want to
272
+ // facet on. Per APPS-4179 AC this is the single log line for
273
+ // the structured error.
274
+ //
275
+ // `messageVariant` joins the toJSON projection so a downstream
276
+ // Datadog/Loki facet can distinguish the row-aware branches
277
+ // (`private_mirror_hint`, `unreachable_escalation`) from the
278
+ // default advice without re-deriving the matrix from the raw
279
+ // inputs. AppShell.classifyNpmExecError emits the same data
280
+ // points as llmobs span tags; the warn log is the structured
281
+ // counterpart that survives outside of trace sampling.
282
+ const { message, variant } = buildBlockedMessage(error);
283
+ getLogger().warn("Install blocked by registry condition", {
284
+ ...error.toJSON(),
285
+ messageVariant: variant,
286
+ });
287
+ return {
288
+ ok: false,
289
+ error: error.toJSON(),
290
+ message,
291
+ };
292
+ }
103
293
  getLogger().error("Error installing packages", getErrorMeta(error));
104
294
  throw error;
105
295
  }
106
296
  },
107
297
  getSummary: (input, output) => {
298
+ // Blocked-install result is the failure path: surface the reason
299
+ // instead of pretending the install succeeded.
300
+ if (output && "ok" in output && output.ok === false) {
301
+ const blockedOutput = `Blocked: ${output.error.reason}`;
302
+ // Mirror the success branch: omit the `input` field on the no-args
303
+ // install path (runPackageManagerInstall) so the summary doesn't
304
+ // render `"0 packages: "` with a dangling colon.
305
+ if (input.packages && input.packages.length > 0) {
306
+ const names = input.packages.map((p) => p.name).join(", ");
307
+ return {
308
+ input: `${input.packages.length} package${input.packages.length === 1 ? "" : "s"}: ${names}`,
309
+ output: blockedOutput,
310
+ };
311
+ }
312
+ return {
313
+ output: blockedOutput,
314
+ };
315
+ }
108
316
  if (input.packages && input.packages.length > 0) {
109
317
  const names = input.packages.map((p) => p.name).join(", ");
110
318
  const versionWarning = output.versionChanges?.length
@@ -1 +1 @@
1
- {"version":3,"file":"build-install-packages.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-install-packages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-install-packages.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-install-packages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { NpmPackageLookup, NpmPackageLookupResult } from "../../app-interface/npm-package-lookup.js";
2
+ import type { Clark } from "../../state-machine/clark-fsm.js";
3
+ import type { ClarkStateHandlerParams } from "../../state-machine/clark-fsm.js";
4
+ /**
5
+ * The `NpmPackageLookup` instance is OWNED BY `AiService` and surfaced via
6
+ * `services.npmPackageLookup` — a single process-lifetime instance shared
7
+ * across every `buildTools()` call. An earlier revision of this file
8
+ * constructed `new NpmPackageLookup(...)` inside the factory body itself,
9
+ * which produced a fresh lookup (and a fresh `ObservableGauge` callback
10
+ * registration for `superblocks.npm.lookup.cache_size`) on every LLM
11
+ * generation turn. `ToolRegistry.clear()` does not dispose tool resources,
12
+ * so the OTel API's strong reference to the callback kept the old cache
13
+ * alive for the process lifetime and produced multiple
14
+ * same-instrument/same-attribute observations per collection cycle.
15
+ *
16
+ * Tests inject their own lookup via `deps.lookup` to keep the cache hermetic
17
+ * across cases.
18
+ */
19
+ export interface BuildLookupNpmPackageDeps {
20
+ clark: Clark;
21
+ services: ClarkStateHandlerParams;
22
+ /** Test seam: inject a NpmPackageLookup with mocked fetch / clock. */
23
+ lookup?: NpmPackageLookup;
24
+ }
25
+ export declare const buildLookupNpmPackageToolFactory: import("../tools2/types.js").ToolFactory<BuildLookupNpmPackageDeps, import("../tools2/types.js").Tool<{
26
+ name: string;
27
+ }, NpmPackageLookupResult>>;
28
+ //# sourceMappingURL=build-lookup-npm-package.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-lookup-npm-package.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-lookup-npm-package.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAGhF;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,uBAAuB,CAAC;IAClC,sEAAsE;IACtE,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAgBD,eAAO,MAAM,gCAAgC;;2BAmE5C,CAAC"}
@@ -0,0 +1,78 @@
1
+ import z from "zod";
2
+ import { createToolFactory, ToolCategory } from "../tools2/types.js";
3
+ /**
4
+ * Lightweight npm-package-name validation. The package metadata endpoint
5
+ * tolerates a lot of garbage on the path (most non-200s map to
6
+ * `not_in_registry`), and `encodePackagePath` already neutralises hostile
7
+ * characters in the URL, but rejecting obviously-invalid inputs at the
8
+ * schema boundary keeps tool summaries clean and avoids paying for a 404
9
+ * round trip on inputs that no npm install would ever accept.
10
+ *
11
+ * Roughly matches npm's `validate-npm-package-name` "valid for new packages"
12
+ * rules: optional `@scope/` prefix, each segment starts with `[a-z0-9]`,
13
+ * then `[a-z0-9._-]`, and the full string is ≤ 214 characters.
14
+ */
15
+ const NPM_PACKAGE_NAME = /^(@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/;
16
+ export const buildLookupNpmPackageToolFactory = createToolFactory("build_lookupNpmPackage", (deps) => {
17
+ const lookup = deps.lookup ?? deps.services.npmPackageLookup;
18
+ return {
19
+ category: ToolCategory.GENERAL,
20
+ readOnly: true,
21
+ description: `
22
+ Look up an npm package in the registry Clark's install path will hit. Use this BEFORE running 'npm install' to:
23
+ - verify the package exists (catches typos, hallucinated names, unpublished/deprecated packages)
24
+ - pick a recent version from 'recent_versions' (npm picks versions Clark might not have seen)
25
+
26
+ Always call this for any package you have not just looked up in the same session. It runs against whichever registry 'npm install' would use — including the public npm registry when no private registry is configured — so the answer matches what the install will actually do.
27
+
28
+ Inputs:
29
+ - name: the npm package name. Plain ('react', 'lodash') or scoped ('@types/node'). No version, no range — version selection is the agent's responsibility after reading 'recent_versions'.
30
+
31
+ Output:
32
+ - available: true iff the registry returned 200 for the package.
33
+ - mode: 'private' | 'public-npm' | 'fail-closed'. 'private' = the operator's configured per-org registry answered. 'public-npm' = npmjs.org answered (no private registry was configured, or a scoped name had no scope mapping). 'fail-closed' = the lookup was not performed because the private-registry config is in a hard-fail auth or unreachable state; treat as "do not install" and surface the configuration problem.
34
+ - reason: when available=false, one of 'not_in_registry' | 'registry_auth_failed' | 'registry_unreachable'. Same taxonomy as the install tool's blocked result.
35
+ - registry_host: the host that answered. Empty string when mode='fail-closed' (no lookup ran).
36
+ - latest_version: the registry's 'dist-tags.latest' when available.
37
+ - recent_versions: up to 30 recent published versions (newest first by publish time when available), so you can pin to a specific version without another tool call.
38
+
39
+ Reading the result:
40
+ - mode='public-npm' + reason='registry_unreachable' is the classic egress-blocked signal: the operator's network blocks npmjs.org and they have not configured a private registry. Tell the user; do not retry.
41
+ - mode='private' + reason='registry_unreachable' means the per-org private registry is down or unreachable. Tell the user; do not retry.
42
+ - mode='fail-closed' means we deliberately did not call out; surface a configuration / auth issue with the operator's private-registry setup.
43
+ - reason='not_in_registry' means the name is wrong, deprecated/unpublished, or not mirrored. Pick a different package; do not retry the same name.
44
+ - reason='registry_auth_failed' means a token problem against a private registry; the install will fail the same way until the operator fixes credentials.
45
+
46
+ Notes:
47
+ - This tool never installs anything; it only queries the registry.
48
+ - Successful lookups and 'not_in_registry' results are cached per-process for ~60s. Transient failures ('registry_auth_failed', 'registry_unreachable') are not cached, so a retry will hit the registry again.
49
+ `,
50
+ inputSchema: z.object({
51
+ name: z
52
+ .string()
53
+ .min(1, "package name is required")
54
+ .max(214, "package name must be 214 characters or fewer (npm spec)")
55
+ .regex(NPM_PACKAGE_NAME, "must be a valid npm package name (e.g. 'react' or '@scope/name', lowercase, no version specifier)")
56
+ .describe("Package name to look up (e.g. 'react', '@types/node')"),
57
+ }),
58
+ execute: async ({ name }) => {
59
+ return await lookup.lookup(name);
60
+ },
61
+ getSummary: (input, output) => {
62
+ if (output.available) {
63
+ const latest = output.latest_version
64
+ ? ` (latest: ${output.latest_version})`
65
+ : "";
66
+ return {
67
+ input: input.name,
68
+ output: `available via ${output.mode}${latest}`,
69
+ };
70
+ }
71
+ return {
72
+ input: input.name,
73
+ output: `unavailable via ${output.mode}: ${output.reason ?? "unknown"}`,
74
+ };
75
+ },
76
+ };
77
+ });
78
+ //# sourceMappingURL=build-lookup-npm-package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-lookup-npm-package.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-lookup-npm-package.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAQpB,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAwBrE;;;;;;;;;;;GAWG;AACH,MAAM,gBAAgB,GAAG,kDAAkD,CAAC;AAE5E,MAAM,CAAC,MAAM,gCAAgC,GAAG,iBAAiB,CAC/D,wBAAwB,EACxB,CAAC,IAA+B,EAAE,EAAE;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC7D,OAAO;QACL,QAAQ,EAAE,YAAY,CAAC,OAAO;QAC9B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4Bd;QACC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;iBAClC,GAAG,CAAC,GAAG,EAAE,yDAAyD,CAAC;iBACnE,KAAK,CACJ,gBAAgB,EAChB,mGAAmG,CACpG;iBACA,QAAQ,CAAC,uDAAuD,CAAC;SACrE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAmC,EAAE;YAC3D,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC5B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc;oBAClC,CAAC,CAAC,aAAa,MAAM,CAAC,cAAc,GAAG;oBACvC,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO;oBACL,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,MAAM,EAAE,iBAAiB,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE;iBAChD,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,MAAM,EAAE,mBAAmB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE;aACxE,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -21,12 +21,12 @@ export declare const buildManageChecklistToolFactory: import("../tools2/types.js
21
21
  clark: Clark;
22
22
  services: ClarkStateHandlerParams;
23
23
  }, import("../tools2/types.js").Tool<{
24
- action: "add" | "get" | "update" | "clear";
25
- status?: "failed" | "pending" | "cancelled" | "completed" | "in_progress" | undefined;
24
+ action: "get" | "add" | "update" | "clear";
25
+ status?: "pending" | "cancelled" | "failed" | "completed" | "in_progress" | undefined;
26
26
  content?: string | undefined;
27
- itemId?: string | undefined;
28
- failureReason?: string | undefined;
29
27
  clearOnFinalize?: boolean | undefined;
28
+ failureReason?: string | undefined;
29
+ itemId?: string | undefined;
30
30
  }, {
31
31
  success: boolean;
32
32
  action: string;
@@ -0,0 +1,16 @@
1
+ import type { Clark, ClarkStateHandlerParams } from "../../state-machine/clark-fsm.js";
2
+ export interface NavigatePreviewToolOutput {
3
+ message: string;
4
+ path: string;
5
+ success: boolean;
6
+ }
7
+ export declare const buildNavigatePreviewToolFactory: import("../tools2/types.js").ToolFactory<{
8
+ clark: Clark;
9
+ services: ClarkStateHandlerParams;
10
+ }, import("../tools2/types.js").Tool<{
11
+ path: string;
12
+ hash?: string | undefined;
13
+ queryParams?: Record<string, string> | undefined;
14
+ routeParams?: Record<string, string> | undefined;
15
+ }, NavigatePreviewToolOutput>>;
16
+ //# sourceMappingURL=build-navigate-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-navigate-preview.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-navigate-preview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,KAAK,EACL,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAO1C,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,+BAA+B;WAErB,KAAK;cAAY,uBAAuB;;;;;;8BAiF9D,CAAC"}
@@ -0,0 +1,68 @@
1
+ import z from "zod";
2
+ import { createToolFactory, PermissionLevel, ToolCategory, } from "../tools2/types.js";
3
+ export const buildNavigatePreviewToolFactory = createToolFactory("build_navigatePreview", ({ clark }) => {
4
+ return {
5
+ category: ToolCategory.DEBUG,
6
+ defaultPermission: PermissionLevel.ALLOW,
7
+ description: `
8
+ Navigate the app preview to a route path. Does not capture a screenshot.
9
+
10
+ Use before \`build_captureScreenshot\` when you need visual verification on a route other than the one currently displayed.
11
+
12
+ For dynamic routes (e.g. \`/users/:userId\`), pass \`routeParams\` when known; missing params default to \`TEST_VALUE_1\`, \`TEST_VALUE_2\`, etc.
13
+ `,
14
+ execute: async ({ hash, path, queryParams, routeParams, }) => {
15
+ const logger = clark.logger;
16
+ logger.info(`[build_navigatePreview] Navigating preview to ${path}`);
17
+ if (!clark.context.peer) {
18
+ const error = "Editor client not available - cannot navigate preview";
19
+ logger.error(`[build_navigatePreview] ${error}`);
20
+ throw new Error(error);
21
+ }
22
+ const response = await clark.context.peer.call.aiNavigatePreviewRoute({
23
+ hash,
24
+ path,
25
+ queryParams,
26
+ routeParams,
27
+ });
28
+ if (!response?.success) {
29
+ const error = response?.error ?? `Failed to navigate preview to ${path}`;
30
+ logger.error(`[build_navigatePreview] ${error}`);
31
+ throw new Error(error);
32
+ }
33
+ const resolvedPath = response.path ?? path;
34
+ return {
35
+ message: `Successfully navigated preview to ${resolvedPath}`,
36
+ path: resolvedPath,
37
+ success: true,
38
+ };
39
+ },
40
+ getActionName: () => ({
41
+ future: "navigate the app preview to a route",
42
+ past: "navigated the app preview to a route",
43
+ present: "navigating the app preview to a route",
44
+ }),
45
+ getSummary: ({ path }) => ({
46
+ output: `Navigated preview to ${path}`,
47
+ }),
48
+ inputSchema: z.object({
49
+ hash: z
50
+ .string()
51
+ .optional()
52
+ .describe("Optional URL hash to append after navigation."),
53
+ path: z
54
+ .string()
55
+ .describe("Route path to navigate to (for example, '/feedback' or '/users/:userId')."),
56
+ queryParams: z
57
+ .record(z.string())
58
+ .optional()
59
+ .describe("Optional query string parameters for the route."),
60
+ routeParams: z
61
+ .record(z.string())
62
+ .optional()
63
+ .describe("Optional route params for dynamic segments (for example, { userId: '123' })."),
64
+ }),
65
+ readOnly: true,
66
+ };
67
+ });
68
+ //# sourceMappingURL=build-navigate-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-navigate-preview.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/build-navigate-preview.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAMpB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAC;AAQ5B,MAAM,CAAC,MAAM,+BAA+B,GAAG,iBAAiB,CAC9D,uBAAuB,EACvB,CAAC,EAAE,KAAK,EAAuD,EAAE,EAAE;IACjE,OAAO;QACL,QAAQ,EAAE,YAAY,CAAC,KAAK;QAC5B,iBAAiB,EAAE,eAAe,CAAC,KAAK;QACxC,WAAW,EAAE;;;;;;CAMlB;QACK,OAAO,EAAE,KAAK,EAAE,EACd,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,WAAW,GACZ,EAAsC,EAAE;YACvC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAE5B,MAAM,CAAC,IAAI,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;YAErE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,uDAAuD,CAAC;gBACtE,MAAM,CAAC,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;gBACpE,IAAI;gBACJ,IAAI;gBACJ,WAAW;gBACX,WAAW;aACZ,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACvB,MAAM,KAAK,GACT,QAAQ,EAAE,KAAK,IAAI,iCAAiC,IAAI,EAAE,CAAC;gBAC7D,MAAM,CAAC,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YAED,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC;YAE3C,OAAO;gBACL,OAAO,EAAE,qCAAqC,YAAY,EAAE;gBAC5D,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;YACpB,MAAM,EAAE,qCAAqC;YAC7C,IAAI,EAAE,sCAAsC;YAC5C,OAAO,EAAE,uCAAuC;SACjD,CAAC;QACF,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,wBAAwB,IAAI,EAAE;SACvC,CAAC;QACF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,CACP,2EAA2E,CAC5E;YACH,WAAW,EAAE,CAAC;iBACX,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBAClB,QAAQ,EAAE;iBACV,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,WAAW,EAAE,CAAC;iBACX,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBAClB,QAAQ,EAAE;iBACV,QAAQ,CACP,8EAA8E,CAC/E;SACJ,CAAC;QACF,QAAQ,EAAE,IAAI;KACf,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -4,8 +4,8 @@ export declare const buildWriteFileToolFactory: import("../tools2/types.js").Too
4
4
  clark: Clark;
5
5
  services: Pick<ClarkStateHandlerParams, "appShell" | "features">;
6
6
  }, import("../tools2/types.js").Tool<{
7
- filePath: string;
8
7
  content: string;
8
+ filePath: string;
9
9
  }, {
10
10
  filePath: string;
11
11
  contentLength: number;
@@ -30,7 +30,7 @@ declare const createDevDatabaseInputSchema: z.ZodObject<{
30
30
  migrationDirectory: z.ZodOptional<z.ZodString>;
31
31
  }, "strip", z.ZodTypeAny, {
32
32
  logicalName: string;
33
- engine: "snowflake" | "lakebase" | "postgres" | "snowflake_postgres";
33
+ engine: "snowflake" | "postgres" | "lakebase" | "snowflake_postgres";
34
34
  version?: string | undefined;
35
35
  sizing?: Record<string, unknown> | undefined;
36
36
  extensions?: string[] | undefined;
@@ -38,7 +38,7 @@ declare const createDevDatabaseInputSchema: z.ZodObject<{
38
38
  migrationDirectory?: string | undefined;
39
39
  }, {
40
40
  logicalName: string;
41
- engine: "snowflake" | "lakebase" | "postgres" | "snowflake_postgres";
41
+ engine: "snowflake" | "postgres" | "lakebase" | "snowflake_postgres";
42
42
  version?: string | undefined;
43
43
  sizing?: Record<string, unknown> | undefined;
44
44
  extensions?: string[] | undefined;
@@ -49,7 +49,7 @@ declare const createDevDatabaseInputSchema: z.ZodObject<{
49
49
  environmentName: string;
50
50
  requirement: {
51
51
  logicalName: string;
52
- engine: "snowflake" | "lakebase" | "postgres" | "snowflake_postgres";
52
+ engine: "snowflake" | "postgres" | "lakebase" | "snowflake_postgres";
53
53
  version?: string | undefined;
54
54
  sizing?: Record<string, unknown> | undefined;
55
55
  extensions?: string[] | undefined;
@@ -60,7 +60,7 @@ declare const createDevDatabaseInputSchema: z.ZodObject<{
60
60
  environmentName: string;
61
61
  requirement: {
62
62
  logicalName: string;
63
- engine: "snowflake" | "lakebase" | "postgres" | "snowflake_postgres";
63
+ engine: "snowflake" | "postgres" | "lakebase" | "snowflake_postgres";
64
64
  version?: string | undefined;
65
65
  sizing?: Record<string, unknown> | undefined;
66
66
  extensions?: string[] | undefined;
@@ -73,7 +73,7 @@ export declare const createDevDbToolFactory: import("../../tools2/types.js").Too
73
73
  environmentName: string;
74
74
  requirement: {
75
75
  logicalName: string;
76
- engine: "snowflake" | "lakebase" | "postgres" | "snowflake_postgres";
76
+ engine: "snowflake" | "postgres" | "lakebase" | "snowflake_postgres";
77
77
  version?: string | undefined;
78
78
  sizing?: Record<string, unknown> | undefined;
79
79
  extensions?: string[] | undefined;
@@ -84,8 +84,8 @@ export declare const createDevDbToolFactory: import("../../tools2/types.js").Too
84
84
  bindingKey: string;
85
85
  connectionMetadata: Record<string, string | number | boolean> | undefined;
86
86
  integrationId: string | undefined;
87
- lifecycleState: "ready" | "failed" | "pending" | "cancelled" | "provisioning" | "migrating" | "retiring";
88
- migrationState: "failed" | "pending" | "migrated";
87
+ lifecycleState: "ready" | "pending" | "cancelled" | "failed" | "provisioning" | "migrating" | "retiring";
88
+ migrationState: "pending" | "failed" | "migrated";
89
89
  requestId: string;
90
90
  }>>;
91
91
  export declare const getDevDbProgressToolFactory: import("../../tools2/types.js").ToolFactory<DevDatabaseToolDeps, import("../../tools2/types.js").Tool<{
@@ -95,8 +95,8 @@ export declare const getDevDbProgressToolFactory: import("../../tools2/types.js"
95
95
  bindingKey: string;
96
96
  connectionMetadata: Record<string, string | number | boolean> | undefined;
97
97
  integrationId: string | undefined;
98
- lifecycleState: "ready" | "failed" | "pending" | "cancelled" | "provisioning" | "migrating" | "retiring";
99
- migrationState: "failed" | "pending" | "migrated";
98
+ lifecycleState: "ready" | "pending" | "cancelled" | "failed" | "provisioning" | "migrating" | "retiring";
99
+ migrationState: "pending" | "failed" | "migrated";
100
100
  requestId: string;
101
101
  }>>;
102
102
  export type { DevDatabaseTransportRequest };
@@ -1,4 +1,5 @@
1
1
  export { buildInstallPackagesToolFactory } from "./build-install-packages.js";
2
+ export { buildLookupNpmPackageToolFactory } from "./build-lookup-npm-package.js";
2
3
  export { buildCopyDirectoryToolFactory } from "./build-copy-directory.js";
3
4
  export { buildCopyFileToolFactory } from "./build-copy-file.js";
4
5
  export { buildWriteFileToolFactory } from "./build-write-file.js";
@@ -9,6 +10,7 @@ export { buildListFilesToolFactory } from "./build-list-files.js";
9
10
  export { buildDebugToolFactory } from "./build-debug.js";
10
11
  export { clearErrorCacheToolFactory } from "./clear-error-cache.js";
11
12
  export { buildCaptureScreenshotToolFactory } from "./build-capture-screenshot.js";
13
+ export { buildNavigatePreviewToolFactory } from "./build-navigate-preview.js";
12
14
  export { buildFinalizeToolFactory } from "./build-finalize.js";
13
15
  export { buildManageChecklistToolFactory } from "./build-manage-checklist.js";
14
16
  export { buildDeleteFileToolFactory, checkDeleteFilePermissions, } from "./build-delete-file.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,+BAA+B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { buildInstallPackagesToolFactory } from "./build-install-packages.js";
2
+ export { buildLookupNpmPackageToolFactory } from "./build-lookup-npm-package.js";
2
3
  export { buildCopyDirectoryToolFactory } from "./build-copy-directory.js";
3
4
  export { buildCopyFileToolFactory } from "./build-copy-file.js";
4
5
  export { buildWriteFileToolFactory } from "./build-write-file.js";
@@ -9,6 +10,7 @@ export { buildListFilesToolFactory } from "./build-list-files.js";
9
10
  export { buildDebugToolFactory } from "./build-debug.js";
10
11
  export { clearErrorCacheToolFactory } from "./clear-error-cache.js";
11
12
  export { buildCaptureScreenshotToolFactory } from "./build-capture-screenshot.js";
13
+ export { buildNavigatePreviewToolFactory } from "./build-navigate-preview.js";
12
14
  export { buildFinalizeToolFactory } from "./build-finalize.js";
13
15
  export { buildManageChecklistToolFactory } from "./build-manage-checklist.js";
14
16
  export { buildDeleteFileToolFactory, checkDeleteFilePermissions, } from "./build-delete-file.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai-service/agent/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,+BAA+B,CAAC"}