convex 1.34.0 → 1.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. package/CHANGELOG.md +98 -43
  2. package/dist/browser.bundle.js +13 -10
  3. package/dist/browser.bundle.js.map +3 -3
  4. package/dist/cjs/browser/index-node.js +3 -1
  5. package/dist/cjs/browser/index.js +3 -1
  6. package/dist/cjs/browser/index.js.map +2 -2
  7. package/dist/cjs/browser/query_options.js.map +2 -2
  8. package/dist/cjs/browser/sync/authentication_manager.js +4 -1
  9. package/dist/cjs/browser/sync/authentication_manager.js.map +2 -2
  10. package/dist/cjs/browser/sync/web_socket_manager.js +1 -7
  11. package/dist/cjs/browser/sync/web_socket_manager.js.map +2 -2
  12. package/dist/cjs/cli/aiFiles.js +39 -20
  13. package/dist/cjs/cli/aiFiles.js.map +3 -3
  14. package/dist/cjs/cli/codegen_templates/readme.js +14 -1
  15. package/dist/cjs/cli/codegen_templates/readme.js.map +2 -2
  16. package/dist/cjs/cli/configure.js +34 -32
  17. package/dist/cjs/cli/configure.js.map +2 -2
  18. package/dist/cjs/cli/deploy.js +7 -8
  19. package/dist/cjs/cli/deploy.js.map +2 -2
  20. package/dist/cjs/cli/deploymentCreate.js +225 -40
  21. package/dist/cjs/cli/deploymentCreate.js.map +3 -3
  22. package/dist/cjs/cli/deploymentSelect.js +14 -13
  23. package/dist/cjs/cli/deploymentSelect.js.map +2 -2
  24. package/dist/cjs/cli/dev.js +30 -11
  25. package/dist/cjs/cli/dev.js.map +2 -2
  26. package/dist/cjs/cli/docs.js +1 -1
  27. package/dist/cjs/cli/docs.js.map +2 -2
  28. package/dist/cjs/cli/init.js +1 -1
  29. package/dist/cjs/cli/init.js.map +2 -2
  30. package/dist/cjs/cli/lib/aiFiles/agentsmd.js +73 -0
  31. package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +7 -0
  32. package/dist/cjs/cli/lib/aiFiles/claudemd.js +73 -0
  33. package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +7 -0
  34. package/dist/cjs/cli/lib/aiFiles/cursorrules.js +48 -0
  35. package/dist/cjs/cli/lib/aiFiles/cursorrules.js.map +7 -0
  36. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +58 -0
  37. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
  38. package/dist/cjs/cli/lib/aiFiles/index.js +215 -0
  39. package/dist/cjs/cli/lib/aiFiles/index.js.map +7 -0
  40. package/dist/cjs/cli/lib/aiFiles/paths.js.map +7 -0
  41. package/dist/cjs/cli/lib/aiFiles/skills.js +196 -0
  42. package/dist/cjs/cli/lib/aiFiles/skills.js.map +7 -0
  43. package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
  44. package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
  45. package/dist/cjs/cli/lib/aiFiles/status.js +198 -0
  46. package/dist/cjs/cli/lib/aiFiles/status.js.map +7 -0
  47. package/dist/cjs/cli/lib/aiFiles/utils.js +128 -0
  48. package/dist/cjs/cli/lib/aiFiles/utils.js.map +7 -0
  49. package/dist/cjs/cli/lib/api.js +70 -7
  50. package/dist/cjs/cli/lib/api.js.map +2 -2
  51. package/dist/cjs/cli/lib/command.js +10 -6
  52. package/dist/cjs/cli/lib/command.js.map +2 -2
  53. package/dist/cjs/cli/lib/config.js +43 -7
  54. package/dist/cjs/cli/lib/config.js.map +3 -3
  55. package/dist/cjs/cli/lib/deploy2.js +9 -26
  56. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  57. package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
  58. package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
  59. package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
  60. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  61. package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
  62. package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
  63. package/dist/cjs/cli/lib/dev.js +162 -117
  64. package/dist/cjs/cli/lib/dev.js.map +2 -2
  65. package/dist/cjs/cli/lib/env.js +1 -13
  66. package/dist/cjs/cli/lib/env.js.map +2 -2
  67. package/dist/cjs/cli/lib/expiration.js +104 -0
  68. package/dist/cjs/cli/lib/expiration.js.map +7 -0
  69. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  70. package/dist/cjs/cli/lib/init.js +4 -3
  71. package/dist/cjs/cli/lib/init.js.map +2 -2
  72. package/dist/cjs/cli/lib/insights.js +1 -1
  73. package/dist/cjs/cli/lib/insights.js.map +2 -2
  74. package/dist/cjs/cli/lib/localDeployment/anonymous.js +15 -8
  75. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
  76. package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
  77. package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
  78. package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
  79. package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
  80. package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
  81. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
  82. package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
  83. package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
  84. package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
  85. package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
  86. package/dist/cjs/cli/lib/updates.js +12 -13
  87. package/dist/cjs/cli/lib/updates.js.map +2 -2
  88. package/dist/cjs/cli/lib/usage.js +2 -1
  89. package/dist/cjs/cli/lib/usage.js.map +2 -2
  90. package/dist/cjs/cli/lib/utils/prompts.js +2 -1
  91. package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
  92. package/dist/cjs/cli/lib/utils/utils.js +46 -20
  93. package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
  94. package/dist/cjs/cli/lib/versionApi.js +7 -4
  95. package/dist/cjs/cli/lib/versionApi.js.map +2 -2
  96. package/dist/cjs/cli/lib/workos/workos.js +4 -6
  97. package/dist/cjs/cli/lib/workos/workos.js.map +2 -2
  98. package/dist/cjs/index.js +1 -1
  99. package/dist/cjs/index.js.map +1 -1
  100. package/dist/cjs/react/client.js +43 -6
  101. package/dist/cjs/react/client.js.map +2 -2
  102. package/dist/cjs/react/index.js +2 -0
  103. package/dist/cjs/react/index.js.map +2 -2
  104. package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  105. package/dist/cjs/server/api.js.map +2 -2
  106. package/dist/cjs/server/components/definition.js.map +1 -1
  107. package/dist/cjs/server/components/index.js +40 -4
  108. package/dist/cjs/server/components/index.js.map +2 -2
  109. package/dist/cjs/server/data_model.js.map +1 -1
  110. package/dist/cjs/server/impl/meta_impl.js +78 -0
  111. package/dist/cjs/server/impl/meta_impl.js.map +7 -0
  112. package/dist/cjs/server/impl/registration_impl.js +16 -11
  113. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  114. package/dist/cjs/server/index.js.map +2 -2
  115. package/dist/cjs/server/meta.js +17 -0
  116. package/dist/cjs/server/meta.js.map +7 -0
  117. package/dist/cjs/server/registration.js.map +1 -1
  118. package/dist/cjs-types/browser/index.d.ts +1 -0
  119. package/dist/cjs-types/browser/index.d.ts.map +1 -1
  120. package/dist/cjs-types/browser/query_options.d.ts +12 -9
  121. package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
  122. package/dist/cjs-types/browser/sync/authentication_manager.d.ts.map +1 -1
  123. package/dist/cjs-types/browser/sync/web_socket_manager.d.ts.map +1 -1
  124. package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
  125. package/dist/cjs-types/cli/codegen_templates/readme.d.ts.map +1 -1
  126. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  127. package/dist/cjs-types/cli/configure.test.d.ts +2 -0
  128. package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
  129. package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
  130. package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
  131. package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
  132. package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
  133. package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
  134. package/dist/cjs-types/cli/dev.d.ts +3 -1
  135. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  136. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
  137. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
  138. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
  139. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
  140. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
  141. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
  142. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
  143. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
  144. package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
  145. package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
  146. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
  147. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
  148. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
  149. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
  150. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +42 -0
  151. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -0
  152. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
  153. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
  154. package/dist/cjs-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
  155. package/dist/cjs-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
  156. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
  157. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +20 -0
  158. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
  159. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
  160. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  161. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  162. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  163. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +6 -0
  164. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -0
  165. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +56 -0
  166. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
  167. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  168. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  169. package/dist/cjs-types/cli/lib/api.d.ts +3 -3
  170. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  171. package/dist/cjs-types/cli/lib/command.d.ts +2 -1
  172. package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
  173. package/dist/cjs-types/cli/lib/config.d.ts +18 -6
  174. package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
  175. package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
  176. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  177. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  178. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  179. package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  180. package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -14
  181. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +61 -52
  182. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  183. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  184. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
  185. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  186. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  187. package/dist/cjs-types/cli/lib/env.d.ts +0 -4
  188. package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
  189. package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
  190. package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
  191. package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
  192. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
  193. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  194. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  195. package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
  196. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  197. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  198. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
  199. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  200. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  201. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
  202. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  203. package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
  204. package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  205. package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
  206. package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
  207. package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
  208. package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
  209. package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
  210. package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
  211. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  212. package/dist/cjs-types/cli/lib/versionApi.d.ts +7 -1
  213. package/dist/cjs-types/cli/lib/versionApi.d.ts.map +1 -1
  214. package/dist/cjs-types/cli/lib/workos/workos.d.ts.map +1 -1
  215. package/dist/cjs-types/index.d.ts +1 -1
  216. package/dist/cjs-types/react/client.d.ts +54 -2
  217. package/dist/cjs-types/react/client.d.ts.map +1 -1
  218. package/dist/cjs-types/react/index.d.ts +7 -2
  219. package/dist/cjs-types/react/index.d.ts.map +1 -1
  220. package/dist/cjs-types/react/use_query_object_options.test.d.ts +5 -0
  221. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +1 -0
  222. package/dist/cjs-types/react/use_query_result.test.d.ts +5 -0
  223. package/dist/cjs-types/react/use_query_result.test.d.ts.map +1 -0
  224. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  225. package/dist/cjs-types/server/api.d.ts +5 -1
  226. package/dist/cjs-types/server/api.d.ts.map +1 -1
  227. package/dist/cjs-types/server/components/definition.d.ts +1 -0
  228. package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
  229. package/dist/cjs-types/server/components/index.d.ts +5 -1
  230. package/dist/cjs-types/server/components/index.d.ts.map +1 -1
  231. package/dist/cjs-types/server/data_model.d.ts +2 -1
  232. package/dist/cjs-types/server/data_model.d.ts.map +1 -1
  233. package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
  234. package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
  235. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  236. package/dist/cjs-types/server/index.d.ts +1 -0
  237. package/dist/cjs-types/server/index.d.ts.map +1 -1
  238. package/dist/cjs-types/server/meta.d.ts +72 -0
  239. package/dist/cjs-types/server/meta.d.ts.map +1 -0
  240. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  241. package/dist/cli.bundle.cjs +2446 -1933
  242. package/dist/cli.bundle.cjs.map +4 -4
  243. package/dist/esm/browser/index-node.js +1 -0
  244. package/dist/esm/browser/index.js +1 -0
  245. package/dist/esm/browser/index.js.map +2 -2
  246. package/dist/esm/browser/query_options.js.map +2 -2
  247. package/dist/esm/browser/sync/authentication_manager.js +4 -1
  248. package/dist/esm/browser/sync/authentication_manager.js.map +2 -2
  249. package/dist/esm/browser/sync/web_socket_manager.js +1 -7
  250. package/dist/esm/browser/sync/web_socket_manager.js.map +2 -2
  251. package/dist/esm/cli/aiFiles.js +41 -23
  252. package/dist/esm/cli/aiFiles.js.map +2 -2
  253. package/dist/esm/cli/codegen_templates/readme.js +14 -1
  254. package/dist/esm/cli/codegen_templates/readme.js.map +2 -2
  255. package/dist/esm/cli/configure.js +35 -33
  256. package/dist/esm/cli/configure.js.map +2 -2
  257. package/dist/esm/cli/deploy.js +11 -10
  258. package/dist/esm/cli/deploy.js.map +2 -2
  259. package/dist/esm/cli/deploymentCreate.js +238 -42
  260. package/dist/esm/cli/deploymentCreate.js.map +2 -2
  261. package/dist/esm/cli/deploymentSelect.js +13 -12
  262. package/dist/esm/cli/deploymentSelect.js.map +2 -2
  263. package/dist/esm/cli/dev.js +34 -13
  264. package/dist/esm/cli/dev.js.map +2 -2
  265. package/dist/esm/cli/docs.js +1 -1
  266. package/dist/esm/cli/docs.js.map +2 -2
  267. package/dist/esm/cli/init.js +2 -2
  268. package/dist/esm/cli/init.js.map +2 -2
  269. package/dist/esm/cli/lib/aiFiles/agentsmd.js +56 -0
  270. package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +7 -0
  271. package/dist/esm/cli/lib/aiFiles/claudemd.js +56 -0
  272. package/dist/esm/cli/lib/aiFiles/claudemd.js.map +7 -0
  273. package/dist/esm/cli/lib/aiFiles/cursorrules.js +16 -0
  274. package/dist/esm/cli/lib/aiFiles/cursorrules.js.map +7 -0
  275. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +35 -0
  276. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
  277. package/dist/esm/cli/lib/aiFiles/index.js +193 -0
  278. package/dist/esm/cli/lib/aiFiles/index.js.map +7 -0
  279. package/dist/esm/cli/lib/aiFiles/paths.js.map +7 -0
  280. package/dist/esm/cli/lib/aiFiles/skills.js +163 -0
  281. package/dist/esm/cli/lib/aiFiles/skills.js.map +7 -0
  282. package/dist/esm/cli/lib/aiFiles/state.js +60 -0
  283. package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
  284. package/dist/esm/cli/lib/aiFiles/status.js +178 -0
  285. package/dist/esm/cli/lib/aiFiles/status.js.map +7 -0
  286. package/dist/esm/cli/lib/aiFiles/utils.js +97 -0
  287. package/dist/esm/cli/lib/aiFiles/utils.js.map +7 -0
  288. package/dist/esm/cli/lib/api.js +70 -7
  289. package/dist/esm/cli/lib/api.js.map +2 -2
  290. package/dist/esm/cli/lib/command.js +10 -6
  291. package/dist/esm/cli/lib/command.js.map +2 -2
  292. package/dist/esm/cli/lib/config.js +41 -6
  293. package/dist/esm/cli/lib/config.js.map +2 -2
  294. package/dist/esm/cli/lib/deploy2.js +13 -26
  295. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  296. package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
  297. package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
  298. package/dist/esm/cli/lib/deploymentSelection.js +46 -2
  299. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  300. package/dist/esm/cli/lib/deploymentSelector.js +1 -0
  301. package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
  302. package/dist/esm/cli/lib/dev.js +162 -118
  303. package/dist/esm/cli/lib/dev.js.map +2 -2
  304. package/dist/esm/cli/lib/env.js +0 -11
  305. package/dist/esm/cli/lib/env.js.map +2 -2
  306. package/dist/esm/cli/lib/expiration.js +80 -0
  307. package/dist/esm/cli/lib/expiration.js.map +7 -0
  308. package/dist/esm/cli/lib/init.js +4 -3
  309. package/dist/esm/cli/lib/init.js.map +2 -2
  310. package/dist/esm/cli/lib/insights.js +1 -1
  311. package/dist/esm/cli/lib/insights.js.map +2 -2
  312. package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
  313. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
  314. package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
  315. package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
  316. package/dist/esm/cli/lib/localDeployment/run.js +1 -1
  317. package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
  318. package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
  319. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  320. package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
  321. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  322. package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
  323. package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
  324. package/dist/esm/cli/lib/updates.js +14 -12
  325. package/dist/esm/cli/lib/updates.js.map +2 -2
  326. package/dist/esm/cli/lib/usage.js +2 -1
  327. package/dist/esm/cli/lib/usage.js.map +2 -2
  328. package/dist/esm/cli/lib/utils/prompts.js +2 -1
  329. package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
  330. package/dist/esm/cli/lib/utils/utils.js +45 -20
  331. package/dist/esm/cli/lib/utils/utils.js.map +3 -3
  332. package/dist/esm/cli/lib/versionApi.js +7 -4
  333. package/dist/esm/cli/lib/versionApi.js.map +2 -2
  334. package/dist/esm/cli/lib/workos/workos.js +4 -6
  335. package/dist/esm/cli/lib/workos/workos.js.map +2 -2
  336. package/dist/esm/index.js +1 -1
  337. package/dist/esm/index.js.map +1 -1
  338. package/dist/esm/react/client.js +43 -6
  339. package/dist/esm/react/client.js.map +2 -2
  340. package/dist/esm/react/index.js +1 -0
  341. package/dist/esm/react/index.js.map +2 -2
  342. package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  343. package/dist/esm/server/api.js.map +2 -2
  344. package/dist/esm/server/components/index.js +40 -4
  345. package/dist/esm/server/components/index.js.map +2 -2
  346. package/dist/esm/server/impl/meta_impl.js +54 -0
  347. package/dist/esm/server/impl/meta_impl.js.map +7 -0
  348. package/dist/esm/server/impl/registration_impl.js +20 -11
  349. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  350. package/dist/esm/server/index.js.map +2 -2
  351. package/dist/esm/server/meta.js +2 -0
  352. package/dist/esm/server/meta.js.map +7 -0
  353. package/dist/esm-types/browser/index.d.ts +1 -0
  354. package/dist/esm-types/browser/index.d.ts.map +1 -1
  355. package/dist/esm-types/browser/query_options.d.ts +12 -9
  356. package/dist/esm-types/browser/query_options.d.ts.map +1 -1
  357. package/dist/esm-types/browser/sync/authentication_manager.d.ts.map +1 -1
  358. package/dist/esm-types/browser/sync/web_socket_manager.d.ts.map +1 -1
  359. package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
  360. package/dist/esm-types/cli/codegen_templates/readme.d.ts.map +1 -1
  361. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  362. package/dist/esm-types/cli/configure.test.d.ts +2 -0
  363. package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
  364. package/dist/esm-types/cli/deploy.d.ts.map +1 -1
  365. package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
  366. package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
  367. package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
  368. package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
  369. package/dist/esm-types/cli/dev.d.ts +3 -1
  370. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  371. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
  372. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
  373. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
  374. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
  375. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
  376. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
  377. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
  378. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
  379. package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
  380. package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
  381. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
  382. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
  383. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
  384. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
  385. package/dist/esm-types/cli/lib/aiFiles/index.d.ts +42 -0
  386. package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -0
  387. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
  388. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
  389. package/dist/esm-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
  390. package/dist/esm-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
  391. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
  392. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +20 -0
  393. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
  394. package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
  395. package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  396. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  397. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  398. package/dist/esm-types/cli/lib/aiFiles/status.d.ts +6 -0
  399. package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -0
  400. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +56 -0
  401. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
  402. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  403. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  404. package/dist/esm-types/cli/lib/api.d.ts +3 -3
  405. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  406. package/dist/esm-types/cli/lib/command.d.ts +2 -1
  407. package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
  408. package/dist/esm-types/cli/lib/config.d.ts +18 -6
  409. package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
  410. package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
  411. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  412. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  413. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  414. package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  415. package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -14
  416. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +61 -52
  417. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  418. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  419. package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
  420. package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  421. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  422. package/dist/esm-types/cli/lib/env.d.ts +0 -4
  423. package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
  424. package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
  425. package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
  426. package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
  427. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
  428. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  429. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  430. package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
  431. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  432. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  433. package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
  434. package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  435. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  436. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
  437. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  438. package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
  439. package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  440. package/dist/esm-types/cli/lib/updates.d.ts +4 -3
  441. package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
  442. package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
  443. package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
  444. package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
  445. package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
  446. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  447. package/dist/esm-types/cli/lib/versionApi.d.ts +7 -1
  448. package/dist/esm-types/cli/lib/versionApi.d.ts.map +1 -1
  449. package/dist/esm-types/cli/lib/workos/workos.d.ts.map +1 -1
  450. package/dist/esm-types/index.d.ts +1 -1
  451. package/dist/esm-types/react/client.d.ts +54 -2
  452. package/dist/esm-types/react/client.d.ts.map +1 -1
  453. package/dist/esm-types/react/index.d.ts +7 -2
  454. package/dist/esm-types/react/index.d.ts.map +1 -1
  455. package/dist/esm-types/react/use_query_object_options.test.d.ts +5 -0
  456. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +1 -0
  457. package/dist/esm-types/react/use_query_result.test.d.ts +5 -0
  458. package/dist/esm-types/react/use_query_result.test.d.ts.map +1 -0
  459. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  460. package/dist/esm-types/server/api.d.ts +5 -1
  461. package/dist/esm-types/server/api.d.ts.map +1 -1
  462. package/dist/esm-types/server/components/definition.d.ts +1 -0
  463. package/dist/esm-types/server/components/definition.d.ts.map +1 -1
  464. package/dist/esm-types/server/components/index.d.ts +5 -1
  465. package/dist/esm-types/server/components/index.d.ts.map +1 -1
  466. package/dist/esm-types/server/data_model.d.ts +2 -1
  467. package/dist/esm-types/server/data_model.d.ts.map +1 -1
  468. package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
  469. package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
  470. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  471. package/dist/esm-types/server/index.d.ts +1 -0
  472. package/dist/esm-types/server/index.d.ts.map +1 -1
  473. package/dist/esm-types/server/meta.d.ts +72 -0
  474. package/dist/esm-types/server/meta.d.ts.map +1 -0
  475. package/dist/esm-types/server/registration.d.ts.map +1 -1
  476. package/dist/react.bundle.js +55 -15
  477. package/dist/react.bundle.js.map +3 -3
  478. package/package.json +11 -7
  479. package/schemas/convex.schema.json +22 -3
  480. package/src/browser/index.ts +3 -0
  481. package/src/browser/query_options.test.ts +0 -9
  482. package/src/browser/query_options.ts +36 -15
  483. package/src/browser/sync/authentication_manager.ts +9 -4
  484. package/src/browser/sync/client_node.test.ts +125 -0
  485. package/src/browser/sync/web_socket_manager.ts +1 -7
  486. package/src/cli/aiFiles.ts +56 -33
  487. package/src/cli/codegen_templates/readme.ts +14 -1
  488. package/src/cli/configure.test.ts +138 -0
  489. package/src/cli/configure.ts +62 -55
  490. package/src/cli/deploy.ts +12 -9
  491. package/src/cli/deploymentCreate.test.ts +349 -14
  492. package/src/cli/deploymentCreate.ts +268 -41
  493. package/src/cli/deploymentSelect.test.ts +136 -27
  494. package/src/cli/deploymentSelect.ts +50 -41
  495. package/src/cli/deploymentSelection.test.ts +399 -37
  496. package/src/cli/dev.ts +49 -14
  497. package/src/cli/docs.ts +1 -1
  498. package/src/cli/init.ts +2 -2
  499. package/src/cli/lib/{ai → aiFiles}/MANUAL_TESTING.md +6 -2
  500. package/src/cli/lib/aiFiles/agentsmd.test.ts +133 -0
  501. package/src/cli/lib/aiFiles/agentsmd.ts +81 -0
  502. package/src/cli/lib/aiFiles/claudemd.test.ts +92 -0
  503. package/src/cli/lib/aiFiles/claudemd.ts +81 -0
  504. package/src/cli/lib/aiFiles/cursorrules.ts +25 -0
  505. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +50 -0
  506. package/src/cli/lib/aiFiles/guidelinesmd.ts +49 -0
  507. package/src/cli/lib/{ai → aiFiles}/index.test.ts +343 -516
  508. package/src/cli/lib/aiFiles/index.ts +297 -0
  509. package/src/cli/lib/{ai → aiFiles}/integration.test.ts +195 -158
  510. package/src/cli/lib/{ai → aiFiles}/paths.ts +5 -0
  511. package/src/cli/lib/{ai → aiFiles}/prompt.test.ts +79 -31
  512. package/src/cli/lib/aiFiles/skills.ts +243 -0
  513. package/src/cli/lib/aiFiles/state.test.ts +280 -0
  514. package/src/cli/lib/aiFiles/state.ts +82 -0
  515. package/src/cli/lib/aiFiles/status.ts +246 -0
  516. package/src/cli/lib/aiFiles/utils.test.ts +50 -0
  517. package/src/cli/lib/aiFiles/utils.ts +191 -0
  518. package/src/cli/lib/api.ts +88 -7
  519. package/src/cli/lib/command.ts +18 -8
  520. package/src/cli/lib/config.test.ts +185 -8
  521. package/src/cli/lib/config.ts +73 -12
  522. package/src/cli/lib/deploy2.ts +14 -27
  523. package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
  524. package/src/cli/lib/deploymentSelection.ts +59 -6
  525. package/src/cli/lib/deploymentSelector.test.ts +6 -0
  526. package/src/cli/lib/deploymentSelector.ts +2 -0
  527. package/src/cli/lib/dev.ts +202 -153
  528. package/src/cli/lib/env.ts +0 -15
  529. package/src/cli/lib/expiration.test.ts +159 -0
  530. package/src/cli/lib/expiration.ts +124 -0
  531. package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
  532. package/src/cli/lib/init.ts +6 -2
  533. package/src/cli/lib/insights.ts +1 -1
  534. package/src/cli/lib/localDeployment/anonymous.ts +19 -9
  535. package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
  536. package/src/cli/lib/localDeployment/run.ts +1 -1
  537. package/src/cli/lib/localDeployment/upgrade.ts +12 -10
  538. package/src/cli/lib/localDeployment/utils.ts +12 -0
  539. package/src/cli/lib/mcp/tools/status.ts +1 -1
  540. package/src/cli/lib/updates.test.ts +97 -60
  541. package/src/cli/lib/updates.ts +17 -15
  542. package/src/cli/lib/usage.ts +3 -1
  543. package/src/cli/lib/utils/prompts.ts +2 -0
  544. package/src/cli/lib/utils/utils.test.ts +6 -6
  545. package/src/cli/lib/utils/utils.ts +66 -27
  546. package/src/cli/lib/versionApi.test.ts +13 -10
  547. package/src/cli/lib/versionApi.ts +13 -5
  548. package/src/cli/lib/workos/workos.ts +4 -5
  549. package/src/index.ts +1 -1
  550. package/src/react/client.test.tsx +65 -0
  551. package/src/react/client.ts +129 -13
  552. package/src/react/index.ts +9 -1
  553. package/src/react/use_query_object_options.test.ts +50 -0
  554. package/src/react/use_query_result.test.ts +41 -0
  555. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
  556. package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
  557. package/src/server/api.ts +5 -1
  558. package/src/server/components/definition.ts +3 -0
  559. package/src/server/components/index.ts +62 -5
  560. package/src/server/data_model.ts +2 -1
  561. package/src/server/impl/meta_impl.ts +74 -0
  562. package/src/server/impl/registration_impl.ts +21 -9
  563. package/src/server/index.ts +8 -0
  564. package/src/server/meta.ts +76 -0
  565. package/src/server/registration.ts +10 -0
  566. package/src/server/schema.test.ts +78 -1
  567. package/dist/cjs/cli/lib/ai/config.js +0 -144
  568. package/dist/cjs/cli/lib/ai/config.js.map +0 -7
  569. package/dist/cjs/cli/lib/ai/index.js +0 -704
  570. package/dist/cjs/cli/lib/ai/index.js.map +0 -7
  571. package/dist/cjs/cli/lib/ai/paths.js.map +0 -7
  572. package/dist/cjs-types/cli/lib/ai/config.d.ts +0 -50
  573. package/dist/cjs-types/cli/lib/ai/config.d.ts.map +0 -1
  574. package/dist/cjs-types/cli/lib/ai/config.test.d.ts +0 -2
  575. package/dist/cjs-types/cli/lib/ai/config.test.d.ts.map +0 -1
  576. package/dist/cjs-types/cli/lib/ai/index.d.ts +0 -56
  577. package/dist/cjs-types/cli/lib/ai/index.d.ts.map +0 -1
  578. package/dist/cjs-types/cli/lib/ai/index.test.d.ts.map +0 -1
  579. package/dist/cjs-types/cli/lib/ai/integration.test.d.ts.map +0 -1
  580. package/dist/cjs-types/cli/lib/ai/paths.d.ts.map +0 -1
  581. package/dist/cjs-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
  582. package/dist/esm/cli/lib/ai/config.js +0 -109
  583. package/dist/esm/cli/lib/ai/config.js.map +0 -7
  584. package/dist/esm/cli/lib/ai/index.js +0 -684
  585. package/dist/esm/cli/lib/ai/index.js.map +0 -7
  586. package/dist/esm/cli/lib/ai/paths.js.map +0 -7
  587. package/dist/esm-types/cli/lib/ai/config.d.ts +0 -50
  588. package/dist/esm-types/cli/lib/ai/config.d.ts.map +0 -1
  589. package/dist/esm-types/cli/lib/ai/config.test.d.ts +0 -2
  590. package/dist/esm-types/cli/lib/ai/config.test.d.ts.map +0 -1
  591. package/dist/esm-types/cli/lib/ai/index.d.ts +0 -56
  592. package/dist/esm-types/cli/lib/ai/index.d.ts.map +0 -1
  593. package/dist/esm-types/cli/lib/ai/index.test.d.ts.map +0 -1
  594. package/dist/esm-types/cli/lib/ai/integration.test.d.ts.map +0 -1
  595. package/dist/esm-types/cli/lib/ai/paths.d.ts.map +0 -1
  596. package/dist/esm-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
  597. package/src/cli/lib/ai/config.test.ts +0 -338
  598. package/src/cli/lib/ai/config.ts +0 -159
  599. package/src/cli/lib/ai/index.ts +0 -1006
  600. /package/dist/cjs/cli/lib/{ai → aiFiles}/paths.js +0 -0
  601. /package/dist/cjs-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
  602. /package/dist/cjs-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
  603. /package/dist/cjs-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
  604. /package/dist/esm/cli/lib/{ai → aiFiles}/paths.js +0 -0
  605. /package/dist/esm-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
  606. /package/dist/esm-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
  607. /package/dist/esm-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
