convex 1.34.1 → 1.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/CHANGELOG.md +86 -43
  2. package/dist/browser.bundle.js +8 -2
  3. package/dist/browser.bundle.js.map +3 -3
  4. package/dist/cjs/browser/index-node.js +3 -1
  5. package/dist/cjs/browser/index.js +3 -1
  6. package/dist/cjs/browser/index.js.map +2 -2
  7. package/dist/cjs/browser/query_options.js.map +2 -2
  8. package/dist/cjs/cli/aiFiles.js +31 -13
  9. package/dist/cjs/cli/aiFiles.js.map +3 -3
  10. package/dist/cjs/cli/codegen_templates/readme.js +14 -1
  11. package/dist/cjs/cli/codegen_templates/readme.js.map +2 -2
  12. package/dist/cjs/cli/configure.js +21 -24
  13. package/dist/cjs/cli/configure.js.map +2 -2
  14. package/dist/cjs/cli/deploy.js +7 -8
  15. package/dist/cjs/cli/deploy.js.map +2 -2
  16. package/dist/cjs/cli/deploymentCreate.js +225 -40
  17. package/dist/cjs/cli/deploymentCreate.js.map +3 -3
  18. package/dist/cjs/cli/deploymentSelect.js +14 -13
  19. package/dist/cjs/cli/deploymentSelect.js.map +2 -2
  20. package/dist/cjs/cli/dev.js +30 -11
  21. package/dist/cjs/cli/dev.js.map +2 -2
  22. package/dist/cjs/cli/docs.js +1 -1
  23. package/dist/cjs/cli/docs.js.map +2 -2
  24. package/dist/cjs/cli/init.js +1 -1
  25. package/dist/cjs/cli/init.js.map +2 -2
  26. package/dist/cjs/cli/lib/aiFiles/agentsmd.js +14 -10
  27. package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +2 -2
  28. package/dist/cjs/cli/lib/aiFiles/claudemd.js +14 -10
  29. package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +2 -2
  30. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +10 -3
  31. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
  32. package/dist/cjs/cli/lib/aiFiles/index.js +70 -86
  33. package/dist/cjs/cli/lib/aiFiles/index.js.map +3 -3
  34. package/dist/cjs/cli/lib/aiFiles/skills.js +28 -12
  35. package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
  36. package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
  37. package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
  38. package/dist/cjs/cli/lib/aiFiles/status.js +31 -28
  39. package/dist/cjs/cli/lib/aiFiles/status.js.map +2 -2
  40. package/dist/cjs/cli/lib/aiFiles/utils.js +31 -14
  41. package/dist/cjs/cli/lib/aiFiles/utils.js.map +2 -2
  42. package/dist/cjs/cli/lib/api.js +70 -7
  43. package/dist/cjs/cli/lib/api.js.map +2 -2
  44. package/dist/cjs/cli/lib/command.js +4 -5
  45. package/dist/cjs/cli/lib/command.js.map +2 -2
  46. package/dist/cjs/cli/lib/config.js +41 -4
  47. package/dist/cjs/cli/lib/config.js.map +3 -3
  48. package/dist/cjs/cli/lib/deploy2.js +9 -26
  49. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  50. package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
  51. package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
  52. package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
  53. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  54. package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
  55. package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
  56. package/dist/cjs/cli/lib/dev.js +162 -117
  57. package/dist/cjs/cli/lib/dev.js.map +2 -2
  58. package/dist/cjs/cli/lib/env.js +1 -13
  59. package/dist/cjs/cli/lib/env.js.map +2 -2
  60. package/dist/cjs/cli/lib/expiration.js +104 -0
  61. package/dist/cjs/cli/lib/expiration.js.map +7 -0
  62. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  63. package/dist/cjs/cli/lib/init.js +4 -3
  64. package/dist/cjs/cli/lib/init.js.map +2 -2
  65. package/dist/cjs/cli/lib/insights.js +1 -1
  66. package/dist/cjs/cli/lib/insights.js.map +2 -2
  67. package/dist/cjs/cli/lib/localDeployment/anonymous.js +14 -7
  68. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
  69. package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
  70. package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
  71. package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
  72. package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
  73. package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
  74. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
  75. package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
  76. package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
  77. package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
  78. package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
  79. package/dist/cjs/cli/lib/updates.js +8 -9
  80. package/dist/cjs/cli/lib/updates.js.map +2 -2
  81. package/dist/cjs/cli/lib/usage.js +2 -1
  82. package/dist/cjs/cli/lib/usage.js.map +2 -2
  83. package/dist/cjs/cli/lib/utils/prompts.js +2 -1
  84. package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
  85. package/dist/cjs/cli/lib/utils/utils.js +46 -20
  86. package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
  87. package/dist/cjs/index.js +1 -1
  88. package/dist/cjs/index.js.map +1 -1
  89. package/dist/cjs/react/client.js +43 -6
  90. package/dist/cjs/react/client.js.map +2 -2
  91. package/dist/cjs/react/index.js +2 -0
  92. package/dist/cjs/react/index.js.map +2 -2
  93. package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  94. package/dist/cjs/server/api.js.map +2 -2
  95. package/dist/cjs/server/components/definition.js.map +1 -1
  96. package/dist/cjs/server/components/index.js +40 -4
  97. package/dist/cjs/server/components/index.js.map +2 -2
  98. package/dist/cjs/server/data_model.js.map +1 -1
  99. package/dist/cjs/server/impl/meta_impl.js +78 -0
  100. package/dist/cjs/server/impl/meta_impl.js.map +7 -0
  101. package/dist/cjs/server/impl/registration_impl.js +16 -11
  102. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  103. package/dist/cjs/server/index.js.map +2 -2
  104. package/dist/cjs/server/meta.js +17 -0
  105. package/dist/cjs/server/meta.js.map +7 -0
  106. package/dist/cjs/server/registration.js.map +1 -1
  107. package/dist/cjs-types/browser/index.d.ts +1 -0
  108. package/dist/cjs-types/browser/index.d.ts.map +1 -1
  109. package/dist/cjs-types/browser/query_options.d.ts +12 -9
  110. package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
  111. package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
  112. package/dist/cjs-types/cli/codegen_templates/readme.d.ts.map +1 -1
  113. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  114. package/dist/cjs-types/cli/configure.test.d.ts +2 -0
  115. package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
  116. package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
  117. package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
  118. package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
  119. package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
  120. package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
  121. package/dist/cjs-types/cli/dev.d.ts +3 -1
  122. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  123. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +5 -5
  124. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
  125. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
  126. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
  127. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
  128. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
  129. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +20 -18
  130. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -1
  131. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +6 -4
  132. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
  133. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
  134. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  135. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  136. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  137. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +4 -1
  138. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -1
  139. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +13 -3
  140. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
  141. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  142. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  143. package/dist/cjs-types/cli/lib/api.d.ts +3 -3
  144. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  145. package/dist/cjs-types/cli/lib/command.d.ts +2 -1
  146. package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
  147. package/dist/cjs-types/cli/lib/config.d.ts +17 -6
  148. package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
  149. package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
  150. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  151. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  152. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  153. package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  154. package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -14
  155. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +61 -52
  156. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  157. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  158. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
  159. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  160. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  161. package/dist/cjs-types/cli/lib/env.d.ts +0 -4
  162. package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
  163. package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
  164. package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
  165. package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
  166. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
  167. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  168. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  169. package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
  170. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  171. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  172. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
  173. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  174. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  175. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
  176. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  177. package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
  178. package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  179. package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
  180. package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
  181. package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
  182. package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
  183. package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
  184. package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
  185. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  186. package/dist/cjs-types/index.d.ts +1 -1
  187. package/dist/cjs-types/react/client.d.ts +54 -2
  188. package/dist/cjs-types/react/client.d.ts.map +1 -1
  189. package/dist/cjs-types/react/index.d.ts +7 -2
  190. package/dist/cjs-types/react/index.d.ts.map +1 -1
  191. package/dist/cjs-types/react/use_query_object_options.test.d.ts +5 -0
  192. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +1 -0
  193. package/dist/cjs-types/react/use_query_result.test.d.ts +5 -0
  194. package/dist/cjs-types/react/use_query_result.test.d.ts.map +1 -0
  195. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  196. package/dist/cjs-types/server/api.d.ts +5 -1
  197. package/dist/cjs-types/server/api.d.ts.map +1 -1
  198. package/dist/cjs-types/server/components/definition.d.ts +1 -0
  199. package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
  200. package/dist/cjs-types/server/components/index.d.ts +5 -1
  201. package/dist/cjs-types/server/components/index.d.ts.map +1 -1
  202. package/dist/cjs-types/server/data_model.d.ts +2 -1
  203. package/dist/cjs-types/server/data_model.d.ts.map +1 -1
  204. package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
  205. package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
  206. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  207. package/dist/cjs-types/server/index.d.ts +1 -0
  208. package/dist/cjs-types/server/index.d.ts.map +1 -1
  209. package/dist/cjs-types/server/meta.d.ts +72 -0
  210. package/dist/cjs-types/server/meta.d.ts.map +1 -0
  211. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  212. package/dist/cli.bundle.cjs +1670 -1214
  213. package/dist/cli.bundle.cjs.map +4 -4
  214. package/dist/esm/browser/index-node.js +1 -0
  215. package/dist/esm/browser/index.js +1 -0
  216. package/dist/esm/browser/index.js.map +2 -2
  217. package/dist/esm/browser/query_options.js.map +2 -2
  218. package/dist/esm/cli/aiFiles.js +33 -15
  219. package/dist/esm/cli/aiFiles.js.map +2 -2
  220. package/dist/esm/cli/codegen_templates/readme.js +14 -1
  221. package/dist/esm/cli/codegen_templates/readme.js.map +2 -2
  222. package/dist/esm/cli/configure.js +23 -26
  223. package/dist/esm/cli/configure.js.map +2 -2
  224. package/dist/esm/cli/deploy.js +11 -10
  225. package/dist/esm/cli/deploy.js.map +2 -2
  226. package/dist/esm/cli/deploymentCreate.js +238 -42
  227. package/dist/esm/cli/deploymentCreate.js.map +2 -2
  228. package/dist/esm/cli/deploymentSelect.js +13 -12
  229. package/dist/esm/cli/deploymentSelect.js.map +2 -2
  230. package/dist/esm/cli/dev.js +34 -13
  231. package/dist/esm/cli/dev.js.map +2 -2
  232. package/dist/esm/cli/docs.js +1 -1
  233. package/dist/esm/cli/docs.js.map +2 -2
  234. package/dist/esm/cli/init.js +2 -2
  235. package/dist/esm/cli/init.js.map +2 -2
  236. package/dist/esm/cli/lib/aiFiles/agentsmd.js +13 -9
  237. package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +2 -2
  238. package/dist/esm/cli/lib/aiFiles/claudemd.js +13 -9
  239. package/dist/esm/cli/lib/aiFiles/claudemd.js.map +2 -2
  240. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +12 -5
  241. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
  242. package/dist/esm/cli/lib/aiFiles/index.js +72 -89
  243. package/dist/esm/cli/lib/aiFiles/index.js.map +2 -2
  244. package/dist/esm/cli/lib/aiFiles/skills.js +29 -13
  245. package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
  246. package/dist/esm/cli/lib/aiFiles/state.js +60 -0
  247. package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
  248. package/dist/esm/cli/lib/aiFiles/status.js +32 -29
  249. package/dist/esm/cli/lib/aiFiles/status.js.map +2 -2
  250. package/dist/esm/cli/lib/aiFiles/utils.js +25 -10
  251. package/dist/esm/cli/lib/aiFiles/utils.js.map +2 -2
  252. package/dist/esm/cli/lib/api.js +70 -7
  253. package/dist/esm/cli/lib/api.js.map +2 -2
  254. package/dist/esm/cli/lib/command.js +4 -5
  255. package/dist/esm/cli/lib/command.js.map +2 -2
  256. package/dist/esm/cli/lib/config.js +39 -3
  257. package/dist/esm/cli/lib/config.js.map +2 -2
  258. package/dist/esm/cli/lib/deploy2.js +13 -26
  259. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  260. package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
  261. package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
  262. package/dist/esm/cli/lib/deploymentSelection.js +46 -2
  263. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  264. package/dist/esm/cli/lib/deploymentSelector.js +1 -0
  265. package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
  266. package/dist/esm/cli/lib/dev.js +162 -118
  267. package/dist/esm/cli/lib/dev.js.map +2 -2
  268. package/dist/esm/cli/lib/env.js +0 -11
  269. package/dist/esm/cli/lib/env.js.map +2 -2
  270. package/dist/esm/cli/lib/expiration.js +80 -0
  271. package/dist/esm/cli/lib/expiration.js.map +7 -0
  272. package/dist/esm/cli/lib/init.js +4 -3
  273. package/dist/esm/cli/lib/init.js.map +2 -2
  274. package/dist/esm/cli/lib/insights.js +1 -1
  275. package/dist/esm/cli/lib/insights.js.map +2 -2
  276. package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
  277. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
  278. package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
  279. package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
  280. package/dist/esm/cli/lib/localDeployment/run.js +1 -1
  281. package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
  282. package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
  283. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  284. package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
  285. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  286. package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
  287. package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
  288. package/dist/esm/cli/lib/updates.js +11 -9
  289. package/dist/esm/cli/lib/updates.js.map +2 -2
  290. package/dist/esm/cli/lib/usage.js +2 -1
  291. package/dist/esm/cli/lib/usage.js.map +2 -2
  292. package/dist/esm/cli/lib/utils/prompts.js +2 -1
  293. package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
  294. package/dist/esm/cli/lib/utils/utils.js +45 -20
  295. package/dist/esm/cli/lib/utils/utils.js.map +3 -3
  296. package/dist/esm/index.js +1 -1
  297. package/dist/esm/index.js.map +1 -1
  298. package/dist/esm/react/client.js +43 -6
  299. package/dist/esm/react/client.js.map +2 -2
  300. package/dist/esm/react/index.js +1 -0
  301. package/dist/esm/react/index.js.map +2 -2
  302. package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  303. package/dist/esm/server/api.js.map +2 -2
  304. package/dist/esm/server/components/index.js +40 -4
  305. package/dist/esm/server/components/index.js.map +2 -2
  306. package/dist/esm/server/impl/meta_impl.js +54 -0
  307. package/dist/esm/server/impl/meta_impl.js.map +7 -0
  308. package/dist/esm/server/impl/registration_impl.js +20 -11
  309. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  310. package/dist/esm/server/index.js.map +2 -2
  311. package/dist/esm/server/meta.js +2 -0
  312. package/dist/esm/server/meta.js.map +7 -0
  313. package/dist/esm-types/browser/index.d.ts +1 -0
  314. package/dist/esm-types/browser/index.d.ts.map +1 -1
  315. package/dist/esm-types/browser/query_options.d.ts +12 -9
  316. package/dist/esm-types/browser/query_options.d.ts.map +1 -1
  317. package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
  318. package/dist/esm-types/cli/codegen_templates/readme.d.ts.map +1 -1
  319. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  320. package/dist/esm-types/cli/configure.test.d.ts +2 -0
  321. package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
  322. package/dist/esm-types/cli/deploy.d.ts.map +1 -1
  323. package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
  324. package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
  325. package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
  326. package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
  327. package/dist/esm-types/cli/dev.d.ts +3 -1
  328. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  329. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +5 -5
  330. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
  331. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
  332. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
  333. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
  334. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
  335. package/dist/esm-types/cli/lib/aiFiles/index.d.ts +20 -18
  336. package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -1
  337. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +6 -4
  338. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
  339. package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
  340. package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  341. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  342. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  343. package/dist/esm-types/cli/lib/aiFiles/status.d.ts +4 -1
  344. package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -1
  345. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +13 -3
  346. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
  347. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  348. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  349. package/dist/esm-types/cli/lib/api.d.ts +3 -3
  350. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  351. package/dist/esm-types/cli/lib/command.d.ts +2 -1
  352. package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
  353. package/dist/esm-types/cli/lib/config.d.ts +17 -6
  354. package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
  355. package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
  356. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  357. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  358. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  359. package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  360. package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -14
  361. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +61 -52
  362. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  363. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  364. package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
  365. package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  366. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  367. package/dist/esm-types/cli/lib/env.d.ts +0 -4
  368. package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
  369. package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
  370. package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
  371. package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
  372. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
  373. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  374. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  375. package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
  376. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  377. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  378. package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
  379. package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  380. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  381. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
  382. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  383. package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
  384. package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  385. package/dist/esm-types/cli/lib/updates.d.ts +4 -3
  386. package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
  387. package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
  388. package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
  389. package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
  390. package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
  391. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  392. package/dist/esm-types/index.d.ts +1 -1
  393. package/dist/esm-types/react/client.d.ts +54 -2
  394. package/dist/esm-types/react/client.d.ts.map +1 -1
  395. package/dist/esm-types/react/index.d.ts +7 -2
  396. package/dist/esm-types/react/index.d.ts.map +1 -1
  397. package/dist/esm-types/react/use_query_object_options.test.d.ts +5 -0
  398. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +1 -0
  399. package/dist/esm-types/react/use_query_result.test.d.ts +5 -0
  400. package/dist/esm-types/react/use_query_result.test.d.ts.map +1 -0
  401. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  402. package/dist/esm-types/server/api.d.ts +5 -1
  403. package/dist/esm-types/server/api.d.ts.map +1 -1
  404. package/dist/esm-types/server/components/definition.d.ts +1 -0
  405. package/dist/esm-types/server/components/definition.d.ts.map +1 -1
  406. package/dist/esm-types/server/components/index.d.ts +5 -1
  407. package/dist/esm-types/server/components/index.d.ts.map +1 -1
  408. package/dist/esm-types/server/data_model.d.ts +2 -1
  409. package/dist/esm-types/server/data_model.d.ts.map +1 -1
  410. package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
  411. package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
  412. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  413. package/dist/esm-types/server/index.d.ts +1 -0
  414. package/dist/esm-types/server/index.d.ts.map +1 -1
  415. package/dist/esm-types/server/meta.d.ts +72 -0
  416. package/dist/esm-types/server/meta.d.ts.map +1 -0
  417. package/dist/esm-types/server/registration.d.ts.map +1 -1
  418. package/dist/react.bundle.js +50 -7
  419. package/dist/react.bundle.js.map +3 -3
  420. package/package.json +11 -7
  421. package/schemas/convex.schema.json +15 -2
  422. package/src/browser/index.ts +3 -0
  423. package/src/browser/query_options.test.ts +0 -9
  424. package/src/browser/query_options.ts +36 -15
  425. package/src/cli/aiFiles.ts +44 -14
  426. package/src/cli/codegen_templates/readme.ts +14 -1
  427. package/src/cli/configure.test.ts +138 -0
  428. package/src/cli/configure.ts +48 -47
  429. package/src/cli/deploy.ts +12 -9
  430. package/src/cli/deploymentCreate.test.ts +349 -14
  431. package/src/cli/deploymentCreate.ts +268 -41
  432. package/src/cli/deploymentSelect.test.ts +136 -27
  433. package/src/cli/deploymentSelect.ts +50 -41
  434. package/src/cli/deploymentSelection.test.ts +343 -35
  435. package/src/cli/dev.ts +49 -14
  436. package/src/cli/docs.ts +1 -1
  437. package/src/cli/init.ts +2 -2
  438. package/src/cli/lib/aiFiles/agentsmd.ts +15 -11
  439. package/src/cli/lib/aiFiles/claudemd.ts +15 -11
  440. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +12 -2
  441. package/src/cli/lib/aiFiles/guidelinesmd.ts +15 -7
  442. package/src/cli/lib/aiFiles/index.test.ts +188 -222
  443. package/src/cli/lib/aiFiles/index.ts +119 -125
  444. package/src/cli/lib/aiFiles/integration.test.ts +112 -45
  445. package/src/cli/lib/aiFiles/prompt.test.ts +6 -6
  446. package/src/cli/lib/aiFiles/skills.ts +46 -16
  447. package/src/cli/lib/aiFiles/state.test.ts +280 -0
  448. package/src/cli/lib/aiFiles/state.ts +82 -0
  449. package/src/cli/lib/aiFiles/status.ts +45 -39
  450. package/src/cli/lib/aiFiles/utils.test.ts +50 -0
  451. package/src/cli/lib/aiFiles/utils.ts +38 -10
  452. package/src/cli/lib/api.ts +88 -7
  453. package/src/cli/lib/command.ts +12 -7
  454. package/src/cli/lib/config.test.ts +184 -7
  455. package/src/cli/lib/config.ts +67 -7
  456. package/src/cli/lib/deploy2.ts +14 -27
  457. package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
  458. package/src/cli/lib/deploymentSelection.ts +59 -6
  459. package/src/cli/lib/deploymentSelector.test.ts +6 -0
  460. package/src/cli/lib/deploymentSelector.ts +2 -0
  461. package/src/cli/lib/dev.ts +202 -153
  462. package/src/cli/lib/env.ts +0 -15
  463. package/src/cli/lib/expiration.test.ts +159 -0
  464. package/src/cli/lib/expiration.ts +124 -0
  465. package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
  466. package/src/cli/lib/init.ts +6 -2
  467. package/src/cli/lib/insights.ts +1 -1
  468. package/src/cli/lib/localDeployment/anonymous.ts +19 -9
  469. package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
  470. package/src/cli/lib/localDeployment/run.ts +1 -1
  471. package/src/cli/lib/localDeployment/upgrade.ts +12 -10
  472. package/src/cli/lib/localDeployment/utils.ts +12 -0
  473. package/src/cli/lib/mcp/tools/status.ts +1 -1
  474. package/src/cli/lib/updates.test.ts +102 -75
  475. package/src/cli/lib/updates.ts +14 -12
  476. package/src/cli/lib/usage.ts +3 -1
  477. package/src/cli/lib/utils/prompts.ts +2 -0
  478. package/src/cli/lib/utils/utils.test.ts +6 -6
  479. package/src/cli/lib/utils/utils.ts +66 -27
  480. package/src/index.ts +1 -1
  481. package/src/react/client.test.tsx +65 -0
  482. package/src/react/client.ts +129 -13
  483. package/src/react/index.ts +9 -1
  484. package/src/react/use_query_object_options.test.ts +50 -0
  485. package/src/react/use_query_result.test.ts +41 -0
  486. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
  487. package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
  488. package/src/server/api.ts +5 -1
  489. package/src/server/components/definition.ts +3 -0
  490. package/src/server/components/index.ts +62 -5
  491. package/src/server/data_model.ts +2 -1
  492. package/src/server/impl/meta_impl.ts +74 -0
  493. package/src/server/impl/registration_impl.ts +21 -9
  494. package/src/server/index.ts +8 -0
  495. package/src/server/meta.ts +76 -0
  496. package/src/server/registration.ts +10 -0
  497. package/src/server/schema.test.ts +78 -1
  498. package/dist/cjs/cli/lib/aiFiles/config.js +0 -171
  499. package/dist/cjs/cli/lib/aiFiles/config.js.map +0 -7
  500. package/dist/cjs-types/cli/lib/aiFiles/config.d.ts +0 -46
  501. package/dist/cjs-types/cli/lib/aiFiles/config.d.ts.map +0 -1
  502. package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts +0 -2
  503. package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
  504. package/dist/esm/cli/lib/aiFiles/config.js +0 -135
  505. package/dist/esm/cli/lib/aiFiles/config.js.map +0 -7
  506. package/dist/esm-types/cli/lib/aiFiles/config.d.ts +0 -46
  507. package/dist/esm-types/cli/lib/aiFiles/config.d.ts.map +0 -1
  508. package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts +0 -2
  509. package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
  510. package/src/cli/lib/aiFiles/config.test.ts +0 -460
  511. package/src/cli/lib/aiFiles/config.ts +0 -188
  512. package/src/values/.claude/settings.local.json +0 -10
