convex 1.34.1 → 1.35.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. package/CHANGELOG.md +86 -43
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +1 -1
  4. package/dist/cjs/cli/aiFiles.js +31 -13
  5. package/dist/cjs/cli/aiFiles.js.map +3 -3
  6. package/dist/cjs/cli/configure.js +21 -24
  7. package/dist/cjs/cli/configure.js.map +2 -2
  8. package/dist/cjs/cli/deploy.js +8 -9
  9. package/dist/cjs/cli/deploy.js.map +2 -2
  10. package/dist/cjs/cli/deploymentCreate.js +225 -40
  11. package/dist/cjs/cli/deploymentCreate.js.map +3 -3
  12. package/dist/cjs/cli/deploymentSelect.js +14 -13
  13. package/dist/cjs/cli/deploymentSelect.js.map +2 -2
  14. package/dist/cjs/cli/dev.js +30 -11
  15. package/dist/cjs/cli/dev.js.map +2 -2
  16. package/dist/cjs/cli/docs.js +1 -1
  17. package/dist/cjs/cli/docs.js.map +2 -2
  18. package/dist/cjs/cli/init.js +1 -1
  19. package/dist/cjs/cli/init.js.map +2 -2
  20. package/dist/cjs/cli/lib/aiFiles/agentsmd.js +14 -10
  21. package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +2 -2
  22. package/dist/cjs/cli/lib/aiFiles/claudemd.js +14 -10
  23. package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +2 -2
  24. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +10 -3
  25. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
  26. package/dist/cjs/cli/lib/aiFiles/index.js +70 -86
  27. package/dist/cjs/cli/lib/aiFiles/index.js.map +3 -3
  28. package/dist/cjs/cli/lib/aiFiles/skills.js +28 -12
  29. package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
  30. package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
  31. package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
  32. package/dist/cjs/cli/lib/aiFiles/status.js +31 -28
  33. package/dist/cjs/cli/lib/aiFiles/status.js.map +2 -2
  34. package/dist/cjs/cli/lib/aiFiles/utils.js +31 -14
  35. package/dist/cjs/cli/lib/aiFiles/utils.js.map +2 -2
  36. package/dist/cjs/cli/lib/api.js +70 -7
  37. package/dist/cjs/cli/lib/api.js.map +2 -2
  38. package/dist/cjs/cli/lib/command.js +4 -5
  39. package/dist/cjs/cli/lib/command.js.map +2 -2
  40. package/dist/cjs/cli/lib/config.js +41 -4
  41. package/dist/cjs/cli/lib/config.js.map +3 -3
  42. package/dist/cjs/cli/lib/deploy2.js +9 -26
  43. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  44. package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
  45. package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
  46. package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
  47. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  48. package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
  49. package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
  50. package/dist/cjs/cli/lib/dev.js +162 -117
  51. package/dist/cjs/cli/lib/dev.js.map +2 -2
  52. package/dist/cjs/cli/lib/env.js +1 -13
  53. package/dist/cjs/cli/lib/env.js.map +2 -2
  54. package/dist/cjs/cli/lib/envvars.js +8 -1
  55. package/dist/cjs/cli/lib/envvars.js.map +2 -2
  56. package/dist/cjs/cli/lib/expiration.js +104 -0
  57. package/dist/cjs/cli/lib/expiration.js.map +7 -0
  58. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  59. package/dist/cjs/cli/lib/init.js +4 -3
  60. package/dist/cjs/cli/lib/init.js.map +2 -2
  61. package/dist/cjs/cli/lib/insights.js +1 -1
  62. package/dist/cjs/cli/lib/insights.js.map +2 -2
  63. package/dist/cjs/cli/lib/localDeployment/anonymous.js +14 -7
  64. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
  65. package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
  66. package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
  67. package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
  68. package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
  69. package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
  70. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
  71. package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
  72. package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
  73. package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
  74. package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
  75. package/dist/cjs/cli/lib/updates.js +8 -9
  76. package/dist/cjs/cli/lib/updates.js.map +2 -2
  77. package/dist/cjs/cli/lib/usage.js +2 -1
  78. package/dist/cjs/cli/lib/usage.js.map +2 -2
  79. package/dist/cjs/cli/lib/utils/prompts.js +2 -1
  80. package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
  81. package/dist/cjs/cli/lib/utils/utils.js +46 -20
  82. package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
  83. package/dist/cjs/index.js +1 -1
  84. package/dist/cjs/index.js.map +1 -1
  85. package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  86. package/dist/cjs/server/components/definition.js.map +1 -1
  87. package/dist/cjs/server/components/index.js +40 -4
  88. package/dist/cjs/server/components/index.js.map +2 -2
  89. package/dist/cjs/server/data_model.js.map +1 -1
  90. package/dist/cjs/server/impl/meta_impl.js +78 -0
  91. package/dist/cjs/server/impl/meta_impl.js.map +7 -0
  92. package/dist/cjs/server/impl/registration_impl.js +16 -11
  93. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  94. package/dist/cjs/server/index.js.map +2 -2
  95. package/dist/cjs/server/meta.js +17 -0
  96. package/dist/cjs/server/meta.js.map +7 -0
  97. package/dist/cjs/server/registration.js.map +1 -1
  98. package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
  99. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  100. package/dist/cjs-types/cli/configure.test.d.ts +2 -0
  101. package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
  102. package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
  103. package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
  104. package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
  105. package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
  106. package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
  107. package/dist/cjs-types/cli/dev.d.ts +3 -1
  108. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  109. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +5 -5
  110. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
  111. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
  112. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
  113. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
  114. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
  115. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +20 -18
  116. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -1
  117. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +6 -4
  118. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
  119. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
  120. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  121. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  122. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  123. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +4 -1
  124. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -1
  125. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +13 -3
  126. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
  127. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  128. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  129. package/dist/cjs-types/cli/lib/api.d.ts +3 -3
  130. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  131. package/dist/cjs-types/cli/lib/command.d.ts +2 -1
  132. package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
  133. package/dist/cjs-types/cli/lib/config.d.ts +17 -6
  134. package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
  135. package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
  136. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  137. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  138. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  139. package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +12 -12
  140. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +25 -16
  141. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  142. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  143. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
  144. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  145. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  146. package/dist/cjs-types/cli/lib/env.d.ts +0 -4
  147. package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
  148. package/dist/cjs-types/cli/lib/envvars.d.ts.map +1 -1
  149. package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
  150. package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
  151. package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
  152. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
  153. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  154. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  155. package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
  156. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  157. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  158. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
  159. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  160. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  161. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
  162. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  163. package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
  164. package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
  165. package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
  166. package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
  167. package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
  168. package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
  169. package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
  170. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  171. package/dist/cjs-types/index.d.ts +1 -1
  172. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  173. package/dist/cjs-types/server/components/definition.d.ts +1 -0
  174. package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
  175. package/dist/cjs-types/server/components/index.d.ts +5 -1
  176. package/dist/cjs-types/server/components/index.d.ts.map +1 -1
  177. package/dist/cjs-types/server/data_model.d.ts +2 -1
  178. package/dist/cjs-types/server/data_model.d.ts.map +1 -1
  179. package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
  180. package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
  181. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  182. package/dist/cjs-types/server/index.d.ts +1 -0
  183. package/dist/cjs-types/server/index.d.ts.map +1 -1
  184. package/dist/cjs-types/server/meta.d.ts +72 -0
  185. package/dist/cjs-types/server/meta.d.ts.map +1 -0
  186. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  187. package/dist/cli.bundle.cjs +1665 -1215
  188. package/dist/cli.bundle.cjs.map +4 -4
  189. package/dist/esm/cli/aiFiles.js +33 -15
  190. package/dist/esm/cli/aiFiles.js.map +2 -2
  191. package/dist/esm/cli/configure.js +23 -26
  192. package/dist/esm/cli/configure.js.map +2 -2
  193. package/dist/esm/cli/deploy.js +12 -11
  194. package/dist/esm/cli/deploy.js.map +2 -2
  195. package/dist/esm/cli/deploymentCreate.js +238 -42
  196. package/dist/esm/cli/deploymentCreate.js.map +2 -2
  197. package/dist/esm/cli/deploymentSelect.js +13 -12
  198. package/dist/esm/cli/deploymentSelect.js.map +2 -2
  199. package/dist/esm/cli/dev.js +34 -13
  200. package/dist/esm/cli/dev.js.map +2 -2
  201. package/dist/esm/cli/docs.js +1 -1
  202. package/dist/esm/cli/docs.js.map +2 -2
  203. package/dist/esm/cli/init.js +2 -2
  204. package/dist/esm/cli/init.js.map +2 -2
  205. package/dist/esm/cli/lib/aiFiles/agentsmd.js +13 -9
  206. package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +2 -2
  207. package/dist/esm/cli/lib/aiFiles/claudemd.js +13 -9
  208. package/dist/esm/cli/lib/aiFiles/claudemd.js.map +2 -2
  209. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +12 -5
  210. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
  211. package/dist/esm/cli/lib/aiFiles/index.js +72 -89
  212. package/dist/esm/cli/lib/aiFiles/index.js.map +2 -2
  213. package/dist/esm/cli/lib/aiFiles/skills.js +29 -13
  214. package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
  215. package/dist/esm/cli/lib/aiFiles/state.js +60 -0
  216. package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
  217. package/dist/esm/cli/lib/aiFiles/status.js +32 -29
  218. package/dist/esm/cli/lib/aiFiles/status.js.map +2 -2
  219. package/dist/esm/cli/lib/aiFiles/utils.js +25 -10
  220. package/dist/esm/cli/lib/aiFiles/utils.js.map +2 -2
  221. package/dist/esm/cli/lib/api.js +70 -7
  222. package/dist/esm/cli/lib/api.js.map +2 -2
  223. package/dist/esm/cli/lib/command.js +4 -5
  224. package/dist/esm/cli/lib/command.js.map +2 -2
  225. package/dist/esm/cli/lib/config.js +39 -3
  226. package/dist/esm/cli/lib/config.js.map +2 -2
  227. package/dist/esm/cli/lib/deploy2.js +13 -26
  228. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  229. package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
  230. package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
  231. package/dist/esm/cli/lib/deploymentSelection.js +46 -2
  232. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  233. package/dist/esm/cli/lib/deploymentSelector.js +1 -0
  234. package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
  235. package/dist/esm/cli/lib/dev.js +162 -118
  236. package/dist/esm/cli/lib/dev.js.map +2 -2
  237. package/dist/esm/cli/lib/env.js +0 -11
  238. package/dist/esm/cli/lib/env.js.map +2 -2
  239. package/dist/esm/cli/lib/envvars.js +8 -1
  240. package/dist/esm/cli/lib/envvars.js.map +2 -2
  241. package/dist/esm/cli/lib/expiration.js +80 -0
  242. package/dist/esm/cli/lib/expiration.js.map +7 -0
  243. package/dist/esm/cli/lib/init.js +4 -3
  244. package/dist/esm/cli/lib/init.js.map +2 -2
  245. package/dist/esm/cli/lib/insights.js +1 -1
  246. package/dist/esm/cli/lib/insights.js.map +2 -2
  247. package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
  248. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
  249. package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
  250. package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
  251. package/dist/esm/cli/lib/localDeployment/run.js +1 -1
  252. package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
  253. package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
  254. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  255. package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
  256. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  257. package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
  258. package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
  259. package/dist/esm/cli/lib/updates.js +11 -9
  260. package/dist/esm/cli/lib/updates.js.map +2 -2
  261. package/dist/esm/cli/lib/usage.js +2 -1
  262. package/dist/esm/cli/lib/usage.js.map +2 -2
  263. package/dist/esm/cli/lib/utils/prompts.js +2 -1
  264. package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
  265. package/dist/esm/cli/lib/utils/utils.js +45 -20
  266. package/dist/esm/cli/lib/utils/utils.js.map +3 -3
  267. package/dist/esm/index.js +1 -1
  268. package/dist/esm/index.js.map +1 -1
  269. package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  270. package/dist/esm/server/components/index.js +40 -4
  271. package/dist/esm/server/components/index.js.map +2 -2
  272. package/dist/esm/server/impl/meta_impl.js +54 -0
  273. package/dist/esm/server/impl/meta_impl.js.map +7 -0
  274. package/dist/esm/server/impl/registration_impl.js +20 -11
  275. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  276. package/dist/esm/server/index.js.map +2 -2
  277. package/dist/esm/server/meta.js +2 -0
  278. package/dist/esm/server/meta.js.map +7 -0
  279. package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
  280. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  281. package/dist/esm-types/cli/configure.test.d.ts +2 -0
  282. package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
  283. package/dist/esm-types/cli/deploy.d.ts.map +1 -1
  284. package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
  285. package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
  286. package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
  287. package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
  288. package/dist/esm-types/cli/dev.d.ts +3 -1
  289. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  290. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +5 -5
  291. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
  292. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
  293. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
  294. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
  295. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
  296. package/dist/esm-types/cli/lib/aiFiles/index.d.ts +20 -18
  297. package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -1
  298. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +6 -4
  299. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
  300. package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
  301. package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  302. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  303. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  304. package/dist/esm-types/cli/lib/aiFiles/status.d.ts +4 -1
  305. package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -1
  306. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +13 -3
  307. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
  308. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  309. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  310. package/dist/esm-types/cli/lib/api.d.ts +3 -3
  311. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  312. package/dist/esm-types/cli/lib/command.d.ts +2 -1
  313. package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
  314. package/dist/esm-types/cli/lib/config.d.ts +17 -6
  315. package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
  316. package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
  317. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  318. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  319. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  320. package/dist/esm-types/cli/lib/deployApi/modules.d.ts +12 -12
  321. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +25 -16
  322. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  323. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  324. package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
  325. package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  326. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  327. package/dist/esm-types/cli/lib/env.d.ts +0 -4
  328. package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
  329. package/dist/esm-types/cli/lib/envvars.d.ts.map +1 -1
  330. package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
  331. package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
  332. package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
  333. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
  334. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  335. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  336. package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
  337. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  338. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  339. package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
  340. package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  341. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  342. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
  343. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  344. package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
  345. package/dist/esm-types/cli/lib/updates.d.ts +4 -3
  346. package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
  347. package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
  348. package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
  349. package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
  350. package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
  351. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  352. package/dist/esm-types/index.d.ts +1 -1
  353. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  354. package/dist/esm-types/server/components/definition.d.ts +1 -0
  355. package/dist/esm-types/server/components/definition.d.ts.map +1 -1
  356. package/dist/esm-types/server/components/index.d.ts +5 -1
  357. package/dist/esm-types/server/components/index.d.ts.map +1 -1
  358. package/dist/esm-types/server/data_model.d.ts +2 -1
  359. package/dist/esm-types/server/data_model.d.ts.map +1 -1
  360. package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
  361. package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
  362. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  363. package/dist/esm-types/server/index.d.ts +1 -0
  364. package/dist/esm-types/server/index.d.ts.map +1 -1
  365. package/dist/esm-types/server/meta.d.ts +72 -0
  366. package/dist/esm-types/server/meta.d.ts.map +1 -0
  367. package/dist/esm-types/server/registration.d.ts.map +1 -1
  368. package/dist/react.bundle.js +1 -1
  369. package/dist/react.bundle.js.map +1 -1
  370. package/package.json +11 -7
  371. package/schemas/convex.schema.json +15 -2
  372. package/src/cli/aiFiles.ts +44 -14
  373. package/src/cli/configure.test.ts +138 -0
  374. package/src/cli/configure.ts +48 -47
  375. package/src/cli/deploy.ts +13 -10
  376. package/src/cli/deploymentCreate.test.ts +349 -14
  377. package/src/cli/deploymentCreate.ts +268 -41
  378. package/src/cli/deploymentSelect.test.ts +136 -27
  379. package/src/cli/deploymentSelect.ts +50 -41
  380. package/src/cli/deploymentSelection.test.ts +343 -35
  381. package/src/cli/dev.ts +49 -14
  382. package/src/cli/docs.ts +1 -1
  383. package/src/cli/init.ts +2 -2
  384. package/src/cli/lib/aiFiles/agentsmd.ts +15 -11
  385. package/src/cli/lib/aiFiles/claudemd.ts +15 -11
  386. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +12 -2
  387. package/src/cli/lib/aiFiles/guidelinesmd.ts +15 -7
  388. package/src/cli/lib/aiFiles/index.test.ts +188 -222
  389. package/src/cli/lib/aiFiles/index.ts +119 -125
  390. package/src/cli/lib/aiFiles/integration.test.ts +112 -45
  391. package/src/cli/lib/aiFiles/prompt.test.ts +6 -6
  392. package/src/cli/lib/aiFiles/skills.ts +46 -16
  393. package/src/cli/lib/aiFiles/state.test.ts +280 -0
  394. package/src/cli/lib/aiFiles/state.ts +82 -0
  395. package/src/cli/lib/aiFiles/status.ts +45 -39
  396. package/src/cli/lib/aiFiles/utils.test.ts +50 -0
  397. package/src/cli/lib/aiFiles/utils.ts +38 -10
  398. package/src/cli/lib/api.ts +88 -7
  399. package/src/cli/lib/command.ts +12 -7
  400. package/src/cli/lib/config.test.ts +184 -7
  401. package/src/cli/lib/config.ts +67 -7
  402. package/src/cli/lib/deploy2.ts +14 -27
  403. package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
  404. package/src/cli/lib/deploymentSelection.ts +59 -6
  405. package/src/cli/lib/deploymentSelector.test.ts +6 -0
  406. package/src/cli/lib/deploymentSelector.ts +2 -0
  407. package/src/cli/lib/dev.ts +202 -153
  408. package/src/cli/lib/env.ts +0 -15
  409. package/src/cli/lib/envvars.ts +16 -1
  410. package/src/cli/lib/expiration.test.ts +159 -0
  411. package/src/cli/lib/expiration.ts +124 -0
  412. package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
  413. package/src/cli/lib/init.ts +6 -2
  414. package/src/cli/lib/insights.ts +1 -1
  415. package/src/cli/lib/localDeployment/anonymous.ts +19 -9
  416. package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
  417. package/src/cli/lib/localDeployment/run.ts +1 -1
  418. package/src/cli/lib/localDeployment/upgrade.ts +12 -10
  419. package/src/cli/lib/localDeployment/utils.ts +12 -0
  420. package/src/cli/lib/mcp/tools/status.ts +1 -1
  421. package/src/cli/lib/updates.test.ts +102 -75
  422. package/src/cli/lib/updates.ts +14 -12
  423. package/src/cli/lib/usage.ts +3 -1
  424. package/src/cli/lib/utils/prompts.ts +2 -0
  425. package/src/cli/lib/utils/utils.test.ts +6 -6
  426. package/src/cli/lib/utils/utils.ts +66 -27
  427. package/src/index.ts +1 -1
  428. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
  429. package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
  430. package/src/server/components/definition.ts +3 -0
  431. package/src/server/components/index.ts +62 -5
  432. package/src/server/data_model.ts +2 -1
  433. package/src/server/impl/meta_impl.ts +74 -0
  434. package/src/server/impl/registration_impl.ts +21 -9
  435. package/src/server/index.ts +8 -0
  436. package/src/server/meta.ts +76 -0
  437. package/src/server/registration.ts +10 -0
  438. package/src/server/schema.test.ts +78 -1
  439. package/dist/cjs/cli/lib/aiFiles/config.js +0 -171
  440. package/dist/cjs/cli/lib/aiFiles/config.js.map +0 -7
  441. package/dist/cjs-types/cli/lib/aiFiles/config.d.ts +0 -46
  442. package/dist/cjs-types/cli/lib/aiFiles/config.d.ts.map +0 -1
  443. package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts +0 -2
  444. package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
  445. package/dist/esm/cli/lib/aiFiles/config.js +0 -135
  446. package/dist/esm/cli/lib/aiFiles/config.js.map +0 -7
  447. package/dist/esm-types/cli/lib/aiFiles/config.d.ts +0 -46
  448. package/dist/esm-types/cli/lib/aiFiles/config.d.ts.map +0 -1
  449. package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts +0 -2
  450. package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
  451. package/src/cli/lib/aiFiles/config.test.ts +0 -460
  452. package/src/cli/lib/aiFiles/config.ts +0 -188
  453. package/src/values/.claude/settings.local.json +0 -10
