@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
@@ -0,0 +1,36 @@
1
+ import { getLogger } from "../../../util/logger.js";
2
+ import { RpcTimeoutError } from "../../util/rpc-timeout.js";
3
+ import { isTransportCloseError } from "./stable-peer.js";
4
+ export async function fetchWithReconnectRetry(peer, fetcher, options) {
5
+ const generation = peer?.connectionGeneration;
6
+ try {
7
+ return await fetcher();
8
+ }
9
+ catch (err) {
10
+ const shouldRetry = err instanceof RpcTimeoutError || isTransportCloseError(err);
11
+ if (!shouldRetry || !peer)
12
+ throw err;
13
+ // If a newer generation already arrived while the original request was
14
+ // in-flight, invalidation becomes a no-op and the retry uses that fresh
15
+ // peer immediately instead of closing it.
16
+ const timedOutGeneration = generation ?? peer.connectionGeneration;
17
+ const operationName = err instanceof RpcTimeoutError ? err.operationName : "browser RPC";
18
+ const errorDescription = err instanceof RpcTimeoutError
19
+ ? `${err.operationName} timed out after ${err.timeoutMs}ms`
20
+ : "browser RPC dropped by transport close";
21
+ getLogger().warn(`[fetch-with-reconnect-retry] ${errorDescription}; waiting up to ${options.reconnectBudgetMs}ms for peer reconnect before retrying`);
22
+ peer.invalidateConnection(timedOutGeneration);
23
+ const reconnected = await peer.whenConnectedAfter(timedOutGeneration, options.reconnectBudgetMs);
24
+ if (!reconnected) {
25
+ getLogger().warn(`[fetch-with-reconnect-retry] peer did not reconnect within ${options.reconnectBudgetMs}ms; rethrowing original error for ${operationName}`);
26
+ throw err;
27
+ }
28
+ getLogger().info(`[fetch-with-reconnect-retry] peer reconnected; retrying ${operationName}`);
29
+ // If the original call had been queued while disconnected (rather than
30
+ // failing in-flight), that queued call also flushes on reconnect, so the
31
+ // browser may receive this operation twice. Callers must keep the fetcher
32
+ // idempotent; `fetchIntegrations` upserts, so a duplicate is harmless.
33
+ return await fetcher();
34
+ }
35
+ }
36
+ //# sourceMappingURL=fetch-with-reconnect-retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-with-reconnect-retry.js","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/fetch-with-reconnect-retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAOzD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAmC,EACnC,OAAyB,EACzB,OAAuC;IAEvC,MAAM,UAAU,GAAG,IAAI,EAAE,oBAAoB,CAAC;IAC9C,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,WAAW,GACf,GAAG,YAAY,eAAe,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI;YAAE,MAAM,GAAG,CAAC;QACrC,uEAAuE;QACvE,wEAAwE;QACxE,0CAA0C;QAC1C,MAAM,kBAAkB,GAAG,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC;QACnE,MAAM,aAAa,GACjB,GAAG,YAAY,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;QACrE,MAAM,gBAAgB,GACpB,GAAG,YAAY,eAAe;YAC5B,CAAC,CAAC,GAAG,GAAG,CAAC,aAAa,oBAAoB,GAAG,CAAC,SAAS,IAAI;YAC3D,CAAC,CAAC,wCAAwC,CAAC;QAE/C,SAAS,EAAE,CAAC,IAAI,CACd,gCAAgC,gBAAgB,mBAAmB,OAAO,CAAC,iBAAiB,uCAAuC,CACpI,CAAC;QAEF,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC/C,kBAAkB,EAClB,OAAO,CAAC,iBAAiB,CAC1B,CAAC;QACF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC,IAAI,CACd,8DAA8D,OAAO,CAAC,iBAAiB,qCAAqC,aAAa,EAAE,CAC5I,CAAC;YACF,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,SAAS,EAAE,CAAC,IAAI,CACd,2DAA2D,aAAa,EAAE,CAC3E,CAAC;QACF,uEAAuE;QACvE,yEAAyE;QACzE,0EAA0E;QAC1E,uEAAuE;QACvE,OAAO,MAAM,OAAO,EAAE,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -1,4 +1,11 @@
1
1
  import type { EditorClient } from "../../types.js";