@@ -19,29 +19,30 @@ import {
19
19
  claudeMdPath,
20
20
  guidelinesPathForConvexDir
21
21
  } from "./paths.js";
22
- import { readAiConfig } from "./config.js";
23
- import { readFileSafe } from "./utils.js";
22
+ import { attemptReadAiState } from "./state.js";
23
+ import { isAiFilesDisabled } from "./index.js";
24
+ import { readFileOrNull } from "./utils.js";
24
25
  function logGuidelinesStatus({
25
26
  guidelinesFile,
26
27
  guidelinesRelPath,
27
- config,
28
+ state,
28
29
  canonicalGuidelinesHash,
29
30
  networkAvailable
30
31
  }) {
31
- if (guidelinesFile === null) {
32
+ if (guidelinesFile === null || guidelinesFile === "") {
32
33
  logMessage(
33
34
  ` ${chalkStderr.yellow("\u26A0")} ${guidelinesRelPath}: not on disk \u2014 run ${chalkStderr.bold("npx convex ai-files install")} to reinstall`
34
35
  );
35
36
  return;
36
37
  }
37
- const isLocallyModified = config.guidelinesHash !== null && hashSha256(guidelinesFile) !== config.guidelinesHash;
38
+ const isLocallyModified = state.guidelinesHash !== null && hashSha256(guidelinesFile) !== state.guidelinesHash;
38
39
  if (isLocallyModified) {
39
40
  logMessage(
40
41
  ` ${chalkStderr.yellow("\u26A0")} ${guidelinesRelPath}: installed, modified locally (changes will be overwritten on next update)`
41
42
  );
42
43
  return;
43
44
  }
44
- const isOutOfDate = networkAvailable && canonicalGuidelinesHash !== null && config.guidelinesHash !== null && config.guidelinesHash !== canonicalGuidelinesHash;
45
+ const isOutOfDate = networkAvailable && canonicalGuidelinesHash !== null && state.guidelinesHash !== null && state.guidelinesHash !== canonicalGuidelinesHash;
45
46
  if (isOutOfDate) {
46
47
  logMessage(
47
48
  ` ${chalkStderr.yellow("\u26A0")} ${guidelinesRelPath}: installed, out of date \u2014 run ${chalkStderr.bold("npx convex ai-files update")}`
@@ -54,7 +55,7 @@ function logGuidelinesStatus({
54
55
  }
55
56
  function logAgentsMdStatus({
56
57
  agentsContent,
57
- config,
58
+ state,
58
59
  convexDirName
59
60
  }) {
60
61
  const hasSection = agentsContent !== null && agentsContent.includes(AGENTS_MD_START_MARKER) && agentsContent.includes(AGENTS_MD_END_MARKER);
@@ -65,7 +66,7 @@ function logAgentsMdStatus({
65
66
  return;
66
67
  }
67
68
  const currentHash = hashSha256(agentsMdConvexSection(convexDirName));
68
- if (config.agentsMdSectionHash !== null && config.agentsMdSectionHash !== currentHash) {
69
+ if (state.agentsMdSectionHash !== null && state.agentsMdSectionHash !== currentHash) {
69
70
  logMessage(
70
71
  ` ${chalkStderr.yellow("\u26A0")} AGENTS.md: Convex section out of date \u2014 run ${chalkStderr.bold("npx convex ai-files update")}`
71
72
  );
@@ -77,7 +78,7 @@ function logAgentsMdStatus({
77
78
  }
78
79
  function logClaudeMdStatus({
79
80
  claudeContent,
80
- config,
81
+ state,
81
82
  convexDirName
82
83
  }) {
83
84
  const hasSection = claudeContent !== null && claudeContent.includes(CLAUDE_MD_START_MARKER) && claudeContent.includes(CLAUDE_MD_END_MARKER);
@@ -94,7 +95,7 @@ function logClaudeMdStatus({
94
95
  return;
95
96
  }
96
97
  const currentHash = hashSha256(claudeMdConvexSection(convexDirName));
97
- if (config.claudeMdHash !== null && config.claudeMdHash !== currentHash) {
98
+ if (state.claudeMdHash !== null && state.claudeMdHash !== currentHash) {
98
99
  logMessage(
99
100
  ` ${chalkStderr.yellow("\u26A0")} CLAUDE.md: Convex section out of date - run ${chalkStderr.bold("npx convex ai-files update")}`
100
101
  );
@@ -105,18 +106,18 @@ function logClaudeMdStatus({
105
106
  }
106
107
  }
107
108
  function logSkillsStatus({
108
- config,
109
+ state,
109
110
  canonicalAgentSkillsSha,
110
111
  networkAvailable
111
112
  }) {
112
- if (config.installedSkillNames.length === 0) {
113
+ if (state.installedSkillNames.length === 0) {
113
114
  logMessage(
114
115
  ` ${chalkStderr.yellow("\u26A0")} Agent skills: not installed \u2014 run ${chalkStderr.bold("npx convex ai-files install")} to install`
115
116
  );
116
117
  return;
117
118
  }
118
- const skillsList = config.installedSkillNames.join(", ");
119
- const isStale = networkAvailable && canonicalAgentSkillsSha !== null && config.agentSkillsSha !== null && config.agentSkillsSha !== canonicalAgentSkillsSha;
119
+ const skillsList = state.installedSkillNames.join(", ");
120
+ const isStale = networkAvailable && canonicalAgentSkillsSha !== null && state.agentSkillsSha !== null && state.agentSkillsSha !== canonicalAgentSkillsSha;
120
121
  if (isStale) {
121
122
  logMessage(
122
123
  ` ${chalkStderr.yellow("\u26A0")} Agent skills: ${skillsList} \u2014 out of date, run ${chalkStderr.bold("npx convex ai-files update")}`
@@ -129,34 +130,36 @@ function logSkillsStatus({
129
130
  }
130
131
  export async function statusAiFiles({
131
132
  projectDir,
132
- convexDir
133
+ convexDir,
134
+ aiFilesConfig
133
135
  }) {
134
136
  const convexDirName = path.relative(projectDir, convexDir);
135
137
  const guidelinesRelPath = path.relative(
136
138
  projectDir,
137
139
  guidelinesPathForConvexDir(convexDir)
138
140
  );
139
- const config = await readAiConfig({ projectDir, convexDir });
140
- if (config === null) {
141
- logMessage(`Convex AI files: ${chalkStderr.yellow("not installed")}`);
141
+ if (isAiFilesDisabled(aiFilesConfig)) {
142
+ logMessage(`Convex AI files: ${chalkStderr.yellow("disabled")}`);
142
143
  logMessage(
143
- ` Run ${chalkStderr.bold("npx convex ai-files install")} to get started, or ${chalkStderr.bold("npx convex ai-files disable")} to opt out.`
144
+ ` Run ${chalkStderr.bold("npx convex ai-files enable")} to re-enable.`
144
145
  );
145
146
  return;
146
147
  }
147
- if (!config.enabled) {
148
- logMessage(`Convex AI files: ${chalkStderr.yellow("disabled")}`);
148
+ const stateResult = await attemptReadAiState(convexDir);
149
+ if (stateResult.kind !== "ok") {
150
+ logMessage(`Convex AI files: ${chalkStderr.yellow("not installed")}`);
149
151
  logMessage(
150
- ` Run ${chalkStderr.bold("npx convex ai-files enable")} to re-enable.`
152
+ `Run ${chalkStderr.bold("npx convex ai-files install")} to get started.`
151
153
  );
152
154
  return;
153
155
  }
156
+ const { state } = stateResult;
154
157
  logMessage(`Convex AI files: ${chalkStderr.green("enabled")}`);
155
158
  const [versionData, guidelinesFile, agentsContent, claudeContent] = await Promise.all([
156
159
  getVersion(),
157
- readFileSafe(guidelinesPathForConvexDir(convexDir)),
158
- readFileSafe(agentsMdPath(projectDir)),
159
- readFileSafe(claudeMdPath(projectDir))
160
+ readFileOrNull(guidelinesPathForConvexDir(convexDir)),
161
+ readFileOrNull(agentsMdPath(projectDir)),
162
+ readFileOrNull(claudeMdPath(projectDir))
160
163
  ]);
161
164
  const networkAvailable = versionData.kind === "ok";
162
165
  const canonicalGuidelinesHash = networkAvailable ? versionData.data.guidelinesHash : null;
@@ -164,12 +167,12 @@ export async function statusAiFiles({
164
167
  logGuidelinesStatus({
165
168
  guidelinesFile,
166
169
  guidelinesRelPath,
167
- config,
170
+ state,
168
171
  canonicalGuidelinesHash,
169
172
  networkAvailable
170
173
  });
171
- logAgentsMdStatus({ agentsContent, config, convexDirName });
172
- logClaudeMdStatus({ claudeContent, config, convexDirName });
173
- logSkillsStatus({ config, canonicalAgentSkillsSha, networkAvailable });
174
+ logAgentsMdStatus({ agentsContent, state, convexDirName });
175
+ logClaudeMdStatus({ claudeContent, state, convexDirName });
176
+ logSkillsStatus({ state, canonicalAgentSkillsSha, networkAvailable });
174
177
  }
175
178
  //# sourceMappingURL=status.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/cli/lib/aiFiles/status.ts"],
4
- "sourcesContent": ["import path from \"path\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport {\n AGENTS_MD_START_MARKER,\n AGENTS_MD_END_MARKER,\n agentsMdConvexSection,\n} from \"../../codegen_templates/agentsmd.js\";\nimport {\n CLAUDE_MD_START_MARKER,\n CLAUDE_MD_END_MARKER,\n claudeMdConvexSection,\n} from \"../../codegen_templates/claudemd.js\";\nimport { getVersion } from \"../versionApi.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\nimport {\n type AiFilesPaths,\n agentsMdPath,\n claudeMdPath,\n guidelinesPathForConvexDir,\n} from \"./paths.js\";\nimport { type AiFilesConfig, readAiConfig } from \"./config.js\";\nimport { readFileSafe } from \"./utils.js\";\n\nfunction logGuidelinesStatus({\n guidelinesFile,\n guidelinesRelPath,\n config,\n canonicalGuidelinesHash,\n networkAvailable,\n}: {\n guidelinesFile: string | null;\n guidelinesRelPath: string;\n config: AiFilesConfig;\n canonicalGuidelinesHash: string | null;\n networkAvailable: boolean;\n}): void {\n if (guidelinesFile === null) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: not on disk \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to reinstall`,\n );\n return;\n }\n\n const isLocallyModified =\n config.guidelinesHash !== null &&\n hashSha256(guidelinesFile) !== config.guidelinesHash;\n\n if (isLocallyModified) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: installed, modified locally (changes will be overwritten on next update)`,\n );\n return;\n }\n\n const isOutOfDate =\n networkAvailable &&\n canonicalGuidelinesHash !== null &&\n config.guidelinesHash !== null &&\n config.guidelinesHash !== canonicalGuidelinesHash;\n\n if (isOutOfDate) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: installed, out of date \u2014 run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n );\n return;\n }\n\n logMessage(\n ` ${chalkStderr.green(\"\u2714\")} ${guidelinesRelPath}: installed${networkAvailable ? \", up to date\" : \"\"}`,\n );\n}\n\nfunction logAgentsMdStatus({\n agentsContent,\n config,\n convexDirName,\n}: {\n agentsContent: string | null;\n config: AiFilesConfig;\n convexDirName: string;\n}): void {\n const hasSection =\n agentsContent !== null &&\n agentsContent.includes(AGENTS_MD_START_MARKER) &&\n agentsContent.includes(AGENTS_MD_END_MARKER);\n\n if (!hasSection) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} AGENTS.md: Convex section missing \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to reinstall`,\n );\n return;\n }\n\n const currentHash = hashSha256(agentsMdConvexSection(convexDirName));\n if (\n config.agentsMdSectionHash !== null &&\n config.agentsMdSectionHash !== currentHash\n ) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} AGENTS.md: Convex section out of date \u2014 run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n );\n } else {\n logMessage(\n ` ${chalkStderr.green(\"\u2714\")} AGENTS.md: Convex section present, up to date`,\n );\n }\n}\n\nfunction logClaudeMdStatus({\n claudeContent,\n config,\n convexDirName,\n}: {\n claudeContent: string | null;\n config: AiFilesConfig;\n convexDirName: string;\n}): void {\n const hasSection =\n claudeContent !== null &&\n claudeContent.includes(CLAUDE_MD_START_MARKER) &&\n claudeContent.includes(CLAUDE_MD_END_MARKER);\n\n if (!hasSection) {\n if (claudeContent === null) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: missing - run ${chalkStderr.bold(\"npx convex ai-files install\")} to create it`,\n );\n } else {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: no Convex section present - run ${chalkStderr.bold(\"npx convex ai-files update\")} to add it`,\n );\n }\n return;\n }\n\n const currentHash = hashSha256(claudeMdConvexSection(convexDirName));\n if (config.claudeMdHash !== null && config.claudeMdHash !== currentHash) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: Convex section out of date - run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n );\n } else {\n logMessage(\n ` ${chalkStderr.green(\"\u2714\")} CLAUDE.md: Convex section present, up to date`,\n );\n }\n}\n\nfunction logSkillsStatus({\n config,\n canonicalAgentSkillsSha,\n networkAvailable,\n}: {\n config: AiFilesConfig;\n canonicalAgentSkillsSha: string | null;\n networkAvailable: boolean;\n}): void {\n if (config.installedSkillNames.length === 0) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} Agent skills: not installed \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to install`,\n );\n return;\n }\n\n const skillsList = config.installedSkillNames.join(\", \");\n const isStale =\n networkAvailable &&\n canonicalAgentSkillsSha !== null &&\n config.agentSkillsSha !== null &&\n config.agentSkillsSha !== canonicalAgentSkillsSha;\n\n if (isStale) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} Agent skills: ${skillsList} \u2014 out of date, run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n );\n } else {\n logMessage(\n ` ${chalkStderr.green(\"\u2714\")} Agent skills: ${skillsList}${networkAvailable ? \" (up to date)\" : \"\"}`,\n );\n }\n}\n\nexport async function statusAiFiles({\n projectDir,\n convexDir,\n}: AiFilesPaths): Promise<void> {\n const convexDirName = path.relative(projectDir, convexDir);\n const guidelinesRelPath = path.relative(\n projectDir,\n guidelinesPathForConvexDir(convexDir),\n );\n\n const config = await readAiConfig({ projectDir, convexDir });\n\n if (config === null) {\n logMessage(`Convex AI files: ${chalkStderr.yellow(\"not installed\")}`);\n logMessage(\n ` Run ${chalkStderr.bold(\"npx convex ai-files install\")} to get started, ` +\n `or ${chalkStderr.bold(\"npx convex ai-files disable\")} to opt out.`,\n );\n return;\n }\n\n if (!config.enabled) {\n logMessage(`Convex AI files: ${chalkStderr.yellow(\"disabled\")}`);\n logMessage(\n ` Run ${chalkStderr.bold(\"npx convex ai-files enable\")} to re-enable.`,\n );\n return;\n }\n\n logMessage(`Convex AI files: ${chalkStderr.green(\"enabled\")}`);\n\n const [versionData, guidelinesFile, agentsContent, claudeContent] =\n await Promise.all([\n getVersion(),\n readFileSafe(guidelinesPathForConvexDir(convexDir)),\n readFileSafe(agentsMdPath(projectDir)),\n readFileSafe(claudeMdPath(projectDir)),\n ]);\n\n const networkAvailable = versionData.kind === \"ok\";\n const canonicalGuidelinesHash = networkAvailable\n ? versionData.data.guidelinesHash\n : null;\n const canonicalAgentSkillsSha = networkAvailable\n ? versionData.data.agentSkillsSha\n : null;\n\n logGuidelinesStatus({\n guidelinesFile,\n guidelinesRelPath,\n config,\n canonicalGuidelinesHash,\n networkAvailable,\n });\n logAgentsMdStatus({ agentsContent, config, convexDirName });\n logClaudeMdStatus({ claudeContent, config, convexDirName });\n logSkillsStatus({ config, canonicalAgentSkillsSha, networkAvailable });\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import path from \"path\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport {\n AGENTS_MD_START_MARKER,\n AGENTS_MD_END_MARKER,\n agentsMdConvexSection,\n} from \"../../codegen_templates/agentsmd.js\";\nimport {\n CLAUDE_MD_START_MARKER,\n CLAUDE_MD_END_MARKER,\n claudeMdConvexSection,\n} from \"../../codegen_templates/claudemd.js\";\nimport { getVersion } from \"../versionApi.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\nimport {\n type AiFilesPaths,\n agentsMdPath,\n claudeMdPath,\n guidelinesPathForConvexDir,\n} from \"./paths.js\";\nimport { type AiFilesState, attemptReadAiState } from \"./state.js\";\nimport { type AiFilesProjectConfig } from \"../config.js\";\nimport { isAiFilesDisabled } from \"./index.js\";\nimport { readFileOrNull } from \"./utils.js\";\n\nfunction logGuidelinesStatus({\n guidelinesFile,\n guidelinesRelPath,\n state,\n canonicalGuidelinesHash,\n networkAvailable,\n}: {\n guidelinesFile: string | null;\n guidelinesRelPath: string;\n state: AiFilesState;\n canonicalGuidelinesHash: string | null;\n networkAvailable: boolean;\n}): void {\n if (guidelinesFile === null || guidelinesFile === \"\") {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: not on disk \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to reinstall`,\n );\n return;\n }\n\n const isLocallyModified =\n state.guidelinesHash !== null &&\n hashSha256(guidelinesFile) !== state.guidelinesHash;\n\n if (isLocallyModified) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: installed, modified locally (changes will be overwritten on next update)`,\n );\n return;\n }\n\n const isOutOfDate =\n networkAvailable &&\n canonicalGuidelinesHash !== null &&\n state.guidelinesHash !== null &&\n state.guidelinesHash !== canonicalGuidelinesHash;\n\n if (isOutOfDate) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: installed, out of date \u2014 run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n );\n return;\n }\n\n logMessage(\n ` ${chalkStderr.green(\"\u2714\")} ${guidelinesRelPath}: installed${networkAvailable ? \", up to date\" : \"\"}`,\n );\n}\n\nfunction logAgentsMdStatus({\n agentsContent,\n state,\n convexDirName,\n}: {\n agentsContent: string | null;\n state: AiFilesState;\n convexDirName: string;\n}): void {\n const hasSection =\n agentsContent !== null &&\n agentsContent.includes(AGENTS_MD_START_MARKER) &&\n agentsContent.includes(AGENTS_MD_END_MARKER);\n\n if (!hasSection) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} AGENTS.md: Convex section missing \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to reinstall`,\n );\n return;\n }\n\n const currentHash = hashSha256(agentsMdConvexSection(convexDirName));\n if (\n state.agentsMdSectionHash !== null &&\n state.agentsMdSectionHash !== currentHash\n ) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} AGENTS.md: Convex section out of date \u2014 run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n );\n } else {\n logMessage(\n ` ${chalkStderr.green(\"\u2714\")} AGENTS.md: Convex section present, up to date`,\n );\n }\n}\n\nfunction logClaudeMdStatus({\n claudeContent,\n state,\n convexDirName,\n}: {\n claudeContent: string | null;\n state: AiFilesState;\n convexDirName: string;\n}): void {\n const hasSection =\n claudeContent !== null &&\n claudeContent.includes(CLAUDE_MD_START_MARKER) &&\n claudeContent.includes(CLAUDE_MD_END_MARKER);\n\n if (!hasSection) {\n if (claudeContent === null) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: missing - run ${chalkStderr.bold(\"npx convex ai-files install\")} to create it`,\n );\n } else {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: no Convex section present - run ${chalkStderr.bold(\"npx convex ai-files update\")} to add it`,\n );\n }\n return;\n }\n\n const currentHash = hashSha256(claudeMdConvexSection(convexDirName));\n if (state.claudeMdHash !== null && state.claudeMdHash !== currentHash) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: Convex section out of date - run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n );\n } else {\n logMessage(\n ` ${chalkStderr.green(\"\u2714\")} CLAUDE.md: Convex section present, up to date`,\n );\n }\n}\n\nfunction logSkillsStatus({\n state,\n canonicalAgentSkillsSha,\n networkAvailable,\n}: {\n state: AiFilesState;\n canonicalAgentSkillsSha: string | null;\n networkAvailable: boolean;\n}): void {\n if (state.installedSkillNames.length === 0) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} Agent skills: not installed \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to install`,\n );\n return;\n }\n\n const skillsList = state.installedSkillNames.join(\", \");\n const isStale =\n networkAvailable &&\n canonicalAgentSkillsSha !== null &&\n state.agentSkillsSha !== null &&\n state.agentSkillsSha !== canonicalAgentSkillsSha;\n\n if (isStale) {\n logMessage(\n ` ${chalkStderr.yellow(\"\u26A0\")} Agent skills: ${skillsList} \u2014 out of date, run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n );\n } else {\n logMessage(\n ` ${chalkStderr.green(\"\u2714\")} Agent skills: ${skillsList}${networkAvailable ? \" (up to date)\" : \"\"}`,\n );\n }\n}\n\nexport async function statusAiFiles({\n projectDir,\n convexDir,\n aiFilesConfig,\n}: AiFilesPaths & {\n aiFilesConfig?: AiFilesProjectConfig | undefined;\n}): Promise<void> {\n const convexDirName = path.relative(projectDir, convexDir);\n const guidelinesRelPath = path.relative(\n projectDir,\n guidelinesPathForConvexDir(convexDir),\n );\n\n if (isAiFilesDisabled(aiFilesConfig)) {\n logMessage(`Convex AI files: ${chalkStderr.yellow(\"disabled\")}`);\n logMessage(\n ` Run ${chalkStderr.bold(\"npx convex ai-files enable\")} to re-enable.`,\n );\n return;\n }\n\n const stateResult = await attemptReadAiState(convexDir);\n\n if (stateResult.kind !== \"ok\") {\n logMessage(`Convex AI files: ${chalkStderr.yellow(\"not installed\")}`);\n logMessage(\n `Run ${chalkStderr.bold(\"npx convex ai-files install\")} to get started.`,\n );\n return;\n }\n\n const { state } = stateResult;\n\n logMessage(`Convex AI files: ${chalkStderr.green(\"enabled\")}`);\n\n const [versionData, guidelinesFile, agentsContent, claudeContent] =\n await Promise.all([\n getVersion(),\n readFileOrNull(guidelinesPathForConvexDir(convexDir)),\n readFileOrNull(agentsMdPath(projectDir)),\n readFileOrNull(claudeMdPath(projectDir)),\n ]);\n\n const networkAvailable = versionData.kind === \"ok\";\n const canonicalGuidelinesHash = networkAvailable\n ? versionData.data.guidelinesHash\n : null;\n const canonicalAgentSkillsSha = networkAvailable\n ? versionData.data.agentSkillsSha\n : null;\n\n logGuidelinesStatus({\n guidelinesFile,\n guidelinesRelPath,\n state,\n canonicalGuidelinesHash,\n networkAvailable,\n });\n logAgentsMdStatus({ agentsContent, state, convexDirName });\n logClaudeMdStatus({ claudeContent, state, convexDirName });\n logSkillsStatus({ state, canonicalAgentSkillsSha, networkAvailable });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -6,13 +6,24 @@ import { hashSha256 } from "../utils/hash.js";
6
6
  export function isInInteractiveTerminal() {
7
7
  return process.stdin.isTTY === true;
8
8
  }
9
- export async function readFileSafe(filePath) {
9
+ export async function attemptReadFile(filePath) {
10
10
  try {
11
- return await fs.readFile(filePath, "utf8");
12
- } catch {
13
- return null;
11
+ const content = await fs.readFile(filePath, "utf8");
12
+ if (content.length === 0) return { kind: "empty" };
13
+ return { kind: "content", content };
14
+ } catch (error) {
15
+ if (error.code === "ENOENT")
16
+ return { kind: "not-found" };
17
+ throw error;
14
18
  }
15
19
  }
20
+ export async function readFileOrNull(filePath) {
21
+ const result = await attemptReadFile(filePath);
22
+ if (result.kind === "content") return result.content;
23
+ if (result.kind === "empty") return "";
24
+ if (result.kind === "not-found") return null;
25
+ return exhaustiveCheck(result);
26
+ }
16
27
  export async function safelyDeleteFile(filePath) {
17
28
  try {
18
29
  await fs.unlink(filePath);
@@ -24,7 +35,7 @@ export async function safelyDeleteFile(filePath) {
24
35
  export const iife = (fn) => fn();
25
36
  export async function injectManagedSection(opts) {
26
37
  const { filePath, startMarker, endMarker, section } = opts;
27
- const existing = await readFileSafe(filePath) ?? "";
38
+ const existing = await readFileOrNull(filePath) ?? "";
28
39
  const startIdx = existing.indexOf(startMarker);
29
40
  const endIdx = existing.indexOf(endMarker);
30
41
  const updated = iife(() => {
@@ -38,9 +49,9 @@ export async function injectManagedSection(opts) {
38
49
  if (didWrite) await fs.writeFile(filePath, updated, "utf8");
39
50
  return { sectionHash: hashSha256(section), didWrite };
40
51
  }
41
- export async function stripManagedSection(opts) {
52
+ export async function attemptToStripManagedSection(opts) {
42
53
  const { filePath, startMarker, endMarker } = opts;
43
- const content = await readFileSafe(filePath);
54
+ const content = await readFileOrNull(filePath);
44
55
  if (content === null) return "none";
45
56
  const startIdx = content.indexOf(startMarker);
46
57
  const endIdx = content.indexOf(endMarker);
@@ -57,7 +68,10 @@ export async function stripManagedSection(opts) {
57
68
  await fs.writeFile(filePath, updated + "\n", "utf8");
58
69
  return "section";
59
70
  }
60
- export async function removeMarkdownSection({
71
+ export function exhaustiveCheck(_param) {
72
+ throw new Error("Internal error: exhaustive check failed.");
73
+ }
74
+ export async function attemptToRemoveMarkdownSection({
61
75
  projectDir,
62
76
  strip,
63
77
  fileName
@@ -73,10 +87,11 @@ export async function removeMarkdownSection({
73
87
  logMessage(`${chalkStderr.green("\u2714")} Deleted ${fileName}.`);
74
88
  return true;
75
89
  }
76
- return false;
90
+ if (result === "none") return false;
91
+ return exhaustiveCheck(result);
77
92
  }
78
93
  export async function hasManagedSection(opts) {
79
- const content = await readFileSafe(opts.filePath);
94
+ const content = await readFileOrNull(opts.filePath);
80
95
  return content !== null && content.includes(opts.startMarker) && content.includes(opts.endMarker);
81
96
  }
82
97
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/cli/lib/aiFiles/utils.ts"],
4
- "sourcesContent": ["// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\n\nexport function isInInteractiveTerminal(): boolean {\n return process.stdin.isTTY === true;\n}\n\nexport async function readFileSafe(filePath: string): Promise<string | null> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch {\n return null;\n }\n}\n\n/**\n * Attempt to delete a file. Returns `true` if the file was deleted,\n * `false` if it didn't exist or the deletion failed.\n */\nexport async function safelyDeleteFile(filePath: string): Promise<boolean> {\n try {\n await fs.unlink(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Generic managed-section helpers\n//\n// Several files (AGENTS.md, CLAUDE.md) contain a Convex-managed section\n// delimited by start/end markers. These helpers provide the common logic\n// for injecting, stripping, and detecting those sections.\n// ---------------------------------------------------------------------------\n\nexport type ManagedSectionTarget = {\n filePath: string;\n startMarker: string;\n endMarker: string;\n};\n\nexport type InjectResult = {\n sectionHash: string;\n didWrite: boolean;\n};\n\nexport const iife = <T>(fn: () => T): T => fn();\n\n/**\n * Inject a managed section into a file. If the file already contains the\n * markers, the section between them is replaced. Otherwise the section is\n * appended (or the file is created). Only writes when content actually\n * changes.\n */\nexport async function injectManagedSection(\n opts: ManagedSectionTarget & { section: string },\n): Promise<InjectResult> {\n const { filePath, startMarker, endMarker, section } = opts;\n\n const existing = (await readFileSafe(filePath)) ?? \"\";\n\n const startIdx = existing.indexOf(startMarker);\n const endIdx = existing.indexOf(endMarker);\n\n const updated = iife(() => {\n if (startIdx !== -1 && endIdx !== -1)\n return (\n existing.slice(0, startIdx) +\n section +\n existing.slice(endIdx + endMarker.length)\n );\n if (existing.length > 0)\n return existing.trimEnd() + \"\\n\\n\" + section + \"\\n\";\n\n return section + \"\\n\";\n });\n\n const didWrite = updated !== existing;\n if (didWrite) await fs.writeFile(filePath, updated, \"utf8\");\n\n return { sectionHash: hashSha256(section), didWrite };\n}\n\nexport type StripResult = \"none\" | \"section\" | \"file\";\n\n/**\n * Remove the managed section (between start/end markers) from a file.\n * If the file is empty after removal, it is deleted.\n *\n * Returns `\"none\"` if the file doesn't exist or has no markers,\n * `\"section\"` if the section was stripped, or `\"file\"` if the entire\n * file was deleted.\n */\nexport async function stripManagedSection(\n opts: ManagedSectionTarget,\n): Promise<StripResult> {\n const { filePath, startMarker, endMarker } = opts;\n\n const content = await readFileSafe(filePath);\n if (content === null) return \"none\";\n\n const startIdx = content.indexOf(startMarker);\n const endIdx = content.indexOf(endMarker);\n if (startIdx === -1 || endIdx === -1) {\n return \"none\";\n }\n\n const before = content.slice(0, startIdx).trimEnd();\n const after = content.slice(endIdx + endMarker.length).trimStart();\n const updated = [before, after].filter(Boolean).join(\"\\n\\n\");\n\n if (!updated.trim()) {\n await safelyDeleteFile(filePath);\n return \"file\";\n }\n\n await fs.writeFile(filePath, updated + \"\\n\", \"utf8\");\n return \"section\";\n}\n\nexport async function removeMarkdownSection({\n projectDir,\n strip,\n fileName,\n}: {\n projectDir: string;\n strip: (dir: string) => Promise<StripResult>;\n fileName: string;\n}): Promise<boolean> {\n const result = await strip(projectDir);\n\n if (result === \"section\") {\n logMessage(\n `${chalkStderr.green(\"\u2714\")} Removed Convex section from ${fileName}.`,\n );\n return true;\n }\n\n if (result === \"file\") {\n logMessage(`${chalkStderr.green(\"\u2714\")} Deleted ${fileName}.`);\n return true;\n }\n\n return false;\n}\n\n/**\n * Check whether a file contains a managed section (both markers present).\n */\nexport async function hasManagedSection(\n opts: ManagedSectionTarget,\n): Promise<boolean> {\n const content = await readFileSafe(opts.filePath);\n return (\n content !== null &&\n content.includes(opts.startMarker) &&\n content.includes(opts.endMarker)\n );\n}\n"],
5
- "mappings": ";AACA,SAAS,YAAY,UAAU;AAC/B,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,kBAAkB;AAEpB,gBAAS,0BAAmC;AACjD,SAAO,QAAQ,MAAM,UAAU;AACjC;AAEA,sBAAsB,aAAa,UAA0C;AAC3E,MAAI;AACF,WAAO,MAAM,GAAG,SAAS,UAAU,MAAM;AAAA,EAC3C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAMA,sBAAsB,iBAAiB,UAAoC;AACzE,MAAI;AACF,UAAM,GAAG,OAAO,QAAQ;AACxB,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAqBO,aAAM,OAAO,CAAI,OAAmB,GAAG;AAQ9C,sBAAsB,qBACpB,MACuB;AACvB,QAAM,EAAE,UAAU,aAAa,WAAW,QAAQ,IAAI;AAEtD,QAAM,WAAY,MAAM,aAAa,QAAQ,KAAM;AAEnD,QAAM,WAAW,SAAS,QAAQ,WAAW;AAC7C,QAAM,SAAS,SAAS,QAAQ,SAAS;AAEzC,QAAM,UAAU,KAAK,MAAM;AACzB,QAAI,aAAa,MAAM,WAAW;AAChC,aACE,SAAS,MAAM,GAAG,QAAQ,IAC1B,UACA,SAAS,MAAM,SAAS,UAAU,MAAM;AAE5C,QAAI,SAAS,SAAS;AACpB,aAAO,SAAS,QAAQ,IAAI,SAAS,UAAU;AAEjD,WAAO,UAAU;AAAA,EACnB,CAAC;AAED,QAAM,WAAW,YAAY;AAC7B,MAAI,SAAU,OAAM,GAAG,UAAU,UAAU,SAAS,MAAM;AAE1D,SAAO,EAAE,aAAa,WAAW,OAAO,GAAG,SAAS;AACtD;AAYA,sBAAsB,oBACpB,MACsB;AACtB,QAAM,EAAE,UAAU,aAAa,UAAU,IAAI;AAE7C,QAAM,UAAU,MAAM,aAAa,QAAQ;AAC3C,MAAI,YAAY,KAAM,QAAO;AAE7B,QAAM,WAAW,QAAQ,QAAQ,WAAW;AAC5C,QAAM,SAAS,QAAQ,QAAQ,SAAS;AACxC,MAAI,aAAa,MAAM,WAAW,IAAI;AACpC,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,QAAQ,MAAM,GAAG,QAAQ,EAAE,QAAQ;AAClD,QAAM,QAAQ,QAAQ,MAAM,SAAS,UAAU,MAAM,EAAE,UAAU;AACjE,QAAM,UAAU,CAAC,QAAQ,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,MAAM;AAE3D,MAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,UAAM,iBAAiB,QAAQ;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,GAAG,UAAU,UAAU,UAAU,MAAM,MAAM;AACnD,SAAO;AACT;AAEA,sBAAsB,sBAAsB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACF,GAIqB;AACnB,QAAM,SAAS,MAAM,MAAM,UAAU;AAErC,MAAI,WAAW,WAAW;AACxB;AAAA,MACE,GAAG,YAAY,MAAM,QAAG,CAAC,gCAAgC,QAAQ;AAAA,IACnE;AACA,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,QAAQ;AACrB,eAAW,GAAG,YAAY,MAAM,QAAG,CAAC,YAAY,QAAQ,GAAG;AAC3D,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAKA,sBAAsB,kBACpB,MACkB;AAClB,QAAM,UAAU,MAAM,aAAa,KAAK,QAAQ;AAChD,SACE,YAAY,QACZ,QAAQ,SAAS,KAAK,WAAW,KACjC,QAAQ,SAAS,KAAK,SAAS;AAEnC;",
4
+ "sourcesContent": ["// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\n\nexport function isInInteractiveTerminal(): boolean {\n return process.stdin.isTTY === true;\n}\n\nexport type ReadFileResult =\n | { kind: \"not-found\" }\n | { kind: \"empty\" }\n | { kind: \"content\"; content: string };\n\nexport async function attemptReadFile(\n filePath: string,\n): Promise<ReadFileResult> {\n try {\n const content = await fs.readFile(filePath, \"utf8\");\n if (content.length === 0) return { kind: \"empty\" };\n return { kind: \"content\", content };\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\")\n return { kind: \"not-found\" };\n\n // eslint-disable-next-line no-restricted-syntax\n throw error;\n }\n}\n\nexport async function readFileOrNull(filePath: string): Promise<string | null> {\n const result = await attemptReadFile(filePath);\n if (result.kind === \"content\") return result.content;\n if (result.kind === \"empty\") return \"\";\n if (result.kind === \"not-found\") return null;\n return exhaustiveCheck(result);\n}\n\n/**\n * Attempt to delete a file. Returns `true` if the file was deleted,\n * `false` if it didn't exist or the deletion failed.\n */\nexport async function safelyDeleteFile(filePath: string): Promise<boolean> {\n try {\n await fs.unlink(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Generic managed-section helpers\n//\n// Several files (AGENTS.md, CLAUDE.md) contain a Convex-managed section\n// delimited by start/end markers. These helpers provide the common logic\n// for injecting, stripping, and detecting those sections.\n// ---------------------------------------------------------------------------\n\nexport type ManagedSectionTarget = {\n filePath: string;\n startMarker: string;\n endMarker: string;\n};\n\nexport type InjectResult = {\n sectionHash: string;\n didWrite: boolean;\n};\n\nexport const iife = <T>(fn: () => T): T => fn();\n\n/**\n * Inject a managed section into a file. If the file already contains the\n * markers, the section between them is replaced. Otherwise the section is\n * appended (or the file is created). Only writes when content actually\n * changes.\n */\nexport async function injectManagedSection(\n opts: ManagedSectionTarget & { section: string },\n): Promise<InjectResult> {\n const { filePath, startMarker, endMarker, section } = opts;\n\n const existing = (await readFileOrNull(filePath)) ?? \"\";\n\n const startIdx = existing.indexOf(startMarker);\n const endIdx = existing.indexOf(endMarker);\n\n const updated = iife(() => {\n if (startIdx !== -1 && endIdx !== -1)\n return (\n existing.slice(0, startIdx) +\n section +\n existing.slice(endIdx + endMarker.length)\n );\n if (existing.length > 0)\n return existing.trimEnd() + \"\\n\\n\" + section + \"\\n\";\n\n return section + \"\\n\";\n });\n\n const didWrite = updated !== existing;\n if (didWrite) await fs.writeFile(filePath, updated, \"utf8\");\n\n return { sectionHash: hashSha256(section), didWrite };\n}\n\nexport type StripResult = \"none\" | \"section\" | \"file\";\n\n/**\n * Remove the managed section (between start/end markers) from a file.\n * If the file is empty after removal, it is deleted.\n *\n * Returns `\"none\"` if the file doesn't exist or has no markers,\n * `\"section\"` if the section was stripped, or `\"file\"` if the entire\n * file was deleted.\n */\nexport async function attemptToStripManagedSection(\n opts: ManagedSectionTarget,\n): Promise<StripResult> {\n const { filePath, startMarker, endMarker } = opts;\n\n const content = await readFileOrNull(filePath);\n if (content === null) return \"none\";\n\n const startIdx = content.indexOf(startMarker);\n const endIdx = content.indexOf(endMarker);\n if (startIdx === -1 || endIdx === -1) {\n return \"none\";\n }\n\n const before = content.slice(0, startIdx).trimEnd();\n const after = content.slice(endIdx + endMarker.length).trimStart();\n const updated = [before, after].filter(Boolean).join(\"\\n\\n\");\n\n if (!updated.trim()) {\n await safelyDeleteFile(filePath);\n return \"file\";\n }\n\n await fs.writeFile(filePath, updated + \"\\n\", \"utf8\");\n return \"section\";\n}\n\nexport function exhaustiveCheck(_param: never): never {\n // eslint-disable-next-line no-restricted-syntax\n throw new Error(\"Internal error: exhaustive check failed.\");\n}\n\nexport async function attemptToRemoveMarkdownSection({\n projectDir,\n strip,\n fileName,\n}: {\n projectDir: string;\n strip: (dir: string) => Promise<StripResult>;\n fileName: string;\n}): Promise<boolean> {\n const result = await strip(projectDir);\n\n if (result === \"section\") {\n logMessage(\n `${chalkStderr.green(\"\u2714\")} Removed Convex section from ${fileName}.`,\n );\n return true;\n }\n\n if (result === \"file\") {\n logMessage(`${chalkStderr.green(\"\u2714\")} Deleted ${fileName}.`);\n return true;\n }\n\n if (result === \"none\") return false;\n\n return exhaustiveCheck(result);\n}\n\n/**\n * Check whether a file contains a managed section (both markers present).\n */\nexport async function hasManagedSection(\n opts: ManagedSectionTarget,\n): Promise<boolean> {\n const content = await readFileOrNull(opts.filePath);\n return (\n content !== null &&\n content.includes(opts.startMarker) &&\n content.includes(opts.endMarker)\n );\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -18,6 +18,7 @@ import { loadAnonymousDeployment } from "./localDeployment/anonymous.js";
18
18
  import {
19
19
  parseDeploymentSelector
20
20
  } from "./deploymentSelector.js";
21
+ import { loadProjectLocalConfig } from "./localDeployment/filePaths.js";
21
22
  import { chalkStderr } from "chalk";
22
23
  export async function createProject(ctx, {
23
24
  teamSlug: selectedTeamSlug,
@@ -58,7 +59,7 @@ export const deploymentSelectionWithinProjectSchema = z.discriminatedUnion(
58
59
  z.object({ kind: z.literal("deploymentName"), deploymentName: z.string() }),
59
60
  z.object({ kind: z.literal("prod") }),
60
61
  z.object({ kind: z.literal("implicitProd") }),
61
- z.object({ kind: z.literal("ownDev") }),
62
+ z.object({ kind: z.literal("unspecified") }),
62
63
  z.object({
63
64
  kind: z.literal("deploymentSelector"),
64
65
  selector: z.string()
@@ -81,10 +82,10 @@ export function deploymentSelectionWithinProjectFromOptions(options) {
81
82
  if (options.implicitProd) {
82
83
  return { kind: "implicitProd" };
83
84
  }
84
- return { kind: "ownDev" };
85
+ return { kind: "unspecified" };
85
86
  }
86
87
  export async function validateDeploymentSelectionForExistingDeployment(ctx, deploymentSelection, source) {
87
- if (deploymentSelection.kind === "ownDev" || deploymentSelection.kind === "implicitProd") {
88
+ if (deploymentSelection.kind === "unspecified" || deploymentSelection.kind === "implicitProd") {
88
89
  return;
89
90
  }
90
91
  if (deploymentSelection.kind === "deploymentSelector") {
@@ -386,7 +387,7 @@ async function handleDeploymentName(ctx, deploymentName, projectSelection) {
386
387
  }
387
388
  async function fetchDeploymentCredentialsWithinCurrentProject(ctx, projectSelection, deploymentSelection) {
388
389
  switch (deploymentSelection.kind) {
389
- case "ownDev": {
390
+ case "unspecified": {
390
391
  return await handleOwnDev(ctx, projectSelection);
391
392
  }
392
393
  case "implicitProd":
@@ -440,7 +441,7 @@ async function resolveDeploymentNameByReference(ctx, teamSlug, projectSlug, refe
440
441
  return await ctx.crash({
441
442
  exitCode: 1,
442
443
  errorType: "fatal",
443
- printedMessage: `Deployment \u201C${reference}\u201D not found. To create a new deployment, use ${chalkStderr.bold(`npx convex deployment create ${reference} --team ${teamSlug} --project ${projectSlug} --select`)}`,
444
+ printedMessage: `Deployment \u201C${reference}\u201D not found. To create a new deployment, use ${chalkStderr.bold(`npx convex deployment create ${teamSlug}:${projectSlug}:${reference} --select`)}`,
444
445
  errForSentry: err
445
446
  });
446
447
  }
@@ -449,8 +450,26 @@ async function resolveDeploymentNameByReference(ctx, teamSlug, projectSlug, refe
449
450
  }
450
451
  async function handleRefInProject(ctx, selector, projectSelection) {
451
452
  switch (selector.kind) {
452
- case "dev":
453
- return await handleOwnDev(ctx, projectSelection);
453
+ case "dev": {
454
+ const access = await checkAccessToSelectedProject(ctx, projectSelection);
455
+ if (access.kind !== "hasAccess") {
456
+ return await ctx.crash({
457
+ exitCode: 1,
458
+ errorType: "fatal",
459
+ printedMessage: "You don't have access to the selected project. Run `npx convex dev` to select a different project."
460
+ });
461
+ }
462
+ const deploymentName = await resolveDefaultCloudDevDeploymentName(
463
+ ctx,
464
+ access.teamSlug,
465
+ access.projectSlug
466
+ );
467
+ return await handleDeploymentName(ctx, deploymentName, {
468
+ kind: "teamAndProjectSlugs",
469
+ teamSlug: access.teamSlug,
470
+ projectSlug: access.projectSlug
471
+ });
472
+ }
454
473
  case "prod":
455
474
  return await handleProd(ctx, projectSelection);
456
475
  case "reference": {
@@ -481,6 +500,26 @@ async function handleDeploymentSelector(ctx, selector, projectSelection) {
481
500
  parsed.deploymentName,
482
501
  projectSelection
483
502
  );
503
+ case "local": {
504
+ const localConfig = loadProjectLocalConfig(ctx);
505
+ if (localConfig === null) {
506
+ return ctx.crash({
507
+ exitCode: 1,
508
+ errorType: "fatal",
509
+ printedMessage: `No local deployment found. Run ${chalkStderr.bold("npx convex deployment create local")} to create one.`
510
+ });
511
+ }
512
+ const credentials = await loadLocalDeploymentCredentials(
513
+ ctx,
514
+ localConfig.deploymentName
515
+ );
516
+ return {
517
+ deploymentName: localConfig.deploymentName,
518
+ adminKey: credentials.adminKey,
519
+ url: credentials.deploymentUrl,
520
+ deploymentType: "local"
521
+ };
522
+ }
484
523
  case "inCurrentProject":
485
524
  return await handleRefInProject(ctx, parsed.selector, projectSelection);
486
525
  case "inProject": {
@@ -670,4 +709,28 @@ export async function getTeamsForUser(ctx) {
670
709
  );
671
710
  return teams;
672
711
  }
712
+ async function resolveDefaultCloudDevDeploymentName(ctx, teamSlug, projectSlug) {
713
+ try {
714
+ const result = await typedPlatformClient(ctx, { throw: true }).GET(
715
+ "/teams/{team_id_or_slug}/projects/{project_slug}/deployment",
716
+ {
717
+ params: {
718
+ path: { team_id_or_slug: teamSlug, project_slug: projectSlug },
719
+ query: { defaultDev: true }
720
+ }
721
+ }
722
+ );
723
+ return result.data.name;
724
+ } catch (err) {
725
+ if (err instanceof ThrowingFetchError && err.serverErrorData?.code === "DeploymentNotFound") {
726
+ return await ctx.crash({
727
+ exitCode: 1,
728
+ errorType: "fatal",
729
+ printedMessage: `You don\u2019t have a personal cloud dev deployment in this project. Run ${chalkStderr.bold("npx convex deployment create --type dev --default")} to create one.`,
730
+ errForSentry: err
731
+ });
732
+ }
733
+ return await logAndHandleFetchError(ctx, err);
734
+ }
735
+ }
673
736
  //# sourceMappingURL=api.js.map