convex 1.34.0 → 1.35.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 (607) hide show
  1. package/CHANGELOG.md +98 -43
  2. package/dist/browser.bundle.js +13 -10
  3. package/dist/browser.bundle.js.map +3 -3
  4. package/dist/cjs/browser/index-node.js +3 -1
  5. package/dist/cjs/browser/index.js +3 -1
  6. package/dist/cjs/browser/index.js.map +2 -2
  7. package/dist/cjs/browser/query_options.js.map +2 -2
  8. package/dist/cjs/browser/sync/authentication_manager.js +4 -1
  9. package/dist/cjs/browser/sync/authentication_manager.js.map +2 -2
  10. package/dist/cjs/browser/sync/web_socket_manager.js +1 -7
  11. package/dist/cjs/browser/sync/web_socket_manager.js.map +2 -2
  12. package/dist/cjs/cli/aiFiles.js +39 -20
  13. package/dist/cjs/cli/aiFiles.js.map +3 -3
  14. package/dist/cjs/cli/codegen_templates/readme.js +14 -1
  15. package/dist/cjs/cli/codegen_templates/readme.js.map +2 -2
  16. package/dist/cjs/cli/configure.js +34 -32
  17. package/dist/cjs/cli/configure.js.map +2 -2
  18. package/dist/cjs/cli/deploy.js +7 -8
  19. package/dist/cjs/cli/deploy.js.map +2 -2
  20. package/dist/cjs/cli/deploymentCreate.js +225 -40
  21. package/dist/cjs/cli/deploymentCreate.js.map +3 -3
  22. package/dist/cjs/cli/deploymentSelect.js +14 -13
  23. package/dist/cjs/cli/deploymentSelect.js.map +2 -2
  24. package/dist/cjs/cli/dev.js +30 -11
  25. package/dist/cjs/cli/dev.js.map +2 -2
  26. package/dist/cjs/cli/docs.js +1 -1
  27. package/dist/cjs/cli/docs.js.map +2 -2
  28. package/dist/cjs/cli/init.js +1 -1
  29. package/dist/cjs/cli/init.js.map +2 -2
  30. package/dist/cjs/cli/lib/aiFiles/agentsmd.js +73 -0
  31. package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +7 -0
  32. package/dist/cjs/cli/lib/aiFiles/claudemd.js +73 -0
  33. package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +7 -0
  34. package/dist/cjs/cli/lib/aiFiles/cursorrules.js +48 -0
  35. package/dist/cjs/cli/lib/aiFiles/cursorrules.js.map +7 -0
  36. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +58 -0
  37. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
  38. package/dist/cjs/cli/lib/aiFiles/index.js +215 -0
  39. package/dist/cjs/cli/lib/aiFiles/index.js.map +7 -0
  40. package/dist/cjs/cli/lib/aiFiles/paths.js.map +7 -0
  41. package/dist/cjs/cli/lib/aiFiles/skills.js +196 -0
  42. package/dist/cjs/cli/lib/aiFiles/skills.js.map +7 -0
  43. package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
  44. package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
  45. package/dist/cjs/cli/lib/aiFiles/status.js +198 -0
  46. package/dist/cjs/cli/lib/aiFiles/status.js.map +7 -0
  47. package/dist/cjs/cli/lib/aiFiles/utils.js +128 -0
  48. package/dist/cjs/cli/lib/aiFiles/utils.js.map +7 -0
  49. package/dist/cjs/cli/lib/api.js +70 -7
  50. package/dist/cjs/cli/lib/api.js.map +2 -2
  51. package/dist/cjs/cli/lib/command.js +10 -6
  52. package/dist/cjs/cli/lib/command.js.map +2 -2
  53. package/dist/cjs/cli/lib/config.js +43 -7
  54. package/dist/cjs/cli/lib/config.js.map +3 -3
  55. package/dist/cjs/cli/lib/deploy2.js +9 -26
  56. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  57. package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
  58. package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
  59. package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
  60. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  61. package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
  62. package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
  63. package/dist/cjs/cli/lib/dev.js +162 -117
  64. package/dist/cjs/cli/lib/dev.js.map +2 -2
  65. package/dist/cjs/cli/lib/env.js +1 -13
  66. package/dist/cjs/cli/lib/env.js.map +2 -2
  67. package/dist/cjs/cli/lib/expiration.js +104 -0
  68. package/dist/cjs/cli/lib/expiration.js.map +7 -0
  69. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  70. package/dist/cjs/cli/lib/init.js +4 -3
  71. package/dist/cjs/cli/lib/init.js.map +2 -2
  72. package/dist/cjs/cli/lib/insights.js +1 -1
  73. package/dist/cjs/cli/lib/insights.js.map +2 -2
  74. package/dist/cjs/cli/lib/localDeployment/anonymous.js +15 -8
  75. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
  76. package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
  77. package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
  78. package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
  79. package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
  80. package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
  81. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
  82. package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
  83. package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
  84. package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
  85. package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
  86. package/dist/cjs/cli/lib/updates.js +12 -13
  87. package/dist/cjs/cli/lib/updates.js.map +2 -2
  88. package/dist/cjs/cli/lib/usage.js +2 -1
  89. package/dist/cjs/cli/lib/usage.js.map +2 -2
  90. package/dist/cjs/cli/lib/utils/prompts.js +2 -1
  91. package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
  92. package/dist/cjs/cli/lib/utils/utils.js +46 -20
  93. package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
  94. package/dist/cjs/cli/lib/versionApi.js +7 -4
  95. package/dist/cjs/cli/lib/versionApi.js.map +2 -2
  96. package/dist/cjs/cli/lib/workos/workos.js +4 -6
  97. package/dist/cjs/cli/lib/workos/workos.js.map +2 -2
  98. package/dist/cjs/index.js +1 -1
  99. package/dist/cjs/index.js.map +1 -1
  100. package/dist/cjs/react/client.js +43 -6
  101. package/dist/cjs/react/client.js.map +2 -2
  102. package/dist/cjs/react/index.js +2 -0
  103. package/dist/cjs/react/index.js.map +2 -2
  104. package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  105. package/dist/cjs/server/api.js.map +2 -2
  106. package/dist/cjs/server/components/definition.js.map +1 -1
  107. package/dist/cjs/server/components/index.js +40 -4
  108. package/dist/cjs/server/components/index.js.map +2 -2
  109. package/dist/cjs/server/data_model.js.map +1 -1
  110. package/dist/cjs/server/impl/meta_impl.js +78 -0
  111. package/dist/cjs/server/impl/meta_impl.js.map +7 -0
  112. package/dist/cjs/server/impl/registration_impl.js +16 -11
  113. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  114. package/dist/cjs/server/index.js.map +2 -2
  115. package/dist/cjs/server/meta.js +17 -0
  116. package/dist/cjs/server/meta.js.map +7 -0
  117. package/dist/cjs/server/registration.js.map +1 -1
  118. package/dist/cjs-types/browser/index.d.ts +1 -0
  119. package/dist/cjs-types/browser/index.d.ts.map +1 -1
  120. package/dist/cjs-types/browser/query_options.d.ts +12 -9
  121. package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
  122. package/dist/cjs-types/browser/sync/authentication_manager.d.ts.map +1 -1
  123. package/dist/cjs-types/browser/sync/web_socket_manager.d.ts.map +1 -1
  124. package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
  125. package/dist/cjs-types/cli/codegen_templates/readme.d.ts.map +1 -1
  126. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  127. package/dist/cjs-types/cli/configure.test.d.ts +2 -0
  128. package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
  129. package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
  130. package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
  131. package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
  132. package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
  133. package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
  134. package/dist/cjs-types/cli/dev.d.ts +3 -1
  135. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  136. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
  137. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
  138. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
  139. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
  140. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
  141. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
  142. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
  143. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
  144. package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
  145. package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
  146. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
  147. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
  148. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
  149. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
  150. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +42 -0
  151. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -0
  152. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
  153. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
  154. package/dist/cjs-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
  155. package/dist/cjs-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
  156. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
  157. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +20 -0
  158. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
  159. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
  160. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  161. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  162. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  163. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +6 -0
  164. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -0
  165. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +56 -0
  166. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
  167. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  168. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  169. package/dist/cjs-types/cli/lib/api.d.ts +3 -3
  170. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  171. package/dist/cjs-types/cli/lib/command.d.ts +2 -1
  172. package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
  173. package/dist/cjs-types/cli/lib/config.d.ts +18 -6
  174. package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
  175. package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
  176. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  177. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  178. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  179. package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  180. package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -14
  181. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +61 -52
  182. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  183. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  184. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
  185. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  186. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  187. package/dist/cjs-types/cli/lib/env.d.ts +0 -4
  188. package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
  189. package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
  190. package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
  191. package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
  192. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
  193. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  194. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  195. package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
  196. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  197. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  198. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
  199. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  200. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  201. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
  202. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  203. package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
  204. package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  205. package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
  206. package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
  207. package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
  208. package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
  209. package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
  210. package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
  211. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  212. package/dist/cjs-types/cli/lib/versionApi.d.ts +7 -1
  213. package/dist/cjs-types/cli/lib/versionApi.d.ts.map +1 -1
  214. package/dist/cjs-types/cli/lib/workos/workos.d.ts.map +1 -1
  215. package/dist/cjs-types/index.d.ts +1 -1
  216. package/dist/cjs-types/react/client.d.ts +54 -2
  217. package/dist/cjs-types/react/client.d.ts.map +1 -1
  218. package/dist/cjs-types/react/index.d.ts +7 -2
  219. package/dist/cjs-types/react/index.d.ts.map +1 -1
  220. package/dist/cjs-types/react/use_query_object_options.test.d.ts +5 -0
  221. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +1 -0
  222. package/dist/cjs-types/react/use_query_result.test.d.ts +5 -0
  223. package/dist/cjs-types/react/use_query_result.test.d.ts.map +1 -0
  224. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  225. package/dist/cjs-types/server/api.d.ts +5 -1
  226. package/dist/cjs-types/server/api.d.ts.map +1 -1
  227. package/dist/cjs-types/server/components/definition.d.ts +1 -0
  228. package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
  229. package/dist/cjs-types/server/components/index.d.ts +5 -1
  230. package/dist/cjs-types/server/components/index.d.ts.map +1 -1
  231. package/dist/cjs-types/server/data_model.d.ts +2 -1
  232. package/dist/cjs-types/server/data_model.d.ts.map +1 -1
  233. package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
  234. package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
  235. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  236. package/dist/cjs-types/server/index.d.ts +1 -0
  237. package/dist/cjs-types/server/index.d.ts.map +1 -1
  238. package/dist/cjs-types/server/meta.d.ts +72 -0
  239. package/dist/cjs-types/server/meta.d.ts.map +1 -0
  240. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  241. package/dist/cli.bundle.cjs +2446 -1933
  242. package/dist/cli.bundle.cjs.map +4 -4
  243. package/dist/esm/browser/index-node.js +1 -0
  244. package/dist/esm/browser/index.js +1 -0
  245. package/dist/esm/browser/index.js.map +2 -2
  246. package/dist/esm/browser/query_options.js.map +2 -2
  247. package/dist/esm/browser/sync/authentication_manager.js +4 -1
  248. package/dist/esm/browser/sync/authentication_manager.js.map +2 -2
  249. package/dist/esm/browser/sync/web_socket_manager.js +1 -7
  250. package/dist/esm/browser/sync/web_socket_manager.js.map +2 -2
  251. package/dist/esm/cli/aiFiles.js +41 -23
  252. package/dist/esm/cli/aiFiles.js.map +2 -2
  253. package/dist/esm/cli/codegen_templates/readme.js +14 -1
  254. package/dist/esm/cli/codegen_templates/readme.js.map +2 -2
  255. package/dist/esm/cli/configure.js +35 -33
  256. package/dist/esm/cli/configure.js.map +2 -2
  257. package/dist/esm/cli/deploy.js +11 -10
  258. package/dist/esm/cli/deploy.js.map +2 -2
  259. package/dist/esm/cli/deploymentCreate.js +238 -42
  260. package/dist/esm/cli/deploymentCreate.js.map +2 -2
  261. package/dist/esm/cli/deploymentSelect.js +13 -12
  262. package/dist/esm/cli/deploymentSelect.js.map +2 -2
  263. package/dist/esm/cli/dev.js +34 -13
  264. package/dist/esm/cli/dev.js.map +2 -2
  265. package/dist/esm/cli/docs.js +1 -1
  266. package/dist/esm/cli/docs.js.map +2 -2
  267. package/dist/esm/cli/init.js +2 -2
  268. package/dist/esm/cli/init.js.map +2 -2
  269. package/dist/esm/cli/lib/aiFiles/agentsmd.js +56 -0
  270. package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +7 -0
  271. package/dist/esm/cli/lib/aiFiles/claudemd.js +56 -0
  272. package/dist/esm/cli/lib/aiFiles/claudemd.js.map +7 -0
  273. package/dist/esm/cli/lib/aiFiles/cursorrules.js +16 -0
  274. package/dist/esm/cli/lib/aiFiles/cursorrules.js.map +7 -0
  275. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +35 -0
  276. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
  277. package/dist/esm/cli/lib/aiFiles/index.js +193 -0
  278. package/dist/esm/cli/lib/aiFiles/index.js.map +7 -0
  279. package/dist/esm/cli/lib/aiFiles/paths.js.map +7 -0
  280. package/dist/esm/cli/lib/aiFiles/skills.js +163 -0
  281. package/dist/esm/cli/lib/aiFiles/skills.js.map +7 -0
  282. package/dist/esm/cli/lib/aiFiles/state.js +60 -0
  283. package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
  284. package/dist/esm/cli/lib/aiFiles/status.js +178 -0
  285. package/dist/esm/cli/lib/aiFiles/status.js.map +7 -0
  286. package/dist/esm/cli/lib/aiFiles/utils.js +97 -0
  287. package/dist/esm/cli/lib/aiFiles/utils.js.map +7 -0
  288. package/dist/esm/cli/lib/api.js +70 -7
  289. package/dist/esm/cli/lib/api.js.map +2 -2
  290. package/dist/esm/cli/lib/command.js +10 -6
  291. package/dist/esm/cli/lib/command.js.map +2 -2
  292. package/dist/esm/cli/lib/config.js +41 -6
  293. package/dist/esm/cli/lib/config.js.map +2 -2
  294. package/dist/esm/cli/lib/deploy2.js +13 -26
  295. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  296. package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
  297. package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
  298. package/dist/esm/cli/lib/deploymentSelection.js +46 -2
  299. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  300. package/dist/esm/cli/lib/deploymentSelector.js +1 -0
  301. package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
  302. package/dist/esm/cli/lib/dev.js +162 -118
  303. package/dist/esm/cli/lib/dev.js.map +2 -2
  304. package/dist/esm/cli/lib/env.js +0 -11
  305. package/dist/esm/cli/lib/env.js.map +2 -2
  306. package/dist/esm/cli/lib/expiration.js +80 -0
  307. package/dist/esm/cli/lib/expiration.js.map +7 -0
  308. package/dist/esm/cli/lib/init.js +4 -3
  309. package/dist/esm/cli/lib/init.js.map +2 -2
  310. package/dist/esm/cli/lib/insights.js +1 -1
  311. package/dist/esm/cli/lib/insights.js.map +2 -2
  312. package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
  313. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
  314. package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
  315. package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
  316. package/dist/esm/cli/lib/localDeployment/run.js +1 -1
  317. package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
  318. package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
  319. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  320. package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
  321. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  322. package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
  323. package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
  324. package/dist/esm/cli/lib/updates.js +14 -12
  325. package/dist/esm/cli/lib/updates.js.map +2 -2
  326. package/dist/esm/cli/lib/usage.js +2 -1
  327. package/dist/esm/cli/lib/usage.js.map +2 -2
  328. package/dist/esm/cli/lib/utils/prompts.js +2 -1
  329. package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
  330. package/dist/esm/cli/lib/utils/utils.js +45 -20
  331. package/dist/esm/cli/lib/utils/utils.js.map +3 -3
  332. package/dist/esm/cli/lib/versionApi.js +7 -4
  333. package/dist/esm/cli/lib/versionApi.js.map +2 -2
  334. package/dist/esm/cli/lib/workos/workos.js +4 -6
  335. package/dist/esm/cli/lib/workos/workos.js.map +2 -2
  336. package/dist/esm/index.js +1 -1
  337. package/dist/esm/index.js.map +1 -1
  338. package/dist/esm/react/client.js +43 -6
  339. package/dist/esm/react/client.js.map +2 -2
  340. package/dist/esm/react/index.js +1 -0
  341. package/dist/esm/react/index.js.map +2 -2
  342. package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  343. package/dist/esm/server/api.js.map +2 -2
  344. package/dist/esm/server/components/index.js +40 -4
  345. package/dist/esm/server/components/index.js.map +2 -2
  346. package/dist/esm/server/impl/meta_impl.js +54 -0
  347. package/dist/esm/server/impl/meta_impl.js.map +7 -0
  348. package/dist/esm/server/impl/registration_impl.js +20 -11
  349. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  350. package/dist/esm/server/index.js.map +2 -2
  351. package/dist/esm/server/meta.js +2 -0
  352. package/dist/esm/server/meta.js.map +7 -0
  353. package/dist/esm-types/browser/index.d.ts +1 -0
  354. package/dist/esm-types/browser/index.d.ts.map +1 -1
  355. package/dist/esm-types/browser/query_options.d.ts +12 -9
  356. package/dist/esm-types/browser/query_options.d.ts.map +1 -1
  357. package/dist/esm-types/browser/sync/authentication_manager.d.ts.map +1 -1
  358. package/dist/esm-types/browser/sync/web_socket_manager.d.ts.map +1 -1
  359. package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
  360. package/dist/esm-types/cli/codegen_templates/readme.d.ts.map +1 -1
  361. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  362. package/dist/esm-types/cli/configure.test.d.ts +2 -0
  363. package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
  364. package/dist/esm-types/cli/deploy.d.ts.map +1 -1
  365. package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
  366. package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
  367. package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
  368. package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
  369. package/dist/esm-types/cli/dev.d.ts +3 -1
  370. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  371. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
  372. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
  373. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
  374. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
  375. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
  376. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
  377. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
  378. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
  379. package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
  380. package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
  381. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
  382. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
  383. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
  384. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
  385. package/dist/esm-types/cli/lib/aiFiles/index.d.ts +42 -0
  386. package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -0
  387. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
  388. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
  389. package/dist/esm-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
  390. package/dist/esm-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
  391. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
  392. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +20 -0
  393. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
  394. package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
  395. package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  396. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  397. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  398. package/dist/esm-types/cli/lib/aiFiles/status.d.ts +6 -0
  399. package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -0
  400. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +56 -0
  401. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
  402. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  403. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  404. package/dist/esm-types/cli/lib/api.d.ts +3 -3
  405. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  406. package/dist/esm-types/cli/lib/command.d.ts +2 -1
  407. package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
  408. package/dist/esm-types/cli/lib/config.d.ts +18 -6
  409. package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
  410. package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
  411. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  412. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  413. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  414. package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  415. package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -14
  416. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +61 -52
  417. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  418. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  419. package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
  420. package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  421. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  422. package/dist/esm-types/cli/lib/env.d.ts +0 -4
  423. package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
  424. package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
  425. package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
  426. package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
  427. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
  428. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  429. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  430. package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
  431. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  432. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  433. package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
  434. package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  435. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  436. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
  437. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  438. package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
  439. package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  440. package/dist/esm-types/cli/lib/updates.d.ts +4 -3
  441. package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
  442. package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
  443. package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
  444. package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
  445. package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
  446. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  447. package/dist/esm-types/cli/lib/versionApi.d.ts +7 -1
  448. package/dist/esm-types/cli/lib/versionApi.d.ts.map +1 -1
  449. package/dist/esm-types/cli/lib/workos/workos.d.ts.map +1 -1
  450. package/dist/esm-types/index.d.ts +1 -1
  451. package/dist/esm-types/react/client.d.ts +54 -2
  452. package/dist/esm-types/react/client.d.ts.map +1 -1
  453. package/dist/esm-types/react/index.d.ts +7 -2
  454. package/dist/esm-types/react/index.d.ts.map +1 -1
  455. package/dist/esm-types/react/use_query_object_options.test.d.ts +5 -0
  456. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +1 -0
  457. package/dist/esm-types/react/use_query_result.test.d.ts +5 -0
  458. package/dist/esm-types/react/use_query_result.test.d.ts.map +1 -0
  459. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  460. package/dist/esm-types/server/api.d.ts +5 -1
  461. package/dist/esm-types/server/api.d.ts.map +1 -1
  462. package/dist/esm-types/server/components/definition.d.ts +1 -0
  463. package/dist/esm-types/server/components/definition.d.ts.map +1 -1
  464. package/dist/esm-types/server/components/index.d.ts +5 -1
  465. package/dist/esm-types/server/components/index.d.ts.map +1 -1
  466. package/dist/esm-types/server/data_model.d.ts +2 -1
  467. package/dist/esm-types/server/data_model.d.ts.map +1 -1
  468. package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
  469. package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
  470. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  471. package/dist/esm-types/server/index.d.ts +1 -0
  472. package/dist/esm-types/server/index.d.ts.map +1 -1
  473. package/dist/esm-types/server/meta.d.ts +72 -0
  474. package/dist/esm-types/server/meta.d.ts.map +1 -0
  475. package/dist/esm-types/server/registration.d.ts.map +1 -1
  476. package/dist/react.bundle.js +55 -15
  477. package/dist/react.bundle.js.map +3 -3
  478. package/package.json +11 -7
  479. package/schemas/convex.schema.json +22 -3
  480. package/src/browser/index.ts +3 -0
  481. package/src/browser/query_options.test.ts +0 -9
  482. package/src/browser/query_options.ts +36 -15
  483. package/src/browser/sync/authentication_manager.ts +9 -4
  484. package/src/browser/sync/client_node.test.ts +125 -0
  485. package/src/browser/sync/web_socket_manager.ts +1 -7
  486. package/src/cli/aiFiles.ts +56 -33
  487. package/src/cli/codegen_templates/readme.ts +14 -1
  488. package/src/cli/configure.test.ts +138 -0
  489. package/src/cli/configure.ts +62 -55
  490. package/src/cli/deploy.ts +12 -9
  491. package/src/cli/deploymentCreate.test.ts +349 -14
  492. package/src/cli/deploymentCreate.ts +268 -41
  493. package/src/cli/deploymentSelect.test.ts +136 -27
  494. package/src/cli/deploymentSelect.ts +50 -41
  495. package/src/cli/deploymentSelection.test.ts +399 -37
  496. package/src/cli/dev.ts +49 -14
  497. package/src/cli/docs.ts +1 -1
  498. package/src/cli/init.ts +2 -2
  499. package/src/cli/lib/{ai → aiFiles}/MANUAL_TESTING.md +6 -2
  500. package/src/cli/lib/aiFiles/agentsmd.test.ts +133 -0
  501. package/src/cli/lib/aiFiles/agentsmd.ts +81 -0
  502. package/src/cli/lib/aiFiles/claudemd.test.ts +92 -0
  503. package/src/cli/lib/aiFiles/claudemd.ts +81 -0
  504. package/src/cli/lib/aiFiles/cursorrules.ts +25 -0
  505. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +50 -0
  506. package/src/cli/lib/aiFiles/guidelinesmd.ts +49 -0
  507. package/src/cli/lib/{ai → aiFiles}/index.test.ts +343 -516
  508. package/src/cli/lib/aiFiles/index.ts +297 -0
  509. package/src/cli/lib/{ai → aiFiles}/integration.test.ts +195 -158
  510. package/src/cli/lib/{ai → aiFiles}/paths.ts +5 -0
  511. package/src/cli/lib/{ai → aiFiles}/prompt.test.ts +79 -31
  512. package/src/cli/lib/aiFiles/skills.ts +243 -0
  513. package/src/cli/lib/aiFiles/state.test.ts +280 -0
  514. package/src/cli/lib/aiFiles/state.ts +82 -0
  515. package/src/cli/lib/aiFiles/status.ts +246 -0
  516. package/src/cli/lib/aiFiles/utils.test.ts +50 -0
  517. package/src/cli/lib/aiFiles/utils.ts +191 -0
  518. package/src/cli/lib/api.ts +88 -7
  519. package/src/cli/lib/command.ts +18 -8
  520. package/src/cli/lib/config.test.ts +185 -8
  521. package/src/cli/lib/config.ts +73 -12
  522. package/src/cli/lib/deploy2.ts +14 -27
  523. package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
  524. package/src/cli/lib/deploymentSelection.ts +59 -6
  525. package/src/cli/lib/deploymentSelector.test.ts +6 -0
  526. package/src/cli/lib/deploymentSelector.ts +2 -0
  527. package/src/cli/lib/dev.ts +202 -153
  528. package/src/cli/lib/env.ts +0 -15
  529. package/src/cli/lib/expiration.test.ts +159 -0
  530. package/src/cli/lib/expiration.ts +124 -0
  531. package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
  532. package/src/cli/lib/init.ts +6 -2
  533. package/src/cli/lib/insights.ts +1 -1
  534. package/src/cli/lib/localDeployment/anonymous.ts +19 -9
  535. package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
  536. package/src/cli/lib/localDeployment/run.ts +1 -1
  537. package/src/cli/lib/localDeployment/upgrade.ts +12 -10
  538. package/src/cli/lib/localDeployment/utils.ts +12 -0
  539. package/src/cli/lib/mcp/tools/status.ts +1 -1
  540. package/src/cli/lib/updates.test.ts +97 -60
  541. package/src/cli/lib/updates.ts +17 -15
  542. package/src/cli/lib/usage.ts +3 -1
  543. package/src/cli/lib/utils/prompts.ts +2 -0
  544. package/src/cli/lib/utils/utils.test.ts +6 -6
  545. package/src/cli/lib/utils/utils.ts +66 -27
  546. package/src/cli/lib/versionApi.test.ts +13 -10
  547. package/src/cli/lib/versionApi.ts +13 -5
  548. package/src/cli/lib/workos/workos.ts +4 -5
  549. package/src/index.ts +1 -1
  550. package/src/react/client.test.tsx +65 -0
  551. package/src/react/client.ts +129 -13
  552. package/src/react/index.ts +9 -1
  553. package/src/react/use_query_object_options.test.ts +50 -0
  554. package/src/react/use_query_result.test.ts +41 -0
  555. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
  556. package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
  557. package/src/server/api.ts +5 -1
  558. package/src/server/components/definition.ts +3 -0
  559. package/src/server/components/index.ts +62 -5
  560. package/src/server/data_model.ts +2 -1
  561. package/src/server/impl/meta_impl.ts +74 -0
  562. package/src/server/impl/registration_impl.ts +21 -9
  563. package/src/server/index.ts +8 -0
  564. package/src/server/meta.ts +76 -0
  565. package/src/server/registration.ts +10 -0
  566. package/src/server/schema.test.ts +78 -1
  567. package/dist/cjs/cli/lib/ai/config.js +0 -144
  568. package/dist/cjs/cli/lib/ai/config.js.map +0 -7
  569. package/dist/cjs/cli/lib/ai/index.js +0 -704
  570. package/dist/cjs/cli/lib/ai/index.js.map +0 -7
  571. package/dist/cjs/cli/lib/ai/paths.js.map +0 -7
  572. package/dist/cjs-types/cli/lib/ai/config.d.ts +0 -50
  573. package/dist/cjs-types/cli/lib/ai/config.d.ts.map +0 -1
  574. package/dist/cjs-types/cli/lib/ai/config.test.d.ts +0 -2
  575. package/dist/cjs-types/cli/lib/ai/config.test.d.ts.map +0 -1
  576. package/dist/cjs-types/cli/lib/ai/index.d.ts +0 -56
  577. package/dist/cjs-types/cli/lib/ai/index.d.ts.map +0 -1
  578. package/dist/cjs-types/cli/lib/ai/index.test.d.ts.map +0 -1
  579. package/dist/cjs-types/cli/lib/ai/integration.test.d.ts.map +0 -1
  580. package/dist/cjs-types/cli/lib/ai/paths.d.ts.map +0 -1
  581. package/dist/cjs-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
  582. package/dist/esm/cli/lib/ai/config.js +0 -109
  583. package/dist/esm/cli/lib/ai/config.js.map +0 -7
  584. package/dist/esm/cli/lib/ai/index.js +0 -684
  585. package/dist/esm/cli/lib/ai/index.js.map +0 -7
  586. package/dist/esm/cli/lib/ai/paths.js.map +0 -7
  587. package/dist/esm-types/cli/lib/ai/config.d.ts +0 -50
  588. package/dist/esm-types/cli/lib/ai/config.d.ts.map +0 -1
  589. package/dist/esm-types/cli/lib/ai/config.test.d.ts +0 -2
  590. package/dist/esm-types/cli/lib/ai/config.test.d.ts.map +0 -1
  591. package/dist/esm-types/cli/lib/ai/index.d.ts +0 -56
  592. package/dist/esm-types/cli/lib/ai/index.d.ts.map +0 -1
  593. package/dist/esm-types/cli/lib/ai/index.test.d.ts.map +0 -1
  594. package/dist/esm-types/cli/lib/ai/integration.test.d.ts.map +0 -1
  595. package/dist/esm-types/cli/lib/ai/paths.d.ts.map +0 -1
  596. package/dist/esm-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
  597. package/src/cli/lib/ai/config.test.ts +0 -338
  598. package/src/cli/lib/ai/config.ts +0 -159
  599. package/src/cli/lib/ai/index.ts +0 -1006
  600. /package/dist/cjs/cli/lib/{ai → aiFiles}/paths.js +0 -0
  601. /package/dist/cjs-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
  602. /package/dist/cjs-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
  603. /package/dist/cjs-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
  604. /package/dist/esm/cli/lib/{ai → aiFiles}/paths.js +0 -0
  605. /package/dist/esm-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
  606. /package/dist/esm-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
  607. /package/dist/esm-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