@@ -18,6 +18,8 @@ import {
18
18
  handleLocalDeployment,
19
19
  loadLocalDeploymentCredentials,
20
20
  } from "./lib/localDeployment/localDeployment.js";
21
+ import { handleAnonymousDeployment } from "./lib/localDeployment/anonymous.js";
22
+ import { loadProjectLocalConfig } from "./lib/localDeployment/filePaths.js";
21
23
  import {
22
24
  validateOrSelectTeam,
23
25
  validateOrSelectProject,
@@ -67,7 +69,7 @@ vi.mock("./lib/localDeployment/run.js", async (importOriginal) => {
67
69
  await action();
68
70
  },
69
71
  ),
70
- assertLocalBackendRunning: vi.fn(),
72
+ fetchLocalBackendStatus: vi.fn().mockResolvedValue({ kind: "running" }),
71
73
  };
72
74
  });
73
75
 
@@ -135,7 +137,7 @@ vi.mock("./lib/updates.js", async (importOriginal) => {
135
137
  const actual = await importOriginal<typeof import("./lib/updates.js")>();
136
138
  return {
137
139
  ...actual,
138
- checkVersion: vi.fn(),
140
+ checkVersionAndAiFilesStaleness: vi.fn(),
139
141
  };
140
142
  });
141
143
 