2
+ /**
3
+ * Detects the transport-close rejection shape used by `ISocket` when a
4
+ * pending request is rejected because the WebSocket closed mid-flight. Both
5
+ * the plain-object rejection (`{code: 8}`) and the `SocketErrorException`
6
+ * (`code: 10`) paths surface the same message substring.
7
+ */
8
+ export declare function isTransportCloseError(err: unknown): boolean;
2
9
  export interface StablePeerOptions {
3
10
  maxQueueSize?: number;
4
11
  }
@@ -8,6 +15,12 @@ export type StablePeerBinding = {
8
15
  } | {
9
16
  peer: undefined;
10
17
  };
18
+ export interface ReconnectablePeer {
19
+ readonly connectionGeneration: number;
20
+ invalidateConnection(generation: number): void;
21
+ whenConnected(timeoutMs: number): Promise<boolean>;
22
+ whenConnectedAfter(generation: number, timeoutMs: number): Promise<boolean>;
23
+ }
11
24
  /**
12
25
  * Identity-stable wrapper around the editor `EditorClient`.
13
26
  *
@@ -20,20 +33,36 @@ export type StablePeerBinding = {
20
33
  * Calls made while disconnected are queued and replayed in order when the
21
34
  * next peer is bound, up to `maxQueueSize`. The queue lives in process
22
35
  * memory; durability across server restarts is a separate concern.
36
+ *
37
+ * In-flight calls that the transport drops are still rejected to the caller;
38
+ * retry decisions live with the operation that owns the timeout/retry budget.
23
39
  */
