convex 1.34.1 → 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 (512) hide show
  1. package/CHANGELOG.md +86 -43
  2. package/dist/browser.bundle.js +8 -2
  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/cli/aiFiles.js +31 -13
  9. package/dist/cjs/cli/aiFiles.js.map +3 -3
  10. package/dist/cjs/cli/codegen_templates/readme.js +14 -1
  11. package/dist/cjs/cli/codegen_templates/readme.js.map +2 -2
  12. package/dist/cjs/cli/configure.js +21 -24
  13. package/dist/cjs/cli/configure.js.map +2 -2
  14. package/dist/cjs/cli/deploy.js +7 -8
  15. package/dist/cjs/cli/deploy.js.map +2 -2
  16. package/dist/cjs/cli/deploymentCreate.js +225 -40
  17. package/dist/cjs/cli/deploymentCreate.js.map +3 -3
  18. package/dist/cjs/cli/deploymentSelect.js +14 -13
  19. package/dist/cjs/cli/deploymentSelect.js.map +2 -2
  20. package/dist/cjs/cli/dev.js +30 -11
  21. package/dist/cjs/cli/dev.js.map +2 -2
  22. package/dist/cjs/cli/docs.js +1 -1
  23. package/dist/cjs/cli/docs.js.map +2 -2
  24. package/dist/cjs/cli/init.js +1 -1
  25. package/dist/cjs/cli/init.js.map +2 -2
  26. package/dist/cjs/cli/lib/aiFiles/agentsmd.js +14 -10
  27. package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +2 -2
  28. package/dist/cjs/cli/lib/aiFiles/claudemd.js +14 -10
  29. package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +2 -2
  30. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +10 -3
  31. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
  32. package/dist/cjs/cli/lib/aiFiles/index.js +70 -86
  33. package/dist/cjs/cli/lib/aiFiles/index.js.map +3 -3
  34. package/dist/cjs/cli/lib/aiFiles/skills.js +28 -12
  35. package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
  36. package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
  37. package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
  38. package/dist/cjs/cli/lib/aiFiles/status.js +31 -28
  39. package/dist/cjs/cli/lib/aiFiles/status.js.map +2 -2
  40. package/dist/cjs/cli/lib/aiFiles/utils.js +31 -14
  41. package/dist/cjs/cli/lib/aiFiles/utils.js.map +2 -2
  42. package/dist/cjs/cli/lib/api.js +70 -7
  43. package/dist/cjs/cli/lib/api.js.map +2 -2
  44. package/dist/cjs/cli/lib/command.js +4 -5
  45. package/dist/cjs/cli/lib/command.js.map +2 -2
  46. package/dist/cjs/cli/lib/config.js +41 -4
  47. package/dist/cjs/cli/lib/config.js.map +3 -3
  48. package/dist/cjs/cli/lib/deploy2.js +9 -26
  49. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  50. package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
  51. package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
  52. package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
  53. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  54. package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
  55. package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
  56. package/dist/cjs/cli/lib/dev.js +162 -117
  57. package/dist/cjs/cli/lib/dev.js.map +2 -2
  58. package/dist/cjs/cli/lib/env.js +1 -13
  59. package/dist/cjs/cli/lib/env.js.map +2 -2
  60. package/dist/cjs/cli/lib/expiration.js +104 -0
  61. package/dist/cjs/cli/lib/expiration.js.map +7 -0
  62. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  63. package/dist/cjs/cli/lib/init.js +4 -3
  64. package/dist/cjs/cli/lib/init.js.map +2 -2
  65. package/dist/cjs/cli/lib/insights.js +1 -1
  66. package/dist/cjs/cli/lib/insights.js.map +2 -2
  67. package/dist/cjs/cli/lib/localDeployment/anonymous.js +14 -7
  68. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
  69. package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
  70. package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
  71. package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
  72. package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
  73. package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
  74. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
  75. package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
  76. package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
  77. package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
  78. package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
  79. package/dist/cjs/cli/lib/updates.js +8 -9
  80. package/dist/cjs/cli/lib/updates.js.map +2 -2
  81. package/dist/cjs/cli/lib/usage.js +2 -1
  82. package/dist/cjs/cli/lib/usage.js.map +2 -2
  83. package/dist/cjs/cli/lib/utils/prompts.js +2 -1
  84. package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
  85. package/dist/cjs/cli/lib/utils/utils.js +46 -20
  86. package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
  87. package/dist/cjs/index.js +1 -1
  88. package/dist/cjs/index.js.map +1 -1
  89. package/dist/cjs/react/client.js +43 -6
  90. package/dist/cjs/react/client.js.map +2 -2
  91. package/dist/cjs/react/index.js +2 -0
  92. package/dist/cjs/react/index.js.map +2 -2
  93. package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  94. package/dist/cjs/server/api.js.map +2 -2
  95. package/dist/cjs/server/components/definition.js.map +1 -1
  96. package/dist/cjs/server/components/index.js +40 -4
  97. package/dist/cjs/server/components/index.js.map +2 -2
  98. package/dist/cjs/server/data_model.js.map +1 -1
  99. package/dist/cjs/server/impl/meta_impl.js +78 -0
  100. package/dist/cjs/server/impl/meta_impl.js.map +7 -0
  101. package/dist/cjs/server/impl/registration_impl.js +16 -11
  102. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  103. package/dist/cjs/server/index.js.map +2 -2
  104. package/dist/cjs/server/meta.js +17 -0
  105. package/dist/cjs/server/meta.js.map +7 -0
  106. package/dist/cjs/server/registration.js.map +1 -1
  107. package/dist/cjs-types/browser/index.d.ts +1 -0
  108. package/dist/cjs-types/browser/index.d.ts.map +1 -1
  109. package/dist/cjs-types/browser/query_options.d.ts +12 -9
  110. package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
  111. package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
  112. package/dist/cjs-types/cli/codegen_templates/readme.d.ts.map +1 -1
  113. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  114. package/dist/cjs-types/cli/configure.test.d.ts +2 -0
  115. package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
  116. package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
  117. package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
  118. package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
  119. package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
  120. package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
  121. package/dist/cjs-types/cli/dev.d.ts +3 -1
  122. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  123. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +5 -5
  124. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
  125. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
  126. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
  127. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
  128. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
  129. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +20 -18
  130. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -1
  131. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +6 -4
  132. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
  133. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
  134. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  135. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  136. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  137. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +4 -1
  138. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -1
  139. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +13 -3
  140. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
  141. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  142. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  143. package/dist/cjs-types/cli/lib/api.d.ts +3 -3
  144. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  145. package/dist/cjs-types/cli/lib/command.d.ts +2 -1
  146. package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
  147. package/dist/cjs-types/cli/lib/config.d.ts +17 -6
  148. package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
  149. package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
  150. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  151. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  152. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  153. package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  154. package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -14
  155. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +61 -52
  156. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  157. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  158. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
  159. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  160. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  161. package/dist/cjs-types/cli/lib/env.d.ts +0 -4
  162. package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
  163. package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
  164. package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
  165. package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
  166. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
  167. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  168. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  169. package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
  170. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  171. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  172. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
  173. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  174. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  175. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
  176. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  177. package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
  178. package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  179. package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
  180. package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
  181. package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
  182. package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
  183. package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
  184. package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
  185. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  186. package/dist/cjs-types/index.d.ts +1 -1
  187. package/dist/cjs-types/react/client.d.ts +54 -2
  188. package/dist/cjs-types/react/client.d.ts.map +1 -1
  189. package/dist/cjs-types/react/index.d.ts +7 -2
  190. package/dist/cjs-types/react/index.d.ts.map +1 -1
  191. package/dist/cjs-types/react/use_query_object_options.test.d.ts +5 -0
  192. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +1 -0
  193. package/dist/cjs-types/react/use_query_result.test.d.ts +5 -0
  194. package/dist/cjs-types/react/use_query_result.test.d.ts.map +1 -0
  195. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  196. package/dist/cjs-types/server/api.d.ts +5 -1
  197. package/dist/cjs-types/server/api.d.ts.map +1 -1
  198. package/dist/cjs-types/server/components/definition.d.ts +1 -0
  199. package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
  200. package/dist/cjs-types/server/components/index.d.ts +5 -1
  201. package/dist/cjs-types/server/components/index.d.ts.map +1 -1
  202. package/dist/cjs-types/server/data_model.d.ts +2 -1
  203. package/dist/cjs-types/server/data_model.d.ts.map +1 -1
  204. package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
  205. package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
  206. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  207. package/dist/cjs-types/server/index.d.ts +1 -0
  208. package/dist/cjs-types/server/index.d.ts.map +1 -1
  209. package/dist/cjs-types/server/meta.d.ts +72 -0
  210. package/dist/cjs-types/server/meta.d.ts.map +1 -0
  211. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  212. package/dist/cli.bundle.cjs +1670 -1214
  213. package/dist/cli.bundle.cjs.map +4 -4
  214. package/dist/esm/browser/index-node.js +1 -0
  215. package/dist/esm/browser/index.js +1 -0
  216. package/dist/esm/browser/index.js.map +2 -2
  217. package/dist/esm/browser/query_options.js.map +2 -2
  218. package/dist/esm/cli/aiFiles.js +33 -15
  219. package/dist/esm/cli/aiFiles.js.map +2 -2
  220. package/dist/esm/cli/codegen_templates/readme.js +14 -1
  221. package/dist/esm/cli/codegen_templates/readme.js.map +2 -2
  222. package/dist/esm/cli/configure.js +23 -26
  223. package/dist/esm/cli/configure.js.map +2 -2
  224. package/dist/esm/cli/deploy.js +11 -10
  225. package/dist/esm/cli/deploy.js.map +2 -2
  226. package/dist/esm/cli/deploymentCreate.js +238 -42
  227. package/dist/esm/cli/deploymentCreate.js.map +2 -2
  228. package/dist/esm/cli/deploymentSelect.js +13 -12
  229. package/dist/esm/cli/deploymentSelect.js.map +2 -2
  230. package/dist/esm/cli/dev.js +34 -13
  231. package/dist/esm/cli/dev.js.map +2 -2
  232. package/dist/esm/cli/docs.js +1 -1
  233. package/dist/esm/cli/docs.js.map +2 -2
  234. package/dist/esm/cli/init.js +2 -2
  235. package/dist/esm/cli/init.js.map +2 -2
  236. package/dist/esm/cli/lib/aiFiles/agentsmd.js +13 -9
  237. package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +2 -2
  238. package/dist/esm/cli/lib/aiFiles/claudemd.js +13 -9
  239. package/dist/esm/cli/lib/aiFiles/claudemd.js.map +2 -2
  240. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +12 -5
  241. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
  242. package/dist/esm/cli/lib/aiFiles/index.js +72 -89
  243. package/dist/esm/cli/lib/aiFiles/index.js.map +2 -2
  244. package/dist/esm/cli/lib/aiFiles/skills.js +29 -13
  245. package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
  246. package/dist/esm/cli/lib/aiFiles/state.js +60 -0
  247. package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
  248. package/dist/esm/cli/lib/aiFiles/status.js +32 -29
  249. package/dist/esm/cli/lib/aiFiles/status.js.map +2 -2
  250. package/dist/esm/cli/lib/aiFiles/utils.js +25 -10
  251. package/dist/esm/cli/lib/aiFiles/utils.js.map +2 -2
  252. package/dist/esm/cli/lib/api.js +70 -7
  253. package/dist/esm/cli/lib/api.js.map +2 -2
  254. package/dist/esm/cli/lib/command.js +4 -5
  255. package/dist/esm/cli/lib/command.js.map +2 -2
  256. package/dist/esm/cli/lib/config.js +39 -3
  257. package/dist/esm/cli/lib/config.js.map +2 -2
  258. package/dist/esm/cli/lib/deploy2.js +13 -26
  259. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  260. package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
  261. package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
  262. package/dist/esm/cli/lib/deploymentSelection.js +46 -2
  263. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  264. package/dist/esm/cli/lib/deploymentSelector.js +1 -0
  265. package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
  266. package/dist/esm/cli/lib/dev.js +162 -118
  267. package/dist/esm/cli/lib/dev.js.map +2 -2
  268. package/dist/esm/cli/lib/env.js +0 -11
  269. package/dist/esm/cli/lib/env.js.map +2 -2
  270. package/dist/esm/cli/lib/expiration.js +80 -0
  271. package/dist/esm/cli/lib/expiration.js.map +7 -0
  272. package/dist/esm/cli/lib/init.js +4 -3
  273. package/dist/esm/cli/lib/init.js.map +2 -2
  274. package/dist/esm/cli/lib/insights.js +1 -1
  275. package/dist/esm/cli/lib/insights.js.map +2 -2
  276. package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
  277. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
  278. package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
  279. package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
  280. package/dist/esm/cli/lib/localDeployment/run.js +1 -1
  281. package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
  282. package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
  283. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  284. package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
  285. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  286. package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
  287. package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
  288. package/dist/esm/cli/lib/updates.js +11 -9
  289. package/dist/esm/cli/lib/updates.js.map +2 -2
  290. package/dist/esm/cli/lib/usage.js +2 -1
  291. package/dist/esm/cli/lib/usage.js.map +2 -2
  292. package/dist/esm/cli/lib/utils/prompts.js +2 -1
  293. package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
  294. package/dist/esm/cli/lib/utils/utils.js +45 -20
  295. package/dist/esm/cli/lib/utils/utils.js.map +3 -3
  296. package/dist/esm/index.js +1 -1
  297. package/dist/esm/index.js.map +1 -1
  298. package/dist/esm/react/client.js +43 -6
  299. package/dist/esm/react/client.js.map +2 -2
  300. package/dist/esm/react/index.js +1 -0
  301. package/dist/esm/react/index.js.map +2 -2
  302. package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  303. package/dist/esm/server/api.js.map +2 -2
  304. package/dist/esm/server/components/index.js +40 -4
  305. package/dist/esm/server/components/index.js.map +2 -2
  306. package/dist/esm/server/impl/meta_impl.js +54 -0
  307. package/dist/esm/server/impl/meta_impl.js.map +7 -0
  308. package/dist/esm/server/impl/registration_impl.js +20 -11
  309. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  310. package/dist/esm/server/index.js.map +2 -2
  311. package/dist/esm/server/meta.js +2 -0
  312. package/dist/esm/server/meta.js.map +7 -0
  313. package/dist/esm-types/browser/index.d.ts +1 -0
  314. package/dist/esm-types/browser/index.d.ts.map +1 -1
  315. package/dist/esm-types/browser/query_options.d.ts +12 -9
  316. package/dist/esm-types/browser/query_options.d.ts.map +1 -1
  317. package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
  318. package/dist/esm-types/cli/codegen_templates/readme.d.ts.map +1 -1
  319. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  320. package/dist/esm-types/cli/configure.test.d.ts +2 -0
  321. package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
  322. package/dist/esm-types/cli/deploy.d.ts.map +1 -1
  323. package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
  324. package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
  325. package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
  326. package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
  327. package/dist/esm-types/cli/dev.d.ts +3 -1
  328. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  329. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +5 -5
  330. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
  331. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
  332. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
  333. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
  334. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
  335. package/dist/esm-types/cli/lib/aiFiles/index.d.ts +20 -18
  336. package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -1
  337. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +6 -4
  338. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
  339. package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
  340. package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  341. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  342. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  343. package/dist/esm-types/cli/lib/aiFiles/status.d.ts +4 -1
  344. package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -1
  345. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +13 -3
  346. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
  347. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  348. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  349. package/dist/esm-types/cli/lib/api.d.ts +3 -3
  350. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  351. package/dist/esm-types/cli/lib/command.d.ts +2 -1
  352. package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
  353. package/dist/esm-types/cli/lib/config.d.ts +17 -6
  354. package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
  355. package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
  356. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  357. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  358. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  359. package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  360. package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -14
  361. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +61 -52
  362. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  363. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  364. package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
  365. package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  366. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  367. package/dist/esm-types/cli/lib/env.d.ts +0 -4
  368. package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
  369. package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
  370. package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
  371. package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
  372. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
  373. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  374. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  375. package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
  376. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  377. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  378. package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
  379. package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  380. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  381. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
  382. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  383. package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
  384. package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  385. package/dist/esm-types/cli/lib/updates.d.ts +4 -3
  386. package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
  387. package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
  388. package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
  389. package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
  390. package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
  391. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  392. package/dist/esm-types/index.d.ts +1 -1
  393. package/dist/esm-types/react/client.d.ts +54 -2
  394. package/dist/esm-types/react/client.d.ts.map +1 -1
  395. package/dist/esm-types/react/index.d.ts +7 -2
  396. package/dist/esm-types/react/index.d.ts.map +1 -1
  397. package/dist/esm-types/react/use_query_object_options.test.d.ts +5 -0
  398. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +1 -0
  399. package/dist/esm-types/react/use_query_result.test.d.ts +5 -0
  400. package/dist/esm-types/react/use_query_result.test.d.ts.map +1 -0
  401. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  402. package/dist/esm-types/server/api.d.ts +5 -1
  403. package/dist/esm-types/server/api.d.ts.map +1 -1
  404. package/dist/esm-types/server/components/definition.d.ts +1 -0
  405. package/dist/esm-types/server/components/definition.d.ts.map +1 -1
  406. package/dist/esm-types/server/components/index.d.ts +5 -1
  407. package/dist/esm-types/server/components/index.d.ts.map +1 -1
  408. package/dist/esm-types/server/data_model.d.ts +2 -1
  409. package/dist/esm-types/server/data_model.d.ts.map +1 -1
  410. package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
  411. package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
  412. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  413. package/dist/esm-types/server/index.d.ts +1 -0
  414. package/dist/esm-types/server/index.d.ts.map +1 -1
  415. package/dist/esm-types/server/meta.d.ts +72 -0
  416. package/dist/esm-types/server/meta.d.ts.map +1 -0
  417. package/dist/esm-types/server/registration.d.ts.map +1 -1
  418. package/dist/react.bundle.js +50 -7
  419. package/dist/react.bundle.js.map +3 -3
  420. package/package.json +11 -7
  421. package/schemas/convex.schema.json +15 -2
  422. package/src/browser/index.ts +3 -0
  423. package/src/browser/query_options.test.ts +0 -9
  424. package/src/browser/query_options.ts +36 -15
  425. package/src/cli/aiFiles.ts +44 -14
  426. package/src/cli/codegen_templates/readme.ts +14 -1
  427. package/src/cli/configure.test.ts +138 -0
  428. package/src/cli/configure.ts +48 -47
  429. package/src/cli/deploy.ts +12 -9
  430. package/src/cli/deploymentCreate.test.ts +349 -14
  431. package/src/cli/deploymentCreate.ts +268 -41
  432. package/src/cli/deploymentSelect.test.ts +136 -27
  433. package/src/cli/deploymentSelect.ts +50 -41
  434. package/src/cli/deploymentSelection.test.ts +343 -35
  435. package/src/cli/dev.ts +49 -14
  436. package/src/cli/docs.ts +1 -1
  437. package/src/cli/init.ts +2 -2
  438. package/src/cli/lib/aiFiles/agentsmd.ts +15 -11
  439. package/src/cli/lib/aiFiles/claudemd.ts +15 -11
  440. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +12 -2
  441. package/src/cli/lib/aiFiles/guidelinesmd.ts +15 -7
  442. package/src/cli/lib/aiFiles/index.test.ts +188 -222
  443. package/src/cli/lib/aiFiles/index.ts +119 -125
  444. package/src/cli/lib/aiFiles/integration.test.ts +112 -45
  445. package/src/cli/lib/aiFiles/prompt.test.ts +6 -6
  446. package/src/cli/lib/aiFiles/skills.ts +46 -16
  447. package/src/cli/lib/aiFiles/state.test.ts +280 -0
  448. package/src/cli/lib/aiFiles/state.ts +82 -0
  449. package/src/cli/lib/aiFiles/status.ts +45 -39
  450. package/src/cli/lib/aiFiles/utils.test.ts +50 -0
  451. package/src/cli/lib/aiFiles/utils.ts +38 -10
  452. package/src/cli/lib/api.ts +88 -7
  453. package/src/cli/lib/command.ts +12 -7
  454. package/src/cli/lib/config.test.ts +184 -7
  455. package/src/cli/lib/config.ts +67 -7
  456. package/src/cli/lib/deploy2.ts +14 -27
  457. package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
  458. package/src/cli/lib/deploymentSelection.ts +59 -6
  459. package/src/cli/lib/deploymentSelector.test.ts +6 -0
  460. package/src/cli/lib/deploymentSelector.ts +2 -0
  461. package/src/cli/lib/dev.ts +202 -153
  462. package/src/cli/lib/env.ts +0 -15
  463. package/src/cli/lib/expiration.test.ts +159 -0
  464. package/src/cli/lib/expiration.ts +124 -0
  465. package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
  466. package/src/cli/lib/init.ts +6 -2
  467. package/src/cli/lib/insights.ts +1 -1
  468. package/src/cli/lib/localDeployment/anonymous.ts +19 -9
  469. package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
  470. package/src/cli/lib/localDeployment/run.ts +1 -1
  471. package/src/cli/lib/localDeployment/upgrade.ts +12 -10
  472. package/src/cli/lib/localDeployment/utils.ts +12 -0
  473. package/src/cli/lib/mcp/tools/status.ts +1 -1
  474. package/src/cli/lib/updates.test.ts +102 -75
  475. package/src/cli/lib/updates.ts +14 -12
  476. package/src/cli/lib/usage.ts +3 -1
  477. package/src/cli/lib/utils/prompts.ts +2 -0
  478. package/src/cli/lib/utils/utils.test.ts +6 -6
  479. package/src/cli/lib/utils/utils.ts +66 -27
  480. package/src/index.ts +1 -1
  481. package/src/react/client.test.tsx +65 -0
  482. package/src/react/client.ts +129 -13
  483. package/src/react/index.ts +9 -1
  484. package/src/react/use_query_object_options.test.ts +50 -0
  485. package/src/react/use_query_result.test.ts +41 -0
  486. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
  487. package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
  488. package/src/server/api.ts +5 -1
  489. package/src/server/components/definition.ts +3 -0
  490. package/src/server/components/index.ts +62 -5
  491. package/src/server/data_model.ts +2 -1
  492. package/src/server/impl/meta_impl.ts +74 -0
  493. package/src/server/impl/registration_impl.ts +21 -9
  494. package/src/server/index.ts +8 -0
  495. package/src/server/meta.ts +76 -0
  496. package/src/server/registration.ts +10 -0
  497. package/src/server/schema.test.ts +78 -1
  498. package/dist/cjs/cli/lib/aiFiles/config.js +0 -171
  499. package/dist/cjs/cli/lib/aiFiles/config.js.map +0 -7
  500. package/dist/cjs-types/cli/lib/aiFiles/config.d.ts +0 -46
  501. package/dist/cjs-types/cli/lib/aiFiles/config.d.ts.map +0 -1
  502. package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts +0 -2
  503. package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
  504. package/dist/esm/cli/lib/aiFiles/config.js +0 -135
  505. package/dist/esm/cli/lib/aiFiles/config.js.map +0 -7
  506. package/dist/esm-types/cli/lib/aiFiles/config.d.ts +0 -46
  507. package/dist/esm-types/cli/lib/aiFiles/config.d.ts.map +0 -1
  508. package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts +0 -2
  509. package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
  510. package/src/cli/lib/aiFiles/config.test.ts +0 -460
  511. package/src/cli/lib/aiFiles/config.ts +0 -188
  512. package/src/values/.claude/settings.local.json +0 -10
