convex 1.40.0 → 1.42.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 (400) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +1 -1
  4. package/dist/cjs/browser/simple_client-node.js +85 -27
  5. package/dist/cjs/browser/simple_client-node.js.map +3 -3
  6. package/dist/cjs/cli/aiFiles.js +2 -2
  7. package/dist/cjs/cli/aiFiles.js.map +1 -1
  8. package/dist/cjs/cli/configure.js +1 -4
  9. package/dist/cjs/cli/configure.js.map +2 -2
  10. package/dist/cjs/cli/convexExport.js +3 -3
  11. package/dist/cjs/cli/convexExport.js.map +1 -1
  12. package/dist/cjs/cli/convexImport.js +2 -2
  13. package/dist/cjs/cli/convexImport.js.map +1 -1
  14. package/dist/cjs/cli/dashboard.js +19 -6
  15. package/dist/cjs/cli/dashboard.js.map +3 -3
  16. package/dist/cjs/cli/data.js +2 -2
  17. package/dist/cjs/cli/data.js.map +1 -1
  18. package/dist/cjs/cli/deploy.js +5 -5
  19. package/dist/cjs/cli/deploy.js.map +2 -2
  20. package/dist/cjs/cli/deploymentCreate.js +11 -5
  21. package/dist/cjs/cli/deploymentCreate.js.map +2 -2
  22. package/dist/cjs/cli/deploymentSelect.js +5 -5
  23. package/dist/cjs/cli/deploymentSelect.js.map +1 -1
  24. package/dist/cjs/cli/deploymentTokenCreate.js +5 -13
  25. package/dist/cjs/cli/deploymentTokenCreate.js.map +2 -2
  26. package/dist/cjs/cli/deploymentTokenDelete.js +4 -11
  27. package/dist/cjs/cli/deploymentTokenDelete.js.map +2 -2
  28. package/dist/cjs/cli/dev.js +6 -5
  29. package/dist/cjs/cli/dev.js.map +2 -2
  30. package/dist/cjs/cli/env.js +25 -18
  31. package/dist/cjs/cli/env.js.map +2 -2
  32. package/dist/cjs/cli/envDefault.js +20 -15
  33. package/dist/cjs/cli/envDefault.js.map +2 -2
  34. package/dist/cjs/cli/insights.js +14 -4
  35. package/dist/cjs/cli/insights.js.map +2 -2
  36. package/dist/cjs/cli/lib/aiFiles/skills.js +2 -2
  37. package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
  38. package/dist/cjs/cli/lib/command.js +1 -1
  39. package/dist/cjs/cli/lib/command.js.map +1 -1
  40. package/dist/cjs/cli/lib/deployment.js.map +1 -1
  41. package/dist/cjs/cli/lib/deploymentSelection.js +39 -0
  42. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  43. package/dist/cjs/cli/lib/dev.js +31 -0
  44. package/dist/cjs/cli/lib/dev.js.map +2 -2
  45. package/dist/cjs/cli/lib/env.js +5 -1
  46. package/dist/cjs/cli/lib/env.js.map +2 -2
  47. package/dist/cjs/cli/lib/generateDocs.js +256 -0
  48. package/dist/cjs/cli/lib/generateDocs.js.map +7 -0
  49. package/dist/cjs/cli/lib/localDeployment/anonymous.js +24 -49
  50. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +3 -3
  51. package/dist/cjs/cli/lib/localDeployment/bigBrain.js +0 -9
  52. package/dist/cjs/cli/lib/localDeployment/bigBrain.js.map +2 -2
  53. package/dist/cjs/cli/lib/localDeployment/dashboard.js +30 -68
  54. package/dist/cjs/cli/lib/localDeployment/dashboard.js.map +2 -2
  55. package/dist/cjs/cli/lib/localDeployment/download.js +14 -1
  56. package/dist/cjs/cli/lib/localDeployment/download.js.map +2 -2
  57. package/dist/cjs/cli/lib/localDeployment/filePaths.js +33 -4
  58. package/dist/cjs/cli/lib/localDeployment/filePaths.js.map +2 -2
  59. package/dist/cjs/cli/lib/localDeployment/localDeployment.js +37 -126
  60. package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +3 -3
  61. package/dist/cjs/cli/lib/localDeployment/secrets.js +91 -0
  62. package/dist/cjs/cli/lib/localDeployment/secrets.js.map +7 -0
  63. package/dist/cjs/cli/lib/localDeployment/upgrade.js +43 -28
  64. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +3 -3
  65. package/dist/cjs/cli/lib/localDeployment/utils.js +0 -19
  66. package/dist/cjs/cli/lib/localDeployment/utils.js.map +3 -3
  67. package/dist/cjs/cli/lib/login.js +16 -12
  68. package/dist/cjs/cli/lib/login.js.map +2 -2
  69. package/dist/cjs/cli/lib/logs.js +4 -1
  70. package/dist/cjs/cli/lib/logs.js.map +2 -2
  71. package/dist/cjs/cli/lib/run.js +27 -2
  72. package/dist/cjs/cli/lib/run.js.map +2 -2
  73. package/dist/cjs/cli/lib/runTestFunction.js +3 -3
  74. package/dist/cjs/cli/lib/runTestFunction.js.map +1 -1
  75. package/dist/cjs/cli/lib/utils/utils.js +30 -0
  76. package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
  77. package/dist/cjs/cli/program.js +2 -1
  78. package/dist/cjs/cli/program.js.map +2 -2
  79. package/dist/cjs/cli/project.js +27 -0
  80. package/dist/cjs/cli/project.js.map +7 -0
  81. package/dist/cjs/cli/projectCreate.js +90 -0
  82. package/dist/cjs/cli/projectCreate.js.map +7 -0
  83. package/dist/cjs/cli/run.js +5 -5
  84. package/dist/cjs/cli/run.js.map +1 -1
  85. package/dist/cjs/index.js +1 -1
  86. package/dist/cjs/index.js.map +1 -1
  87. package/dist/cjs/server/database.js.map +1 -1
  88. package/dist/cjs/server/impl/meta_impl.js +6 -6
  89. package/dist/cjs/server/impl/meta_impl.js.map +2 -2
  90. package/dist/cjs/server/impl/registration_impl.js +9 -3
  91. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  92. package/dist/cjs/server/index.js.map +2 -2
  93. package/dist/cjs/server/meta.js.map +1 -1
  94. package/dist/cjs/server/query.js.map +1 -1
  95. package/dist/cjs/server/registration.js.map +1 -1
  96. package/dist/cjs/server/storage.js.map +1 -1
  97. package/dist/cjs/server/system_fields.js.map +1 -1
  98. package/dist/cjs-types/cli/configure.d.ts +3 -2
  99. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  100. package/dist/cjs-types/cli/dashboard.d.ts.map +1 -1
  101. package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
  102. package/dist/cjs-types/cli/deploymentTokenCreate.d.ts.map +1 -1
  103. package/dist/cjs-types/cli/deploymentTokenDelete.d.ts.map +1 -1
  104. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  105. package/dist/cjs-types/cli/env.d.ts.map +1 -1
  106. package/dist/cjs-types/cli/envDefault.d.ts.map +1 -1
  107. package/dist/cjs-types/cli/insights.d.ts +1 -0
  108. package/dist/cjs-types/cli/insights.d.ts.map +1 -1
  109. package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +4 -4
  110. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +16 -16
  111. package/dist/cjs-types/cli/lib/deployment.d.ts +0 -2
  112. package/dist/cjs-types/cli/lib/deployment.d.ts.map +1 -1
  113. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts +7 -0
  114. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  115. package/dist/cjs-types/cli/lib/dev.d.ts +2 -1
  116. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  117. package/dist/cjs-types/cli/lib/env.d.ts +3 -1
  118. package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
  119. package/dist/cjs-types/cli/lib/env.test.d.ts +2 -0
  120. package/dist/cjs-types/cli/lib/env.test.d.ts.map +1 -0
  121. package/dist/cjs-types/cli/lib/generateDocs.d.ts +20 -0
  122. package/dist/cjs-types/cli/lib/generateDocs.d.ts.map +1 -0
  123. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts +2 -0
  124. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts.map +1 -0
  125. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts +1 -1
  126. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  127. package/dist/cjs-types/cli/lib/localDeployment/bigBrain.d.ts +2 -4
  128. package/dist/cjs-types/cli/lib/localDeployment/bigBrain.d.ts.map +1 -1
  129. package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts +9 -4
  130. package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
  131. package/dist/cjs-types/cli/lib/localDeployment/download.d.ts +11 -1
  132. package/dist/cjs-types/cli/lib/localDeployment/download.d.ts.map +1 -1
  133. package/dist/cjs-types/cli/lib/localDeployment/filePaths.d.ts +16 -5
  134. package/dist/cjs-types/cli/lib/localDeployment/filePaths.d.ts.map +1 -1
  135. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts +1 -9
  136. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  137. package/dist/cjs-types/cli/lib/localDeployment/secrets.d.ts +31 -0
  138. package/dist/cjs-types/cli/lib/localDeployment/secrets.d.ts.map +1 -0
  139. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts +2 -0
  140. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts.map +1 -0
  141. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts +6 -3
  142. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  143. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +0 -2
  144. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  145. package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
  146. package/dist/cjs-types/cli/lib/logs.d.ts +1 -1
  147. package/dist/cjs-types/cli/lib/logs.d.ts.map +1 -1
  148. package/dist/cjs-types/cli/lib/run.d.ts +1 -1
  149. package/dist/cjs-types/cli/lib/run.d.ts.map +1 -1
  150. package/dist/cjs-types/cli/lib/utils/utils.d.ts +10 -0
  151. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  152. package/dist/cjs-types/cli/lib/versionApi.d.ts +2 -2
  153. package/dist/cjs-types/cli/program.d.ts.map +1 -1
  154. package/dist/cjs-types/cli/project.d.ts +3 -0
  155. package/dist/cjs-types/cli/project.d.ts.map +1 -0
  156. package/dist/cjs-types/cli/projectCreate.d.ts +5 -0
  157. package/dist/cjs-types/cli/projectCreate.d.ts.map +1 -0
  158. package/dist/cjs-types/index.d.ts +1 -1
  159. package/dist/cjs-types/server/database.d.ts +21 -3
  160. package/dist/cjs-types/server/database.d.ts.map +1 -1
  161. package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -1
  162. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  163. package/dist/cjs-types/server/index.d.ts +2 -2
  164. package/dist/cjs-types/server/index.d.ts.map +1 -1
  165. package/dist/cjs-types/server/meta.d.ts +26 -0
  166. package/dist/cjs-types/server/meta.d.ts.map +1 -1
  167. package/dist/cjs-types/server/query.d.ts +1 -1
  168. package/dist/cjs-types/server/registration.d.ts +23 -5
  169. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  170. package/dist/cjs-types/server/storage.d.ts +20 -3
  171. package/dist/cjs-types/server/storage.d.ts.map +1 -1
  172. package/dist/cli.bundle.cjs +67155 -68245
  173. package/dist/cli.bundle.cjs.map +4 -4
  174. package/dist/esm/browser/simple_client-node.js +85 -27
  175. package/dist/esm/browser/simple_client-node.js.map +3 -3
  176. package/dist/esm/cli/aiFiles.js +2 -2
  177. package/dist/esm/cli/aiFiles.js.map +1 -1
  178. package/dist/esm/cli/configure.js +1 -4
  179. package/dist/esm/cli/configure.js.map +2 -2
  180. package/dist/esm/cli/convexExport.js +3 -3
  181. package/dist/esm/cli/convexExport.js.map +1 -1
  182. package/dist/esm/cli/convexImport.js +2 -2
  183. package/dist/esm/cli/convexImport.js.map +1 -1
  184. package/dist/esm/cli/dashboard.js +16 -3
  185. package/dist/esm/cli/dashboard.js.map +2 -2
  186. package/dist/esm/cli/data.js +2 -2
  187. package/dist/esm/cli/data.js.map +1 -1
  188. package/dist/esm/cli/deploy.js +5 -5
  189. package/dist/esm/cli/deploy.js.map +2 -2
  190. package/dist/esm/cli/deploymentCreate.js +13 -9
  191. package/dist/esm/cli/deploymentCreate.js.map +2 -2
  192. package/dist/esm/cli/deploymentSelect.js +5 -5
  193. package/dist/esm/cli/deploymentSelect.js.map +1 -1
  194. package/dist/esm/cli/deploymentTokenCreate.js +9 -15
  195. package/dist/esm/cli/deploymentTokenCreate.js.map +2 -2
  196. package/dist/esm/cli/deploymentTokenDelete.js +8 -16
  197. package/dist/esm/cli/deploymentTokenDelete.js.map +2 -2
  198. package/dist/esm/cli/dev.js +6 -5
  199. package/dist/esm/cli/dev.js.map +2 -2
  200. package/dist/esm/cli/env.js +25 -18
  201. package/dist/esm/cli/env.js.map +2 -2
  202. package/dist/esm/cli/envDefault.js +20 -15
  203. package/dist/esm/cli/envDefault.js.map +2 -2
  204. package/dist/esm/cli/insights.js +14 -4
  205. package/dist/esm/cli/insights.js.map +2 -2
  206. package/dist/esm/cli/lib/aiFiles/skills.js +2 -2
  207. package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
  208. package/dist/esm/cli/lib/command.js +1 -1
  209. package/dist/esm/cli/lib/command.js.map +1 -1
  210. package/dist/esm/cli/lib/deployment.js.map +1 -1
  211. package/dist/esm/cli/lib/deploymentSelection.js +38 -0
  212. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  213. package/dist/esm/cli/lib/dev.js +31 -0
  214. package/dist/esm/cli/lib/dev.js.map +2 -2
  215. package/dist/esm/cli/lib/env.js +5 -1
  216. package/dist/esm/cli/lib/env.js.map +2 -2
  217. package/dist/esm/cli/lib/generateDocs.js +233 -0
  218. package/dist/esm/cli/lib/generateDocs.js.map +7 -0
  219. package/dist/esm/cli/lib/localDeployment/anonymous.js +30 -61
  220. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +3 -3
  221. package/dist/esm/cli/lib/localDeployment/bigBrain.js +0 -8
  222. package/dist/esm/cli/lib/localDeployment/bigBrain.js.map +2 -2
  223. package/dist/esm/cli/lib/localDeployment/dashboard.js +36 -69
  224. package/dist/esm/cli/lib/localDeployment/dashboard.js.map +2 -2
  225. package/dist/esm/cli/lib/localDeployment/download.js +15 -2
  226. package/dist/esm/cli/lib/localDeployment/download.js.map +2 -2
  227. package/dist/esm/cli/lib/localDeployment/filePaths.js +29 -2
  228. package/dist/esm/cli/lib/localDeployment/filePaths.js.map +2 -2
  229. package/dist/esm/cli/lib/localDeployment/localDeployment.js +40 -134
  230. package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +3 -3
  231. package/dist/esm/cli/lib/localDeployment/secrets.js +57 -0
  232. package/dist/esm/cli/lib/localDeployment/secrets.js.map +7 -0
  233. package/dist/esm/cli/lib/localDeployment/upgrade.js +45 -28
  234. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +3 -3
  235. package/dist/esm/cli/lib/localDeployment/utils.js +0 -7
  236. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  237. package/dist/esm/cli/lib/login.js +18 -13
  238. package/dist/esm/cli/lib/login.js.map +2 -2
  239. package/dist/esm/cli/lib/logs.js +5 -2
  240. package/dist/esm/cli/lib/logs.js.map +2 -2
  241. package/dist/esm/cli/lib/run.js +32 -3
  242. package/dist/esm/cli/lib/run.js.map +2 -2
  243. package/dist/esm/cli/lib/runTestFunction.js +3 -3
  244. package/dist/esm/cli/lib/runTestFunction.js.map +1 -1
  245. package/dist/esm/cli/lib/utils/utils.js +29 -0
  246. package/dist/esm/cli/lib/utils/utils.js.map +2 -2
  247. package/dist/esm/cli/program.js +2 -1
  248. package/dist/esm/cli/program.js.map +2 -2
  249. package/dist/esm/cli/project.js +5 -0
  250. package/dist/esm/cli/project.js.map +7 -0
  251. package/dist/esm/cli/projectCreate.js +68 -0
  252. package/dist/esm/cli/projectCreate.js.map +7 -0
  253. package/dist/esm/cli/run.js +5 -5
  254. package/dist/esm/cli/run.js.map +1 -1
  255. package/dist/esm/index.js +1 -1
  256. package/dist/esm/index.js.map +1 -1
  257. package/dist/esm/server/impl/meta_impl.js +6 -6
  258. package/dist/esm/server/impl/meta_impl.js.map +2 -2
  259. package/dist/esm/server/impl/registration_impl.js +9 -3
  260. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  261. package/dist/esm/server/index.js.map +2 -2
  262. package/dist/esm-types/cli/configure.d.ts +3 -2
  263. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  264. package/dist/esm-types/cli/dashboard.d.ts.map +1 -1
  265. package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
  266. package/dist/esm-types/cli/deploymentTokenCreate.d.ts.map +1 -1
  267. package/dist/esm-types/cli/deploymentTokenDelete.d.ts.map +1 -1
  268. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  269. package/dist/esm-types/cli/env.d.ts.map +1 -1
  270. package/dist/esm-types/cli/envDefault.d.ts.map +1 -1
  271. package/dist/esm-types/cli/insights.d.ts +1 -0
  272. package/dist/esm-types/cli/insights.d.ts.map +1 -1
  273. package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +4 -4
  274. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +16 -16
  275. package/dist/esm-types/cli/lib/deployment.d.ts +0 -2
  276. package/dist/esm-types/cli/lib/deployment.d.ts.map +1 -1
  277. package/dist/esm-types/cli/lib/deploymentSelection.d.ts +7 -0
  278. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  279. package/dist/esm-types/cli/lib/dev.d.ts +2 -1
  280. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  281. package/dist/esm-types/cli/lib/env.d.ts +3 -1
  282. package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
  283. package/dist/esm-types/cli/lib/env.test.d.ts +2 -0
  284. package/dist/esm-types/cli/lib/env.test.d.ts.map +1 -0
  285. package/dist/esm-types/cli/lib/generateDocs.d.ts +20 -0
  286. package/dist/esm-types/cli/lib/generateDocs.d.ts.map +1 -0
  287. package/dist/esm-types/cli/lib/generateDocs.test.d.ts +2 -0
  288. package/dist/esm-types/cli/lib/generateDocs.test.d.ts.map +1 -0
  289. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts +1 -1
  290. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  291. package/dist/esm-types/cli/lib/localDeployment/bigBrain.d.ts +2 -4
  292. package/dist/esm-types/cli/lib/localDeployment/bigBrain.d.ts.map +1 -1
  293. package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts +9 -4
  294. package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
  295. package/dist/esm-types/cli/lib/localDeployment/download.d.ts +11 -1
  296. package/dist/esm-types/cli/lib/localDeployment/download.d.ts.map +1 -1
  297. package/dist/esm-types/cli/lib/localDeployment/filePaths.d.ts +16 -5
  298. package/dist/esm-types/cli/lib/localDeployment/filePaths.d.ts.map +1 -1
  299. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts +1 -9
  300. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  301. package/dist/esm-types/cli/lib/localDeployment/secrets.d.ts +31 -0
  302. package/dist/esm-types/cli/lib/localDeployment/secrets.d.ts.map +1 -0
  303. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts +2 -0
  304. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts.map +1 -0
  305. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts +6 -3
  306. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  307. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +0 -2
  308. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  309. package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
  310. package/dist/esm-types/cli/lib/logs.d.ts +1 -1
  311. package/dist/esm-types/cli/lib/logs.d.ts.map +1 -1
  312. package/dist/esm-types/cli/lib/run.d.ts +1 -1
  313. package/dist/esm-types/cli/lib/run.d.ts.map +1 -1
  314. package/dist/esm-types/cli/lib/utils/utils.d.ts +10 -0
  315. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  316. package/dist/esm-types/cli/lib/versionApi.d.ts +2 -2
  317. package/dist/esm-types/cli/program.d.ts.map +1 -1
  318. package/dist/esm-types/cli/project.d.ts +3 -0
  319. package/dist/esm-types/cli/project.d.ts.map +1 -0
  320. package/dist/esm-types/cli/projectCreate.d.ts +5 -0
  321. package/dist/esm-types/cli/projectCreate.d.ts.map +1 -0
  322. package/dist/esm-types/index.d.ts +1 -1
  323. package/dist/esm-types/server/database.d.ts +21 -3
  324. package/dist/esm-types/server/database.d.ts.map +1 -1
  325. package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -1
  326. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  327. package/dist/esm-types/server/index.d.ts +2 -2
  328. package/dist/esm-types/server/index.d.ts.map +1 -1
  329. package/dist/esm-types/server/meta.d.ts +26 -0
  330. package/dist/esm-types/server/meta.d.ts.map +1 -1
  331. package/dist/esm-types/server/query.d.ts +1 -1
  332. package/dist/esm-types/server/registration.d.ts +23 -5
  333. package/dist/esm-types/server/registration.d.ts.map +1 -1
  334. package/dist/esm-types/server/storage.d.ts +20 -3
  335. package/dist/esm-types/server/storage.d.ts.map +1 -1
  336. package/dist/react.bundle.js +1 -1
  337. package/dist/react.bundle.js.map +1 -1
  338. package/package.json +7 -5
  339. package/src/browser/sync/request_manager.test.ts +2 -2
  340. package/src/cli/aiFiles.ts +2 -2
  341. package/src/cli/configure.ts +4 -6
  342. package/src/cli/convexExport.ts +3 -3
  343. package/src/cli/convexImport.ts +2 -2
  344. package/src/cli/dashboard.ts +29 -3
  345. package/src/cli/data.ts +2 -2
  346. package/src/cli/deploy.ts +5 -5
  347. package/src/cli/deploymentCreate.test.ts +151 -24
  348. package/src/cli/deploymentCreate.ts +21 -11
  349. package/src/cli/deploymentSelect.ts +5 -5
  350. package/src/cli/deploymentSelection.test.ts +0 -3
  351. package/src/cli/deploymentToken.test.ts +34 -23
  352. package/src/cli/deploymentTokenCreate.ts +9 -21
  353. package/src/cli/deploymentTokenDelete.ts +8 -23
  354. package/src/cli/dev.ts +5 -4
  355. package/src/cli/env.ts +29 -19
  356. package/src/cli/envDefault.ts +21 -15
  357. package/src/cli/insights.ts +15 -3
  358. package/src/cli/lib/aiFiles/integration.test.ts +2 -0
  359. package/src/cli/lib/aiFiles/skills.ts +3 -3
  360. package/src/cli/lib/command.ts +2 -2
  361. package/src/cli/lib/deployment.ts +0 -5
  362. package/src/cli/lib/deploymentSelection.ts +67 -0
  363. package/src/cli/lib/dev.ts +39 -0
  364. package/src/cli/lib/env.test.ts +60 -0
  365. package/src/cli/lib/env.ts +9 -1
  366. package/src/cli/lib/generateDocs.test.ts +326 -0
  367. package/src/cli/lib/generateDocs.ts +393 -0
  368. package/src/cli/lib/localDeployment/anonymous.ts +48 -72
  369. package/src/cli/lib/localDeployment/bigBrain.ts +7 -15
  370. package/src/cli/lib/localDeployment/dashboard.ts +48 -80
  371. package/src/cli/lib/localDeployment/download.ts +34 -3
  372. package/src/cli/lib/localDeployment/filePaths.ts +66 -6
  373. package/src/cli/lib/localDeployment/localDeployment.ts +46 -184
  374. package/src/cli/lib/localDeployment/run.test.ts +6 -6
  375. package/src/cli/lib/localDeployment/secrets.test.ts +53 -0
  376. package/src/cli/lib/localDeployment/secrets.ts +93 -0
  377. package/src/cli/lib/localDeployment/tests/keygenFailure.mjs +9 -0
  378. package/src/cli/lib/localDeployment/tests/keygenSuccess.mjs +31 -0
  379. package/src/cli/lib/localDeployment/upgrade.ts +52 -38
  380. package/src/cli/lib/localDeployment/utils.ts +0 -10
  381. package/src/cli/lib/login.ts +18 -18
  382. package/src/cli/lib/logs.ts +7 -2
  383. package/src/cli/lib/run.ts +37 -3
  384. package/src/cli/lib/runTestFunction.ts +3 -3
  385. package/src/cli/lib/utils/utils.ts +56 -0
  386. package/src/cli/program.ts +2 -0
  387. package/src/cli/project.ts +7 -0
  388. package/src/cli/projectCreate.ts +99 -0
  389. package/src/cli/run.ts +5 -5
  390. package/src/index.ts +1 -1
  391. package/src/server/database.ts +21 -3
  392. package/src/server/impl/meta_impl.ts +7 -6
  393. package/src/server/impl/registration_impl.ts +11 -5
  394. package/src/server/index.ts +2 -0
  395. package/src/server/meta.ts +27 -0
  396. package/src/server/query.ts +1 -1
  397. package/src/server/registration.test.ts +16 -25
  398. package/src/server/registration.ts +25 -19
  399. package/src/server/storage.ts +22 -3
  400. package/src/server/system_fields.ts +1 -1