@@ -156,6 +158,24 @@ vi.mock("./lib/localDeployment/localDeployment.js", async (importOriginal) => {
156
158
  };
157
159
  });
158
160
 
161
+ vi.mock("./lib/localDeployment/filePaths.js", async (importOriginal) => {
162
+ const actual =
163
+ await importOriginal<typeof import("./lib/localDeployment/filePaths.js")>();
164
+ return {
165
+ ...actual,
166
+ loadProjectLocalConfig: vi.fn().mockReturnValue(null),
167
+ };
168
+ });
169
+
170
+ vi.mock("./lib/localDeployment/anonymous.js", async (importOriginal) => {
171
+ const actual =
172
+ await importOriginal<typeof import("./lib/localDeployment/anonymous.js")>();
173
+ return {
174
+ ...actual,
175
+ handleAnonymousDeployment: vi.fn(),
176
+ };
177
+ });
178
+
159
179
  vi.mock("./lib/login.js", async (importOriginal) => {
160
180
  const actual = await importOriginal<typeof import("./lib/login.js")>();
161
181
  return { ...actual, ensureLoggedIn: vi.fn() };
@@ -164,7 +184,7 @@ vi.mock("./lib/login.js", async (importOriginal) => {
164
184
  vi.mock("./lib/aiFiles/index.js", async (importOriginal) => {
165
185
  const actual =
166
186
  await importOriginal<typeof import("./lib/aiFiles/index.js")>();
167
- return { ...actual, maybeSetupAiFiles: vi.fn() };
187
+ return { ...actual, attemptSetupAiFiles: vi.fn() };
168
188
  });
169
189
 
170
190
  vi.mock("./configure.js", async (importOriginal) => {
@@ -227,10 +247,14 @@ function setupBigBrainRoutes(routes: Record<string, (data?: any) => any>) {
227
247
 
228
248
  describe("deployment selection flows", () => {
229
249
  let savedEnv: NodeJS.ProcessEnv;
250
+ let savedIsTTY: boolean | undefined;
230
251
 
231
252
  beforeEach(() => {
232
253
  savedEnv = { ...process.env };
254
+ savedIsTTY = process.stdin.isTTY;
233
255
  process.env = {};
256
+ // Default to interactive TTY for existing tests
257
+ process.stdin.isTTY = true as any;
234
258
 
235
259
  vi.resetAllMocks();
236
260
  vi.mocked(readGlobalConfig).mockReturnValue(null);
@@ -261,10 +285,17 @@ describe("deployment selection flows", () => {
261
285
  new Error("validateOrSelectProject should be mocked"),
262
286
  );
263
287
  vi.mocked(ensureLoggedIn).mockResolvedValue(undefined);
288
+ vi.mocked(handleAnonymousDeployment).mockResolvedValue({
289
+ deploymentName: "anon-test",
290
+ deploymentUrl: "http://127.0.0.1:3210",
291
+ adminKey: "anon|admin|key",
292
+ onActivity: async () => {},
293
+ });
264
294
  });
265
295
 
266
296
  afterEach(() => {
267
297
  process.env = savedEnv;
298
+ process.stdin.isTTY = savedIsTTY as any;
268
299
  });
269
300
 
270
301
  // Suppress process.exit and stderr
@@ -475,7 +506,7 @@ describe("deployment selection flows", () => {
475
506
  expect(bigBrainAPIMaybeThrows).not.toHaveBeenCalled();
476
507
  });
477
508
 
478
- it("resolves CONVEX_DEPLOYMENT to dev deployment by default", async () => {
509
+ it("resolves CONVEX_DEPLOYMENT to CONVEX_DEPLOYMENT by default", async () => {
479
510
  process.env.CONVEX_DEPLOYMENT = "dev:joyful-capybara-123";
480
511
  vi.mocked(readGlobalConfig).mockReturnValue({
481
512
  accessToken: "test-token",
@@ -488,10 +519,11 @@ describe("deployment selection flows", () => {
488
519
  teamId: 1,
489
520
  projectId: 1,
490
521
  }),
491
- "deployment/provision_and_authorize": () => ({
522
+ "deployment/authorize_within_current_project": () => ({
492
523
  adminKey: "dev-key",
493
- url: "https://swift-squirrel-234.convex.cloud",
494
- deploymentName: "swift-squirrel-234",
524
+ url: "https://joyful-capybara-123.convex.cloud",
525
+ deploymentName: "joyful-capybara-123",
526
+ deploymentType: "dev",
495
527
  }),
496
528
  });
497
529
 
@@ -503,7 +535,7 @@ describe("deployment selection flows", () => {
503
535
  expect(deploymentFetch).toHaveBeenCalledWith(
504
536
  expect.anything(),
505
537
  expect.objectContaining({
506
- deploymentUrl: "https://swift-squirrel-234.convex.cloud",
538
+ deploymentUrl: "https://joyful-capybara-123.convex.cloud",
507
539
  adminKey: "dev-key",
508
540
  }),
509
541
  );
@@ -516,11 +548,16 @@ describe("deployment selection flows", () => {
516
548
  }),
517
549
  );
518
550
 
519
- // checkAccessToSelectedProject calls getTeamAndProjectSlugForDeployment
520
- expect(bigBrainAPIMaybeThrows).toHaveBeenCalledWith(
551
+ expect(bigBrainAPI).toHaveBeenCalledWith(
521
552
  expect.objectContaining({
522
- path: "deployment/joyful-capybara-123/team_and_project",
523
- method: "GET",
553
+ path: "deployment/authorize_within_current_project",
554
+ data: expect.objectContaining({
555
+ selectedDeploymentName: "joyful-capybara-123",
556
+ projectSelection: expect.objectContaining({
557
+ kind: "deploymentName",
558
+ deploymentName: "joyful-capybara-123",
559
+ }),
560
+ }),
524
561
  }),
525
562
  );
526
563
  });
@@ -891,12 +928,18 @@ describe("deployment selection flows", () => {
891
928
  teamId: 1,
892
929
  projectId: 1,
893
930
  }),
894
- "deployment/provision_and_authorize": () => ({
931
+ "teams/my-team/projects/my-project/deployments": () => true,
932
+ "deployment/authorize_within_current_project": () => ({
895
933
  adminKey: "dev-key",
896
934
  url: "https://joyful-capybara-123.convex.cloud",
897
935
  deploymentName: "joyful-capybara-123",
936
+ deploymentType: "dev",
898
937
  }),
899
938
  });
939
+ mockPlatformGet.mockResolvedValue({
940
+ data: { name: "joyful-capybara-123" },
941
+ error: undefined,
942
+ });
900
943
 
901
944
  const mockFetch = vi.fn().mockResolvedValue({ ok: true });
902
945
  vi.mocked(deploymentFetch).mockReturnValue(mockFetch as any);
@@ -905,10 +948,24 @@ describe("deployment selection flows", () => {
905
948
  from: "user",
906
949
  });
907
950
 
908
- expect(bigBrainAPIMaybeThrows).toHaveBeenCalledWith(
951
+ expect(mockPlatformGet).toHaveBeenCalledWith(
952
+ "/teams/{team_id_or_slug}/projects/{project_slug}/deployment",
909
953
  expect.objectContaining({
910
- path: "deployment/provision_and_authorize",
911
- data: expect.objectContaining({ deploymentType: "dev" }),
954
+ params: expect.objectContaining({
955
+ path: {
956
+ team_id_or_slug: "my-team",
957
+ project_slug: "my-project",
958
+ },
959
+ query: { defaultDev: true },
960
+ }),
961
+ }),
962
+ );
963
+ expect(bigBrainAPI).toHaveBeenCalledWith(
964
+ expect.objectContaining({
965
+ path: "deployment/authorize_within_current_project",
966
+ data: expect.objectContaining({
967
+ selectedDeploymentName: "joyful-capybara-123",
968
+ }),
912
969
  }),
913
970
  );
914
971
  });
@@ -1150,12 +1207,18 @@ describe("deployment selection flows", () => {
1150
1207
  teamId: 1,
1151
1208
  projectId: 1,
1152
1209
  }),
1153
- "deployment/provision_and_authorize": () => ({
1210
+ "teams/my-team/projects/other-project/deployments": () => true,
1211
+ "deployment/authorize_within_current_project": () => ({
1154
1212
  adminKey: "other-project-dev-key",
1155
1213
  url: "https://other-project-dev.convex.cloud",
1156
1214
  deploymentName: "other-project-dev",
1215
+ deploymentType: "dev",
1157
1216
  }),
1158
1217
  });
1218
+ mockPlatformGet.mockResolvedValue({
1219
+ data: { name: "other-project-dev" },
1220
+ error: undefined,
1221
+ });
1159
1222
 
1160
1223
  const mockFetch = vi.fn().mockResolvedValue({ ok: true });
1161
1224
  vi.mocked(deploymentFetch).mockReturnValue(mockFetch as any);
@@ -1165,13 +1228,23 @@ describe("deployment selection flows", () => {
1165
1228
  { from: "user" },
1166
1229
  );
1167
1230
 
1168
- expect(bigBrainAPIMaybeThrows).toHaveBeenCalledWith(
1231
+ expect(mockPlatformGet).toHaveBeenCalledWith(
1232
+ "/teams/{team_id_or_slug}/projects/{project_slug}/deployment",
1169
1233
  expect.objectContaining({
1170
- path: "deployment/provision_and_authorize",
1234
+ params: expect.objectContaining({
1235
+ path: {
1236
+ team_id_or_slug: "my-team",
1237
+ project_slug: "other-project",
1238
+ },
1239
+ query: { defaultDev: true },
1240
+ }),
1241
+ }),
1242
+ );
1243
+ expect(bigBrainAPI).toHaveBeenCalledWith(
1244
+ expect.objectContaining({
1245
+ path: "deployment/authorize_within_current_project",
1171
1246
  data: expect.objectContaining({
1172
- teamSlug: "my-team",
1173
- projectSlug: "other-project",
1174
- deploymentType: "dev",
1247
+ selectedDeploymentName: "other-project-dev",
1175
1248
  }),
1176
1249
  }),
1177
1250
  );
@@ -1266,12 +1339,17 @@ describe("deployment selection flows", () => {
1266
1339
  it("resolves --deployment team:project:dev to dev deployment in fully qualified team/project", async () => {
1267
1340
  setupBigBrainRoutes({
1268
1341
  "teams/myteam/projects/myproject/deployments": () => true,
1269
- "deployment/provision_and_authorize": () => ({
1342
+ "deployment/authorize_within_current_project": () => ({
1270
1343
  adminKey: "fq-dev-key",
1271
1344
  url: "https://fq-dev-deploy.convex.cloud",
1272
1345
  deploymentName: "fq-dev-deploy",
1346
+ deploymentType: "dev",
1273
1347
  }),
1274
1348
  });
1349
+ mockPlatformGet.mockResolvedValue({
1350
+ data: { name: "fq-dev-deploy" },
1351
+ error: undefined,
1352
+ });
1275
1353
 
1276
1354
  const mockFetch = vi.fn().mockResolvedValue({ ok: true });
1277
1355
  vi.mocked(deploymentFetch).mockReturnValue(mockFetch as any);
@@ -1281,13 +1359,23 @@ describe("deployment selection flows", () => {
1281
1359
  { from: "user" },
1282
1360
  );
1283
1361
 
1284
- expect(bigBrainAPIMaybeThrows).toHaveBeenCalledWith(
1362
+ expect(mockPlatformGet).toHaveBeenCalledWith(
1363
+ "/teams/{team_id_or_slug}/projects/{project_slug}/deployment",
1285
1364
  expect.objectContaining({
1286
- path: "deployment/provision_and_authorize",
1365
+ params: expect.objectContaining({
1366
+ path: {
1367
+ team_id_or_slug: "myteam",
1368
+ project_slug: "myproject",
1369
+ },
1370
+ query: { defaultDev: true },
1371
+ }),
1372
+ }),
1373
+ );
1374
+ expect(bigBrainAPI).toHaveBeenCalledWith(
1375
+ expect.objectContaining({
1376
+ path: "deployment/authorize_within_current_project",
1287
1377
  data: expect.objectContaining({
1288
- teamSlug: "myteam",
1289
- projectSlug: "myproject",
1290
- deploymentType: "dev",
1378
+ selectedDeploymentName: "fq-dev-deploy",
1291
1379
  }),
1292
1380
  }),
1293
1381
  );
@@ -1332,6 +1420,109 @@ describe("deployment selection flows", () => {
1332
1420
  ),
1333
1421
  ).rejects.toThrow();
1334
1422
  });
1423
+
1424
+ it("resolves --deployment local to local deployment credentials", async () => {
1425
+ vi.mocked(loadProjectLocalConfig).mockReturnValue({
1426
+ deploymentName: "local-my_team-my_project-abc",
1427
+ config: {
1428
+ ports: { cloud: 3210, site: 3211 },
1429
+ adminKey: "local-key",
1430
+ backendVersion: "1.0.0",
1431
+ },
1432
+ });
1433
+ vi.mocked(loadLocalDeploymentCredentials).mockResolvedValue({
1434
+ deploymentName: "local-my_team-my_project-abc",
1435
+ deploymentUrl: "http://127.0.0.1:3210",
1436
+ adminKey: "local-key",
1437
+ });
1438
+ // The local deployment name is resolved via Big Brain for project
1439
+ // access checks (checkAccessToSelectedProject)
1440
+ setupBigBrainRoutes({
1441
+ "deployment/local-my_team-my_project-abc/team_and_project": () => ({
1442
+ team: "my-team",
1443
+ project: "my-project",
1444
+ teamId: 1,
1445
+ projectId: 1,
1446
+ }),
1447
+ });
1448
+
1449
+ const mockFetch = vi.fn().mockResolvedValue({ ok: true });
1450
+ vi.mocked(deploymentFetch).mockReturnValue(mockFetch as any);
1451
+
1452
+ await env.parseAsync(["set", "ABC", "DEF", "--deployment", "local"], {
1453
+ from: "user",
1454
+ });
1455
+
1456
+ expect(loadLocalDeploymentCredentials).toHaveBeenCalledWith(
1457
+ expect.anything(),
1458
+ "local-my_team-my_project-abc",
1459
+ );
1460
+ expect(deploymentFetch).toHaveBeenCalledWith(
1461
+ expect.anything(),
1462
+ expect.objectContaining({
1463
+ deploymentUrl: "http://127.0.0.1:3210",
1464
+ adminKey: "local-key",
1465
+ }),
1466
+ );
1467
+ });
1468
+
1469
+ it("resolves --deployment local without CONVEX_DEPLOYMENT set", async () => {
1470
+ delete process.env.CONVEX_DEPLOYMENT;
1471
+
1472
+ vi.mocked(loadProjectLocalConfig).mockReturnValue({
1473
+ deploymentName: "local-my_team-my_project-abc",
1474
+ config: {
1475
+ ports: { cloud: 3210, site: 3211 },
1476
+ adminKey: "local-key",
1477
+ backendVersion: "1.0.0",
1478
+ },
1479
+ });
1480
+ vi.mocked(loadLocalDeploymentCredentials).mockResolvedValue({
1481
+ deploymentName: "local-my_team-my_project-abc",
1482
+ deploymentUrl: "http://127.0.0.1:3210",
1483
+ adminKey: "local-key",
1484
+ });
1485
+ setupBigBrainRoutes({
1486
+ "deployment/local-my_team-my_project-abc/team_and_project": () => ({
1487
+ team: "my-team",
1488
+ project: "my-project",
1489
+ teamId: 1,
1490
+ projectId: 1,
1491
+ }),
1492
+ });
1493
+
1494
+ const mockFetch = vi.fn().mockResolvedValue({ ok: true });
1495
+ vi.mocked(deploymentFetch).mockReturnValue(mockFetch as any);
1496
+
1497
+ await env.parseAsync(["set", "ABC", "DEF", "--deployment", "local"], {
1498
+ from: "user",
1499
+ });
1500
+
1501
+ expect(deploymentFetch).toHaveBeenCalledWith(
1502
+ expect.anything(),
1503
+ expect.objectContaining({
1504
+ deploymentUrl: "http://127.0.0.1:3210",
1505
+ adminKey: "local-key",
1506
+ }),
1507
+ );
1508
+ });
1509
+
1510
+ it("errors when --deployment local but no local deployment exists", async () => {
1511
+ vi.mocked(loadProjectLocalConfig).mockReturnValue(null);
1512
+
1513
+ await expect(
1514
+ env.parseAsync(["set", "ABC", "DEF", "--deployment", "local"], {
1515
+ from: "user",
1516
+ }),
1517
+ ).rejects.toThrow();
1518
+
1519
+ expect(process.stderr.write).toHaveBeenCalledWith(
1520
+ expect.stringContaining("No local deployment found"),
1521
+ );
1522
+ expect(process.stderr.write).toHaveBeenCalledWith(
1523
+ expect.stringContaining("npx convex deployment create local"),
1524
+ );
1525
+ });
1335
1526
  });
1336
1527
  });
1337
1528
 
@@ -1627,7 +1818,7 @@ describe("deployment selection flows", () => {
1627
1818
  expect(devAgainstDeployment).not.toHaveBeenCalled();
1628
1819
  });
1629
1820
 
1630
- it("defaults to dev deployment with CONVEX_DEPLOYMENT", async () => {
1821
+ it("resolves CONVEX_DEPLOYMENT to the configured deployment", async () => {
1631
1822
  process.env.CONVEX_DEPLOYMENT = "dev:joyful-capybara-123";
1632
1823
  vi.mocked(readGlobalConfig).mockReturnValue({
1633
1824
  accessToken: "test-token",
@@ -1640,7 +1831,7 @@ describe("deployment selection flows", () => {
1640
1831
  teamId: 1,
1641
1832
  projectId: 1,
1642
1833
  }),
1643
- "deployment/provision_and_authorize": () => ({
1834
+ "deployment/authorize_within_current_project": () => ({
1644
1835
  adminKey: "dev-key",
1645
1836
  url: "https://joyful-capybara-123.convex.cloud",
1646
1837
  deploymentName: "joyful-capybara-123",
@@ -1650,10 +1841,12 @@ describe("deployment selection flows", () => {
1650
1841
 
1651
1842
  await dev.parseAsync([], { from: "user" });
1652
1843
 
1653
- expect(bigBrainAPIMaybeThrows).toHaveBeenCalledWith(
1844
+ expect(bigBrainAPI).toHaveBeenCalledWith(
1654
1845
  expect.objectContaining({
1655
- path: "deployment/provision_and_authorize",
1656
- data: expect.objectContaining({ deploymentType: "dev" }),
1846
+ path: "deployment/authorize_within_current_project",
1847
+ data: expect.objectContaining({
1848
+ selectedDeploymentName: "joyful-capybara-123",
1849
+ }),
1657
1850
  }),
1658
1851
  );
1659
1852
  expect(devAgainstDeployment).toHaveBeenCalledWith(
@@ -1714,7 +1907,7 @@ describe("deployment selection flows", () => {
1714
1907
  expect(bigBrainAPIMaybeThrows).not.toHaveBeenCalled();
1715
1908
  });
1716
1909
 
1717
- it("uses --cloud flag with CONVEX_DEPLOYMENT to force cloud dev deployment", async () => {
1910
+ it("resolves CONVEX_DEPLOYMENT with --cloud to the configured deployment", async () => {
1718
1911
  process.env.CONVEX_DEPLOYMENT = "dev:joyful-capybara-123";
1719
1912
  vi.mocked(readGlobalConfig).mockReturnValue({
1720
1913
  accessToken: "test-token",
@@ -1727,7 +1920,7 @@ describe("deployment selection flows", () => {
1727
1920
  teamId: 1,
1728
1921
  projectId: 1,
1729
1922
  }),
1730
- "deployment/provision_and_authorize": () => ({
1923
+ "deployment/authorize_within_current_project": () => ({
1731
1924
  adminKey: "cloud-dev-key",
1732
1925
  url: "https://joyful-capybara-123.convex.cloud",
1733
1926
  deploymentName: "joyful-capybara-123",
@@ -1746,5 +1939,120 @@ describe("deployment selection flows", () => {
1746
1939
  expect.anything(),
1747
1940
  );
1748
1941
  });
1942
+
1943
+ describe("non-interactive terminal", () => {
1944
+ beforeEach(() => {
1945
+ process.stdin.isTTY = false as any;
1946
+ });
1947
+
1948
+ it("non-interactive, not logged in, no config → uses anonymous deployment", async () => {
1949
+ await dev.parseAsync(["--once"], { from: "user" });
1950
+
1951
+ expect(handleAnonymousDeployment).toHaveBeenCalled();
1952
+ expect(bigBrainAPI).not.toHaveBeenCalled();
1953
+ expect(bigBrainAPIMaybeThrows).not.toHaveBeenCalled();
1954
+ expect(validateOrSelectTeam).not.toHaveBeenCalled();
1955
+ expect(validateOrSelectProject).not.toHaveBeenCalled();
1956
+ });
1957
+
1958
+ it("non-interactive, logged in, no CONVEX_DEPLOYMENT → uses anonymous deployment", async () => {
1959
+ vi.mocked(readGlobalConfig).mockReturnValue({
1960
+ accessToken: "test-token",
1961
+ });
1962
+
1963
+ await dev.parseAsync(["--once"], { from: "user" });
1964
+
1965
+ expect(handleAnonymousDeployment).toHaveBeenCalled();
1966
+ expect(validateOrSelectTeam).not.toHaveBeenCalled();
1967
+ expect(validateOrSelectProject).not.toHaveBeenCalled();
1968
+ });
1969
+
1970
+ it("non-interactive with CONVEX_DEPLOYMENT → resolves to the configured deployment", async () => {
1971
+ process.env.CONVEX_DEPLOYMENT = "dev:joyful-capybara-123";
1972
+ vi.mocked(readGlobalConfig).mockReturnValue({
1973
+ accessToken: "test-token",
1974
+ });
1975
+
1976
+ setupBigBrainRoutes({
1977
+ "deployment/joyful-capybara-123/team_and_project": () => ({
1978
+ team: "my-team",
1979
+ project: "my-project",
1980
+ teamId: 1,
1981
+ projectId: 1,
1982
+ }),
1983
+ "deployment/authorize_within_current_project": () => ({
1984
+ adminKey: "dev-key",
1985
+ url: "https://joyful-capybara-123.convex.cloud",
1986
+ deploymentName: "joyful-capybara-123",
1987
+ deploymentType: "dev",
1988
+ }),
1989
+ });
1990
+
1991
+ await dev.parseAsync([], { from: "user" });
1992
+
1993
+ expect(devAgainstDeployment).toHaveBeenCalledWith(
1994
+ expect.anything(),
1995
+ expect.objectContaining({
1996
+ url: "https://joyful-capybara-123.convex.cloud",
1997
+ adminKey: "dev-key",
1998
+ }),
1999
+ expect.anything(),
2000
+ );
2001
+ expect(handleAnonymousDeployment).not.toHaveBeenCalled();
2002
+ });
2003
+
2004
+ it("non-interactive with CONVEX_DEPLOY_KEY → uses deploy key", async () => {
2005
+ process.env.CONVEX_DEPLOY_KEY = "project:identifier|secretkey";
2006
+
2007
+ setupBigBrainRoutes({
2008
+ "deployment/provision_and_authorize": () => ({
2009
+ adminKey: "dev-key",
2010
+ url: "https://swift-squirrel-234.convex.cloud",
2011
+ deploymentName: "swift-squirrel-234",
2012
+ deploymentType: "dev",
2013
+ }),
2014
+ });
2015
+
2016
+ await dev.parseAsync([], { from: "user" });
2017
+
2018
+ expect(devAgainstDeployment).toHaveBeenCalledWith(
2019
+ expect.anything(),
2020
+ expect.objectContaining({
2021
+ url: "https://swift-squirrel-234.convex.cloud",
2022
+ adminKey: "dev-key",
2023
+ }),
2024
+ expect.anything(),
2025
+ );
2026
+ expect(handleAnonymousDeployment).not.toHaveBeenCalled();
2027
+ });
2028
+
2029
+ it("non-interactive with CONVEX_SELF_HOSTED_URL → uses self-hosted", async () => {
2030
+ process.env.CONVEX_SELF_HOSTED_URL = "http://localhost:3210";
2031
+ process.env.CONVEX_SELF_HOSTED_ADMIN_KEY = "self-hosted-key";
2032
+
2033
+ await dev.parseAsync([], { from: "user" });
2034
+
2035
+ expect(devAgainstDeployment).toHaveBeenCalledWith(
2036
+ expect.anything(),
2037
+ expect.objectContaining({
2038
+ url: "http://localhost:3210",
2039
+ adminKey: "self-hosted-key",
2040
+ }),
2041
+ expect.anything(),
2042
+ );
2043
+ expect(handleAnonymousDeployment).not.toHaveBeenCalled();
2044
+ });
2045
+ });
2046
+ });
2047
+
2048
+ it("dev --deployment crashes with helpful message pointing to deployment select", async () => {
2049
+ await expect(
2050
+ dev.parseAsync(["--deployment", "happy-animal-123"], { from: "user" }),
2051
+ ).rejects.toThrow();
2052
+
2053
+ expect(process.stderr.write).toHaveBeenCalledWith(
2054
+ expect.stringContaining("npx convex deployment select happy-animal-123"),
2055
+ );
2056
+ expect(devAgainstDeployment).not.toHaveBeenCalled();
1749
2057
  });
1750
2058
  });