@@ -3,11 +3,11 @@ import path from "path";
3
3
  import { nodeFs } from "../bundler/fs.js";
4
4
  import { deploymentSelect } from "./deploymentSelect.js";
5
5
  import { bigBrainAPI, bigBrainAPIMaybeThrows } from "./lib/utils/utils.js";
6
- import { runSystemQuery } from "./lib/run.js";
7
6
  import { globalConfigPath } from "./lib/utils/globalConfig.js";
8
7
 
9
- // Mock typedPlatformClient GET function — can be configured per test
8
+ // Mock GET functions — can be configured per test
10
9
  const mockPlatformGet = vi.fn();
10
+ const mockDeploymentGet = vi.fn();
11
11
 
12
12
  // In-memory filesystem — populated in beforeEach, written to by real configure code
13
13
  let testFiles: Map<string, string>;
@@ -33,6 +33,7 @@ vi.mock("./lib/utils/utils.js", async (importOriginal) => {
33
33
  bigBrainAPI: vi.fn(),
34
34
  bigBrainAPIMaybeThrows: vi.fn(),
35
35
  typedPlatformClient: vi.fn(() => ({ GET: mockPlatformGet })),
36
+ typedDeploymentClient: vi.fn(() => ({ GET: mockDeploymentGet })),
36
37
  };
37
38
  });