@@ -187,20 +187,23 @@ afterEach(() => {
187
187
  });
188
188
 
189
189
  describe("deployment token create", () => {
190
- test("crashes when not authed with a personal access token", async () => {
191
- setAuthKind("deploymentKey");
192
- mockSelectedDeployment("joyful-capybara-123", "dev");
193
-
194
- await expect(
195
- deploymentTokenCreate.parseAsync(["my-token"], { from: "user" }),
196
- ).rejects.toThrow();
197
- expect(process.stderr.write).toHaveBeenCalledWith(
198
- expect.stringContaining(
199
- "requires being logged in with a personal access token",
200
- ),
201
- );
202
- expect(mockPlatformPost).not.toHaveBeenCalled();
203
- });
190
+ test.each(["deploymentKey", "projectKey", "previewDeployKey"] as const)(
191
+ "crashes when authed with a %s instead of a personal access token",
192
+ async (kind) => {
193
+ setAuthKind(kind);
194
+ mockSelectedDeployment("joyful-capybara-123", "dev");
195
+
196
+ await expect(
197
+ deploymentTokenCreate.parseAsync(["my-token"], { from: "user" }),
198
+ ).rejects.toThrow();
199
+ expect(process.stderr.write).toHaveBeenCalledWith(
200
+ expect.stringContaining(
201
+ "requires being logged in with a personal access token",
202
+ ),
203
+ );
204
+ expect(mockPlatformPost).not.toHaveBeenCalled();
205
+ },
206
+ );
204
207
 
205
208
  test("crashes when no auth is configured at all", async () => {
206
209
  setNoAuth();
@@ -311,15 +314,23 @@ describe("deployment token create", () => {
311
314
  });
312
315
 
313
316
  describe("deployment token delete", () => {
314
- test("crashes when not authed with a personal access token", async () => {
315
- setAuthKind("deploymentKey");
316
- mockSelectedDeployment("joyful-capybara-123", "dev");
317
-
318
- await expect(
319
- deploymentTokenDelete.parseAsync(["my-token"], { from: "user" }),
320
- ).rejects.toThrow();
321
- expect(mockPlatformPost).not.toHaveBeenCalled();
322
- });
317
+ test.each(["deploymentKey", "projectKey", "previewDeployKey"] as const)(
318
+ "crashes when authed with a %s instead of a personal access token",
319
+ async (kind) => {
320
+ setAuthKind(kind);
321
+ mockSelectedDeployment("joyful-capybara-123", "dev");
322
+
323
+ await expect(
324
+ deploymentTokenDelete.parseAsync(["my-token"], { from: "user" }),
325
+ ).rejects.toThrow();
326
+ expect(process.stderr.write).toHaveBeenCalledWith(
327
+ expect.stringContaining(
328
+ "requires being logged in with a personal access token",
329
+ ),
330
+ );
331
+ expect(mockPlatformPost).not.toHaveBeenCalled();
332
+ },
333
+ );
323
334
 
324
335
  test("sends the friendly name as-is when no `|` is present", async () => {
325
336
  setAuthKind("accessToken");
@@ -1,13 +1,14 @@
1
1
  import { Command } from "@commander-js/extra-typings";
2
- import { chalkStderr } from "chalk";
3
2
  import { oneoffContext } from "../bundler/context.js";
4
3
  import { logFinishedStep, logOutput, showSpinner } from "../bundler/log.js";
5
4
  import { loadSelectedDeploymentCredentials } from "./lib/api.js";
6
5
  import { actionDescription } from "./lib/command.js";
7
- import { getDeploymentSelection } from "./lib/deploymentSelection.js";
6
+ import {
7
+ ensureLoggedInWithAccessToken,
8
+ getDeploymentSelection,
9
+ } from "./lib/deploymentSelection.js";
8
10
  import { changedEnvVarFile } from "./lib/envvars.js";
9
11
  import {
10
- CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,
11
12
  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
12
13
  ENV_VAR_FILE_PATH,
13
14
  typedPlatformClient,
@@ -19,10 +20,10 @@ export const deploymentTokenCreate = new Command("create")
19
20
  [
20
21
  `Creates a deploy key that, when set as \`${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\`, scopes all commands to the target deployment.`,
21
22
  "",
22
- "- Print a new deploy key to stdout: `npx convex deployment token create my-token`",
23
- `- Save a new deploy key in \`${ENV_VAR_FILE_PATH}\`: \`npx convex deployment token create my-token --save-env\``,
24
- "- Save a new deploy key in a custom env file: `npx convex deployment token create ci-token --save-env .env.production`",
25
- "- Create a key for the project's prod: `npx convex deployment token create ci-token --deployment prod`",
23
+ " Print a new deploy key to stdout: `npx convex deployment token create my-token`",
24
+ `• Save a new deploy key in \`${ENV_VAR_FILE_PATH}\`: \`npx convex deployment token create my-token --save-env\``,
25
+ " Save a new deploy key in a custom env file: `npx convex deployment token create ci-token --save-env .env.production`",
26
+ " Create a key for the project's prod: `npx convex deployment token create ci-token --deployment prod`",
26
27
  ].join("\n"),
27
28
  )
28
29
  .argument("<name>", "Name for the new deploy key")
@@ -36,20 +37,7 @@ export const deploymentTokenCreate = new Command("create")
36
37
  .action(async (name, options) => {
37
38
  const ctx = await oneoffContext(options);
38
39
 
39
- const auth = ctx.bigBrainAuth();
40
- if (auth === null || auth.kind !== "accessToken") {
41
- return await ctx.crash({
42
- exitCode: 1,
43
- errorType: "fatal",
44
- printedMessage: `Creating a deploy key currently requires being logged in with a personal access token. ${
45
- process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]
46
- ? `Unset ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}`
47
- : process.env[CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME]
48
- ? `Unset ${CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME}`
49
- : `Run ${chalkStderr.bold("npx convex login")}`
50
- } and try again.`,
51
- });
52
- }
40
+ await ensureLoggedInWithAccessToken(ctx, "Creating a deploy key");
53
41
 
54
42
  const deploymentSelection = await getDeploymentSelection(ctx, options);
55
43
  const deployment = await loadSelectedDeploymentCredentials(
@@ -4,12 +4,11 @@ import { oneoffContext } from "../bundler/context.js";
4
4
  import { logFinishedStep, showSpinner } from "../bundler/log.js";
5
5
  import { loadSelectedDeploymentCredentials } from "./lib/api.js";
6
6
  import { actionDescription } from "./lib/command.js";
7
- import { getDeploymentSelection } from "./lib/deploymentSelection.js";
8
7
  import {
9
- CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,
10
- CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
11
- typedPlatformClient,
12
- } from "./lib/utils/utils.js";
8
+ ensureLoggedInWithAccessToken,
9
+ getDeploymentSelection,
10
+ } from "./lib/deploymentSelection.js";
11
+ import { typedPlatformClient } from "./lib/utils/utils.js";
13
12
 
14
13
  export const deploymentTokenDelete = new Command("delete")
15
14
  .summary("Delete an access token")
@@ -19,9 +18,9 @@ export const deploymentTokenDelete = new Command("delete")
19
18
  "",
20
19
  "The positional `<nameOrToken>` can be the unique name of the deploy key (as passed to `token create`) or the deploy key value itself. The target deployment defaults to the currently-selected one; pass `--deployment` to target a different deployment.",
21
20
  "",
22
- "- Delete by name: `npx convex deployment token delete my-token`",
23
- "- Delete by value: `npx convex deployment token delete 'dev:happy-animal-123|ey...'`",
24
- "- Target prod: `npx convex deployment token delete ci-token --deployment prod`",
21
+ " Delete by name: `npx convex deployment token delete my-token`",
22
+ " Delete by value: `npx convex deployment token delete 'dev:happy-animal-123|ey...'`",
23
+ " Target prod: `npx convex deployment token delete ci-token --deployment prod`",
25
24
  ].join("\n"),
26
25
  )
27
26
  .argument(
@@ -34,21 +33,7 @@ export const deploymentTokenDelete = new Command("delete")
34
33
  .action(async (nameOrToken, options) => {
35
34
  const ctx = await oneoffContext(options);
36
35
 
37
- const auth = ctx.bigBrainAuth();
38
- if (auth === null || auth.kind !== "accessToken") {
39
- return await ctx.crash({
40
- exitCode: 1,
41
- errorType: "fatal",
42
- printedMessage: `Deleting a deploy key requires being logged in with a personal access token. ${
43
- auth === null
44
- ? "Run "
45
- : process.env[CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME] &&
46
- !process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]
47
- ? `Unset ${CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME} and run `
48
- : `Unset ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} and run `
49
- }${chalkStderr.bold("npx convex login")} and try again.`,
50
- });
51
- }
36
+ await ensureLoggedInWithAccessToken(ctx, "Deleting a deploy key");
52
37
 
53
38
  const deploymentSelection = await getDeploymentSelection(ctx, options);
54
39
  const deployment = await loadSelectedDeploymentCredentials(
package/src/cli/dev.ts CHANGED
@@ -66,7 +66,7 @@ export const dev = new Command("dev")
66
66
  .addOption(
67
67
  new Option(
68
68
  "--start <command>",
69
- "Start a long-running command alongside `convex dev`, like a frontend " +
69
+ "Start a long-running command alongside `npx convex dev`, like a frontend " +
70
70
  "dev server. The command inherits stdin/stdout so you can interact " +
71
71
  "with it directly. Example: npx convex dev --start 'vite --open'",
72
72
  ).conflicts(["--run", "--run-sh"]),
@@ -93,9 +93,9 @@ export const dev = new Command("dev")
93
93
  "--tail-logs [mode]",
94
94
  [
95
95
  "Choose whether to tail Convex function logs in this terminal: ",
96
- "- `always` shows logs continuously",
97
- "- `pause-on-deploy` (the default) pauses logs during deploys so you can spot sync issues",
98
- "- `disable` hides logs while developing.",
96
+ " `always` shows logs continuously",
97
+ " `pause-on-deploy` (the default) pauses logs during deploys so you can spot sync issues",
98
+ " `disable` hides logs while developing.",
99
99
  ].join("\n"),
100
100
  )
101
101
  .choices(["always", "pause-on-deploy", "disable"] as const)
@@ -280,6 +280,7 @@ Same format as .env.local or .env files, and overrides them.`,
280
280
  credentials.deploymentFields.deploymentType,
281
281
  }
282
282
  : {}),
283
+ backendVersion: localOptions.backendVersion,
283
284
  },
284
285
  devOptions,
285
286
  ),
package/src/cli/env.ts CHANGED
@@ -32,16 +32,16 @@ const envSetCmd = new Command("set")
32
32
  [
33
33
  "Set environment variables on your deployment.",
34
34
  "",
35
- "- `npx convex env set NAME 'value'`",
36
- "- `npx convex env set NAME # omit a value to set one interactively`",
37
- "- `npx convex env set NAME --from-file value.txt`",
38
- "- `npx convex env set --from-file .env.defaults`",
35
+ " `npx convex env set NAME 'value'`",
36
+ " `npx convex env set NAME # omit a value to set one interactively`",
37
+ " `npx convex env set NAME --from-file value.txt`",
38
+ " `npx convex env set --from-file .env.defaults`",
39
39
  "",
40
40
  "When setting multiple values, it will refuse all changes if any variables are already set to different values by default. Pass --force to overwrite the provided values.",
41
41
  "",
42
42
  "To keep secrets out of your shell history, omit the value to pipe it in via stdin, for instance:",
43
- "- `pbpaste | npx convex env set API_KEY` (macOS)",
44
- "- `Get-Clipboard | npx convex env set API_KEY` (Windows PowerShell)",
43
+ " `pbpaste | npx convex env set API_KEY` (macOS)",
44
+ " `Get-Clipboard | npx convex env set API_KEY` (Windows PowerShell)",
45
45
  "",
46
46
  "To update many variables at once, save them with `npx convex env list > .env.convex`, edit the file, then reapply the changes with `npx convex env set --force < .env.convex`.",
47
47
  ].join("\n"),
@@ -164,18 +164,25 @@ const envRemoveCmd = new Command("remove")
164
164
  });
165
165
 
166
166
  const envListCmd = new Command("list")
167
- .summary("List all variables")
167
+ .summary("List all environment variables and their values")
168
168
  .description(
169
169
  [
170
- "- List all variables: `npx convex env list`",
171
- "- Save all variables to a file: `npx convex env list > .env.convex`",
172
- "- Append to a file: `npx convex env list >> .env.convex`",
170
+ " List all variables and their values: `npx convex env list`",
171
+ " List only variable names (no values): `npx convex env list --names-only`",
172
+ " Save all variables to a file: `npx convex env list > .env.convex`",
173
+ "• Append to a file: `npx convex env list >> .env.convex`",
173
174
  ].join("\n"),
174
175
  )
176
+ .option(
177
+ "--names-only",
178
+ "List only the names of environment variables, without their values",
179
+ )
175
180
  .configureHelp({ showGlobalOptions: true })
176
181
  .allowExcessArguments(false)
177
- .action(async (_options, cmd) => {
178
- const options = cmd.optsWithGlobals();
182
+ .action(async (cmdOptions, cmd) => {
183
+ // Note: We use `as` here because optsWithGlobals() type inference doesn't
184
+ // include global options from the parent command (added via addDeploymentSelectionOptions)
185
+ const options = cmd.optsWithGlobals() as DeploymentSelectionOptions;
179
186
  const { ctx, deployment } = await selectEnvDeployment(options);
180
187
  await ensureHasConvexDependency(ctx, "env list");
181
188
  await withRunningBackend({
@@ -183,7 +190,9 @@ const envListCmd = new Command("list")
183
190
  deployment,
184
191
  action: async () => {
185
192
  const backend = deploymentEnvBackend(ctx, deployment);
186
- await envList(ctx, backend);
193
+ await envList(ctx, backend, {
194
+ namesOnly: cmdOptions.namesOnly ?? false,
195
+ });
187
196
  },
188
197
  });
189
198
  });
@@ -194,12 +203,13 @@ export const env = new Command("env")
194
203
  [
195
204
  "Set and view environment variables on your deployment",
196
205
  "",
197
- "- Set a variable: `npx convex env set NAME 'value'`",
198
- "- Set interactively: `npx convex env set NAME`",
199
- "- Set multiple from file: `npx convex env set --from-file .env`",
200
- "- Unset a variable: `npx convex env remove NAME`",
201
- "- List all variables: `npx convex env list`",
202
- "- Print a variable's value: `npx convex env get NAME`",
206
+ " Set a variable: `npx convex env set NAME 'value'`",
207
+ " Set interactively: `npx convex env set NAME`",
208
+ " Set multiple from file: `npx convex env set --from-file .env`",
209
+ " Unset a variable: `npx convex env remove NAME`",
210
+ " List all variables and their values: `npx convex env list`",
211
+ " List only variable names (no values): `npx convex env list --names-only`",
212
+ "• Print a variable's value: `npx convex env get NAME`",
203
213
  "",
204
214
  "By default, this sets and views variables on your dev deployment.",
205
215
  "",
@@ -52,10 +52,10 @@ const envDefaultSet = addEnvDefaultOptions(
52
52
  [
53
53
  "Set default environment variables for your project's deployment type.",
54
54
  "",
55
- "- `npx convex env default set NAME 'value'`",
56
- "- `npx convex env default set NAME # omit a value to set one interactively`",
57
- "- `npx convex env default set NAME --from-file value.txt`",
58
- "- `npx convex env default set --from-file .env.defaults`",
55
+ " `npx convex env default set NAME 'value'`",
56
+ " `npx convex env default set NAME # omit a value to set one interactively`",
57
+ " `npx convex env default set NAME --from-file value.txt`",
58
+ " `npx convex env default set --from-file .env.defaults`",
59
59
  "",
60
60
  "When setting multiple values, it will refuse all changes if any variables are already set to different values by default. Pass --force to overwrite the provided values.",
61
61
  "",
@@ -122,7 +122,7 @@ const envDefaultRemove = addEnvDefaultOptions(
122
122
  [
123
123
  "Unset a default variable.",
124
124
  "",
125
- "- `npx convex env default remove NAME`",
125
+ " `npx convex env default remove NAME`",
126
126
  "",
127
127
  "If the variable doesn't exist, the command doesn't do anything and succeeds.",
128
128
  "",
@@ -141,24 +141,29 @@ const envDefaultRemove = addEnvDefaultOptions(
141
141
 
142
142
  const envDefaultList = addEnvDefaultOptions(
143
143
  new Command("list")
144
- .summary("List all default variables")
144
+ .summary("List all default environment variables and their values")
145
145
  .description(
146
146
  [
147
- "List all default variables.",
148
- "",
149
- "- `npx convex env default list`",
147
+ "List all default variables and their values: `npx convex env default list`",
148
+ "• List only default variable names (no values): `npx convex env default list --names-only`",
150
149
  "",
151
150
  "The deployment type is determined by the current deployment (local maps to dev), or by --type if provided.",
152
151
  ].join("\n"),
153
152
  )
153
+ .option(
154
+ "--names-only",
155
+ "List only the names of environment variables, without their values",
156
+ )
154
157
  .configureHelp({ showGlobalOptions: true })
155
158
  .allowExcessArguments(false),
156
- ).action(async (_options, cmd) => {
159
+ ).action(async (cmdOptions, cmd) => {
157
160
  const options = cmd.optsWithGlobals() as DeploymentSelectionOptions &
158
161
  EnvDefaultExtraOptions;
159
162
  const { ctx, backend } = await resolveEnvDefaultBackend(options);
160
163
  await ensureHasConvexDependency(ctx, "env default list");
161
- await envList(ctx, backend);
164
+ await envList(ctx, backend, {
165
+ namesOnly: cmdOptions.namesOnly ?? false,
166
+ });
162
167
  });
163
168
 
164
169
  export const envDefault = new Command("default")
@@ -169,10 +174,11 @@ export const envDefault = new Command("default")
169
174
  "",
170
175
  "The default environment variables read and written to by this command are the ones for the deployment type of the current deployment (i.e. dev in most cases), unless --type is provided.",
171
176
  "",
172
- "- Set a default variable: `npx convex env default set NAME 'value'`",
173
- "- Unset a default variable: `npx convex env default remove NAME`",
174
- "- List all default variables: `npx convex env default list`",
175
- "- Print a default variable's value: `npx convex env default get NAME`",
177
+ " Set a default variable: `npx convex env default set NAME 'value'`",
178
+ " Unset a default variable: `npx convex env default remove NAME`",
179
+ " List all default variables and their values: `npx convex env default list`",
180
+ " List only default variable names (no values): `npx convex env default list --names-only`",
181
+ "• Print a default variable's value: `npx convex env default get NAME`",
176
182
  ].join("\n"),
177
183
  )
178
184
  .addCommand(envDefaultSet)
@@ -92,15 +92,16 @@ export const insights = new Command("insights")
92
92
  "Show health insights for a Convex deployment over the last 72 hours.",
93
93
  "Displays OCC conflicts and resource limit issues that may indicate performance problems.",
94
94
  "",
95
- "- Show insights: `npx convex insights`",
96
- "- Include recent events for each insight: `npx convex insights --details`",
97
- "- Check the production deployment: `npx convex insights --prod`",
95
+ " Show insights: `npx convex insights`",
96
+ " Include recent events for each insight: `npx convex insights --details`",
97
+ " Check the production deployment: `npx convex insights --prod`",
98
98
  "",
99
99
  "This command is only available for Convex cloud deployments when logged in as a user.",
100
100
  ].join("\n"),
101
101
  )
102
102
  .allowExcessArguments(false)
103
103
  .option("--details", "Show recent events for each insight", false)
104
+ .option("--json", "Output insights as JSON", false)
104
105
  .addDeploymentSelectionOptions(actionDescription("Show insights for"))
105
106
  .showHelpAfterError()
106
107
  .action(async (cmdOptions) => {
@@ -145,6 +146,17 @@ export const insights = new Command("insights")
145
146
  "?view=insights",
146
147
  );
147
148
 
149
+ if (cmdOptions.json) {
150
+ logOutput(
151
+ JSON.stringify(
152
+ { deploymentName, dashboardUrl, insights: insightsList },
153
+ null,
154
+ 2,
155
+ ),
156
+ );
157
+ return;
158
+ }
159
+
148
160
  if (insightsList.length === 0) {
149
161
  logOutput(
150
162
  chalk.green(
@@ -151,6 +151,7 @@ describe("ai-files integration with default convex/ directory", () => {
151
151
  "add",
152
152
  "get-convex/agent-skills",
153
153
  "--yes",
154
+ "--copy",
154
155
  "--agent",
155
156
  "claude-code",
156
157
  "--agent",
@@ -173,6 +174,7 @@ describe("ai-files integration with default convex/ directory", () => {
173
174
  "add",
174
175
  "get-convex/agent-skills",
175
176
  "--yes",
177
+ "--copy",
176
178
  "--agent",
177
179
  "cursor",
178
180
  "--agent",
@@ -23,11 +23,11 @@ function configuredSkillAgents(
23
23
  }
24
24
 
25
25
  /**
26
- * Runs `npx skills add get-convex/agent-skills --yes` in the given directory.
26
+ * Runs `npx skills add get-convex/agent-skills --yes --copy` in the given directory.
27
27
  * Returns true on success, false if the process fails or cannot be started.
28
28
  */
29
29
  function runSkillsAdd(cwd: string, agents: string[]): Promise<boolean> {
30
- const args = ["add", "get-convex/agent-skills", "--yes"];
30
+ const args = ["add", "get-convex/agent-skills", "--yes", "--copy"];
31
31
  for (const agent of agents) {
32
32
  args.push("--agent", agent);
33
33
  }
@@ -135,7 +135,7 @@ export async function installSkills({
135
135
  if (!skillsOk) {
136
136
  logMessage(
137
137
  chalkStderr.yellow(
138
- "Could not install agent skills. You can retry manually with: npx skills add get-convex/agent-skills",
138
+ "Could not install agent skills. You can retry manually with: npx skills add get-convex/agent-skills --copy",
139
139
  ),
140
140
  );
141
141
  return;
@@ -495,8 +495,8 @@ Command.prototype.addImportOptions = function () {
495
495
  new Option(
496
496
  "--replace-all",
497
497
  "Replace all existing data in the deployment with the imported tables,\n" +
498
- " deleting tables that don't appear in the import file or the schema,\n" +
499
- " and clearing tables that appear in the schema but not in the import file",
498
+ "deleting tables that don't appear in the import file or the schema,\n" +
499
+ "and clearing tables that appear in the schema but not in the import file",
500
500
  )
501
501
  .conflicts("--append")
502
502
  .conflicts("--replace"),
@@ -255,10 +255,6 @@ export async function getTeamAndProjectFromPreviewAdminKey(
255
255
  return { teamSlug, projectSlug };
256
256
  }
257
257
 
258
- export type OnDeploymentActivityFunc = (
259
- isOffline: boolean,
260
- wasOffline: boolean,
261
- ) => Promise<void>;
262
258
  export type CleanupDeploymentFunc = () => Promise<void>;
263
259
  export type DeploymentDetails = {
264
260
  deploymentName: string;
@@ -266,5 +262,4 @@ export type DeploymentDetails = {
266
262
  adminKey: string;
267
263
  reference: string | null;
268
264
  isDefault: boolean;
269
- onActivity: OnDeploymentActivityFunc | null;
270
265
  };
@@ -35,6 +35,7 @@ import { getBuildEnvironment } from "./envvars.js";
35
35
  import { readGlobalConfig } from "./utils/globalConfig.js";
36
36
  import {
37
37
  CONVEX_DEPLOYMENT_ENV_VAR_NAME,
38
+ CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,
38
39
  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
39
40
  CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,
40
41
  CONVEX_SELF_HOSTED_URL_VAR_NAME,
@@ -217,6 +218,72 @@ function getBigBrainAuth(
217
218
  return null;
218
219
  }
219
220
 
221
+ // These guards mirror the management API's auth rules client-side so we can
222
+ // fail with a clear message instead of an opaque 401; the server stays
223
+ // authoritative. Creating a deployment also allows project keys, while the
224
+ // deploy-key commands stay personal-access-token only.
225
+
226
+ /** Crashes unless logged in with a personal access token (not a deploy key). */
227
+ export async function ensureLoggedInWithAccessToken(
228
+ ctx: Context,
229
+ action: string,
230
+ ): Promise<void> {
231
+ const auth = ctx.bigBrainAuth();
232
+ if (auth !== null && auth.kind === "accessToken") {
233
+ return;
234
+ }
235
+ // Name whichever deploy-key env var is in effect (CONVEX_DEPLOY_KEY wins).
236
+ const prefix =
237
+ auth === null
238
+ ? "Run "
239
+ : process.env[CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME] &&
240
+ !process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]
241
+ ? `Unset ${CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME} and run `
242
+ : `Unset ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} and run `;
243
+ return await ctx.crash({
244
+ exitCode: 1,
245
+ errorType: "fatal",
246
+ printedMessage: `${action} requires being logged in with a personal access token. ${prefix}${chalkStderr.bold(
247
+ "npx convex login",
248
+ )} and try again.`,
249
+ });
250
+ }
251
+
252
+ /**
253
+ * Crashes unless the auth can create a deployment: personal access tokens and
254
+ * project keys are accepted, deploy keys are not.
255
+ */
256
+ export async function ensureAuthCanCreateDeployment(
257
+ ctx: Context,
258
+ ): Promise<void> {
259
+ const auth = ctx.bigBrainAuth();
260
+ if (
261
+ auth !== null &&
262
+ (auth.kind === "accessToken" || auth.kind === "projectKey")
263
+ ) {
264
+ return;
265
+ }
266
+ if (auth === null) {
267
+ return await ctx.crash({
268
+ exitCode: 1,
269
+ errorType: "fatal",
270
+ printedMessage: `Creating a deployment requires logging in. Run ${chalkStderr.bold(
271
+ "npx convex login",
272
+ )} and try again.`,
273
+ });
274
+ }
275
+ const envVar = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]
276
+ ? CONVEX_DEPLOY_KEY_ENV_VAR_NAME
277
+ : CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME;
278
+ return await ctx.crash({
279
+ exitCode: 1,
280
+ errorType: "fatal",
281
+ printedMessage: `Creating a deployment isn't supported with a deploy key (${envVar}). Run ${chalkStderr.bold(
282
+ "npx convex login",
283
+ )} (or use a project key) and try again.`,
284
+ });
285
+ }
286
+
220
287
  // ----------------------------------------------------------------------------
221
288
  // Deployment Selection
222
289
  // ----------------------------------------------------------------------------
@@ -30,6 +30,9 @@ import {
30
30
  syncAuthKitConfigAfterPush,
31
31
  ensureAuthKitProvisionedBeforeBuild,
32
32
  } from "./workos/workos.js";
33
+ import { handleDashboard } from "./localDeployment/dashboard.js";
34
+ import { loadDeploymentConfig } from "./localDeployment/filePaths.js";
35
+ import { LocalDeploymentError } from "./localDeployment/errors.js";
33
36
 
34
37
  export async function devAgainstDeployment(
35
38
  ctx: OneoffCtx,
@@ -38,6 +41,7 @@ export async function devAgainstDeployment(
38
41
  adminKey: string;
39
42
  deploymentName: string | null;
40
43
  deploymentType?: DeploymentType;
44
+ backendVersion?: string | undefined;
41
45
  },
42
46
  devOptions: {
43
47
  verbose: boolean;
@@ -82,6 +86,41 @@ export async function devAgainstDeployment(
82
86
  }
83
87
  }
84
88
 
89
+ // Anonymous mode starts a local dashboard server alongside long-running `npx convex dev` commands.
90
+ if (
91
+ !devOptions.once &&
92
+ !devOptions.untilSuccess &&
93
+ credentials.deploymentType === "anonymous" &&
94
+ credentials.deploymentName !== null
95
+ ) {
96
+ const deploymentConfig = loadDeploymentConfig(
97
+ ctx,
98
+ "anonymous",
99
+ credentials.deploymentName,
100
+ );
101
+ if (deploymentConfig === null) {
102
+ return await ctx.crash({
103
+ exitCode: 1,
104
+ errorType: "fatal",
105
+ printedMessage: `Could not find local deployment config. This is a bug in Convex.`,
106
+ errForSentry: new LocalDeploymentError(
107
+ `Could not find local deployment config to start the anonymous dashboard.`,
108
+ ),
109
+ });
110
+ }
111
+ await handleDashboard(
112
+ ctx,
113
+ {
114
+ name: credentials.deploymentName,
115
+ cloudPort: deploymentConfig.ports.cloud,
116
+ adminKey: deploymentConfig.adminKey,
117
+ },
118
+ {
119
+ backendVersion: credentials.backendVersion,
120
+ },
121
+ );
122
+ }
123
+
85
124
  const promises = [];
86
125
  if (devOptions.tailLogs !== "disable") {
87
126
  promises.push(