@@ -23,6 +23,7 @@ import {
23
23
  parseDeploymentSelector,
24
24
  InProjectSelector,
25
25
  } from "./deploymentSelector.js";
26
+ import { loadProjectLocalConfig } from "./localDeployment/filePaths.js";
26
27
  import { chalkStderr } from "chalk";
27
28
  export type DeploymentName = string;
28
29
  export type CloudDeploymentType = "prod" | "dev" | "preview" | "custom";
@@ -104,7 +105,7 @@ export const deploymentSelectionWithinProjectSchema = z.discriminatedUnion(
104
105
  z.object({ kind: z.literal("deploymentName"), deploymentName: z.string() }),
105
106
  z.object({ kind: z.literal("prod") }),
106
107
  z.object({ kind: z.literal("implicitProd") }),
107
- z.object({ kind: z.literal("ownDev") }),
108
+ z.object({ kind: z.literal("unspecified") }),
108
109
  z.object({
109
110
  kind: z.literal("deploymentSelector"),
110
111
  selector: z.string(),
@@ -152,7 +153,7 @@ export function deploymentSelectionWithinProjectFromOptions(
152
153
  if (options.implicitProd) {
153
154
  return { kind: "implicitProd" };
154
155
  }
155
- return { kind: "ownDev" };
156
+ return { kind: "unspecified" };
156
157
  }
157
158
 
158
159
  export async function validateDeploymentSelectionForExistingDeployment(
@@ -161,7 +162,7 @@ export async function validateDeploymentSelectionForExistingDeployment(
161
162
  source: "selfHosted" | "deployKey" | "cliArgs",
162
163
  ) {
163
164
  if (
164
- deploymentSelection.kind === "ownDev" ||
165
+ deploymentSelection.kind === "unspecified" ||
165
166
  deploymentSelection.kind === "implicitProd"
166
167
  ) {
167
168
  // These are both considered the "default" selection depending on the command, so this is always fine
@@ -421,6 +422,9 @@ async function fetchExistingDevDeploymentCredentialsOrCrash(
421
422
  // Helpers for `loadSelectedDeploymentCredentials`
422
423
  // ----------------------------------------------------------------------
423
424
 
425
+ // Returns the user's own dev deployment, which may be a local deployment
426
+ // if one is configured. Used for dev commands (including `npx convex dev`)
427
+ // when no specific deployment is specified.
424
428
  async function handleOwnDev(
425
429
  ctx: Context,
426
430
  projectSelection: ProjectSelection,
@@ -595,7 +599,9 @@ async function fetchDeploymentCredentialsWithinCurrentProject(
595
599
  deploymentType: DeploymentType;
596
600
  }> {
597
601
  switch (deploymentSelection.kind) {
598
- case "ownDev": {
602
+ case "unspecified": {
603
+ // default to the user's default dev deployment
604
+ // TODO: this currently also handles local dev, but that should probably be split out into a different DeploymenSelection kind
599
605
  return await handleOwnDev(ctx, projectSelection);
600
606
  }
601
607
  case "implicitProd":
@@ -659,7 +665,7 @@ async function resolveDeploymentNameByReference(
659
665
  return await ctx.crash({
660
666
  exitCode: 1,
661
667
  errorType: "fatal",
662
- printedMessage: `Deployment “${reference}” not found. To create a new deployment, use ${chalkStderr.bold(`npx convex deployment create ${reference} --team ${teamSlug} --project ${projectSlug} --select`)}`,
668
+ printedMessage: `Deployment “${reference}” not found. To create a new deployment, use ${chalkStderr.bold(`npx convex deployment create ${teamSlug}:${projectSlug}:${reference} --select`)}`,
663
669
  errForSentry: err,
664
670
  });
665
671
  }
@@ -678,8 +684,31 @@ async function handleRefInProject(
678
684
  deploymentType: DeploymentType;
679
685
  }> {
680
686
  switch (selector.kind) {
681
- case "dev":
682
- return await handleOwnDev(ctx, projectSelection);
687
+ case "dev": {
688
+ const access = await checkAccessToSelectedProject(ctx, projectSelection);
689
+ if (access.kind !== "hasAccess") {
690
+ return await ctx.crash({
691
+ exitCode: 1,
692
+ errorType: "fatal",
693
+ printedMessage:
694
+ "You don't have access to the selected project. Run `npx convex dev` to select a different project.",
695
+ });
696
+ }
697
+ const deploymentName = await resolveDefaultCloudDevDeploymentName(
698
+ ctx,
699
+ access.teamSlug,
700
+ access.projectSlug,
701
+ );
702
+ // Pass teamAndProjectSlugs instead of the original projectSelection,
703
+ // because handleDeploymentName sends projectSelection to Big Brain's
704
+ // authorize_within_current_project endpoint, which doesn't understand
705
+ // deploymentType "local".
706
+ return await handleDeploymentName(ctx, deploymentName, {
707
+ kind: "teamAndProjectSlugs",
708
+ teamSlug: access.teamSlug,
709
+ projectSlug: access.projectSlug,
710
+ });
711
+ }
683
712
  case "prod":
684
713
  return await handleProd(ctx, projectSelection);
685
714
  case "reference": {
@@ -721,6 +750,26 @@ async function handleDeploymentSelector(
721
750
  parsed.deploymentName,
722
751
  projectSelection,
723
752
  );
753
+ case "local": {
754
+ const localConfig = loadProjectLocalConfig(ctx);
755
+ if (localConfig === null) {
756
+ return ctx.crash({
757
+ exitCode: 1,
758
+ errorType: "fatal",
759
+ printedMessage: `No local deployment found. Run ${chalkStderr.bold("npx convex deployment create local")} to create one.`,
760
+ });
761
+ }
762
+ const credentials = await loadLocalDeploymentCredentials(
763
+ ctx,
764
+ localConfig.deploymentName,
765
+ );
766
+ return {
767
+ deploymentName: localConfig.deploymentName,
768
+ adminKey: credentials.adminKey,
769
+ url: credentials.deploymentUrl,
770
+ deploymentType: "local",
771
+ };
772
+ }
724
773
  case "inCurrentProject":
725
774
  return await handleRefInProject(ctx, parsed.selector, projectSelection);
726
775
  case "inProject": {
@@ -970,3 +1019,35 @@ export async function getTeamsForUser(ctx: Context) {
970
1019
  );
971
1020
  return teams;
972
1021
  }
1022
+
1023
+ async function resolveDefaultCloudDevDeploymentName(
1024
+ ctx: Context,
1025
+ teamSlug: string,
1026
+ projectSlug: string,
1027
+ ): Promise<string> {
1028
+ try {
1029
+ const result = await typedPlatformClient(ctx, { throw: true }).GET(
1030
+ "/teams/{team_id_or_slug}/projects/{project_slug}/deployment",
1031
+ {
1032
+ params: {
1033
+ path: { team_id_or_slug: teamSlug, project_slug: projectSlug },
1034
+ query: { defaultDev: true },
1035
+ },
1036
+ },
1037
+ );
1038
+ return result.data!.name;
1039
+ } catch (err) {
1040
+ if (
1041
+ err instanceof ThrowingFetchError &&
1042
+ err.serverErrorData?.code === "DeploymentNotFound"
1043
+ ) {
1044
+ return await ctx.crash({
1045
+ exitCode: 1,
1046
+ errorType: "fatal",
1047
+ printedMessage: `You don’t have a personal cloud dev deployment in this project. Run ${chalkStderr.bold("npx convex deployment create --type dev --default")} to create one.`,
1048
+ errForSentry: err,
1049
+ });
1050
+ }
1051
+ return await logAndHandleFetchError(ctx, err);
1052
+ }
1053
+ }
@@ -213,10 +213,14 @@ Command.prototype.addDeploymentSelectionOptions = function (
213
213
  new Option(
214
214
  "--deployment <deployment>",
215
215
  action +
216
- " the specified deployment. Accepts a deployment name (e.g. joyful-capybara-123), ref (e.g. dev/james), 'dev' (for your personal dev deployment), 'prod' (for your project’s default production deployment). You can also select deployments in other projects with 'project-slug:ref' or 'team-slug:project-slug:ref'.",
217
- )
218
- .conflicts(["--prod", "--preview-name", "--deployment-name", "--url"])
219
- .hideHelp(), // TODO(nicolas) Make this public
216
+ " a specific deployment. Accepts:\n" +
217
+ "• a deployment name (e.g. joyful-capybara-123)\n" +
218
+ " a deployment ref (e.g. dev/james)\n" +
219
+ "• `dev` (for your personal dev deployment)\n" +
220
+ "• `prod` (for your project’s default production deployment)\n" +
221
+ "• `local` (for your local dev deployment)." +
222
+ "\nYou can also select deployments in other projects with `project-slug:ref` or `team-slug:project-slug:ref`.",
223
+ ).conflicts(["--prod", "--preview-name", "--deployment-name", "--url"]),
220
224
  )
221
225
  .addOption(
222
226
  new Option(
@@ -243,8 +247,9 @@ export async function normalizeDevOptions(
243
247
  codegen: "enable" | "disable";
244
248
  once?: boolean;
245
249
  untilSuccess: boolean;
246
- run?: string | undefined;
250
+ start?: string;
247
251
  runSh?: string;
252
+ run?: string | undefined;
248
253
  runComponent?: string;
249
254
  tailLogs?: string | true;
250
255
  traceEvents: boolean;
@@ -309,10 +314,10 @@ export async function normalizeDevOptions(
309
314
  name: cmdOptions.run,
310
315
  component: cmdOptions.runComponent,
311
316
  }
312
- : cmdOptions.runSh !== undefined
317
+ : (cmdOptions.start ?? cmdOptions.runSh) !== undefined
313
318
  ? {
314
319
  kind: "shell",
315
- command: cmdOptions.runSh,
320
+ command: (cmdOptions.start ?? cmdOptions.runSh)!,
316
321
  }
317
322
  : undefined,
318
323
  tailLogs:
@@ -333,7 +338,12 @@ Command.prototype.addDeployOptions = function () {
333
338
  "--dry-run",
334
339
  "Print out the generated configuration without deploying to your Convex deployment",
335
340
  )
336
- .option("-y, --yes", "Skip confirmation prompt when running locally")
341
+ .addOption(
342
+ new Option(
343
+ "-y, --yes",
344
+ "Skip confirmation prompt when running interactively. Warning: this deploys to PRODUCTION. To deploy to your current dev environment, run npx convex dev --once",
345
+ ).hideHelp(),
346
+ )
337
347
  .addOption(
338
348
  new Option(
339
349
  "--typecheck <mode>",
@@ -1,10 +1,23 @@
1
- import { vi, test, expect, beforeEach, MockInstance, beforeAll } from "vitest";
1
+ import {
2
+ vi,
3
+ test,
4
+ expect,
5
+ beforeEach,
6
+ afterEach,
7
+ describe,
8
+ MockInstance,
9
+ beforeAll,
10
+ } from "vitest";
11
+ import fs from "fs";
12
+ import os from "os";
13
+ import path from "path";
2
14
  import {
3
15
  parseProjectConfig,
4
- ProjectConfig,
5
- writeProjectConfig,
16
+ type ProjectConfig,
17
+ ensureConvexFunctionsDir,
6
18
  readProjectConfig,
7
19
  resetUnknownKeyWarnings,
20
+ writeAiFilesConfig,
8
21
  } from "./config.js";
9
22
  import { Context, oneoffContext } from "../../bundler/context.js";
10
23
  import { logFailure } from "../../bundler/log.js";
@@ -250,7 +263,7 @@ test("parseProjectConfig - top-level validation", async () => {
250
263
  );
251
264
  });
252
265
 
253
- test("writeProjectConfig - creates functions directory", async () => {
266
+ test("ensureConvexFunctionsDir - creates functions directory", async () => {
254
267
  let mkdirCalled = false;
255
268
  let mkdirPath = "";
256
269
  const testCtx = {
@@ -272,12 +285,12 @@ test("writeProjectConfig - creates functions directory", async () => {
272
285
  codegen: { staticApi: false, staticDataModel: false },
273
286
  };
274
287
 
275
- await writeProjectConfig(testCtx, config);
288
+ await ensureConvexFunctionsDir(testCtx, config);
276
289
  expect(mkdirCalled).toBe(true);
277
290
  expect(mkdirPath).toMatch(/^my-functions[\\/]$/);
278
291
  });
279
292
 
280
- test("writeProjectConfig - does not write to convex.json", async () => {
293
+ test("ensureConvexFunctionsDir - does not write to convex.json", async () => {
281
294
  let writeUtf8FileCalled = false;
282
295
  const testCtx = {
283
296
  ...ctx,
@@ -299,7 +312,7 @@ test("writeProjectConfig - does not write to convex.json", async () => {
299
312
  codegen: { staticApi: true, staticDataModel: true },
300
313
  };
301
314
 
302
- await writeProjectConfig(testCtx, config);
315
+ await ensureConvexFunctionsDir(testCtx, config);
303
316
  expect(writeUtf8FileCalled).toBe(false);
304
317
  });
305
318
 
@@ -327,7 +340,7 @@ test("readProjectConfig - returns defaults when file doesn't exist", async () =>
327
340
  node: { externalPackages: [] },
328
341
  generateCommonJSApi: false,
329
342
  codegen: { staticApi: false, staticDataModel: false },
330
- aiFiles: { disableStalenessMessage: false },
343
+ aiFiles: {},
331
344
  });
332
345
  });
333
346
 
@@ -431,6 +444,39 @@ test("parseProjectConfig - warns about unknown properties", async () => {
431
444
  expect(stripVTControlCharacters(stderr5)).not.toContain("Unknown");
432
445
  });
433
446
 
447
+ test("parseProjectConfig - aiFiles fields", async () => {
448
+ await assertParses(
449
+ {
450
+ functions: "convex/",
451
+ aiFiles: {
452
+ enabled: false,
453
+ disableStalenessMessage: true,
454
+ skills: {
455
+ agents: ["cursor", "windsurf"],
456
+ },
457
+ },
458
+ },
459
+ {
460
+ functions: "convex/",
461
+ aiFiles: {
462
+ enabled: false,
463
+ disableStalenessMessage: true,
464
+ skills: {
465
+ agents: ["cursor", "windsurf"],
466
+ },
467
+ },
468
+ codegen: {
469
+ staticApi: false,
470
+ staticDataModel: false,
471
+ },
472
+ generateCommonJSApi: false,
473
+ node: {
474
+ externalPackages: [],
475
+ },
476
+ },
477
+ );
478
+ });
479
+
434
480
  // AuthKit configuration tests
435
481
  test("parseProjectConfig - authKit basic valid configs", async () => {
436
482
  // Basic config with no settings
@@ -850,3 +896,134 @@ test("parseProjectConfig - authKit preview and prod restrictions", async () => {
850
896
  },
851
897
  );
852
898
  });
899
+
900
+ // ---------------------------------------------------------------------------
901
+ // writeAiFilesConfig
902
+ // ---------------------------------------------------------------------------
903
+
904
+ describe("writeAiFilesConfig", () => {
905
+ let tmpDir: string;
906
+
907
+ beforeEach(() => {
908
+ tmpDir = fs.mkdtempSync(`${os.tmpdir()}${path.sep}`);
909
+ });
910
+
911
+ afterEach(() => {
912
+ fs.rmSync(tmpDir, { recursive: true, force: true });
913
+ });
914
+
915
+ test("creates convex.json with $schema when file does not exist", async () => {
916
+ await writeAiFilesConfig({
917
+ projectDir: tmpDir,
918
+ aiFiles: { enabled: false },
919
+ });
920
+
921
+ const written = JSON.parse(
922
+ fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
923
+ );
924
+ expect(written.$schema).toBe(
925
+ "node_modules/convex/schemas/convex.schema.json",
926
+ );
927
+ expect(written.aiFiles).toEqual({ enabled: false });
928
+ });
929
+
930
+ test("writes aiFiles as-is without merging sub-keys", async () => {
931
+ fs.writeFileSync(
932
+ path.join(tmpDir, "convex.json"),
933
+ JSON.stringify({ aiFiles: { disableStalenessMessage: true } }, null, 2),
934
+ "utf8",
935
+ );
936
+
937
+ await writeAiFilesConfig({
938
+ projectDir: tmpDir,
939
+ aiFiles: { enabled: false },
940
+ });
941
+
942
+ const written = JSON.parse(
943
+ fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
944
+ );
945
+ expect(written.aiFiles).toEqual({ enabled: false });
946
+ });
947
+
948
+ test("preserves other existing fields in convex.json", async () => {
949
+ fs.writeFileSync(
950
+ path.join(tmpDir, "convex.json"),
951
+ JSON.stringify(
952
+ {
953
+ functions: "src/convex/",
954
+ customKey: "preserved",
955
+ aiFiles: { skills: { agents: ["cursor"] } },
956
+ },
957
+ null,
958
+ 2,
959
+ ),
960
+ "utf8",
961
+ );
962
+
963
+ await writeAiFilesConfig({
964
+ projectDir: tmpDir,
965
+ aiFiles: { enabled: false },
966
+ });
967
+
968
+ const written = JSON.parse(
969
+ fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
970
+ );
971
+ expect(written.functions).toBe("src/convex/");
972
+ expect(written.customKey).toBe("preserved");
973
+ expect(written.aiFiles).toEqual({ enabled: false });
974
+ });
975
+
976
+ test("removes aiFiles key when undefined", async () => {
977
+ fs.writeFileSync(
978
+ path.join(tmpDir, "convex.json"),
979
+ JSON.stringify({ aiFiles: { enabled: false } }, null, 2),
980
+ "utf8",
981
+ );
982
+
983
+ await writeAiFilesConfig({
984
+ projectDir: tmpDir,
985
+ aiFiles: undefined,
986
+ });
987
+
988
+ const written = JSON.parse(
989
+ fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
990
+ );
991
+ expect(written.aiFiles).toBeUndefined();
992
+ });
993
+
994
+ test("preserves existing $schema when file already has one", async () => {
995
+ fs.writeFileSync(
996
+ path.join(tmpDir, "convex.json"),
997
+ JSON.stringify({ $schema: "./custom-schema.json" }, null, 2),
998
+ "utf8",
999
+ );
1000
+
1001
+ await writeAiFilesConfig({
1002
+ projectDir: tmpDir,
1003
+ aiFiles: undefined,
1004
+ });
1005
+
1006
+ const written = JSON.parse(
1007
+ fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
1008
+ );
1009
+ expect(written.$schema).toBe("./custom-schema.json");
1010
+ });
1011
+
1012
+ test("handles invalid JSON in existing convex.json gracefully", async () => {
1013
+ fs.writeFileSync(
1014
+ path.join(tmpDir, "convex.json"),
1015
+ "not valid json",
1016
+ "utf8",
1017
+ );
1018
+
1019
+ await writeAiFilesConfig({
1020
+ projectDir: tmpDir,
1021
+ aiFiles: { enabled: false },
1022
+ });
1023
+
1024
+ const written = JSON.parse(
1025
+ fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
1026
+ );
1027
+ expect(written.aiFiles).toEqual({ enabled: false });
1028
+ });
1029
+ });
@@ -1,5 +1,7 @@
1
1
  import { chalkStderr } from "chalk";
2
2
  import path from "path";
3
+ // eslint-disable-next-line no-restricted-imports
4
+ import { promises as nodeFs } from "fs";
3
5
  import { z } from "zod";
4
6
  import { Context } from "../../bundler/context.js";
5
7
  import { TypescriptCompiler } from "./typecheck.js";
@@ -102,8 +104,16 @@ export interface ProjectConfig {
102
104
 
103
105
  // Convex AI files user preferences.
104
106
  aiFiles?: {
105
- // When true, suppresses AI files install/staleness nags.
107
+ // When false, disables all AI files prompts and staleness messages.
108
+ enabled?: boolean;
109
+ // @deprecated use `enabled` instead.
106
110
  disableStalenessMessage?: boolean;
111
+ // Configuration for agent skills installed by Convex.
112
+ skills?: {
113
+ // List of agents to install skills for (e.g. 'claude-code', 'codex', 'cursor').
114
+ // Defaults to ['claude-code', 'codex'].
115
+ agents?: string[];
116
+ };
107
117
  };
108
118
  }
109
119
 
@@ -131,9 +141,9 @@ export function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {
131
141
  return projectConfig.codegen.fileType === "ts";
132
142
  }
133
143
 
134
- /** Whether the new component API import style should be used (default is false) */
144
+ /** Whether the new component API import style should be used */
135
145
  export function usesComponentApiImports(projectConfig: ProjectConfig): boolean {
136
- return projectConfig.codegen.legacyComponentApi === false;
146
+ return projectConfig.codegen.legacyComponentApi !== true;
137
147
  }
138
148
 
139
149
  /**
@@ -289,7 +299,13 @@ const BundlerSchema = z.object({
289
299
  });
290
300
 
291
301
  const AiFilesSchema = z.object({
292
- disableStalenessMessage: z.boolean().default(false),
302
+ enabled: z.boolean().optional(),
303
+ disableStalenessMessage: z.boolean().optional(),
304
+ skills: z
305
+ .object({
306
+ agents: z.array(z.string()).optional(),
307
+ })
308
+ .optional(),
293
309
  });
294
310
 
295
311
  const refineToObject = <T extends z.ZodTypeAny>(schema: T) =>
@@ -553,9 +569,7 @@ export async function readProjectConfig(ctx: Context): Promise<{
553
569
  staticApi: false,
554
570
  staticDataModel: false,
555
571
  },
556
- aiFiles: {
557
- disableStalenessMessage: false,
558
- },
572
+ aiFiles: {},
559
573
  },
560
574
  configPath: configName(),
561
575
  };
@@ -743,12 +757,10 @@ export async function readConfig(
743
757
  /**
744
758
  * Ensure the functions directory exists.
745
759
  *
746
- * Note: This function no longer writes to or deletes `convex.json`. The config
747
- * file is now treated as user-owned and is not modified by the CLI. This allows
748
- * users to maintain their preferred formatting and any comments they may add
749
- * (if we later support JSONC parsing).
760
+ * Note: convex.json is treated as user-owned and is not modified by the CLI.
761
+ * Use writeAiFilesConfig() to explicitly patch the aiFiles section.
750
762
  */
751
- export async function writeProjectConfig(
763
+ export async function ensureConvexFunctionsDir(
752
764
  ctx: Context,
753
765
  projectConfig: ProjectConfig,
754
766
  ) {
@@ -1006,3 +1018,52 @@ export async function handlePushConfigError(
1006
1018
  logFailure(defaultMessage);
1007
1019
  return await logAndHandleFetchError(ctx, error);
1008
1020
  }
1021
+
1022
+ export type AiFilesProjectConfig = NonNullable<ProjectConfig["aiFiles"]>;
1023
+
1024
+ function tryParseJson(raw: string): unknown {
1025
+ try {
1026
+ return JSON.parse(raw);
1027
+ } catch {
1028
+ return {};
1029
+ }
1030
+ }
1031
+
1032
+ function toRecord(val: unknown): Record<string, unknown> {
1033
+ if (val !== null && typeof val === "object" && !Array.isArray(val))
1034
+ return val as Record<string, unknown>;
1035
+ return {};
1036
+ }
1037
+
1038
+ /**
1039
+ * Write the `aiFiles` section of `convex.json`, preserving all other keys.
1040
+ * Writes the given object as-is with no merging or default logic.
1041
+ * If `aiFiles` is undefined, the key is removed from the file.
1042
+ */
1043
+ export async function writeAiFilesConfig({
1044
+ projectDir,
1045
+ aiFiles,
1046
+ }: {
1047
+ projectDir: string;
1048
+ aiFiles: AiFilesProjectConfig | undefined;
1049
+ }): Promise<void> {
1050
+ const filePath = path.join(projectDir, "convex.json");
1051
+ const raw = await nodeFs.readFile(filePath, "utf8").catch(() => null);
1052
+ const base = toRecord(raw !== null ? tryParseJson(raw) : {});
1053
+
1054
+ const { $schema, aiFiles: _existing, ...rest } = base;
1055
+
1056
+ const hasContent = aiFiles !== undefined && Object.keys(aiFiles).length > 0;
1057
+
1058
+ const next: Record<string, unknown> = {
1059
+ $schema: $schema ?? "node_modules/convex/schemas/convex.schema.json",
1060
+ ...rest,
1061
+ ...(hasContent ? { aiFiles } : {}),
1062
+ };
1063
+
1064
+ await nodeFs.writeFile(
1065
+ filePath,
1066
+ JSON.stringify(next, null, 2) + "\n",
1067
+ "utf8",
1068
+ );
1069
+ }
@@ -8,7 +8,11 @@ import {
8
8
  showSpinner,
9
9
  } from "../../bundler/log.js";
10
10
  import { spawnSync } from "child_process";
11
- import { deploymentFetch, logAndHandleFetchError } from "./utils/utils.js";
11
+ import {
12
+ deploymentFetch,
13
+ logAndHandleFetchError,
14
+ typedDeploymentClient,
15
+ } from "./utils/utils.js";
12
16
  import {
13
17
  EvaluatePushResponse,
14
18
  evaluatePushResponse,
@@ -31,7 +35,6 @@ import { PushOptions } from "./components.js";
31
35
  import { DeploymentType } from "./api.js";
32
36
  import { runPush } from "./components.js";
33
37
  import { suggestedEnvVarNames } from "./envvars.js";
34
- import { runSystemQuery } from "./run.js";
35
38
  import {
36
39
  handlePushConfigError,
37
40
  readProjectConfig,
@@ -40,7 +43,6 @@ import {
40
43
  import { deploymentDashboardUrlPage } from "./dashboard.js";
41
44
  import { addProgressLinkIfSlow } from "./indexes.js";
42
45
  import { ensureAuthKitProvisionedBeforeBuild } from "./workos/workos.js";
43
- import { fetchDeploymentCanonicalSiteUrl } from "./env.js";
44
46
 
45
47
  const brotli = promisify(zlib.brotliCompress);
46
48
 
@@ -485,14 +487,10 @@ export async function runCommand(
485
487
  deploymentUrl: options.url,
486
488
  adminKey: options.adminKey,
487
489
  };
488
- const canonicalCloudUrl = await fetchDeploymentCanonicalCloudUrl(
489
- ctx,
490
- deployment,
491
- );
492
- const canonicalSiteUrl = await fetchDeploymentCanonicalSiteUrl(
493
- ctx,
494
- deployment,
495
- );
490
+ const {
491
+ convexCloudUrl: canonicalCloudUrl,
492
+ convexSiteUrl: canonicalSiteUrl,
493
+ } = await fetchDeploymentCanonicalUrls(ctx, deployment);
496
494
 
497
495
  const env = { ...process.env };
498
496
  env[urlVar] = canonicalCloudUrl;
@@ -517,22 +515,11 @@ export async function runCommand(
517
515
  );
518
516
  }
519
517
 
520
- export async function fetchDeploymentCanonicalCloudUrl(
518
+ export async function fetchDeploymentCanonicalUrls(
521
519
  ctx: Context,
522
520
  options: { deploymentUrl: string; adminKey: string },
523
- ): Promise<string> {
524
- const result = await runSystemQuery(ctx, {
525
- ...options,
526
- functionName: "_system/cli/convexUrl:cloudUrl",
527
- componentPath: undefined,
528
- args: {},
529
- });
530
- if (typeof result !== "string") {
531
- return await ctx.crash({
532
- exitCode: 1,
533
- errorType: "invalid filesystem or env vars",
534
- printedMessage: "Invalid process.env.CONVEX_CLOUD_URL",
535
- });
536
- }
537
- return result;
521
+ ): Promise<{ convexCloudUrl: string; convexSiteUrl: string }> {
522
+ const client = typedDeploymentClient(ctx, options);
523
+ const result = await client.GET("/get_canonical_urls");
524
+ return result.data!;
538
525
  }
@@ -12,7 +12,10 @@ export const componentArgumentValidator = looseObject({
12
12
  });
13
13
 
14
14
  export const componentDefinitionType = z.union([
15
- looseObject({ type: z.literal("app") }),
15
+ looseObject({
16
+ type: z.literal("app"),
17
+ httpPrefix: z.string().optional(),
18
+ }),
16
19
  looseObject({
17
20
  type: z.literal("childComponent"),
18
21
  name: identifier,