@@ -0,0 +1,159 @@
1
+ import { describe, test, expect } from "vitest";
2
+ import {
3
+ parseExpiration,
4
+ resolveExpiration,
5
+ validateExpiration,
6
+ } from "./expiration.js";
7
+
8
+ describe("parseExpiration", () => {
9
+ test('"none" returns kind "none"', () => {
10
+ expect(parseExpiration("none")).toEqual({ kind: "none" });
11
+ });
12
+
13
+ test("Unix seconds (< 1e12) converts to ms", () => {
14
+ const result = parseExpiration("1711828382");
15
+ expect(result).toEqual({ kind: "absolute", timestampMs: 1711828382000 });
16
+ });
17
+
18
+ test("Unix milliseconds (>= 1e12) used as-is", () => {
19
+ const result = parseExpiration("1711828382000");
20
+ expect(result).toEqual({ kind: "absolute", timestampMs: 1711828382000 });
21
+ });
22
+
23
+ test("UTC datetime", () => {
24
+ const result = parseExpiration("2026-03-30T18:53:02Z");
25
+ expect(result).toEqual({
26
+ kind: "absolute",
27
+ timestampMs: new Date("2026-03-30T18:53:02Z").getTime(),
28
+ });
29
+ });
30
+
31
+ test("rejects datetime without Z suffix", () => {
32
+ const result = parseExpiration("2026-03-30T18:53:02");
33
+ expect(result.kind).toBe("error");
34
+ });
35
+
36
+ test("rejects datetime with timezone offset", () => {
37
+ const result = parseExpiration("2026-03-30T18:53:02+01:00");
38
+ expect(result.kind).toBe("error");
39
+ });
40
+
41
+ test("rejects bare date without time", () => {
42
+ const result = parseExpiration("2026-03-30");
43
+ expect(result.kind).toBe("error");
44
+ });
45
+
46
+ test('relative: "in 1 hour"', () => {
47
+ expect(parseExpiration("in 1 hour")).toEqual({
48
+ kind: "relative",
49
+ amount: 1,
50
+ unit: "hour",
51
+ });
52
+ });
53
+
54
+ test('relative: "in 3 hours"', () => {
55
+ expect(parseExpiration("in 3 hours")).toEqual({
56
+ kind: "relative",
57
+ amount: 3,
58
+ unit: "hour",
59
+ });
60
+ });
61
+
62
+ test('relative: "in 7 days"', () => {
63
+ expect(parseExpiration("in 7 days")).toEqual({
64
+ kind: "relative",
65
+ amount: 7,
66
+ unit: "day",
67
+ });
68
+ });
69
+
70
+ test('relative: "in 45 minutes"', () => {
71
+ expect(parseExpiration("in 45 minutes")).toEqual({
72
+ kind: "relative",
73
+ amount: 45,
74
+ unit: "minute",
75
+ });
76
+ });
77
+
78
+ test("invalid input returns error", () => {
79
+ const result = parseExpiration("yesterday");
80
+ expect(result).toEqual({
81
+ kind: "error",
82
+ message: expect.stringContaining("Invalid expiration format"),
83
+ });
84
+ });
85
+
86
+ test("empty string returns error", () => {
87
+ const result = parseExpiration("");
88
+ expect(result).toEqual({
89
+ kind: "error",
90
+ message: expect.stringContaining("Invalid expiration format"),
91
+ });
92
+ });
93
+ });
94
+
95
+ describe("resolveExpiration", () => {
96
+ const now = 1700000000000;
97
+
98
+ test('"none" resolves to null', () => {
99
+ expect(resolveExpiration({ kind: "none" }, now)).toBeNull();
100
+ });
101
+
102
+ test("absolute resolves to timestampMs", () => {
103
+ expect(
104
+ resolveExpiration({ kind: "absolute", timestampMs: 1711828382000 }, now),
105
+ ).toBe(1711828382000);
106
+ });
107
+
108
+ test("relative hours", () => {
109
+ expect(
110
+ resolveExpiration({ kind: "relative", amount: 3, unit: "hour" }, now),
111
+ ).toBe(now + 3 * 60 * 60 * 1000);
112
+ });
113
+
114
+ test("relative days", () => {
115
+ expect(
116
+ resolveExpiration({ kind: "relative", amount: 7, unit: "day" }, now),
117
+ ).toBe(now + 7 * 24 * 60 * 60 * 1000);
118
+ });
119
+
120
+ test("relative minutes", () => {
121
+ expect(
122
+ resolveExpiration({ kind: "relative", amount: 45, unit: "minute" }, now),
123
+ ).toBe(now + 45 * 60 * 1000);
124
+ });
125
+ });
126
+
127
+ describe("validateExpiration", () => {
128
+ const now = 1700000000000;
129
+
130
+ test("past timestamp returns error", () => {
131
+ const result = validateExpiration(now - 1000, now);
132
+ expect(result).toEqual({
133
+ kind: "error",
134
+ message: expect.stringContaining("in the future"),
135
+ });
136
+ });
137
+
138
+ test("less than 30 minutes from now returns error", () => {
139
+ const result = validateExpiration(now + 10 * 60 * 1000, now);
140
+ expect(result).toEqual({
141
+ kind: "error",
142
+ message: expect.stringContaining("at least 30 minutes"),
143
+ });
144
+ });
145
+
146
+ test("more than 1 year from now returns error", () => {
147
+ const overOneYear = now + 366 * 24 * 60 * 60 * 1000;
148
+ const result = validateExpiration(overOneYear, now);
149
+ expect(result).toEqual({
150
+ kind: "error",
151
+ message: expect.stringContaining("at most 1 year"),
152
+ });
153
+ });
154
+
155
+ test("valid timestamp returns success", () => {
156
+ const twoHours = now + 2 * 60 * 60 * 1000;
157
+ expect(validateExpiration(twoHours, now)).toEqual({ kind: "success" });
158
+ });
159
+ });
@@ -0,0 +1,124 @@
1
+ type ParsedExpirationSuccess =
2
+ | { kind: "none" }
3
+ | { kind: "absolute"; timestampMs: number }
4
+ | { kind: "relative"; amount: number; unit: "minute" | "hour" | "day" };
5
+
6
+ type ParsedExpiration =
7
+ | ParsedExpirationSuccess
8
+ | { kind: "error"; message: string };
9
+
10
+ const PARSE_ERROR_MESSAGE =
11
+ `Supported formats:\n` +
12
+ ` "none" — no expiration\n` +
13
+ ` "in 7 days" — relative (minutes, hours, days)\n` +
14
+ ` "2026-04-01T00:00:00Z" — UTC datetime\n` +
15
+ ` "1711828382" — Unix timestamp (seconds)\n` +
16
+ ` "1711828382000" — Unix timestamp (milliseconds)`;
17
+
18
+ const UNIT_MS = {
19
+ minute: 60 * 1000,
20
+ hour: 60 * 60 * 1000,
21
+ day: 24 * 60 * 60 * 1000,
22
+ } as const;
23
+
24
+ /**
25
+ * Parse an expiration input string into a structured representation.
26
+ * Does not depend on the current time.
27
+ */
28
+ export function parseExpiration(input: string): ParsedExpiration {
29
+ const trimmed = input.trim();
30
+
31
+ if (trimmed.toLowerCase() === "none") {
32
+ return { kind: "none" };
33
+ }
34
+
35
+ // All digits → Unix timestamp
36
+ if (/^\d+$/.test(trimmed)) {
37
+ const n = Number(trimmed);
38
+
39
+ return {
40
+ kind: "absolute",
41
+ timestampMs:
42
+ n < 1e12 // 1e12 milliseconds is a date in 2001 → unambiguous
43
+ ? n * 1000 // seconds → convert to ms
44
+ : n, // already milliseconds
45
+ };
46
+ }
47
+
48
+ // UTC datetime: "2026-04-01T00:00:00Z"
49
+ if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(trimmed)) {
50
+ const date = new Date(trimmed);
51
+ if (isNaN(date.getTime())) {
52
+ return {
53
+ kind: "error",
54
+ message: `Invalid UTC datetime: "${trimmed}". ${PARSE_ERROR_MESSAGE}`,
55
+ };
56
+ }
57
+ return { kind: "absolute", timestampMs: date.getTime() };
58
+ }
59
+
60
+ // Relative: "in 3 hours", "in 1 day", "in 45 minutes"
61
+ const relativeMatch = trimmed.match(/^in\s+(\d+)\s+(minute|hour|day)s?$/i);
62
+ if (relativeMatch) {
63
+ const amount = Number(relativeMatch[1]);
64
+ const unit = relativeMatch[2].toLowerCase() as "minute" | "hour" | "day";
65
+ return { kind: "relative", amount, unit };
66
+ }
67
+
68
+ return {
69
+ kind: "error",
70
+ message: `Invalid expiration format: "${trimmed}". ${PARSE_ERROR_MESSAGE}`,
71
+ };
72
+ }
73
+
74
+ /**
75
+ * Resolve a parsed expiration into a timestamp in milliseconds, or null for "none".
76
+ */
77
+ export function resolveExpiration(
78
+ parsed: ParsedExpirationSuccess,
79
+ now?: number,
80
+ ): number | null {
81
+ switch (parsed.kind) {
82
+ case "none":
83
+ return null;
84
+ case "absolute":
85
+ return parsed.timestampMs;
86
+ case "relative": {
87
+ const base = now ?? Date.now();
88
+ return base + parsed.amount * UNIT_MS[parsed.unit];
89
+ }
90
+ }
91
+ }
92
+
93
+ type ValidationResult =
94
+ | { kind: "success" }
95
+ | { kind: "error"; message: string };
96
+
97
+ /**
98
+ * Validate that a resolved expiration timestamp is acceptable.
99
+ */
100
+ export function validateExpiration(
101
+ timestampMs: number,
102
+ now?: number,
103
+ ): ValidationResult {
104
+ const base = now ?? Date.now();
105
+ const thirtyMinutes = 30 * 60 * 1000;
106
+ const oneYear = 365 * 24 * 60 * 60 * 1000;
107
+
108
+ if (timestampMs <= base) {
109
+ return { kind: "error", message: "Expiration must be in the future." };
110
+ }
111
+ if (timestampMs - base < thirtyMinutes) {
112
+ return {
113
+ kind: "error",
114
+ message: "Expiration must be at least 30 minutes from now.",
115
+ };
116
+ }
117
+ if (timestampMs - base > oneYear) {
118
+ return {
119
+ kind: "error",
120
+ message: "Expiration must be at most 1 year from now.",
121
+ };
122
+ }
123
+ return { kind: "success" };
124
+ }
@@ -33,6 +33,8 @@ export interface components {
33
33
  timestamp: number;
34
34
  udfType: components["schemas"]["UdfTypeJson"];
35
35
  usageStats: components["schemas"]["UsageStatsJson"];
36
+ /** Format: double */
37
+ userExecutionTime?: number | null;
36
38
  } | {
37
39
  componentPath?: string | null;
38
40
  executionId: string;
@@ -58,9 +60,10 @@ export interface components {
58
60
  udfPath?: string | null;
59
61
  };
60
62
  OccInfoJson: {
63
+ componentPath?: string | null;
61
64
  documentId?: string | null;
62
65
  /** Format: int64 */
63
- retryCount: number;
66
+ retryCount?: number | null;
64
67
  tableName?: string | null;
65
68
  writeSource?: string | null;
66
69
  };
@@ -86,6 +89,10 @@ export interface components {
86
89
  /** @enum {string} */
87
90
  UdfTypeJson: "Query" | "Mutation" | "Action" | "HttpAction";
88
91
  UsageStatsJson: {
92
+ /** Format: int64 */
93
+ databaseIoReadBytes: number;
94
+ /** Format: int64 */
95
+ databaseIoWriteBytes: number;
89
96
  /** Format: int64 */
90
97
  databaseReadBytes: number;
91
98
  /** Format: int64 */
@@ -99,9 +106,17 @@ export interface components {
99
106
  /** Format: int64 */
100
107
  storageWriteBytes: number;
101
108
  /** Format: int64 */
109
+ textIndexQueryBytes: number;
110
+ /** Format: int64 */
111
+ textIndexWriteQueryBytes: number;
112
+ /** Format: int64 */
102
113
  vectorIndexReadBytes: number;
103
114
  /** Format: int64 */
115
+ vectorIndexReadQueryBytes: number;
116
+ /** Format: int64 */
104
117
  vectorIndexWriteBytes: number;
118
+ /** Format: int64 */
119
+ vectorIndexWriteQueryBytes: number;
105
120
  };
106
121
  Value: unknown;
107
122
  };
@@ -26,6 +26,9 @@ export async function finalizeConfiguration(
26
26
  (envFileConfig.convexUrlEnvVar || envFileConfig.siteUrlEnvVar);
27
27
 
28
28
  if (isEnvFileConfigChanged) {
29
+ const deploymentEnvVarMessage = options.changedDeploymentEnvVar
30
+ ? ` name as CONVEX_DEPLOYMENT\n`
31
+ : "";
29
32
  const urlUpdateMessages = [];
30
33
  if (envFileConfig.convexUrlEnvVar) {
31
34
  urlUpdateMessages.push(
@@ -39,7 +42,7 @@ export async function finalizeConfiguration(
39
42
  }
40
43
  logFinishedStep(
41
44
  `${messageForDeploymentType(options.deploymentType, options.url)} and saved its:\n` +
42
- ` name as CONVEX_DEPLOYMENT\n` +
45
+ deploymentEnvVarMessage +
43
46
  urlUpdateMessages.join("") +
44
47
  ` to ${envFileConfig.envFile}`,
45
48
  );
@@ -53,7 +56,8 @@ export async function finalizeConfiguration(
53
56
  }
54
57
  if (
55
58
  options.deploymentType === "anonymous" &&
56
- process.env.CONVEX_AGENT_MODE !== "anonymous"
59
+ process.env.CONVEX_AGENT_MODE !== "anonymous" &&
60
+ ctx.bigBrainAuth() === null
57
61
  ) {
58
62
  logMessage(
59
63
  `Run \`npx convex login\` at any time to create an account and link this deployment.`,
@@ -163,7 +163,7 @@ export async function fetchRawInsightsData(
163
163
  from: fromDate,
164
164
  to: toDate,
165
165
  });
166
- const bbFetch = await bigBrainFetch(ctx);
166
+ const bbFetch = bigBrainFetch(ctx);
167
167
  const res = await bbFetch(
168
168
  new URL(
169
169
  `dashboard/teams/${teamId}/usage/query?${queryParams.toString()}`,
@@ -35,7 +35,7 @@ import { handlePotentialUpgrade } from "./upgrade.js";
35
35
  import {
36
36
  isOffline,
37
37
  generateInstanceSecret,
38
- choosePorts,
38
+ chooseLocalBackendPorts,
39
39
  LOCAL_BACKEND_INSTANCE_SECRET,
40
40
  } from "./utils.js";
41
41
  import { handleDashboard } from "./dashboard.js";
@@ -48,7 +48,7 @@ import { nodeFs } from "../../../bundler/fs.js";
48
48
  import { doInitConvexFolder } from "../codegen.js";
49
49
  import { readProjectConfig } from "../config.js";
50
50
  import { functionsDir } from "../utils/utils.js";
51
- import { maybeSetupAiFiles } from "../ai/index.js";
51
+ import { attemptSetupAiFiles } from "../aiFiles/index.js";
52
52
 
53
53
  export async function handleAnonymousDeployment(
54
54
  ctx: Context,
@@ -80,7 +80,8 @@ export async function handleAnonymousDeployment(
80
80
  });
81
81
  if (
82
82
  deployment.kind === "first" &&
83
- process.env.CONVEX_AGENT_MODE !== "anonymous"
83
+ process.env.CONVEX_AGENT_MODE !== "anonymous" &&
84
+ process.stdin.isTTY
84
85
  ) {
85
86
  logMessage(
86
87
  "This command, `npx convex dev`, will run your Convex backend locally and update it with the function you write in the `convex/` directory.",
@@ -146,11 +147,10 @@ export async function handleAnonymousDeployment(
146
147
  adminKey = data.adminKey;
147
148
  }
148
149
 
149
- const [cloudPort, sitePort] = await choosePorts(ctx, {
150
- count: 2,
151
- startPort: 3210,
152
- requestedPorts: [options.ports?.cloud ?? null, options.ports?.site ?? null],
153
- });
150
+ const { cloudPort, sitePort } = await chooseLocalBackendPorts(
151
+ ctx,
152
+ options.ports,
153
+ );
154
154
  const onActivity = async (isOffline: boolean, _wasOffline: boolean) => {
155
155
  await ensureBackendRunning(ctx, {
156
156
  cloudPort,
@@ -187,7 +187,12 @@ export async function handleAnonymousDeployment(
187
187
  const { configPath, projectConfig } = await readProjectConfig(ctx);
188
188
  const convexDir = path.resolve(functionsDir(configPath, projectConfig));
189
189
  const projectDir = path.resolve(path.dirname(configPath));
190
- await maybeSetupAiFiles(ctx, convexDir, projectDir);
190
+ await attemptSetupAiFiles({
191
+ ctx,
192
+ aiFilesConfig: projectConfig.aiFiles,
193
+ convexDir,
194
+ projectDir,
195
+ });
191
196
  }
192
197
  return {
193
198
  adminKey,
@@ -354,6 +359,11 @@ async function chooseDeployment(
354
359
  return { deploymentName: generateDeploymentName(), kind: "new" };
355
360
  }
356
361
 
362
+ // Non-interactive terminal - auto-create a new deployment
363
+ if (!process.stdin.isTTY) {
364
+ return { deploymentName: generateDeploymentName(), kind: "new" };
365
+ }
366
+
357
367
  // Legacy deployments exist - prompt user to choose
358
368
  const newOrExisting = await promptSearch(ctx, {
359
369
  message: "Which project would you like to use?",
@@ -25,7 +25,7 @@ import { OnDeploymentActivityFunc } from "../deployment.js";
25
25
  import { promptSearch } from "../utils/prompts.js";
26
26
  import { LocalDeploymentError, printLocalDeploymentOnError } from "./errors.js";
27
27
  import {
28
- choosePorts,
28
+ chooseLocalBackendPorts,
29
29
  printLocalDeploymentWelcomeMessage,
30
30
  isOffline,
31
31
  LOCAL_BACKEND_INSTANCE_SECRET,
@@ -93,11 +93,10 @@ export async function handleLocalDeployment(
93
93
  }
94
94
  : { kind: "version", version: options.backendVersion },
95
95
  );
96
- const [cloudPort, sitePort] = await choosePorts(ctx, {
97
- count: 2,
98
- startPort: 3210,
99
- requestedPorts: [options.ports?.cloud ?? null, options.ports?.site ?? null],
100
- });
96
+ const { cloudPort, sitePort } = await chooseLocalBackendPorts(
97
+ ctx,
98
+ options.ports,
99
+ );
101
100
  const { deploymentName, adminKey } = await bigBrainStart(ctx, {
102
101
  port: cloudPort,
103
102
  projectSlug: options.projectSlug,
@@ -207,11 +206,10 @@ async function handleOffline(
207
206
  kind: "version",
208
207
  version: config.backendVersion,
209
208
  });
210
- const [cloudPort, sitePort] = await choosePorts(ctx, {
211
- count: 2,
212
- startPort: 3210,
213
- requestedPorts: [options.ports?.cloud ?? null, options.ports?.site ?? null],
214
- });
209
+ const { cloudPort, sitePort } = await chooseLocalBackendPorts(
210
+ ctx,
211
+ options.ports,
212
+ );
215
213
  saveDeploymentConfig(ctx, "local", deploymentName, config);
216
214
  await runLocalBackend(ctx, {
217
215
  binaryPath,
@@ -295,7 +295,7 @@ type LocalBackendStatus =
295
295
  | { kind: "different"; name: string }
296
296
  | { kind: "not-running" };
297
297
 
298
- async function fetchLocalBackendStatus(args: {
298
+ export async function fetchLocalBackendStatus(args: {
299
299
  url: string;
300
300
  deploymentName: string;
301
301
  }): Promise<LocalBackendStatus> {
@@ -76,6 +76,7 @@ export async function handlePotentialUpgrade(
76
76
  );
77
77
  const confirmed =
78
78
  args.forceUpgrade ||
79
+ !process.stdin.isTTY ||
79
80
  (await promptYesNo(ctx, {
80
81
  message: `This deployment is using an older version of the Convex backend. Upgrade now?`,
81
82
  default: true,
@@ -102,16 +103,17 @@ export async function handlePotentialUpgrade(
102
103
  isLatestVersion: false,
103
104
  });
104
105
  }
105
- const choice = args.forceUpgrade
106
- ? "transfer"
107
- : await promptOptions(ctx, {
108
- message: "Transfer data from existing deployment?",
109
- default: "transfer",
110
- choices: [
111
- { name: "transfer data", value: "transfer" },
112
- { name: "start fresh", value: "reset" },
113
- ],
114
- });
106
+ const choice =
107
+ args.forceUpgrade || !process.stdin.isTTY
108
+ ? "transfer"
109
+ : await promptOptions(ctx, {
110
+ message: "Transfer data from existing deployment?",
111
+ default: "transfer",
112
+ choices: [
113
+ { name: "transfer data", value: "transfer" },
114
+ { name: "start fresh", value: "reset" },
115
+ ],
116
+ });
115
117
  const deploymentStatePath = deploymentStateDir(
116
118
  ctx,
117
119
  args.deploymentKind,
@@ -39,6 +39,18 @@ export async function choosePorts(
39
39
  return ports;
40
40
  }
41
41
 
42
+ export async function chooseLocalBackendPorts(
43
+ ctx: Context,
44
+ ports?: { cloud?: number | null; site?: number | null },
45
+ ): Promise<{ cloudPort: number; sitePort: number }> {
46
+ const [cloudPort, sitePort] = await choosePorts(ctx, {
47
+ count: 2,
48
+ startPort: 3210,
49
+ requestedPorts: [ports?.cloud ?? null, ports?.site ?? null],
50
+ });
51
+ return { cloudPort, sitePort };
52
+ }
53
+
42
54
  export async function isOffline(): Promise<boolean> {
43
55
  // TODO(ENG-7080) -- implement this for real
44
56
  return false;
@@ -97,7 +97,7 @@ export const StatusTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {
97
97
  ];
98
98
  // Also get the prod cloud deployment if we're using a cloud-hosted dev-deployment
99
99
  if (
100
- selectionWithinProject.kind === "ownDev" &&
100
+ selectionWithinProject.kind === "unspecified" &&
101
101
  !(
102
102
  deploymentSelection.kind === "existingDeployment" &&
103
103
  deploymentSelection.deploymentToActOn.deploymentFields === null