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

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 +32 -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 +217 -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 +590 -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 +103 -0
  107. package/dist/ai-service/index.d.ts.map +1 -1
  108. package/dist/ai-service/index.js +610 -25
  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 +85 -20
  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
@@ -1,7 +1,9 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import z from "zod";
4
+ import { isProtectedCorePackage, PROTECTED_CORE_PACKAGES, } from "@superblocksteam/library-shared/types";
4
5
  import { getErrorMeta, getLogger } from "../../../util/logger.js";
6
+ import { NpmInstallBlocked } from "../../types.js";
5
7
  import { createToolFactory, ToolCategory } from "../tools2/types.js";
6
8
  async function readPackageJson(appRootDirPath) {
7
9
  try {
@@ -13,6 +15,169 @@ async function readPackageJson(appRootDirPath) {
13
15
  return null;
14
16
  }
15
17
  }
18
+ /** Sanitize a string before interpolating it into the agent-facing message.
19
+ *
20
+ * Package specs and registry hosts originate from npm's error.detail /
21
+ * error.summary — i.e. attacker-controllable for a hostile or misbehaving
22
+ * registry. Without sanitization, a value containing backticks/newlines
23
+ * could break out of the surrounding markdown code-span (or fake one),
24
+ * letting the registry inject instructions into the agent's read context.
25
+ *
26
+ * Three transforms, applied in order:
27
+ * - Strip ASCII control chars + newlines so injected line breaks can't
28
+ * forge a new "instruction" paragraph.
29
+ * - Strip backticks so the value can't terminate the surrounding span or
30
+ * introduce a fenced block.
31
+ * - Cap length so a multi-KB payload can't push downstream context out
32
+ * of the window. 100 chars accommodates the longest realistic scoped
33
+ * spec (`@some-org/some-package@1.2.3-rc.4+sha.abc1234`) with room. */
34
+ const SAFE_INTERP_MAX_LEN = 100;
35
+ function sanitizeForAgentMessage(value) {
36
+ // eslint-disable-next-line no-control-regex -- intentional: scrubbing CR/LF/control chars
37
+ const stripped = value.replace(/[`\u0000-\u001F\u007F]/g, "");
38
+ return stripped.length > SAFE_INTERP_MAX_LEN
39
+ ? `${stripped.slice(0, SAFE_INTERP_MAX_LEN)}…`
40
+ : stripped;
41
+ }
42
+ /** Whether `host` (already lowercased downstream by the URL parser, but we
43
+ * re-lowercase for defence) is one of the public npmjs.org registry hosts.
44
+ *
45
+ * `registry.npmjs.org` is the de facto URL npm uses in cloud-edit, SaaS,
46
+ * on-prem-without-private-registry, and the baked-in dev-server `.npmrc`.
47
+ * Legacy `npmjs.org` redirects to it but can still appear in error
48
+ * summaries from older npm clients. Anything else (Artifactory, GHPR,
49
+ * Verdaccio, a customer-hosted mirror) counts as a private host. */
50
+ function isPublicNpmHost(host) {
51
+ if (!host)
52
+ return false;
53
+ const h = host.toLowerCase();
54
+ return (h === "registry.npmjs.org" || h === "npmjs.org" || h.endsWith(".npmjs.org"));
55
+ }
56
+ /**
57
+ * Render a `NpmInstallBlocked` into an actionable one-paragraph message for
58
+ * the agent, plus the discriminator that selected the message branch. The
59
+ * structured `error` field carries the canonical inputs; this string is what
60
+ * the model reads first.
61
+ *
62
+ * Branch selection (see `NpmInstallBlockedMessageVariant`):
63
+ *
64
+ * - `unreachable_escalation` — `registry_unreachable` + zero configured
65
+ * rows + host is npmjs (or unknown). Covers both the SaaS "npmjs is down"
66
+ * case and the airgapped "egress is blocked and no private registry is
67
+ * wired up" case with one hybrid message, because the dev-server cannot
68
+ * distinguish them from the error alone.
69
+ * - `private_mirror_hint` — `not_in_registry` + at least one configured
70
+ * row + host is private. Appends "an org admin may need to mirror this
71
+ * package" because that's an actionable escalation on a private
72
+ * registry; same hint on npmjs would be misleading.
73
+ * - `default` — every other combination, including all
74
+ * `registry_auth_failed` failures.
75
+ *
76
+ * Exported so the matrix can be unit-tested directly without round-tripping
77
+ * through the AppShell + npm exec mock.
78
+ */
79
+ export function buildBlockedMessage(err) {
80
+ const safeHost = err.registryHost
81
+ ? sanitizeForAgentMessage(err.registryHost)
82
+ : "";
83
+ const host = safeHost ? ` (registry: ${safeHost})` : "";
84
+ const packagesPhrase = err.packages.length > 0
85
+ ? err.packages.map((p) => `\`${sanitizeForAgentMessage(p)}\``).join(", ")
86
+ : "the requested package";
87
+ // Core-package guard (APPS-4527): when the blocked set contains a
88
+ // protected core dependency (`@superblocksteam/*`, react, react-router,
89
+ // vite, …), Clark must not "fix" the failure by removing or refactoring
90
+ // the app away from it — the dev server, bundle builder, and runtime all
91
+ // require these. The only remediation is mirroring into the registry.
92
+ const protectedCorePackageGuidance = err.packages.some((p) => isProtectedCorePackage(p))
93
+ ? ` One or more of these are core app dependencies (\`@superblocksteam/*\` packages, ${PROTECTED_CORE_PACKAGES.join(", ")}). Never suggest uninstalling, replacing, or refactoring the app away from a core dependency; an org admin must make it available in the registry.`
94
+ : "";
95
+ // Tri-state: `undefined` means "no client wired in" (test fixtures, judge
96
+ // runner) and is treated as `true` — there is no escalation path to
97
+ // recommend if we don't know the deployment has a private-registry seam.
98
+ const hasRows = err.hasAnyRegistryConfigured !== false;
99
+ const hostIsPublic = isPublicNpmHost(err.registryHost);
100
+ const hostIsKnown = !!err.registryHost;
101
+ const errorCode = err.npmErrorCode;
102
+ switch (err.reason) {
103
+ case "not_in_registry": {
104
+ const privateHostWithRows = hostIsKnown && !hostIsPublic && hasRows;
105
+ if (privateHostWithRows) {
106
+ // Private host + rows present: the customer is on a private registry
107
+ // and this 404 most likely means the package isn't mirrored yet (or
108
+ // is genuinely missing). Append an actionable escalation pointing at
109
+ // the org admin without naming the registry URL or any token-bearing
110
+ // details — non-admin users still get something they can do.
111
+ return {
112
+ variant: "private_mirror_hint",
113
+ 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.${protectedCorePackageGuidance}`,
114
+ };
115
+ }
116
+ // Mode-agnostic default: covers SaaS (npmjs → typo / unpublished /
117
+ // renamed), private host with no rows (degenerate EE ephemeral case),
118
+ // and unknown host (parser couldn't extract a URL).
119
+ return {
120
+ variant: "default",
121
+ 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.${protectedCorePackageGuidance}`,
122
+ };
123
+ }
124
+ case "registry_unreachable": {
125
+ // Escalation hint applies only when (a) we know zero rows are
126
+ // configured AND (b) the host npm attempted is npmjs.org or unknown
127
+ // (no host extracted from the error). When the host is a private
128
+ // registry the customer already has one wired up — telling them to
129
+ // configure one would be misleading.
130
+ const hostQualifiesForEscalation = !hostIsKnown || hostIsPublic;
131
+ const noRowsConfigured = err.hasAnyRegistryConfigured === false;
132
+ if (hostQualifiesForEscalation && noRowsConfigured) {
133
+ return {
134
+ variant: "unreachable_escalation",
135
+ 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.`,
136
+ };
137
+ }
138
+ // Subreason-specific hint (APPS-4381): the parser narrows the failure
139
+ // to dns / network / proxy / timeout where it can, so the operator
140
+ // gets a directed next step instead of the four-cause grab-bag. The
141
+ // hint is appended to the existing multi-cause sentence — keeping the
142
+ // structure stable lets existing model-eval prompts continue matching
143
+ // on the "could not be reached" / "alternative packages will not help"
144
+ // anchors that the rest of the test surface pins.
145
+ const subreasonHint = (() => {
146
+ switch (err.subreason) {
147
+ case "dns":
148
+ return " The registry hostname could not be resolved (DNS); the corporate or container DNS resolver may not see this host.";
149
+ case "network":
150
+ return " The TCP connection was refused or reset; a firewall, egress filter, or routing rule may be blocking the registry.";
151
+ case "proxy":
152
+ return " An HTTP proxy refused the request; the proxy URL, credentials, or NO_PROXY rules may be misconfigured.";
153
+ case "timeout":
154
+ return " The request timed out; the network path to the registry is slow or the registry is hung.";
155
+ default:
156
+ return "";
157
+ }
158
+ })();
159
+ // Revised default: drop the "transient" framing — unreachable can
160
+ // equally be DNS misconfig, an auth gateway rejecting the request at
161
+ // the network layer, expired credentials, or a misrouted scope. The
162
+ // common thread is "alternative packages will not help; surface this
163
+ // up the stack."
164
+ return {
165
+ variant: "default",
166
+ 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.`,
167
+ };
168
+ }
169
+ case "registry_auth_failed":
170
+ return {
171
+ variant: "default",
172
+ 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.`,
173
+ };
174
+ case "tls_failed":
175
+ return {
176
+ variant: "default",
177
+ 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.`,
178
+ };
179
+ }
180
+ }
16
181
  function detectVersionChanges(packages, currentPackageJson) {
17
182
  if (!currentPackageJson)
18
183
  return [];
@@ -100,11 +265,63 @@ export const buildInstallPackagesToolFactory = createToolFactory("build_installP
100
265
  }
101
266
  }
102
267
  catch (error) {
268
+ // Surface registry-blocked failures as a structured tool result so
269
+ // the agent can reason about the reason (404 vs auth vs network)
270
+ // on the same conversation turn, instead of letting the error
271
+ // bubble up to agent-planning's POST_PROCESSING_ERRORED branch
272
+ // (which only emits a raw stderr `debug()` message).
273
+ if (error instanceof NpmInstallBlocked) {
274
+ // `warn` (not `info`) because operators want this to surface in
275
+ // standard `level>=warn` alert queries: a blocked install is a
276
+ // handled, recoverable condition (the agent gets structured
277
+ // guidance) but operationally important to track. `error` would
278
+ // overstate severity since the agent loop is not crashing, and
279
+ // would force the strict `ErrorMeta` shape that drops the
280
+ // structured `toJSON()` payload operators actually want to
281
+ // facet on. Per APPS-4179 AC this is the single log line for
282
+ // the structured error.
283
+ //
284
+ // `messageVariant` joins the toJSON projection so a downstream
285
+ // Datadog/Loki facet can distinguish the row-aware branches
286
+ // (`private_mirror_hint`, `unreachable_escalation`) from the
287
+ // default advice without re-deriving the matrix from the raw
288
+ // inputs. AppShell.classifyNpmExecError emits the same data
289
+ // points as llmobs span tags; the warn log is the structured
290
+ // counterpart that survives outside of trace sampling.
291
+ const { message, variant } = buildBlockedMessage(error);
292
+ getLogger().warn("Install blocked by registry condition", {
293
+ ...error.toJSON(),
294
+ messageVariant: variant,
295
+ });
296
+ return {
297
+ ok: false,
298
+ error: error.toJSON(),
299
+ message,
300
+ };
301
+ }
103
302
  getLogger().error("Error installing packages", getErrorMeta(error));
104
303
  throw error;
105
304
  }
106
305
  },
107
306
  getSummary: (input, output) => {
307
+ // Blocked-install result is the failure path: surface the reason
308
+ // instead of pretending the install succeeded.
309
+ if (output && "ok" in output && output.ok === false) {
310
+ const blockedOutput = `Blocked: ${output.error.reason}`;
311
+ // Mirror the success branch: omit the `input` field on the no-args
312
+ // install path (runPackageManagerInstall) so the summary doesn't
313
+ // render `"0 packages: "` with a dangling colon.
314
+ if (input.packages && input.packages.length > 0) {
315
+ const names = input.packages.map((p) => p.name).join(", ");
316
+ return {
317
+ input: `${input.packages.length} package${input.packages.length === 1 ? "" : "s"}: ${names}`,
318
+ output: blockedOutput,
319
+ };
320
+ }
321
+ return {
322
+ output: blockedOutput,
323
+ };
324
+ }
108
325
  if (input.packages && input.packages.length > 0) {
109
326
  const names = input.packages.map((p) => p.name).join(", ");
110
327
  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":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGlE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAcrE,KAAK,UAAU,eAAe,CAC5B,cAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,QAAkE,EAClE,kBAAsC;IAEtC,IAAI,CAAC,kBAAkB;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC;QAC/B,MAAM,cAAc,GAAG,KAAK;YAC1B,CAAC,CAAC,kBAAkB,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;YAChD,CAAC,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,cAAc,IAAI,GAAG,CAAC,OAAO,IAAI,cAAc,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,UAAU,EAAE,cAAc;gBAC1B,UAAU,EAAE,GAAG,CAAC,OAAO;gBACvB,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAG,iBAAiB,CAC9D,uBAAuB,EACvB,CAAC,EACC,KAAK,EACL,QAAQ,GAIT,EAAE,EAAE;IACH,OAAO;QACL,QAAQ,EAAE,YAAY,CAAC,OAAO;QAC9B,WAAW,EAAE;;;;;;;;;KASd;QACC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC;iBACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,IAAI,EAAE,CAAC;qBACJ,MAAM,EAAE;qBACR,QAAQ,CACP,uDAAuD,CACxD;gBACH,OAAO,EAAE,CAAC;qBACP,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CACP,gGAAgG,CACjG;gBACH,GAAG,EAAE,CAAC;qBACH,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CACP,2DAA2D,CAC5D;aACJ,CAAC,CACH;iBACA,QAAQ,EAAE;iBACV,QAAQ,CACP,iHAAiH,CAClH;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC9B,IAAI,CAAC;gBACH,uCAAuC;gBACvC,MAAM,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;gBACpE,IAAI,MAAc,CAAC;gBACnB,IAAI,cAAc,GAAwB,EAAE,CAAC;gBAE7C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpC,MAAM,kBAAkB,GAAG,MAAM,eAAe,CAC9C,QAAQ,CAAC,QAAQ,CAAC,cAAc,CACjC,CAAC;oBACF,cAAc,GAAG,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;oBAEpE,oCAAoC;oBACpC,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CACtD,QAAQ,EACR,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CACtC,CAAC;oBAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChE,IAAI,OAAO,GAAG,oCAAoC,YAAY,EAAE,CAAC;oBAEjE,wCAAwC;oBACxC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,MAAM,aAAa,GAAG,cAAc;6BACjC,GAAG,CACF,CAAC,MAAM,EAAE,EAAE,CACT,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACnG;6BACA,IAAI,CAAC,IAAI,CAAC,CAAC;wBACd,OAAO,IAAI,kCAAkC,aAAa,wIAAwI,CAAC;oBACrM,CAAC;oBAED,OAAO;wBACL,MAAM;wBACN,OAAO;wBACP,cAAc;qBACf,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,oCAAoC;oBACpC,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CACvD,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CACtC,CAAC;oBACF,OAAO;wBACL,MAAM;wBACN,OAAO,EAAE,kDAAkD;qBAC5D,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,EAAE,CAAC,KAAK,CAAC,2BAA2B,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpE,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC5B,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3D,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,MAAM;oBAClD,CAAC,CAAC,KAAK,MAAM,CAAC,cAAc,CAAC,MAAM,kBAAkB,MAAM,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;oBACrG,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO;oBACL,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,WAAW,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE;oBAC5F,MAAM,EAAE,YAAY,cAAc,EAAE;iBACrC,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,sBAAsB;aAC/B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CACF,CAAC"}
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";