24
- export declare class StablePeer implements EditorClient {
40
+ export declare class StablePeer implements EditorClient, ReconnectablePeer {
25
41
  private inner;
26
42
  private _peerId;
27
43
  private queue;
28
44
  private readonly maxQueueSize;
45
+ private connectWaiters;
46
+ private _connectionGeneration;
29
47
  readonly call: EditorClient["call"];
30
48
  constructor(options?: StablePeerOptions);
31
49
  get peerId(): string | undefined;
50
+ get connectionGeneration(): number;
32
51
  /**
33
52
  * Bind or clear the backing peer and its identity token atomically.
34
53
  * Binding flushes any queued calls in order to the new peer.
35
54
  */
36
55
  setInner(binding: StablePeerBinding): void;
56
+ /**
57
+ * Invalidate only the currently-bound generation. Closing the matching stale
58
+ * transport can reject other in-flight RPCs on that generation; callers opt
59
+ * into this when they own the retry budget for a failed operation.
60
+ */
61
+ invalidateConnection(generation: number): void;
62
+ whenConnected(timeoutMs: number): Promise<boolean>;
63
+ whenConnectedAfter(generation: number, timeoutMs: number): Promise<boolean>;
64
+ private resolveConnectWaiter;
65
+ private notifyConnectWaiters;
37
66
  close(): void;
38
67
  /** Not used in practice; throws if exercised so new callers are caught in review. */
39
68
  requestWithTracing<_Params, _Result>(): Promise<never>;
@@ -1 +1 @@
1
- {"version":3,"file":"stable-peer.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/stable-peer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA0BnD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAW,YAAW,YAAY;IAC7C,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,SAAgB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;gBAE/B,OAAO,GAAE,iBAAsB;IAK3C,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAW1C,KAAK,IAAI,IAAI;IAIb,qFAAqF;IAC/E,kBAAkB,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC;IAM5D;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,KAAK;CAoBd"}
1
+ {"version":3,"file":"stable-peer.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/stable-peer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAO3D;AASD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7E;AAQD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,UAAW,YAAW,YAAY,EAAE,iBAAiB;IAChE,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,qBAAqB,CAAK;IAElC,SAAgB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;gBAE/B,OAAO,GAAE,iBAAsB;IAK3C,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAa1C;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ9C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlD,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4B3E,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,oBAAoB;IAO5B,KAAK,IAAI,IAAI;IAiBb,qFAAqF;IAC/E,kBAAkB,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC;IAM5D;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,KAAK;CAoBd"}
@@ -6,7 +6,7 @@ const DEFAULT_MAX_QUEUE_SIZE = 10_000;
6
6
  * the plain-object rejection (`{code: 8}`) and the `SocketErrorException`
7
7
  * (`code: 10`) paths surface the same message substring.
8
8
  */
9
- function isTransportCloseError(err) {
9
+ export function isTransportCloseError(err) {
10
10
  if (!err || typeof err !== "object" || !("message" in err))
11
11
  return false;
12
12
  const message = err.message;
@@ -25,12 +25,17 @@ function isTransportCloseError(err) {
25
25
  * Calls made while disconnected are queued and replayed in order when the
26
26
  * next peer is bound, up to `maxQueueSize`. The queue lives in process
27
27
  * memory; durability across server restarts is a separate concern.
28
+ *
29
+ * In-flight calls that the transport drops are still rejected to the caller;
30
+ * retry decisions live with the operation that owns the timeout/retry budget.
28
31
  */
29
32
  export class StablePeer {
30
33
  inner;
31
34
  _peerId;
32
35
  queue = [];
33
36
  maxQueueSize;
37
+ connectWaiters = new Set();
38
+ _connectionGeneration = 0;
34
39
  call;
35
40
  constructor(options = {}) {
36
41
  this.maxQueueSize = options.maxQueueSize ?? DEFAULT_MAX_QUEUE_SIZE;
@@ -39,6 +44,9 @@ export class StablePeer {
39
44
  get peerId() {
40
45
  return this._peerId;
41
46
  }
47
+ get connectionGeneration() {
48
+ return this._connectionGeneration;
49
+ }
42
50
  /**
43
51
  * Bind or clear the backing peer and its identity token atomically.
44
52
  * Binding flushes any queued calls in order to the new peer.
@@ -47,15 +55,89 @@ export class StablePeer {
47
55
  if (binding.peer) {
48
56
  this.inner = binding.peer;
49
57
  this._peerId = binding.peerId;
58
+ this._connectionGeneration += 1;
50
59
  this.flush(binding.peer);
60
+ this.notifyConnectWaiters();
51
61
  }
52
62
  else {
53
63
  this.inner = undefined;
54
64
  this._peerId = undefined;
55
65
  }
56
66
  }
67
+ /**
68
+ * Invalidate only the currently-bound generation. Closing the matching stale
69
+ * transport can reject other in-flight RPCs on that generation; callers opt
70
+ * into this when they own the retry budget for a failed operation.
71
+ */
72
+ invalidateConnection(generation) {
73
+ if (!this.inner || this._connectionGeneration !== generation)
74
+ return;
75
+ const staleInner = this.inner;
76
+ this.inner = undefined;
77
+ this._peerId = undefined;
78
+ staleInner.close();
79
+ }
80
+ whenConnected(timeoutMs) {
81
+ if (this.inner)
82
+ return Promise.resolve(true);
83
+ return this.whenConnectedAfter(this._connectionGeneration, timeoutMs);
84
+ }
85
+ whenConnectedAfter(generation, timeoutMs) {
86
+ if (this.inner && this._connectionGeneration > generation) {
87
+ return Promise.resolve(true);
88
+ }
89
+ return new Promise((resolve) => {
90
+ let settled = false;
91
+ const waiter = {
92
+ afterGeneration: generation,
93
+ resolve: (connected) => {
94
+ if (settled)
95
+ return;
96
+ settled = true;
97
+ clearTimeout(waiter.timer);
98
+ resolve(connected);
99
+ },
100
+ timer: setTimeout(() => {
101
+ if (settled)
102
+ return;
103
+ settled = true;
104
+ this.connectWaiters.delete(waiter);
105
+ resolve(false);
106
+ }, timeoutMs),
107
+ };
108
+ this.connectWaiters.add(waiter);
109
+ this.resolveConnectWaiter(waiter);
110
+ });
111
+ }
112
+ resolveConnectWaiter(waiter) {
113
+ if (this.inner && this._connectionGeneration > waiter.afterGeneration) {
114
+ this.connectWaiters.delete(waiter);
115
+ waiter.resolve(true);
116
+ }
117
+ }
118
+ notifyConnectWaiters() {
119
+ if (this.connectWaiters.size === 0)
120
+ return;
121
+ for (const waiter of Array.from(this.connectWaiters)) {
122
+ this.resolveConnectWaiter(waiter);
123
+ }
124
+ }
57
125
  close() {
58
126
  this.inner?.close();
127
+ for (const waiter of Array.from(this.connectWaiters)) {
128
+ this.connectWaiters.delete(waiter);
129
+ waiter.resolve(false);
130
+ }
131
+ // Calls enqueued while disconnected are otherwise only settled by `flush`
132
+ // on the next `setInner`; if we close before reconnecting, reject them so
133
+ // awaiting callers fail fast instead of hanging on a promise forever.
134
+ if (this.queue.length === 0)
135
+ return;
136
+ const pending = this.queue;
137
+ this.queue = [];
138
+ for (const item of pending) {
139
+ item.reject(new Error(`peer_closed: ${item.path.join(".")}`));
140
+ }
59
141
  }
60
142
  /** Not used in practice; throws if exercised so new callers are caught in review. */
61
143
  async requestWithTracing() {
@@ -97,7 +179,8 @@ export class StablePeer {
97
179
  return this.invokeOnInner(inner, path, args).catch((err) => {
98
180
  // Observability: in-flight calls on a live inner can still be rejected
99
181
  // if the transport closes between send and ack. StablePeer does not
100
- // retry these today; log so production rates are visible in traces.
182
+ // retry these directly; operation-level helpers decide whether a retry
183
+ // is safe for their own idempotency and timeout budgets.
101
184
  if (isTransportCloseError(err)) {
102
185
  getLogger().warn(`[stable-peer] in-flight call to ${path.join(".")} dropped by transport close (not retried)`);
103
186
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stable-peer.js","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/stable-peer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stable-peer.js","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/stable-peer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type ClarkUserPreferences } from "@superblocksteam/library-shared/types";
2
+ /**
3
+ * Merge partial {@link ClarkUserPreferences} from a user prompt with
4
+ * product defaults so callers can treat every field as required without
5
+ * scattering `?? defaultX` checks throughout the FSM.
6
+ */
7
+ export declare const resolveUserPreferences: (prefs: Partial<ClarkUserPreferences> | undefined) => ClarkUserPreferences;
8
+ //# sourceMappingURL=user-preferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-preferences.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/user-preferences.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,uCAAuC,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,OAAO,CAAC,oBAAoB,CAAC,GAAG,SAAS,KAC/C,oBAGD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { CLARK_USER_PREFERENCES_DEFAULTS, } from "@superblocksteam/library-shared/types";
2
+ /**
3
+ * Merge partial {@link ClarkUserPreferences} from a user prompt with
4
+ * product defaults so callers can treat every field as required without
5
+ * scattering `?? defaultX` checks throughout the FSM.
6
+ */
7
+ export const resolveUserPreferences = (prefs) => ({
8
+ ...CLARK_USER_PREFERENCES_DEFAULTS,
9
+ ...(prefs ?? {}),
10
+ });
11
+ //# sourceMappingURL=user-preferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-preferences.js","sourceRoot":"","sources":["../../../../src/ai-service/state-machine/helpers/user-preferences.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,GAEhC,MAAM,uCAAuC,CAAC;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAAgD,EAC1B,EAAE,CAAC,CAAC;IAC1B,GAAG,+BAA+B;IAClC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;CACjB,CAAC,CAAC"}
@@ -1,10 +1,12 @@
1
1
  import { templates } from "@superblocksteam/ai-service-templates/templates";
2
+ import { type NpmRegistryClient, type NpmRegistryFetchResult } from "./app-interface/npm-registry.js";
2
3
  type TemplateName = keyof typeof templates;
3
4
  export declare class TemplateRenderer {
4
5
  workDir: string;
5
6
  nodeModuleDirs: Record<TemplateName, Promise<string | null>>;
6
7
  private readonly detectionCwd;
7
- constructor({ prefetchNodeModules, workDirSeed, detectionCwd, }: {
8
+ private readonly npmRegistryClient;
9
+ constructor({ prefetchNodeModules, workDirSeed, detectionCwd, npmRegistryClient, }: {
8
10
  prefetchNodeModules?: boolean;
9
11
  workDirSeed?: string;
10
12
  /**
@@ -16,6 +18,14 @@ export declare class TemplateRenderer {
16
18
  * lockfile can pick the wrong agent). See PR #19282 (F3).
17
19
  */
18
20
  detectionCwd?: string;
21
+ /**
22
+ * Optional npm registry client. The AiService always constructs one in
23
+ * production (SaaS, local dev, ephemeral pods); the LD flag inside the
24
+ * client decides whether to short-circuit before a server call.
25
+ * `undefined` here is the test-only opt-out — the install runs against
26
+ * npm's default resolution.
27
+ */
28
+ npmRegistryClient?: NpmRegistryClient;
19
29
  });
20
30
  getInstallationTasks(): Promise<void>;
21
31
  renderTemplate(templateName: TemplateName): Promise<string>;
@@ -23,6 +33,13 @@ export declare class TemplateRenderer {
23
33
  }
24
34
  export declare function installTemplateModules(dir: string, options?: {
25
35
  detectionCwd?: string;
36
+ /**
37
+ * Result of the immediately-preceding `maybeWriteNpmrcForDir` for the
38
+ * template dir. Used solely to attach `registry_host` to the
39
+ * `superblocks.npm.install.*` metric emit (APPS-4189 / P6.2). Passed
40
+ * through unchanged — no side-effects on the install itself.
41
+ */
42
+ registryFetchResult?: NpmRegistryFetchResult;
26
43
  }): Promise<string>;
27
44
  export {};
28
45
  //# sourceMappingURL=template-renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-renderer.d.ts","sourceRoot":"","sources":["../../src/ai-service/template-renderer.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAU5E,KAAK,YAAY,GAAG,MAAM,OAAO,SAAS,CAAC;AAI3C,qBAAa,gBAAgB;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;gBAEtC,EACV,mBAA2B,EAC3B,WAAW,EACX,YAAY,GACb,EAAE;QACD,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB;;;;;;;WAOG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;IA6BK,oBAAoB;IAKpB,cAAc,CAAC,YAAY,EAAE,YAAY;IAkC/C,OAAO,CAAC,kBAAkB;CA2D3B;AA4BD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC,OAAO,CAAC,MAAM,CAAC,CAsFjB"}
1
+ {"version":3,"file":"template-renderer.d.ts","sourceRoot":"","sources":["../../src/ai-service/template-renderer.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAK5E,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAE5B,MAAM,iCAAiC,CAAC;AAGzC,KAAK,YAAY,GAAG,MAAM,OAAO,SAAS,CAAC;AAa3C,qBAAa,gBAAgB;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;gBAEtD,EACV,mBAA2B,EAC3B,WAAW,EACX,YAAY,EACZ,iBAAiB,GAClB,EAAE;QACD,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB;;;;;;;WAOG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB;;;;;;WAMG;QACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;KACvC;IA8BK,oBAAoB;IAKpB,cAAc,CAAC,YAAY,EAAE,YAAY;IAkC/C,OAAO,CAAC,kBAAkB;CA8D3B;AAwDD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,sBAAsB,CAAC;CAC9C,GACA,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
@@ -41,11 +41,21 @@ import { resolveCommand } from "package-manager-detector";
41
41
  import { detect, getUserAgent } from "package-manager-detector/detect";
42
42
  import { reifyTemplate, } from "@superblocksteam/ai-service-templates/reify-template";
43
43
  import { templates } from "@superblocksteam/ai-service-templates/templates";
44
+ import { recordNpmInstall } from "@superblocksteam/telemetry";
44
45
  import { generatePredictableId } from "../ids.js";
45
46
  import { getErrorMeta, getLogger } from "../util/logger.js";
46
47
  import { maybeWriteNpmrcForDir, PRESERVE_NPMRC_SCOPES, } from "./app-interface/npm-registry.js";
47
48
  import llmobs from "./llmobs/index.js";
48
49
  const SHARED_DIR = "__shared__";
50
+ const TEMPLATE_INSTALL_FILES = [
51
+ "package.json",
52
+ "pnpm-workspace.yaml",
53
+ "pnpm-lock.yaml",
54
+ "package-lock.json",
55
+ "yarn.lock",
56
+ "bun.lock",
57
+ "bun.lockb",
58
+ ];
49
59
  let TemplateRenderer = (() => {
50
60
  let _instanceExtraInitializers = [];
51
61
  let _renderTemplate_decorators;
@@ -59,13 +69,15 @@ let TemplateRenderer = (() => {
59
69
  workDir = __runInitializers(this, _instanceExtraInitializers);
60
70
  nodeModuleDirs;
61
71
  detectionCwd;
62
- constructor({ prefetchNodeModules = false, workDirSeed, detectionCwd, }) {
72
+ npmRegistryClient;
73
+ constructor({ prefetchNodeModules = false, workDirSeed, detectionCwd, npmRegistryClient, }) {
63
74
  // Use a stable work dir derived from a caller-provided seed (typically app root).
64
75
  // This keeps template cache location deterministic for a given app context.
65
76
  const stableSeed = workDirSeed ?? process.cwd();
66
77
  const stableId = generatePredictableId(stableSeed);
67
78
  this.workDir = path.join(os.tmpdir(), `superblocks-ai-service-${stableId}`);
68
79
  this.detectionCwd = detectionCwd;
80
+ this.npmRegistryClient = npmRegistryClient;
69
81
  this.nodeModuleDirs = {};
70
82
  if (prefetchNodeModules) {
71
83
  for (const [templateName, template] of Object.entries(templates)) {
@@ -131,22 +143,21 @@ let TemplateRenderer = (() => {
131
143
  // same broken `pnpm install --ignore-scripts` against the same dir
132
144
  // immediately would just hide the underlying problem (registry down,
133
145
  // disk full, pm not on PATH) behind retry noise.
134
- const packageJson = template["package.json"];
135
146
  const dir = path.join(this.workDir, templateName, SHARED_DIR);
136
147
  const installDfd = (async () => {
137
148
  await fs.mkdir(dir, { recursive: true });
138
- await fs.writeFile(path.join(dir, "package.json"), packageJson, "utf-8");
149
+ await writeTemplateInstallFiles(dir, template);
139
150
  // Write the configured private-registry .npmrc into the shared template
140
- // dir before running the install. No-op when SUPERBLOCKS_NPM_REGISTRY is
141
- // unset (preserves SaaS / local-dev behavior). The template dir has no
142
- // lockfile yet on first install, so `prepareForPrivateRegistry`'s strip
143
- // step would also be a no-op we use the .npmrc-only helper here to
144
- // make that intent explicit.
145
- await maybeWriteNpmrcForDir(dir, {
146
- preserveScopeLines: PRESERVE_NPMRC_SCOPES,
147
- });
151
+ // dir before running the install. No-op when the LD flag is off inside
152
+ // the client (which is the default for SaaS / local dev today) or
153
+ // when the org has no registry rows. The template dir has no lockfile
154
+ // yet on first install, so `prepareForPrivateRegistry`'s strip step
155
+ // would also be a no-op — we use the .npmrc-only helper here to make
156
+ // that intent explicit.
157
+ const registryFetchResult = await maybeWriteNpmrcForDir(dir, { preserveScopeLines: PRESERVE_NPMRC_SCOPES }, this.npmRegistryClient);
148
158
  return installTemplateModules(dir, {
149
159
  detectionCwd: this.detectionCwd,
160
+ registryFetchResult,
150
161
  });
151
162
  })();
152
163
  this.nodeModuleDirs[templateName] = installDfd;
@@ -155,6 +166,14 @@ let TemplateRenderer = (() => {
155
166
  };
156
167
  })();
157
168
  export { TemplateRenderer };
169
+ async function writeTemplateInstallFiles(dir, template) {
170
+ await Promise.all(TEMPLATE_INSTALL_FILES.flatMap((fileName) => {
171
+ const content = template[fileName];
172
+ return content === undefined
173
+ ? []
174
+ : [fs.writeFile(path.join(dir, fileName), content, "utf-8")];
175
+ }));
176
+ }
158
177
  // Env-var escape hatch for environments where automatic detection picks the
159
178
  // wrong agent (e.g. CI matrix shards with stray ancestor lockfiles, or users
160
179
  // who explicitly want to force `npm`). Highest precedence — overrides both
@@ -180,7 +199,43 @@ const PM_OVERRIDE_ENV = "SUPERBLOCKS_TEMPLATE_PM";
180
199
  // when neither pnpm nor any other surrounding package manager is in
181
200
  // sight, in which case there are no `catalog:` / `workspace:` env vars
182
201
  // to leak into the spawned npm process either. See PR #19282 (F1).
202
+ /**
203
+ * Pick the registry URL the template install will target from the most
204
+ * recent `maybeWriteNpmrcForDir` result. Mirrors the helper in
205
+ * `app-interface/shell.ts` so the metric stream reports the prefetch
206
+ * registry with the same semantics as the AppShell install paths.
207
+ */
208
+ function templateRegistryUrlFromFetchResult(result) {
209
+ if (!result)
210
+ return undefined;
211
+ if (!result.config.configured)
212
+ return undefined;
213
+ return result.config.default?.url;
214
+ }
183
215
  export async function installTemplateModules(dir, options) {
216
+ const installStart = Date.now();
217
+ let outcome = "success";
218
+ try {
219
+ return await installTemplateModulesImpl(dir, options);
220
+ }
221
+ catch (err) {
222
+ // Template prefetch never throws `NpmInstallBlocked` — it spawns the
223
+ // package manager directly with a generic exit-code error. Any failure
224
+ // here is therefore `other` on the metric outcome enum; granularity
225
+ // beyond that lives on the existing rejection message.
226
+ outcome = "other";
227
+ throw err;
228
+ }
229
+ finally {
230
+ recordNpmInstall({
231
+ runner: "prefetch",
232
+ registryHost: templateRegistryUrlFromFetchResult(options?.registryFetchResult),
233
+ outcome,
234
+ durationMs: Date.now() - installStart,
235
+ });
236
+ }
237
+ }
238
+ async function installTemplateModulesImpl(dir, options) {
184
239
  const detectionCwd = options?.detectionCwd ?? process.cwd();
185
240
  const override = process.env[PM_OVERRIDE_ENV]?.trim();
186
241
  // Cast: the env var is unvalidated user input. resolveCommand() will
@@ -218,7 +273,13 @@ export async function installTemplateModules(dir, options) {
218
273
  }
219
274
  const { command, args } = installCommand;
220
275
  return new Promise((resolve, reject) => {
221
- const child = spawn(command, args, { cwd: dir, shell: true });
276
+ // No `shell: true`: Node 22 deprecated passing an args array together with
277
+ // `shell: true` because the args are concatenated, not escaped. Spawning
278
+ // the package-manager binary directly with an args array sidesteps both
279
+ // the warning and the underlying shell-injection foot-gun. The CLI's
280
+ // other subprocess call sites (e.g. sync.mts `execFileAsync("git", [...])`)
281
+ // follow the same shell-less pattern.
282
+ const child = spawn(command, args, { cwd: dir });
222
283
  let stdout = "";
223
284
  let stderr = "";
224
285
  child.stdout?.on("data", (chunk) => {
@@ -1 +1 @@
1
- {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/ai-service/template-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/ai-service/template-renderer.ts"],"names":[],"mappings":"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"}