38
39
 
@@ -49,9 +50,14 @@ vi.mock("@sentry/node", () => ({
49
50
  close: vi.fn(),
50
51
  }));
51
52
 
52
- vi.mock("./lib/run.js", () => ({
53
- runSystemQuery: vi.fn(),
54
- }));
53
+ vi.mock("./lib/localDeployment/run.js", async (importOriginal) => {
54
+ const actual =
55
+ await importOriginal<typeof import("./lib/localDeployment/run.js")>();
56
+ return {
57
+ ...actual,
58
+ fetchLocalBackendStatus: vi.fn().mockResolvedValue({ kind: "running" }),
59
+ };
60
+ });
55
61
 
56
62
  /**
57
63
  * Routes mock Big Brain API calls by path.
@@ -72,10 +78,14 @@ function setupBigBrainRoutes(routes: Record<string, (data?: any) => any>) {
72
78
 
73
79
  describe("npx convex select", () => {
74
80
  let savedEnv: NodeJS.ProcessEnv;
81
+ let savedIsTTY: boolean | undefined;
75
82
 
76
83
  beforeEach(() => {
77
84
  savedEnv = { ...process.env };
85
+ savedIsTTY = process.stdin.isTTY;
78
86
  process.env = {};
87
+ // Default to interactive TTY for existing tests
88
+ process.stdin.isTTY = true as any;
79
89
 
80
90
  // Start with minimal filesystem: package.json for readProjectConfig fallback
81
91
  testFiles = new Map([[path.resolve("package.json"), "{}"]]);
@@ -103,10 +113,12 @@ describe("npx convex select", () => {
103
113
  },
104
114
  );
105
115
 
106
- // runSystemQuery is called by fetchDeploymentCanonicalSiteUrl to look up CONVEX_SITE_URL
107
- vi.mocked(runSystemQuery).mockResolvedValue({
108
- name: "CONVEX_SITE_URL",
109
- value: "https://example.convex.site",
116
+ // typedDeploymentClient GET is called by fetchDeploymentCanonicalUrls
117
+ mockDeploymentGet.mockResolvedValue({
118
+ data: {
119
+ convexCloudUrl: "https://example.convex.cloud",
120
+ convexSiteUrl: "https://example.convex.site",
121
+ },
110
122
  });
111
123
 
112
124
  // typedPlatformClient is used for reference-based deployment resolution
@@ -115,6 +127,7 @@ describe("npx convex select", () => {
115
127
 
116
128
  afterEach(() => {
117
129
  process.env = savedEnv;
130
+ process.stdin.isTTY = savedIsTTY as any;
118
131
  });
119
132
 
120
133
  // Suppress process.exit and stderr
@@ -182,20 +195,36 @@ describe("npx convex select", () => {
182
195
  teamId: 1,
183
196
  projectId: 1,
184
197
  }),
185
- "deployment/provision_and_authorize": () => ({
198
+ "teams/my-team/projects/my-project/deployments": () => true,
199
+ "deployment/authorize_within_current_project": () => ({
186
200
  adminKey: "dev-key",
187
201
  url: "https://joyful-capybara-123.convex.cloud",
188
202
  deploymentName: "joyful-capybara-123",
189
203
  deploymentType: "dev",
190
204
  }),
191
205
  });
206
+ mockPlatformGet.mockResolvedValue({
207
+ data: { name: "joyful-capybara-123" },
208
+ error: undefined,
209
+ });
192
210
 
193
211
  await deploymentSelect.parseAsync(["dev"], { from: "user" });
194
212
 
195
- expect(bigBrainAPIMaybeThrows).toHaveBeenCalledWith(
213
+ expect(mockPlatformGet).toHaveBeenCalledWith(
214
+ "/teams/{team_id_or_slug}/projects/{project_slug}/deployment",
196
215
  expect.objectContaining({
197
- path: "deployment/provision_and_authorize",
198
- data: expect.objectContaining({ deploymentType: "dev" }),
216
+ params: expect.objectContaining({
217
+ path: { team_id_or_slug: "my-team", project_slug: "my-project" },
218
+ query: { defaultDev: true },
219
+ }),
220
+ }),
221
+ );
222
+ expect(bigBrainAPI).toHaveBeenCalledWith(
223
+ expect.objectContaining({
224
+ path: "deployment/authorize_within_current_project",
225
+ data: expect.objectContaining({
226
+ selectedDeploymentName: "joyful-capybara-123",
227
+ }),
199
228
  }),
200
229
  );
201
230
  const envContent = testFiles.get(path.resolve(".env.local"))!;
@@ -345,7 +374,7 @@ describe("npx convex select", () => {
345
374
  });
346
375
 
347
376
  describe("side effects on successful selection", () => {
348
- it("fetches the site URL using the resolved deployment credentials", async () => {
377
+ it("fetches the canonical URLs using the resolved deployment credentials", async () => {
349
378
  setupBigBrainRoutes({
350
379
  "deployment/joyful-capybara-123/team_and_project": () => ({
351
380
  team: "my-team",
@@ -353,29 +382,30 @@ describe("npx convex select", () => {
353
382
  teamId: 1,
354
383
  projectId: 1,
355
384
  }),
356
- "deployment/provision_and_authorize": () => ({
385
+ "teams/my-team/projects/my-project/deployments": () => true,
386
+ "deployment/authorize_within_current_project": () => ({
357
387
  adminKey: "dev-key",
358
388
  url: "https://joyful-capybara-123.convex.cloud",
359
389
  deploymentName: "joyful-capybara-123",
360
390
  deploymentType: "dev",
361
391
  }),
362
392
  });
393
+ mockPlatformGet.mockResolvedValue({
394
+ data: { name: "joyful-capybara-123" },
395
+ error: undefined,
396
+ });
363
397
 
364
398
  await deploymentSelect.parseAsync(["dev"], { from: "user" });
365
399
 
366
- expect(runSystemQuery).toHaveBeenCalledWith(
367
- expect.anything(),
368
- expect.objectContaining({
369
- adminKey: "dev-key",
370
- deploymentUrl: "https://joyful-capybara-123.convex.cloud",
371
- }),
372
- );
400
+ expect(mockDeploymentGet).toHaveBeenCalledWith("/get_canonical_urls");
373
401
  });
374
402
 
375
403
  it("writes the fetched site URL to the env file", async () => {
376
- vi.mocked(runSystemQuery).mockResolvedValue({
377
- name: "CONVEX_SITE_URL",
378
- value: "https://joyful-capybara-123.convex.site",
404
+ mockDeploymentGet.mockResolvedValue({
405
+ data: {
406
+ convexCloudUrl: "https://joyful-capybara-123.convex.cloud",
407
+ convexSiteUrl: "https://joyful-capybara-123.convex.site",
408
+ },
379
409
  });
380
410
  setupBigBrainRoutes({
381
411
  "deployment/joyful-capybara-123/team_and_project": () => ({
@@ -384,13 +414,18 @@ describe("npx convex select", () => {
384
414
  teamId: 1,
385
415
  projectId: 1,
386
416
  }),
387
- "deployment/provision_and_authorize": () => ({
417
+ "teams/my-team/projects/my-project/deployments": () => true,
418
+ "deployment/authorize_within_current_project": () => ({
388
419
  adminKey: "dev-key",
389
420
  url: "https://joyful-capybara-123.convex.cloud",
390
421
  deploymentName: "joyful-capybara-123",
391
422
  deploymentType: "dev",
392
423
  }),
393
424
  });
425
+ mockPlatformGet.mockResolvedValue({
426
+ data: { name: "joyful-capybara-123" },
427
+ error: undefined,
428
+ });
394
429
 
395
430
  await deploymentSelect.parseAsync(["dev"], { from: "user" });
396
431
 
@@ -412,13 +447,18 @@ describe("npx convex select", () => {
412
447
  teamId: 1,
413
448
  projectId: 1,
414
449
  }),
415
- "deployment/provision_and_authorize": () => ({
450
+ "teams/my-team/projects/my-project/deployments": () => true,
451
+ "deployment/authorize_within_current_project": () => ({
416
452
  adminKey: "dev-key",
417
453
  url: "https://joyful-capybara-123.convex.cloud",
418
454
  deploymentName: "joyful-capybara-123",
419
455
  deploymentType: "dev",
420
456
  }),
421
457
  });
458
+ mockPlatformGet.mockResolvedValue({
459
+ data: { name: "joyful-capybara-123" },
460
+ error: undefined,
461
+ });
422
462
 
423
463
  await deploymentSelect.parseAsync(["dev"], { from: "user" });
424
464
 
@@ -428,6 +468,48 @@ describe("npx convex select", () => {
428
468
  );
429
469
  });
430
470
  });
471
+
472
+ it("selects local deployment with 'local' selector", async () => {
473
+ testFiles.set(
474
+ path.resolve(".convex/local/default/config.json"),
475
+ JSON.stringify({
476
+ ports: { cloud: 3210, site: 3211 },
477
+ adminKey: "local-key",
478
+ backendVersion: "1.0.0",
479
+ deploymentName: "local-my_team-my_project-abc",
480
+ }),
481
+ );
482
+ // The local deployment name is looked up via Big Brain for project
483
+ // access checks (checkAccessToSelectedProject)
484
+ // FIXME We should probably avoid the Big Brain call here so that it works offline
485
+ setupBigBrainRoutes({
486
+ "deployment/local-my_team-my_project-abc/team_and_project": () => ({
487
+ team: "my-team",
488
+ project: "my-project",
489
+ teamId: 1,
490
+ projectId: 1,
491
+ }),
492
+ });
493
+
494
+ await deploymentSelect.parseAsync(["local"], { from: "user" });
495
+
496
+ const envContent = testFiles.get(path.resolve(".env.local"))!;
497
+ expect(envContent).toContain(
498
+ "CONVEX_DEPLOYMENT=local:local-my_team-my_project-abc",
499
+ );
500
+ // Site URL fetch should be skipped for local deployments
501
+ expect(envContent).not.toContain("CONVEX_SITE_URL");
502
+ });
503
+
504
+ it("fails with 'No local deployment found' when no local config exists", async () => {
505
+ await expect(
506
+ deploymentSelect.parseAsync(["local"], { from: "user" }),
507
+ ).rejects.toThrow();
508
+
509
+ expect(process.stderr.write).toHaveBeenCalledWith(
510
+ expect.stringContaining("No local deployment found"),
511
+ );
512
+ });
431
513
  });
432
514
 
433
515
  describe("without project configured", () => {
@@ -527,5 +609,32 @@ describe("npx convex select", () => {
527
609
  const envContent = testFiles.get(path.resolve(".env.local"))!;
528
610
  expect(envContent).toContain("CONVEX_DEPLOYMENT=dev:clever-otter-890");
529
611
  });
612
+
613
+ it("selects local deployment without project configured", async () => {
614
+ testFiles.set(
615
+ path.resolve(".convex/local/default/config.json"),
616
+ JSON.stringify({
617
+ ports: { cloud: 3210, site: 3211 },
618
+ adminKey: "local-key",
619
+ backendVersion: "1.0.0",
620
+ deploymentName: "local-my_team-my_project-abc",
621
+ }),
622
+ );
623
+ setupBigBrainRoutes({
624
+ "deployment/local-my_team-my_project-abc/team_and_project": () => ({
625
+ team: "my-team",
626
+ project: "my-project",
627
+ teamId: 1,
628
+ projectId: 1,
629
+ }),
630
+ });
631
+
632
+ await deploymentSelect.parseAsync(["local"], { from: "user" });
633
+
634
+ const envContent = testFiles.get(path.resolve(".env.local"))!;
635
+ expect(envContent).toContain(
636
+ "CONVEX_DEPLOYMENT=local:local-my_team-my_project-abc",
637
+ );
638
+ });
530
639
  });
531
640
  });
@@ -2,12 +2,13 @@ import { Command } from "@commander-js/extra-typings";
2
2
  import { Context, oneoffContext } from "../bundler/context.js";
3
3
  import { loadSelectedDeploymentCredentials } from "./lib/api.js";
4
4
  import {
5
+ DeploymentSelection,
5
6
  getDeploymentSelection,
6
7
  deploymentNameFromSelection,
7
8
  } from "./lib/deploymentSelection.js";
8
9
  import { parseDeploymentSelector } from "./lib/deploymentSelector.js";
9
10
  import { updateEnvAndConfigForDeploymentSelection } from "./configure.js";
10
- import { fetchDeploymentCanonicalSiteUrl } from "./lib/env.js";
11
+ import { fetchDeploymentCanonicalUrls } from "./lib/deploy2.js";
11
12
  import { chalkStderr } from "chalk";
12
13
 
13
14
  export const deploymentSelect = new Command("select")
@@ -16,8 +17,8 @@ export const deploymentSelect = new Command("select")
16
17
  "Select the deployment to use when running commands.\n\n" +
17
18
  "The deployment will be used by all `npx convex` commands, except `npx convex deploy`. You can also run individual commands on another deployment by using the --deployment flag on that command.\n\n" +
18
19
  "Examples:\n" +
19
- " npx convex select dev # Select your personal dev deployment in the current project\n" +
20
- " npx convex select dev/james # Select a deployment in the same project by its reference\n" +
20
+ " npx convex select dev # Select your personal cloud dev deployment in the current project\n" +
21
+ " npx convex select local # Select your local deployment\n" +
21
22
  " npx convex select dev/james # Select a deployment in the same project by its reference\n" +
22
23
  " npx convex select some-project:dev/james # Select a deployment in another project in the same team\n" +
23
24
  " npx convex select some-team:some-project:dev/james # Select a deployment in a particular team/project\n",
@@ -30,45 +31,50 @@ export const deploymentSelect = new Command("select")
30
31
  adminKey: undefined,
31
32
  envFile: undefined,
32
33
  });
33
- await selectDeployment(ctx, selector);
34
- });
35
34
 
36
- export async function selectDeployment(
37
- ctx: Context,
38
- selector: string,
39
- ): Promise<void> {
40
- // Get the current deployment selection (no flags, just env/config state)
41
- const currentSelection = await getDeploymentSelection(ctx, {});
35
+ // Get the current deployment selection (no flags, just env/config state)
36
+ const currentSelection = await getDeploymentSelection(ctx, {});
42
37
 
43
- // If no project is configured and the selector needs project context, show a specific error
44
- const parsed = parseDeploymentSelector(selector);
45
- if (
46
- currentSelection.kind === "chooseProject" &&
47
- parsed.kind !== "inTeamProject" &&
48
- parsed.kind !== "deploymentName"
49
- ) {
50
- return await ctx.crash({
51
- exitCode: 1,
52
- errorType: "fatal",
53
- printedMessage: `No project configured. Run \`npx convex dev\` to set up a project first, or use a full selector like 'my-team:my-project:dev/james' or 'happy-capybara-123'.`,
38
+ // If no project is configured and the selector needs project context, show a specific error
39
+ const parsed = parseDeploymentSelector(selector);
40
+ if (
41
+ currentSelection.kind === "chooseProject" &&
42
+ parsed.kind !== "inTeamProject" &&
43
+ parsed.kind !== "deploymentName" &&
44
+ parsed.kind !== "local"
45
+ ) {
46
+ return await ctx.crash({
47
+ exitCode: 1,
48
+ errorType: "fatal",
49
+ printedMessage: `No project configured. Run \`npx convex dev\` to set up a project first, or use a full selector like 'my-team:my-project:dev/james' or 'happy-capybara-123'.`,
50
+ });
51
+ }
52
+
53
+ // Resolve the new deployment using the selector relative to the current project
54
+ const newSelection = await getDeploymentSelection(ctx, {
55
+ url: undefined,
56
+ adminKey: undefined,
57
+ envFile: undefined,
58
+ deployment: selector,
54
59
  });
55
- }
56
60
 
57
- // Resolve the new deployment using the selector relative to the current project
58
- const newSelection = await getDeploymentSelection(ctx, {
59
- url: undefined,
60
- adminKey: undefined,
61
- envFile: undefined,
62
- deployment: selector,
61
+ await saveSelectedDeployment(
62
+ ctx,
63
+ selector,
64
+ newSelection,
65
+ deploymentNameFromSelection(currentSelection),
66
+ );
63
67
  });
64
68
 
65
- const deployment = await loadSelectedDeploymentCredentials(
66
- ctx,
67
- newSelection,
68
- {
69
- ensureLocalRunning: false,
70
- },
71
- );
69
+ export async function saveSelectedDeployment(
70
+ ctx: Context,
71
+ selector: string,
72
+ selection: DeploymentSelection,
73
+ previousDeploymentName: string | null,
74
+ ): Promise<void> {
75
+ const deployment = await loadSelectedDeploymentCredentials(ctx, selection, {
76
+ ensureLocalRunning: false,
77
+ });
72
78
 
73
79
  if (deployment.deploymentFields === null) {
74
80
  // Should be unreachable since for now, `select` only allows users
@@ -89,10 +95,13 @@ export async function selectDeployment(
89
95
  });
90
96
  }
91
97
 
92
- const siteUrl = await fetchDeploymentCanonicalSiteUrl(ctx, {
93
- adminKey: deployment.adminKey,
94
- deploymentUrl: deployment.url,
95
- });
98
+ const { convexSiteUrl: siteUrl } =
99
+ deployment.deploymentFields.deploymentType === "local"
100
+ ? { convexSiteUrl: null }
101
+ : await fetchDeploymentCanonicalUrls(ctx, {
102
+ adminKey: deployment.adminKey,
103
+ deploymentUrl: deployment.url,
104
+ });
96
105
 
97
106
  await updateEnvAndConfigForDeploymentSelection(
98
107
  ctx,
@@ -104,6 +113,6 @@ export async function selectDeployment(
104
113
  projectSlug: deployment.deploymentFields.projectSlug,
105
114
  deploymentType: deployment.deploymentFields.deploymentType,
106
115
  },
107
- deploymentNameFromSelection(currentSelection),
116
+ previousDeploymentName,
108
117
  );
109
118
  }