@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
@@ -51,7 +51,7 @@
51
51
  "react-day-picker": "^9.9.0",
52
52
  "react-dom": "18.2.0",
53
53
  "react-dropzone": "^14.3.8",
54
- "react-router": "^7.9.3",
54
+ "react-router": "^7.12.0",
55
55
  "react-syntax-highlighter": "^16.1.0",
56
56
  "recharts": "3.3.0",
57
57
  "sonner": "^2.0.7",
@@ -71,7 +71,7 @@
71
71
  "eslint-plugin-react-hooks": "^7.0.1",
72
72
  "eslint-plugin-react-refresh": "^0.5.0",
73
73
  "globals": "^17.3.0",
74
- "postcss": "^8.5.6",
74
+ "postcss": "^8.5.10",
75
75
  "tailwindcss": "^4.1.12",
76
76
  "tsx": "^4.0.0",
77
77
  "tw-animate-css": "^1.3.7",
@@ -0,0 +1,24 @@
1
+ import type { ReportReviewRunInput } from "./ai-service/agent/tools/report-security-findings.js";
2
+ export type PolicyGateMode = "advisory" | "blocking";
3
+ /** Matches POST /api/v1/policy-gates/review-runs/state finding objects (server writer). */
4
+ export interface PolicyGateCallbackFinding {
5
+ blocking: boolean;
6
+ category: "external_policy" | "misconfiguration" | "security_agent" | "secret" | "sensitive_data" | "vulnerability";
7
+ clarkRemediable: boolean;
8
+ confidence?: "high" | "low" | "medium" | null;
9
+ evidenceJson?: Record<string, unknown>;
10
+ fingerprint: string;
11
+ humanSummary?: string | null;
12
+ locationsJson?: unknown[];
13
+ remediationHintJson?: Record<string, unknown>;
14
+ severity: "critical" | "high" | "info" | "low" | "medium";
15
+ sourcePhase?: "edit_mode_app" | null;
16
+ sourceTool: string;
17
+ technicalSummary?: string | null;
18
+ title: string;
19
+ }
20
+ type AgentFinding = ReportReviewRunInput["findings"][number];
21
+ export declare function mapFindingCategory(agentCategory: AgentFinding["category"] | string): PolicyGateCallbackFinding["category"];
22
+ export declare function mapAgentFindingsToPolicyGateCallback(findings: AgentFinding[], aiAgentRunId: string, policyMode: PolicyGateMode): PolicyGateCallbackFinding[];
23
+ export {};
24
+ //# sourceMappingURL=policy-gate-callback-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-gate-callback-mapper.d.ts","sourceRoot":"","sources":["../src/policy-gate-callback-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAEjG,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,CAAC;AAErD,2FAA2F;AAC3F,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EACJ,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,QAAQ,GACR,gBAAgB,GAChB,eAAe,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1D,WAAW,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,KAAK,YAAY,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,MAAM,GAC/C,yBAAyB,CAAC,UAAU,CAAC,CAiBvC;AAMD,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,YAAY,EAAE,EACxB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,cAAc,GACzB,yBAAyB,EAAE,CAsC7B"}
@@ -0,0 +1,61 @@
1
+ export function mapFindingCategory(agentCategory) {
2
+ switch (agentCategory) {
3
+ case "secret":
4
+ return "secret";
5
+ case "injection":
6
+ case "xss":
7
+ return "vulnerability";
8
+ case "data_exposure":
9
+ return "sensitive_data";
10
+ case "config":
11
+ case "crypto":
12
+ return "misconfiguration";
13
+ case "auth":
14
+ case "other":
15
+ default:
16
+ return "security_agent";
17
+ }
18
+ }
19
+ // Policy mode is authoritative for the gate decision. The admin's intent
20
+ // (blocking vs advisory) outranks the LLM's severity rating, which reflects
21
+ // exploitability and isn't always aligned with the admin's policy concern
22
+ // (e.g. a styling rule like "no green buttons" is medium severity, but a
23
+ // blocking-mode policy should still block the deploy).
24
+ export function mapAgentFindingsToPolicyGateCallback(findings, aiAgentRunId, policyMode) {
25
+ return findings.map((finding) => {
26
+ const blocking = policyMode === "blocking";
27
+ const location = {
28
+ filePath: finding.location.file,
29
+ };
30
+ if (finding.location.component) {
31
+ location.component = finding.location.component;
32
+ }
33
+ if (finding.location.line !== undefined) {
34
+ location.line = finding.location.line;
35
+ }
36
+ const callbackFinding = {
37
+ blocking,
38
+ category: mapFindingCategory(finding.category),
39
+ clarkRemediable: finding.clarkRemediable,
40
+ confidence: finding.confidence,
41
+ evidenceJson: {
42
+ evidence: finding.evidence,
43
+ },
44
+ fingerprint: `${aiAgentRunId}-${finding.id}`,
45
+ humanSummary: finding.description,
46
+ locationsJson: [location],
47
+ severity: finding.severity,
48
+ sourcePhase: "edit_mode_app",
49
+ sourceTool: "dev-server-security-agent",
50
+ technicalSummary: finding.description,
51
+ title: finding.title,
52
+ };
53
+ if (finding.suggestedFix) {
54
+ callbackFinding.remediationHintJson = {
55
+ suggestedFix: finding.suggestedFix,
56
+ };
57
+ }
58
+ return callbackFinding;
59
+ });
60
+ }
61
+ //# sourceMappingURL=policy-gate-callback-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-gate-callback-mapper.js","sourceRoot":"","sources":["../src/policy-gate-callback-mapper.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,kBAAkB,CAChC,aAAgD;IAEhD,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW,CAAC;QACjB,KAAK,KAAK;YACR,OAAO,eAAe,CAAC;QACzB,KAAK,eAAe;YAClB,OAAO,gBAAgB,CAAC;QAC1B,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC;QAC5B,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb;YACE,OAAO,gBAAgB,CAAC;IAC5B,CAAC;AACH,CAAC;AACD,yEAAyE;AACzE,4EAA4E;AAC5E,0EAA0E;AAC1E,yEAAyE;AACzE,uDAAuD;AACvD,MAAM,UAAU,oCAAoC,CAClD,QAAwB,EACxB,YAAoB,EACpB,UAA0B;IAE1B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,UAAU,KAAK,UAAU,CAAC;QAC3C,MAAM,QAAQ,GAA4B;YACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;SAChC,CAAC;QACF,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC/B,QAAQ,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxC,CAAC;QAED,MAAM,eAAe,GAA8B;YACjD,QAAQ;YACR,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC9C,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,YAAY,EAAE;gBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B;YACD,WAAW,EAAE,GAAG,YAAY,IAAI,OAAO,CAAC,EAAE,EAAE;YAC5C,YAAY,EAAE,OAAO,CAAC,WAAW;YACjC,aAAa,EAAE,CAAC,QAAQ,CAAC;YACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,eAAe;YAC5B,UAAU,EAAE,2BAA2B;YACvC,gBAAgB,EAAE,OAAO,CAAC,WAAW;YACrC,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QACF,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,eAAe,CAAC,mBAAmB,GAAG;gBACpC,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { ViteDevServer } from "vite";
2
+ import type { LLMProviderConfig } from "@superblocksteam/library-shared/types";
3
+ import type { AiService } from "./ai-service/index.js";
4
+ export type PolicyGateMode = "advisory" | "blocking";
5
+ export interface PolicyGateAssignment {
6
+ aiAgentRunId: string;
7
+ applicationCommitId: string;
8
+ applicationId: string;
9
+ directoryContentsHash: string;
10
+ executionContext: string;
11
+ llmConfig?: LLMProviderConfig;
12
+ mode: PolicyGateMode;
13
+ organizationId: string;
14
+ profileId: string;
15
+ promptConfigJson?: Record<string, unknown>;
16
+ reviewPolicyId: string;
17
+ reviewPolicyVersionId: string;
18
+ runnerType: string;
19
+ runtime: string;
20
+ token: string;
21
+ trigger: string;
22
+ }
23
+ export interface PolicyGateRoutesDeps {
24
+ aiService?: AiService;
25
+ superblocksBaseUrl?: string;
26
+ }
27
+ type PolicyGateExecutionRequest = Parameters<NonNullable<PolicyGateRoutesDeps["aiService"]>["handlePolicyGateExecution"]>[0];
28
+ export declare function buildPolicyGateRuntimeMetadata(assignment: PolicyGateAssignment, runtimeMetadataJson?: Record<string, unknown>, finalFailureReason?: string): Record<string, unknown>;
29
+ export declare function buildPolicyGateExecutionRequest(assignment: PolicyGateAssignment): PolicyGateExecutionRequest;
30
+ export declare function registerPolicyGateRoutes(server: ViteDevServer, deps: PolicyGateRoutesDeps): void;
31
+ export { mapFindingCategory } from "./policy-gate-callback-mapper.js";
32
+ //# sourceMappingURL=policy-gate-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-gate-runner.d.ts","sourceRoot":"","sources":["../src/policy-gate-runner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIvD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAI9B,IAAI,EAAE,cAAc,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AA2CD,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,KAAK,0BAA0B,GAAG,UAAU,CAC1C,WAAW,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAC5E,CAAC,CAAC,CAAC,CAAC;AAEL,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,oBAAoB,EAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB;AAED,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,oBAAoB,GAC/B,0BAA0B,CAY5B;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,oBAAoB,GACzB,IAAI,CA0EN;AA6FD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,191 @@
1
+ import bodyParser from "body-parser";
2
+ import { mapAgentFindingsToPolicyGateCallback } from "./policy-gate-callback-mapper.js";
3
+ import { getErrorMeta, getLogger } from "./util/logger.js";
4
+ const REQUIRED_ASSIGNMENT_FIELDS = [
5
+ "aiAgentRunId",
6
+ "applicationCommitId",
7
+ "applicationId",
8
+ "directoryContentsHash",
9
+ "executionContext",
10
+ "mode",
11
+ "organizationId",
12
+ "profileId",
13
+ "reviewPolicyId",
14
+ "reviewPolicyVersionId",
15
+ "runnerType",
16
+ "runtime",
17
+ "token",
18
+ "trigger",
19
+ ];
20
+ const VALID_MODES = ["advisory", "blocking"];
21
+ function validateAssignment(body) {
22
+ if (!body || typeof body !== "object") {
23
+ return { error: "Request body must be a JSON object" };
24
+ }
25
+ const obj = body;
26
+ for (const field of REQUIRED_ASSIGNMENT_FIELDS) {
27
+ if (typeof obj[field] !== "string" || obj[field] === "") {
28
+ return { error: `Missing or invalid field: ${field}` };
29
+ }
30
+ }
31
+ if (!VALID_MODES.includes(obj.mode)) {
32
+ return {
33
+ error: `Invalid mode: ${String(obj.mode)} (expected 'advisory' or 'blocking')`,
34
+ };
35
+ }
36
+ return { assignment: obj };
37
+ }
38
+ const CALLBACK_PATH = "/api/v1/policy-gates/review-runs/state";
39
+ export function buildPolicyGateRuntimeMetadata(assignment, runtimeMetadataJson, finalFailureReason) {
40
+ return {
41
+ assignedContentHash: assignment.directoryContentsHash,
42
+ applicationCommitId: assignment.applicationCommitId,
43
+ ...(runtimeMetadataJson ?? {}),
44
+ ...(finalFailureReason && { finalFailureReason }),
45
+ };
46
+ }
47
+ export function buildPolicyGateExecutionRequest(assignment) {
48
+ const adminPrompt = typeof assignment.promptConfigJson?.prompt === "string"
49
+ ? assignment.promptConfigJson.prompt
50
+ : undefined;
51
+ return {
52
+ adminPrompt,
53
+ aiAgentRunId: assignment.aiAgentRunId,
54
+ applicationId: assignment.applicationId,
55
+ llmConfig: assignment.llmConfig,
56
+ };
57
+ }
58
+ export function registerPolicyGateRoutes(server, deps) {
59
+ const logger = getLogger();
60
+ server.middlewares.use("/_sb_policy_gates/v1/execute", bodyParser.json({ limit: "1mb" }));
61
+ server.middlewares.use("/_sb_policy_gates/v1/execute", (req, res, next) => {
62
+ if (req.method !== "POST") {
63
+ return next();
64
+ }
65
+ void (async () => {
66
+ try {
67
+ const body = req.body;
68
+ const validation = validateAssignment(body);
69
+ if ("error" in validation) {
70
+ res.statusCode = 400;
71
+ res.end(JSON.stringify({ error: validation.error }));
72
+ return;
73
+ }
74
+ const { assignment } = validation;
75
+ if (!deps.superblocksBaseUrl) {
76
+ logger.error("[policy-gate-runner] superblocksBaseUrl not configured");
77
+ res.statusCode = 500;
78
+ res.end(JSON.stringify({ error: "Server base URL not configured" }));
79
+ return;
80
+ }
81
+ if (!deps.aiService) {
82
+ logger.error("[policy-gate-runner] AI service not available");
83
+ res.statusCode = 503;
84
+ res.end(JSON.stringify({ error: "AI service not available" }));
85
+ return;
86
+ }
87
+ logger.info(`[policy-gate-runner] Received assignment for run ${assignment.aiAgentRunId}`);
88
+ res.statusCode = 200;
89
+ res.setHeader("Content-Type", "application/json");
90
+ res.end(JSON.stringify({
91
+ accepted: true,
92
+ aiAgentRunId: assignment.aiAgentRunId,
93
+ }));
94
+ void executePolicyGateRun(assignment, deps.aiService, deps.superblocksBaseUrl, logger);
95
+ }
96
+ catch (error) {
97
+ logger.error("[policy-gate-runner] Error handling assignment", getErrorMeta(error));
98
+ res.statusCode = 500;
99
+ res.end(JSON.stringify({ error: "Internal error" }));
100
+ }
101
+ })();
102
+ });
103
+ }
104
+ async function executePolicyGateRun(assignment, aiService, superblocksBaseUrl, logger) {
105
+ const startedAt = new Date().toISOString();
106
+ try {
107
+ try {
108
+ await postRunState(assignment, superblocksBaseUrl, logger, {
109
+ status: "running",
110
+ startedAt,
111
+ });
112
+ }
113
+ catch (runningError) {
114
+ logger.error("[policy-gate-runner] Failed to post running state, aborting execution", getErrorMeta(runningError));
115
+ return;
116
+ }
117
+ const result = await aiService.handlePolicyGateExecution(buildPolicyGateExecutionRequest(assignment));
118
+ const completedAt = new Date().toISOString();
119
+ const findings = mapAgentFindingsToPolicyGateCallback(result.findings, assignment.aiAgentRunId, assignment.mode);
120
+ const hasBlockingFindings = findings.some((f) => f.blocking);
121
+ await postRunState(assignment, superblocksBaseUrl, logger, {
122
+ completedAt,
123
+ decision: hasBlockingFindings ? "blocked" : "allowed",
124
+ decisionReason: hasBlockingFindings
125
+ ? `Security agent found ${findings.filter((f) => f.blocking).length} blocking finding(s)`
126
+ : "No blocking findings detected",
127
+ findings,
128
+ findingsWriteMode: "replace",
129
+ runtimeMetadataJson: buildPolicyGateRuntimeMetadata(assignment, result.runtimeMetadataJson),
130
+ startedAt,
131
+ status: hasBlockingFindings ? "blocked" : "passed",
132
+ });
133
+ logger.info(`[policy-gate-runner] Completed run ${assignment.aiAgentRunId}: ${findings.length} findings, ${hasBlockingFindings ? "blocked" : "passed"}`);
134
+ }
135
+ catch (error) {
136
+ logger.error("[policy-gate-runner] Execution failed", getErrorMeta(error));
137
+ const errorMessage = error instanceof Error ? error.message : "Unknown execution error";
138
+ const runtimeMetadataJson = error &&
139
+ typeof error === "object" &&
140
+ "runtimeMetadataJson" in error &&
141
+ error.runtimeMetadataJson &&
142
+ typeof error.runtimeMetadataJson === "object" &&
143
+ !Array.isArray(error.runtimeMetadataJson)
144
+ ? error.runtimeMetadataJson
145
+ : undefined;
146
+ await postRunState(assignment, superblocksBaseUrl, logger, {
147
+ completedAt: new Date().toISOString(),
148
+ decision: "error_blocked",
149
+ errorCode: "execution_failed",
150
+ errorMessage,
151
+ runtimeMetadataJson: buildPolicyGateRuntimeMetadata(assignment, runtimeMetadataJson, errorMessage),
152
+ startedAt,
153
+ status: "errored",
154
+ }).catch((callbackError) => {
155
+ logger.error("[policy-gate-runner] Failed to post error state", getErrorMeta(callbackError));
156
+ });
157
+ }
158
+ }
159
+ export { mapFindingCategory } from "./policy-gate-callback-mapper.js";
160
+ async function postRunState(assignment, superblocksBaseUrl, logger, state) {
161
+ const callbackUrl = `${superblocksBaseUrl}${CALLBACK_PATH}`;
162
+ const payload = {
163
+ aiAgentRunId: assignment.aiAgentRunId,
164
+ applicationCommitId: assignment.applicationCommitId,
165
+ applicationId: assignment.applicationId,
166
+ directoryContentsHash: assignment.directoryContentsHash,
167
+ executionContext: assignment.executionContext,
168
+ profileId: assignment.profileId,
169
+ reviewPolicyId: assignment.reviewPolicyId,
170
+ reviewPolicyVersionId: assignment.reviewPolicyVersionId,
171
+ runnerType: assignment.runnerType,
172
+ runtime: assignment.runtime,
173
+ trigger: assignment.trigger,
174
+ ...state,
175
+ };
176
+ const response = await fetch(callbackUrl, {
177
+ body: JSON.stringify(payload),
178
+ headers: {
179
+ Authorization: `Bearer ${assignment.token}`,
180
+ "Content-Type": "application/json",
181
+ },
182
+ method: "POST",
183
+ });
184
+ if (!response.ok) {
185
+ const text = await response.text().catch(() => "");
186
+ logger.error(`[policy-gate-runner] Callback POST failed: ${response.status} ${text}`);
187
+ throw new Error(`Callback POST failed with HTTP ${response.status}`);
188
+ }
189
+ logger.info(`[policy-gate-runner] Posted run state for ${assignment.aiAgentRunId}: ${JSON.stringify(state.status)}`);
190
+ }
191
+ //# sourceMappingURL=policy-gate-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-gate-runner.js","sourceRoot":"","sources":["../src/policy-gate-runner.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"router-parser.d.ts","sourceRoot":"","sources":["../src/router-parser.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AA0LD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwDrE;AA2KD;;GAEG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,EAAE,CAAC,CA6G5B"}
1
+ {"version":3,"file":"router-parser.d.ts","sourceRoot":"","sources":["../src/router-parser.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AA0LD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwDrE;AAgPD;;GAEG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,EAAE,CAAC,CAoK5B"}
@@ -254,8 +254,12 @@ function logUnresolvedComponent(kind, name, routerFilePath) {
254
254
  }
255
255
  /**
256
256
  * Extract the string specifier from `import("...")` or `import("...").then(...)`.
257
+ *
258
+ * When `callableImportMap` is provided, also resolves `obj.prop()` and
259
+ * `obj.prop().then(...)` patterns where `obj.prop` is a known import-returning
260
+ * callable (e.g. `const pageChunks = { Home: () => import("./pages/Home.tsx") }`).
257
261
  */
258
- function extractImportSpecifierFromExpression(node) {
262
+ function extractImportSpecifierFromExpression(node, callableImportMap) {
259
263
  if (!node)
260
264
  return null;
261
265
  // Direct import("...")
@@ -272,8 +276,50 @@ function extractImportSpecifierFromExpression(node) {
272
276
  node.callee.object.arguments[0]?.type === "StringLiteral") {
273
277
  return node.callee.object.arguments[0].value;
274
278
  }
279
+ if (callableImportMap && callableImportMap.size > 0) {
280
+ // obj.prop() — direct call to a known import-returning function
281
+ if (node.type === "CallExpression" &&
282
+ node.callee.type === "MemberExpression") {
283
+ const resolved = resolveCallableMemberExpression(node.callee, callableImportMap);
284
+ if (resolved)
285
+ return resolved;
286
+ }
287
+ // obj.prop().then(...) — call to a known import-returning function followed by .then()
288
+ if (node.type === "CallExpression" &&
289
+ node.callee.type === "MemberExpression" &&
290
+ !node.callee.computed &&
291
+ node.callee.property.type === "Identifier" &&
292
+ node.callee.property.name === "then" &&
293
+ node.callee.object.type === "CallExpression" &&
294
+ node.callee.object.callee.type === "MemberExpression") {
295
+ const resolved = resolveCallableMemberExpression(node.callee.object.callee, callableImportMap);
296
+ if (resolved)
297
+ return resolved;
298
+ }
299
+ }
275
300
  return null;
276
301
  }
302
+ /**
303
+ * Resolve a `MemberExpression` against a callable-import map, supporting both
304
+ * dot access (`obj.foo`) and computed string-literal access (`obj["foo"]`).
305
+ *
306
+ * Computed access with a dynamic key (e.g. `obj[name]`) is intentionally not
307
+ * resolved — there is no way to know the property name at parse time.
308
+ */
309
+ function resolveCallableMemberExpression(member, callableImportMap) {
310
+ if (member.object.type !== "Identifier")
311
+ return null;
312
+ let propName = null;
313
+ if (!member.computed && member.property.type === "Identifier") {
314
+ propName = member.property.name;
315
+ }
316
+ else if (member.computed && member.property.type === "StringLiteral") {
317
+ propName = member.property.value;
318
+ }
319
+ if (!propName)
320
+ return null;
321
+ return callableImportMap.get(member.object.name)?.get(propName) ?? null;
322
+ }
277
323
  /**
278
324
  * Extract the dynamic import specifier from the body of a `() => ...` arrow.
279
325
  *
@@ -283,8 +329,10 @@ function extractImportSpecifierFromExpression(node) {
283
329
  * async () => await import("./Page.tsx")
284
330
  * async () => { const m = await import("./Page.tsx"); return { Component: m.default }; }
285
331
  * () => { return import("./Page.tsx"); }
332
+ * () => obj.prop() (when obj.prop is a known import-returning callable)
333
+ * () => obj.prop().then(mod => (...)) (same, with .then() chained)
286
334
  */
287
- function extractImportPathFromArrowFunction(node) {
335
+ function extractImportPathFromArrowFunction(node, callableImportMap) {
288
336
  const body = node.body;
289
337
  if (body.type === "BlockStatement") {
290
338
  for (const statement of body.body) {
@@ -293,7 +341,7 @@ function extractImportPathFromArrowFunction(node) {
293
341
  let init = decl.init;
294
342
  if (init?.type === "AwaitExpression")
295
343
  init = init.argument;
296
- const path = extractImportSpecifierFromExpression(init);
344
+ const path = extractImportSpecifierFromExpression(init, callableImportMap);
297
345
  if (path)
298
346
  return path;
299
347
  }
@@ -302,7 +350,7 @@ function extractImportPathFromArrowFunction(node) {
302
350
  let arg = statement.argument;
303
351
  if (arg?.type === "AwaitExpression")
304
352
  arg = arg.argument;
305
- const path = extractImportSpecifierFromExpression(arg);
353
+ const path = extractImportSpecifierFromExpression(arg, callableImportMap);
306
354
  if (path)
307
355
  return path;
308
356
  }
@@ -311,7 +359,7 @@ function extractImportPathFromArrowFunction(node) {
311
359
  }
312
360
  // Expression body — possibly wrapped in `await`
313
361
  const expr = body.type === "AwaitExpression" && body.argument ? body.argument : body;
314
- return extractImportSpecifierFromExpression(expr);
362
+ return extractImportSpecifierFromExpression(expr, callableImportMap);
315
363
  }
316
364
  /**
317
365
  * Recognize `lazy(() => import("..."))` or `React.lazy(() => import("..."))`
@@ -389,6 +437,10 @@ export async function parseRouterFile(routerFilePath, rootDir) {
389
437
  let routesArray = null;
390
438
  // Collect top-level variable declarations so we can resolve identifier references
391
439
  const variableDeclarations = new Map();
440
+ // Collect top-level objects whose properties are import-returning arrow functions.
441
+ // e.g. const pageChunks = { Home: () => import("./pages/Home.tsx") }
442
+ // Maps objectName → (propertyName → importPath)
443
+ const callableImportMap = new Map();
392
444
  traverse(ast, {
393
445
  VariableDeclarator(astPath) {
394
446
  const node = astPath.node;
@@ -414,6 +466,50 @@ export async function parseRouterFile(routerFilePath, rootDir) {
414
466
  (declarationParent.isExportNamedDeclaration() &&
415
467
  (declarationParent.parentPath?.isProgram() ?? false))
416
468
  : false;
469
+ // Collect top-level object expressions with arrow-function properties
470
+ // that contain import() calls (e.g. preload/chunk maps).
471
+ // Unwrap `as const` / `satisfies T` wrappers the same way we do for arrays.
472
+ if (isTopLevel) {
473
+ let objectExpr = null;
474
+ if (node.init.type === "ObjectExpression") {
475
+ objectExpr = node.init;
476
+ }
477
+ else if (node.init.type === "TSAsExpression" &&
478
+ node.init.expression.type === "ObjectExpression") {
479
+ objectExpr = node.init.expression;
480
+ }
481
+ else if (node.init.type === "TSSatisfiesExpression" &&
482
+ node.init.expression.type === "ObjectExpression") {
483
+ objectExpr = node.init.expression;
484
+ }
485
+ if (objectExpr) {
486
+ const propMap = new Map();
487
+ for (const prop of objectExpr.properties) {
488
+ if (prop.type !== "ObjectProperty" ||
489
+ prop.value.type !== "ArrowFunctionExpression") {
490
+ continue;
491
+ }
492
+ // Accept both identifier keys (`Welcome:`) and string-literal
493
+ // keys (`"my-page":`); both look up the same way at call sites.
494
+ let propName = null;
495
+ if (prop.key.type === "Identifier" && !prop.computed) {
496
+ propName = prop.key.name;
497
+ }
498
+ else if (prop.key.type === "StringLiteral") {
499
+ propName = prop.key.value;
500
+ }
501
+ if (!propName)
502
+ continue;
503
+ const importPath = extractImportPathFromArrowFunction(prop.value);
504
+ if (importPath && isRelativeOrAliasImport(importPath)) {
505
+ propMap.set(propName, importPath);
506
+ }
507
+ }
508
+ if (propMap.size > 0) {
509
+ callableImportMap.set(node.id.name, propMap);
510
+ }
511
+ }
512
+ }
417
513
  if (isTopLevel && !allImports.has(node.id.name)) {
418
514
  const lazyImportPath = extractLazyImportPath(node.init);
419
515
  if (lazyImportPath && isRelativeOrAliasImport(lazyImportPath)) {
@@ -457,7 +553,7 @@ export async function parseRouterFile(routerFilePath, rootDir) {
457
553
  });
458
554
  // Process routes asynchronously after traverse
459
555
  if (routesArray) {
460
- await extractRoutesFromArray(routesArray, routes, routerFilePath, rootDir, "", allImports);
556
+ await extractRoutesFromArray(routesArray, routes, routerFilePath, rootDir, "", allImports, callableImportMap);
461
557
  }
462
558
  return routes;
463
559
  }
@@ -466,14 +562,14 @@ export async function parseRouterFile(routerFilePath, rootDir) {
466
562
  return [];
467
563
  }
468
564
  }
469
- async function extractRoutesFromArray(node, routes, routerFilePath, rootDir, parentPath, allImports) {
565
+ async function extractRoutesFromArray(node, routes, routerFilePath, rootDir, parentPath, allImports, callableImportMap) {
470
566
  for (const element of node.elements) {
471
567
  if (element && element.type === "ObjectExpression") {
472
- await extractRouteFromObject(element, routes, routerFilePath, rootDir, parentPath, allImports);
568
+ await extractRouteFromObject(element, routes, routerFilePath, rootDir, parentPath, allImports, callableImportMap);
473
569
  }
474
570
  }
475
571
  }
476
- async function extractRouteFromObject(node, routes, routerFilePath, rootDir, parentPath, allImports) {
572
+ async function extractRouteFromObject(node, routes, routerFilePath, rootDir, parentPath, allImports, callableImportMap) {
477
573
  let routePath = null;
478
574
  let pageImportPath = null;
479
575
  let children = null;
@@ -490,7 +586,7 @@ async function extractRouteFromObject(node, routes, routerFilePath, rootDir, par
490
586
  }
491
587
  else if (key === "lazy" &&
492
588
  prop.value.type === "ArrowFunctionExpression") {
493
- const path = extractImportPathFromArrowFunction(prop.value);
589
+ const path = extractImportPathFromArrowFunction(prop.value, callableImportMap);
494
590
  if (path)
495
591
  pageImportPath = path;
496
592
  }
@@ -603,7 +699,7 @@ async function extractRouteFromObject(node, routes, routerFilePath, rootDir, par
603
699
  const currentPath = routePath ? joinURL(parentPath, routePath) : parentPath;
604
700
  // Normalize empty path to "/" before passing to children
605
701
  const normalizedCurrentPath = currentPath || "/";
606
- await extractRoutesFromArray(children, routes, routerFilePath, rootDir, normalizedCurrentPath, allImports);
702
+ await extractRoutesFromArray(children, routes, routerFilePath, rootDir, normalizedCurrentPath, allImports, callableImportMap);
607
703
  }
608
704
  }
609
705
  //# sourceMappingURL=router-parser.js.map