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.
- package/CHANGELOG.md +86 -43
- package/dist/browser.bundle.js +8 -2
- package/dist/browser.bundle.js.map +3 -3
- package/dist/cjs/browser/index-node.js +3 -1
- package/dist/cjs/browser/index.js +3 -1
- package/dist/cjs/browser/index.js.map +2 -2
- package/dist/cjs/browser/query_options.js.map +2 -2
- package/dist/cjs/cli/aiFiles.js +31 -13
- package/dist/cjs/cli/aiFiles.js.map +3 -3
- package/dist/cjs/cli/codegen_templates/readme.js +14 -1
- package/dist/cjs/cli/codegen_templates/readme.js.map +2 -2
- package/dist/cjs/cli/configure.js +21 -24
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/deploy.js +7 -8
- package/dist/cjs/cli/deploy.js.map +2 -2
- package/dist/cjs/cli/deploymentCreate.js +225 -40
- package/dist/cjs/cli/deploymentCreate.js.map +3 -3
- package/dist/cjs/cli/deploymentSelect.js +14 -13
- package/dist/cjs/cli/deploymentSelect.js.map +2 -2
- package/dist/cjs/cli/dev.js +30 -11
- package/dist/cjs/cli/dev.js.map +2 -2
- package/dist/cjs/cli/docs.js +1 -1
- package/dist/cjs/cli/docs.js.map +2 -2
- package/dist/cjs/cli/init.js +1 -1
- package/dist/cjs/cli/init.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js +14 -10
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/claudemd.js +14 -10
- package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +10 -3
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/index.js +70 -86
- package/dist/cjs/cli/lib/aiFiles/index.js.map +3 -3
- package/dist/cjs/cli/lib/aiFiles/skills.js +28 -12
- package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
- package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/status.js +31 -28
- package/dist/cjs/cli/lib/aiFiles/status.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/utils.js +31 -14
- package/dist/cjs/cli/lib/aiFiles/utils.js.map +2 -2
- package/dist/cjs/cli/lib/api.js +70 -7
- package/dist/cjs/cli/lib/api.js.map +2 -2
- package/dist/cjs/cli/lib/command.js +4 -5
- package/dist/cjs/cli/lib/command.js.map +2 -2
- package/dist/cjs/cli/lib/config.js +41 -4
- package/dist/cjs/cli/lib/config.js.map +3 -3
- package/dist/cjs/cli/lib/deploy2.js +9 -26
- package/dist/cjs/cli/lib/deploy2.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
- package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
- package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
- package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
- package/dist/cjs/cli/lib/dev.js +162 -117
- package/dist/cjs/cli/lib/dev.js.map +2 -2
- package/dist/cjs/cli/lib/env.js +1 -13
- package/dist/cjs/cli/lib/env.js.map +2 -2
- package/dist/cjs/cli/lib/expiration.js +104 -0
- package/dist/cjs/cli/lib/expiration.js.map +7 -0
- package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
- package/dist/cjs/cli/lib/init.js +4 -3
- package/dist/cjs/cli/lib/init.js.map +2 -2
- package/dist/cjs/cli/lib/insights.js +1 -1
- package/dist/cjs/cli/lib/insights.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/anonymous.js +14 -7
- package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
- package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
- package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
- package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
- package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
- package/dist/cjs/cli/lib/updates.js +8 -9
- package/dist/cjs/cli/lib/updates.js.map +2 -2
- package/dist/cjs/cli/lib/usage.js +2 -1
- package/dist/cjs/cli/lib/usage.js.map +2 -2
- package/dist/cjs/cli/lib/utils/prompts.js +2 -1
- package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
- package/dist/cjs/cli/lib/utils/utils.js +46 -20
- package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react/client.js +43 -6
- package/dist/cjs/react/client.js.map +2 -2
- package/dist/cjs/react/index.js +2 -0
- package/dist/cjs/react/index.js.map +2 -2
- package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
- package/dist/cjs/server/api.js.map +2 -2
- package/dist/cjs/server/components/definition.js.map +1 -1
- package/dist/cjs/server/components/index.js +40 -4
- package/dist/cjs/server/components/index.js.map +2 -2
- package/dist/cjs/server/data_model.js.map +1 -1
- package/dist/cjs/server/impl/meta_impl.js +78 -0
- package/dist/cjs/server/impl/meta_impl.js.map +7 -0
- package/dist/cjs/server/impl/registration_impl.js +16 -11
- package/dist/cjs/server/impl/registration_impl.js.map +2 -2
- package/dist/cjs/server/index.js.map +2 -2
- package/dist/cjs/server/meta.js +17 -0
- package/dist/cjs/server/meta.js.map +7 -0
- package/dist/cjs/server/registration.js.map +1 -1
- package/dist/cjs-types/browser/index.d.ts +1 -0
- package/dist/cjs-types/browser/index.d.ts.map +1 -1
- package/dist/cjs-types/browser/query_options.d.ts +12 -9
- package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
- package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/cjs-types/cli/codegen_templates/readme.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.test.d.ts +2 -0
- package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
- package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
- package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/cjs-types/cli/dev.d.ts +3 -1
- package/dist/cjs-types/cli/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +5 -5
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +20 -18
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +6 -4
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +4 -1
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +13 -3
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/api.d.ts +3 -3
- package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/command.d.ts +2 -1
- package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/config.d.ts +17 -6
- package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
- package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
- package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
- package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -14
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +61 -52
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
- package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/env.d.ts +0 -4
- package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
- package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
- package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
- package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
- package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/react/client.d.ts +54 -2
- package/dist/cjs-types/react/client.d.ts.map +1 -1
- package/dist/cjs-types/react/index.d.ts +7 -2
- package/dist/cjs-types/react/index.d.ts.map +1 -1
- package/dist/cjs-types/react/use_query_object_options.test.d.ts +5 -0
- package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +1 -0
- package/dist/cjs-types/react/use_query_result.test.d.ts +5 -0
- package/dist/cjs-types/react/use_query_result.test.d.ts.map +1 -0
- package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
- package/dist/cjs-types/server/api.d.ts +5 -1
- package/dist/cjs-types/server/api.d.ts.map +1 -1
- package/dist/cjs-types/server/components/definition.d.ts +1 -0
- package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
- package/dist/cjs-types/server/components/index.d.ts +5 -1
- package/dist/cjs-types/server/components/index.d.ts.map +1 -1
- package/dist/cjs-types/server/data_model.d.ts +2 -1
- package/dist/cjs-types/server/data_model.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
- package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
- package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/index.d.ts +1 -0
- package/dist/cjs-types/server/index.d.ts.map +1 -1
- package/dist/cjs-types/server/meta.d.ts +72 -0
- package/dist/cjs-types/server/meta.d.ts.map +1 -0
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +1670 -1214
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/browser/index-node.js +1 -0
- package/dist/esm/browser/index.js +1 -0
- package/dist/esm/browser/index.js.map +2 -2
- package/dist/esm/browser/query_options.js.map +2 -2
- package/dist/esm/cli/aiFiles.js +33 -15
- package/dist/esm/cli/aiFiles.js.map +2 -2
- package/dist/esm/cli/codegen_templates/readme.js +14 -1
- package/dist/esm/cli/codegen_templates/readme.js.map +2 -2
- package/dist/esm/cli/configure.js +23 -26
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/deploy.js +11 -10
- package/dist/esm/cli/deploy.js.map +2 -2
- package/dist/esm/cli/deploymentCreate.js +238 -42
- package/dist/esm/cli/deploymentCreate.js.map +2 -2
- package/dist/esm/cli/deploymentSelect.js +13 -12
- package/dist/esm/cli/deploymentSelect.js.map +2 -2
- package/dist/esm/cli/dev.js +34 -13
- package/dist/esm/cli/dev.js.map +2 -2
- package/dist/esm/cli/docs.js +1 -1
- package/dist/esm/cli/docs.js.map +2 -2
- package/dist/esm/cli/init.js +2 -2
- package/dist/esm/cli/init.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/agentsmd.js +13 -9
- package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/claudemd.js +13 -9
- package/dist/esm/cli/lib/aiFiles/claudemd.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +12 -5
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/index.js +72 -89
- package/dist/esm/cli/lib/aiFiles/index.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/skills.js +29 -13
- package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/state.js +60 -0
- package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/status.js +32 -29
- package/dist/esm/cli/lib/aiFiles/status.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/utils.js +25 -10
- package/dist/esm/cli/lib/aiFiles/utils.js.map +2 -2
- package/dist/esm/cli/lib/api.js +70 -7
- package/dist/esm/cli/lib/api.js.map +2 -2
- package/dist/esm/cli/lib/command.js +4 -5
- package/dist/esm/cli/lib/command.js.map +2 -2
- package/dist/esm/cli/lib/config.js +39 -3
- package/dist/esm/cli/lib/config.js.map +2 -2
- package/dist/esm/cli/lib/deploy2.js +13 -26
- package/dist/esm/cli/lib/deploy2.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
- package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelection.js +46 -2
- package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelector.js +1 -0
- package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
- package/dist/esm/cli/lib/dev.js +162 -118
- package/dist/esm/cli/lib/dev.js.map +2 -2
- package/dist/esm/cli/lib/env.js +0 -11
- package/dist/esm/cli/lib/env.js.map +2 -2
- package/dist/esm/cli/lib/expiration.js +80 -0
- package/dist/esm/cli/lib/expiration.js.map +7 -0
- package/dist/esm/cli/lib/init.js +4 -3
- package/dist/esm/cli/lib/init.js.map +2 -2
- package/dist/esm/cli/lib/insights.js +1 -1
- package/dist/esm/cli/lib/insights.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
- package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
- package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/run.js +1 -1
- package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
- package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
- package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
- package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
- package/dist/esm/cli/lib/updates.js +11 -9
- package/dist/esm/cli/lib/updates.js.map +2 -2
- package/dist/esm/cli/lib/usage.js +2 -1
- package/dist/esm/cli/lib/usage.js.map +2 -2
- package/dist/esm/cli/lib/utils/prompts.js +2 -1
- package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
- package/dist/esm/cli/lib/utils/utils.js +45 -20
- package/dist/esm/cli/lib/utils/utils.js.map +3 -3
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/react/client.js +43 -6
- package/dist/esm/react/client.js.map +2 -2
- package/dist/esm/react/index.js +1 -0
- package/dist/esm/react/index.js.map +2 -2
- package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
- package/dist/esm/server/api.js.map +2 -2
- package/dist/esm/server/components/index.js +40 -4
- package/dist/esm/server/components/index.js.map +2 -2
- package/dist/esm/server/impl/meta_impl.js +54 -0
- package/dist/esm/server/impl/meta_impl.js.map +7 -0
- package/dist/esm/server/impl/registration_impl.js +20 -11
- package/dist/esm/server/impl/registration_impl.js.map +2 -2
- package/dist/esm/server/index.js.map +2 -2
- package/dist/esm/server/meta.js +2 -0
- package/dist/esm/server/meta.js.map +7 -0
- package/dist/esm-types/browser/index.d.ts +1 -0
- package/dist/esm-types/browser/index.d.ts.map +1 -1
- package/dist/esm-types/browser/query_options.d.ts +12 -9
- package/dist/esm-types/browser/query_options.d.ts.map +1 -1
- package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/esm-types/cli/codegen_templates/readme.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.test.d.ts +2 -0
- package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
- package/dist/esm-types/cli/deploy.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
- package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
- package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/esm-types/cli/dev.d.ts +3 -1
- package/dist/esm-types/cli/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +5 -5
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts +20 -18
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +6 -4
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
- package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts +4 -1
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +13 -3
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/api.d.ts +3 -3
- package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/command.d.ts +2 -1
- package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/config.d.ts +17 -6
- package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
- package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
- package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
- package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -14
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +61 -52
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
- package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/env.d.ts +0 -4
- package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
- package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
- package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/esm-types/cli/lib/updates.d.ts +4 -3
- package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
- package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/react/client.d.ts +54 -2
- package/dist/esm-types/react/client.d.ts.map +1 -1
- package/dist/esm-types/react/index.d.ts +7 -2
- package/dist/esm-types/react/index.d.ts.map +1 -1
- package/dist/esm-types/react/use_query_object_options.test.d.ts +5 -0
- package/dist/esm-types/react/use_query_object_options.test.d.ts.map +1 -0
- package/dist/esm-types/react/use_query_result.test.d.ts +5 -0
- package/dist/esm-types/react/use_query_result.test.d.ts.map +1 -0
- package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
- package/dist/esm-types/server/api.d.ts +5 -1
- package/dist/esm-types/server/api.d.ts.map +1 -1
- package/dist/esm-types/server/components/definition.d.ts +1 -0
- package/dist/esm-types/server/components/definition.d.ts.map +1 -1
- package/dist/esm-types/server/components/index.d.ts +5 -1
- package/dist/esm-types/server/components/index.d.ts.map +1 -1
- package/dist/esm-types/server/data_model.d.ts +2 -1
- package/dist/esm-types/server/data_model.d.ts.map +1 -1
- package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
- package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
- package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
- package/dist/esm-types/server/index.d.ts +1 -0
- package/dist/esm-types/server/index.d.ts.map +1 -1
- package/dist/esm-types/server/meta.d.ts +72 -0
- package/dist/esm-types/server/meta.d.ts.map +1 -0
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/react.bundle.js +50 -7
- package/dist/react.bundle.js.map +3 -3
- package/package.json +11 -7
- package/schemas/convex.schema.json +15 -2
- package/src/browser/index.ts +3 -0
- package/src/browser/query_options.test.ts +0 -9
- package/src/browser/query_options.ts +36 -15
- package/src/cli/aiFiles.ts +44 -14
- package/src/cli/codegen_templates/readme.ts +14 -1
- package/src/cli/configure.test.ts +138 -0
- package/src/cli/configure.ts +48 -47
- package/src/cli/deploy.ts +12 -9
- package/src/cli/deploymentCreate.test.ts +349 -14
- package/src/cli/deploymentCreate.ts +268 -41
- package/src/cli/deploymentSelect.test.ts +136 -27
- package/src/cli/deploymentSelect.ts +50 -41
- package/src/cli/deploymentSelection.test.ts +343 -35
- package/src/cli/dev.ts +49 -14
- package/src/cli/docs.ts +1 -1
- package/src/cli/init.ts +2 -2
- package/src/cli/lib/aiFiles/agentsmd.ts +15 -11
- package/src/cli/lib/aiFiles/claudemd.ts +15 -11
- package/src/cli/lib/aiFiles/guidelinesmd.test.ts +12 -2
- package/src/cli/lib/aiFiles/guidelinesmd.ts +15 -7
- package/src/cli/lib/aiFiles/index.test.ts +188 -222
- package/src/cli/lib/aiFiles/index.ts +119 -125
- package/src/cli/lib/aiFiles/integration.test.ts +112 -45
- package/src/cli/lib/aiFiles/prompt.test.ts +6 -6
- package/src/cli/lib/aiFiles/skills.ts +46 -16
- package/src/cli/lib/aiFiles/state.test.ts +280 -0
- package/src/cli/lib/aiFiles/state.ts +82 -0
- package/src/cli/lib/aiFiles/status.ts +45 -39
- package/src/cli/lib/aiFiles/utils.test.ts +50 -0
- package/src/cli/lib/aiFiles/utils.ts +38 -10
- package/src/cli/lib/api.ts +88 -7
- package/src/cli/lib/command.ts +12 -7
- package/src/cli/lib/config.test.ts +184 -7
- package/src/cli/lib/config.ts +67 -7
- package/src/cli/lib/deploy2.ts +14 -27
- package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
- package/src/cli/lib/deploymentSelection.ts +59 -6
- package/src/cli/lib/deploymentSelector.test.ts +6 -0
- package/src/cli/lib/deploymentSelector.ts +2 -0
- package/src/cli/lib/dev.ts +202 -153
- package/src/cli/lib/env.ts +0 -15
- package/src/cli/lib/expiration.test.ts +159 -0
- package/src/cli/lib/expiration.ts +124 -0
- package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
- package/src/cli/lib/init.ts +6 -2
- package/src/cli/lib/insights.ts +1 -1
- package/src/cli/lib/localDeployment/anonymous.ts +19 -9
- package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
- package/src/cli/lib/localDeployment/run.ts +1 -1
- package/src/cli/lib/localDeployment/upgrade.ts +12 -10
- package/src/cli/lib/localDeployment/utils.ts +12 -0
- package/src/cli/lib/mcp/tools/status.ts +1 -1
- package/src/cli/lib/updates.test.ts +102 -75
- package/src/cli/lib/updates.ts +14 -12
- package/src/cli/lib/usage.ts +3 -1
- package/src/cli/lib/utils/prompts.ts +2 -0
- package/src/cli/lib/utils/utils.test.ts +6 -6
- package/src/cli/lib/utils/utils.ts +66 -27
- package/src/index.ts +1 -1
- package/src/react/client.test.tsx +65 -0
- package/src/react/client.ts +129 -13
- package/src/react/index.ts +9 -1
- package/src/react/use_query_object_options.test.ts +50 -0
- package/src/react/use_query_result.test.ts +41 -0
- package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
- package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
- package/src/server/api.ts +5 -1
- package/src/server/components/definition.ts +3 -0
- package/src/server/components/index.ts +62 -5
- package/src/server/data_model.ts +2 -1
- package/src/server/impl/meta_impl.ts +74 -0
- package/src/server/impl/registration_impl.ts +21 -9
- package/src/server/index.ts +8 -0
- package/src/server/meta.ts +76 -0
- package/src/server/registration.ts +10 -0
- package/src/server/schema.test.ts +78 -1
- package/dist/cjs/cli/lib/aiFiles/config.js +0 -171
- package/dist/cjs/cli/lib/aiFiles/config.js.map +0 -7
- package/dist/cjs-types/cli/lib/aiFiles/config.d.ts +0 -46
- package/dist/cjs-types/cli/lib/aiFiles/config.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts +0 -2
- package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
- package/dist/esm/cli/lib/aiFiles/config.js +0 -135
- package/dist/esm/cli/lib/aiFiles/config.js.map +0 -7
- package/dist/esm-types/cli/lib/aiFiles/config.d.ts +0 -46
- package/dist/esm-types/cli/lib/aiFiles/config.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts +0 -2
- package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
- package/src/cli/lib/aiFiles/config.test.ts +0 -460
- package/src/cli/lib/aiFiles/config.ts +0 -188
- package/src/values/.claude/settings.local.json +0 -10
|
@@ -1,10 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
vi,
|
|
3
|
+
test,
|
|
4
|
+
expect,
|
|
5
|
+
beforeEach,
|
|
6
|
+
afterEach,
|
|
7
|
+
describe,
|
|
8
|
+
MockInstance,
|
|
9
|
+
beforeAll,
|
|
10
|
+
} from "vitest";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
import os from "os";
|
|
13
|
+
import path from "path";
|
|
2
14
|
import {
|
|
3
15
|
parseProjectConfig,
|
|
4
|
-
ProjectConfig,
|
|
5
|
-
|
|
16
|
+
type ProjectConfig,
|
|
17
|
+
ensureConvexFunctionsDir,
|
|
6
18
|
readProjectConfig,
|
|
7
19
|
resetUnknownKeyWarnings,
|
|
20
|
+
writeAiFilesConfig,
|
|
8
21
|
} from "./config.js";
|
|
9
22
|
import { Context, oneoffContext } from "../../bundler/context.js";
|
|
10
23
|
import { logFailure } from "../../bundler/log.js";
|
|
@@ -250,7 +263,7 @@ test("parseProjectConfig - top-level validation", async () => {
|
|
|
250
263
|
);
|
|
251
264
|
});
|
|
252
265
|
|
|
253
|
-
test("
|
|
266
|
+
test("ensureConvexFunctionsDir - creates functions directory", async () => {
|
|
254
267
|
let mkdirCalled = false;
|
|
255
268
|
let mkdirPath = "";
|
|
256
269
|
const testCtx = {
|
|
@@ -272,12 +285,12 @@ test("writeProjectConfig - creates functions directory", async () => {
|
|
|
272
285
|
codegen: { staticApi: false, staticDataModel: false },
|
|
273
286
|
};
|
|
274
287
|
|
|
275
|
-
await
|
|
288
|
+
await ensureConvexFunctionsDir(testCtx, config);
|
|
276
289
|
expect(mkdirCalled).toBe(true);
|
|
277
290
|
expect(mkdirPath).toMatch(/^my-functions[\\/]$/);
|
|
278
291
|
});
|
|
279
292
|
|
|
280
|
-
test("
|
|
293
|
+
test("ensureConvexFunctionsDir - does not write to convex.json", async () => {
|
|
281
294
|
let writeUtf8FileCalled = false;
|
|
282
295
|
const testCtx = {
|
|
283
296
|
...ctx,
|
|
@@ -299,7 +312,7 @@ test("writeProjectConfig - does not write to convex.json", async () => {
|
|
|
299
312
|
codegen: { staticApi: true, staticDataModel: true },
|
|
300
313
|
};
|
|
301
314
|
|
|
302
|
-
await
|
|
315
|
+
await ensureConvexFunctionsDir(testCtx, config);
|
|
303
316
|
expect(writeUtf8FileCalled).toBe(false);
|
|
304
317
|
});
|
|
305
318
|
|
|
@@ -431,6 +444,39 @@ test("parseProjectConfig - warns about unknown properties", async () => {
|
|
|
431
444
|
expect(stripVTControlCharacters(stderr5)).not.toContain("Unknown");
|
|
432
445
|
});
|
|
433
446
|
|
|
447
|
+
test("parseProjectConfig - aiFiles fields", async () => {
|
|
448
|
+
await assertParses(
|
|
449
|
+
{
|
|
450
|
+
functions: "convex/",
|
|
451
|
+
aiFiles: {
|
|
452
|
+
enabled: false,
|
|
453
|
+
disableStalenessMessage: true,
|
|
454
|
+
skills: {
|
|
455
|
+
agents: ["cursor", "windsurf"],
|
|
456
|
+
},
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
functions: "convex/",
|
|
461
|
+
aiFiles: {
|
|
462
|
+
enabled: false,
|
|
463
|
+
disableStalenessMessage: true,
|
|
464
|
+
skills: {
|
|
465
|
+
agents: ["cursor", "windsurf"],
|
|
466
|
+
},
|
|
467
|
+
},
|
|
468
|
+
codegen: {
|
|
469
|
+
staticApi: false,
|
|
470
|
+
staticDataModel: false,
|
|
471
|
+
},
|
|
472
|
+
generateCommonJSApi: false,
|
|
473
|
+
node: {
|
|
474
|
+
externalPackages: [],
|
|
475
|
+
},
|
|
476
|
+
},
|
|
477
|
+
);
|
|
478
|
+
});
|
|
479
|
+
|
|
434
480
|
// AuthKit configuration tests
|
|
435
481
|
test("parseProjectConfig - authKit basic valid configs", async () => {
|
|
436
482
|
// Basic config with no settings
|
|
@@ -850,3 +896,134 @@ test("parseProjectConfig - authKit preview and prod restrictions", async () => {
|
|
|
850
896
|
},
|
|
851
897
|
);
|
|
852
898
|
});
|
|
899
|
+
|
|
900
|
+
// ---------------------------------------------------------------------------
|
|
901
|
+
// writeAiFilesConfig
|
|
902
|
+
// ---------------------------------------------------------------------------
|
|
903
|
+
|
|
904
|
+
describe("writeAiFilesConfig", () => {
|
|
905
|
+
let tmpDir: string;
|
|
906
|
+
|
|
907
|
+
beforeEach(() => {
|
|
908
|
+
tmpDir = fs.mkdtempSync(`${os.tmpdir()}${path.sep}`);
|
|
909
|
+
});
|
|
910
|
+
|
|
911
|
+
afterEach(() => {
|
|
912
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
913
|
+
});
|
|
914
|
+
|
|
915
|
+
test("creates convex.json with $schema when file does not exist", async () => {
|
|
916
|
+
await writeAiFilesConfig({
|
|
917
|
+
projectDir: tmpDir,
|
|
918
|
+
aiFiles: { enabled: false },
|
|
919
|
+
});
|
|
920
|
+
|
|
921
|
+
const written = JSON.parse(
|
|
922
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
923
|
+
);
|
|
924
|
+
expect(written.$schema).toBe(
|
|
925
|
+
"node_modules/convex/schemas/convex.schema.json",
|
|
926
|
+
);
|
|
927
|
+
expect(written.aiFiles).toEqual({ enabled: false });
|
|
928
|
+
});
|
|
929
|
+
|
|
930
|
+
test("writes aiFiles as-is without merging sub-keys", async () => {
|
|
931
|
+
fs.writeFileSync(
|
|
932
|
+
path.join(tmpDir, "convex.json"),
|
|
933
|
+
JSON.stringify({ aiFiles: { disableStalenessMessage: true } }, null, 2),
|
|
934
|
+
"utf8",
|
|
935
|
+
);
|
|
936
|
+
|
|
937
|
+
await writeAiFilesConfig({
|
|
938
|
+
projectDir: tmpDir,
|
|
939
|
+
aiFiles: { enabled: false },
|
|
940
|
+
});
|
|
941
|
+
|
|
942
|
+
const written = JSON.parse(
|
|
943
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
944
|
+
);
|
|
945
|
+
expect(written.aiFiles).toEqual({ enabled: false });
|
|
946
|
+
});
|
|
947
|
+
|
|
948
|
+
test("preserves other existing fields in convex.json", async () => {
|
|
949
|
+
fs.writeFileSync(
|
|
950
|
+
path.join(tmpDir, "convex.json"),
|
|
951
|
+
JSON.stringify(
|
|
952
|
+
{
|
|
953
|
+
functions: "src/convex/",
|
|
954
|
+
customKey: "preserved",
|
|
955
|
+
aiFiles: { skills: { agents: ["cursor"] } },
|
|
956
|
+
},
|
|
957
|
+
null,
|
|
958
|
+
2,
|
|
959
|
+
),
|
|
960
|
+
"utf8",
|
|
961
|
+
);
|
|
962
|
+
|
|
963
|
+
await writeAiFilesConfig({
|
|
964
|
+
projectDir: tmpDir,
|
|
965
|
+
aiFiles: { enabled: false },
|
|
966
|
+
});
|
|
967
|
+
|
|
968
|
+
const written = JSON.parse(
|
|
969
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
970
|
+
);
|
|
971
|
+
expect(written.functions).toBe("src/convex/");
|
|
972
|
+
expect(written.customKey).toBe("preserved");
|
|
973
|
+
expect(written.aiFiles).toEqual({ enabled: false });
|
|
974
|
+
});
|
|
975
|
+
|
|
976
|
+
test("removes aiFiles key when undefined", async () => {
|
|
977
|
+
fs.writeFileSync(
|
|
978
|
+
path.join(tmpDir, "convex.json"),
|
|
979
|
+
JSON.stringify({ aiFiles: { enabled: false } }, null, 2),
|
|
980
|
+
"utf8",
|
|
981
|
+
);
|
|
982
|
+
|
|
983
|
+
await writeAiFilesConfig({
|
|
984
|
+
projectDir: tmpDir,
|
|
985
|
+
aiFiles: undefined,
|
|
986
|
+
});
|
|
987
|
+
|
|
988
|
+
const written = JSON.parse(
|
|
989
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
990
|
+
);
|
|
991
|
+
expect(written.aiFiles).toBeUndefined();
|
|
992
|
+
});
|
|
993
|
+
|
|
994
|
+
test("preserves existing $schema when file already has one", async () => {
|
|
995
|
+
fs.writeFileSync(
|
|
996
|
+
path.join(tmpDir, "convex.json"),
|
|
997
|
+
JSON.stringify({ $schema: "./custom-schema.json" }, null, 2),
|
|
998
|
+
"utf8",
|
|
999
|
+
);
|
|
1000
|
+
|
|
1001
|
+
await writeAiFilesConfig({
|
|
1002
|
+
projectDir: tmpDir,
|
|
1003
|
+
aiFiles: undefined,
|
|
1004
|
+
});
|
|
1005
|
+
|
|
1006
|
+
const written = JSON.parse(
|
|
1007
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
1008
|
+
);
|
|
1009
|
+
expect(written.$schema).toBe("./custom-schema.json");
|
|
1010
|
+
});
|
|
1011
|
+
|
|
1012
|
+
test("handles invalid JSON in existing convex.json gracefully", async () => {
|
|
1013
|
+
fs.writeFileSync(
|
|
1014
|
+
path.join(tmpDir, "convex.json"),
|
|
1015
|
+
"not valid json",
|
|
1016
|
+
"utf8",
|
|
1017
|
+
);
|
|
1018
|
+
|
|
1019
|
+
await writeAiFilesConfig({
|
|
1020
|
+
projectDir: tmpDir,
|
|
1021
|
+
aiFiles: { enabled: false },
|
|
1022
|
+
});
|
|
1023
|
+
|
|
1024
|
+
const written = JSON.parse(
|
|
1025
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
1026
|
+
);
|
|
1027
|
+
expect(written.aiFiles).toEqual({ enabled: false });
|
|
1028
|
+
});
|
|
1029
|
+
});
|
package/src/cli/lib/config.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { chalkStderr } from "chalk";
|
|
2
2
|
import path from "path";
|
|
3
|
+
// eslint-disable-next-line no-restricted-imports
|
|
4
|
+
import { promises as nodeFs } from "fs";
|
|
3
5
|
import { z } from "zod";
|
|
4
6
|
import { Context } from "../../bundler/context.js";
|
|
5
7
|
import { TypescriptCompiler } from "./typecheck.js";
|
|
@@ -106,6 +108,12 @@ export interface ProjectConfig {
|
|
|
106
108
|
enabled?: boolean;
|
|
107
109
|
// @deprecated use `enabled` instead.
|
|
108
110
|
disableStalenessMessage?: boolean;
|
|
111
|
+
// Configuration for agent skills installed by Convex.
|
|
112
|
+
skills?: {
|
|
113
|
+
// List of agents to install skills for (e.g. 'claude-code', 'codex', 'cursor').
|
|
114
|
+
// Defaults to ['claude-code', 'codex'].
|
|
115
|
+
agents?: string[];
|
|
116
|
+
};
|
|
109
117
|
};
|
|
110
118
|
}
|
|
111
119
|
|
|
@@ -133,9 +141,9 @@ export function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {
|
|
|
133
141
|
return projectConfig.codegen.fileType === "ts";
|
|
134
142
|
}
|
|
135
143
|
|
|
136
|
-
/** Whether the new component API import style should be used
|
|
144
|
+
/** Whether the new component API import style should be used */
|
|
137
145
|
export function usesComponentApiImports(projectConfig: ProjectConfig): boolean {
|
|
138
|
-
return projectConfig.codegen.legacyComponentApi
|
|
146
|
+
return projectConfig.codegen.legacyComponentApi !== true;
|
|
139
147
|
}
|
|
140
148
|
|
|
141
149
|
/**
|
|
@@ -293,6 +301,11 @@ const BundlerSchema = z.object({
|
|
|
293
301
|
const AiFilesSchema = z.object({
|
|
294
302
|
enabled: z.boolean().optional(),
|
|
295
303
|
disableStalenessMessage: z.boolean().optional(),
|
|
304
|
+
skills: z
|
|
305
|
+
.object({
|
|
306
|
+
agents: z.array(z.string()).optional(),
|
|
307
|
+
})
|
|
308
|
+
.optional(),
|
|
296
309
|
});
|
|
297
310
|
|
|
298
311
|
const refineToObject = <T extends z.ZodTypeAny>(schema: T) =>
|
|
@@ -744,12 +757,10 @@ export async function readConfig(
|
|
|
744
757
|
/**
|
|
745
758
|
* Ensure the functions directory exists.
|
|
746
759
|
*
|
|
747
|
-
* Note:
|
|
748
|
-
*
|
|
749
|
-
* users to maintain their preferred formatting and any comments they may add
|
|
750
|
-
* (if we later support JSONC parsing).
|
|
760
|
+
* Note: convex.json is treated as user-owned and is not modified by the CLI.
|
|
761
|
+
* Use writeAiFilesConfig() to explicitly patch the aiFiles section.
|
|
751
762
|
*/
|
|
752
|
-
export async function
|
|
763
|
+
export async function ensureConvexFunctionsDir(
|
|
753
764
|
ctx: Context,
|
|
754
765
|
projectConfig: ProjectConfig,
|
|
755
766
|
) {
|
|
@@ -1007,3 +1018,52 @@ export async function handlePushConfigError(
|
|
|
1007
1018
|
logFailure(defaultMessage);
|
|
1008
1019
|
return await logAndHandleFetchError(ctx, error);
|
|
1009
1020
|
}
|
|
1021
|
+
|
|
1022
|
+
export type AiFilesProjectConfig = NonNullable<ProjectConfig["aiFiles"]>;
|
|
1023
|
+
|
|
1024
|
+
function tryParseJson(raw: string): unknown {
|
|
1025
|
+
try {
|
|
1026
|
+
return JSON.parse(raw);
|
|
1027
|
+
} catch {
|
|
1028
|
+
return {};
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
function toRecord(val: unknown): Record<string, unknown> {
|
|
1033
|
+
if (val !== null && typeof val === "object" && !Array.isArray(val))
|
|
1034
|
+
return val as Record<string, unknown>;
|
|
1035
|
+
return {};
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
/**
|
|
1039
|
+
* Write the `aiFiles` section of `convex.json`, preserving all other keys.
|
|
1040
|
+
* Writes the given object as-is with no merging or default logic.
|
|
1041
|
+
* If `aiFiles` is undefined, the key is removed from the file.
|
|
1042
|
+
*/
|
|
1043
|
+
export async function writeAiFilesConfig({
|
|
1044
|
+
projectDir,
|
|
1045
|
+
aiFiles,
|
|
1046
|
+
}: {
|
|
1047
|
+
projectDir: string;
|
|
1048
|
+
aiFiles: AiFilesProjectConfig | undefined;
|
|
1049
|
+
}): Promise<void> {
|
|
1050
|
+
const filePath = path.join(projectDir, "convex.json");
|
|
1051
|
+
const raw = await nodeFs.readFile(filePath, "utf8").catch(() => null);
|
|
1052
|
+
const base = toRecord(raw !== null ? tryParseJson(raw) : {});
|
|
1053
|
+
|
|
1054
|
+
const { $schema, aiFiles: _existing, ...rest } = base;
|
|
1055
|
+
|
|
1056
|
+
const hasContent = aiFiles !== undefined && Object.keys(aiFiles).length > 0;
|
|
1057
|
+
|
|
1058
|
+
const next: Record<string, unknown> = {
|
|
1059
|
+
$schema: $schema ?? "node_modules/convex/schemas/convex.schema.json",
|
|
1060
|
+
...rest,
|
|
1061
|
+
...(hasContent ? { aiFiles } : {}),
|
|
1062
|
+
};
|
|
1063
|
+
|
|
1064
|
+
await nodeFs.writeFile(
|
|
1065
|
+
filePath,
|
|
1066
|
+
JSON.stringify(next, null, 2) + "\n",
|
|
1067
|
+
"utf8",
|
|
1068
|
+
);
|
|
1069
|
+
}
|
package/src/cli/lib/deploy2.ts
CHANGED
|
@@ -8,7 +8,11 @@ import {
|
|
|
8
8
|
showSpinner,
|
|
9
9
|
} from "../../bundler/log.js";
|
|
10
10
|
import { spawnSync } from "child_process";
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
deploymentFetch,
|
|
13
|
+
logAndHandleFetchError,
|
|
14
|
+
typedDeploymentClient,
|
|
15
|
+
} from "./utils/utils.js";
|
|
12
16
|
import {
|
|
13
17
|
EvaluatePushResponse,
|
|
14
18
|
evaluatePushResponse,
|
|
@@ -31,7 +35,6 @@ import { PushOptions } from "./components.js";
|
|
|
31
35
|
import { DeploymentType } from "./api.js";
|
|
32
36
|
import { runPush } from "./components.js";
|
|
33
37
|
import { suggestedEnvVarNames } from "./envvars.js";
|
|
34
|
-
import { runSystemQuery } from "./run.js";
|
|
35
38
|
import {
|
|
36
39
|
handlePushConfigError,
|
|
37
40
|
readProjectConfig,
|
|
@@ -40,7 +43,6 @@ import {
|
|
|
40
43
|
import { deploymentDashboardUrlPage } from "./dashboard.js";
|
|
41
44
|
import { addProgressLinkIfSlow } from "./indexes.js";
|
|
42
45
|
import { ensureAuthKitProvisionedBeforeBuild } from "./workos/workos.js";
|
|
43
|
-
import { fetchDeploymentCanonicalSiteUrl } from "./env.js";
|
|
44
46
|
|
|
45
47
|
const brotli = promisify(zlib.brotliCompress);
|
|
46
48
|
|
|
@@ -485,14 +487,10 @@ export async function runCommand(
|
|
|
485
487
|
deploymentUrl: options.url,
|
|
486
488
|
adminKey: options.adminKey,
|
|
487
489
|
};
|
|
488
|
-
const
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
);
|
|
492
|
-
const canonicalSiteUrl = await fetchDeploymentCanonicalSiteUrl(
|
|
493
|
-
ctx,
|
|
494
|
-
deployment,
|
|
495
|
-
);
|
|
490
|
+
const {
|
|
491
|
+
convexCloudUrl: canonicalCloudUrl,
|
|
492
|
+
convexSiteUrl: canonicalSiteUrl,
|
|
493
|
+
} = await fetchDeploymentCanonicalUrls(ctx, deployment);
|
|
496
494
|
|
|
497
495
|
const env = { ...process.env };
|
|
498
496
|
env[urlVar] = canonicalCloudUrl;
|
|
@@ -517,22 +515,11 @@ export async function runCommand(
|
|
|
517
515
|
);
|
|
518
516
|
}
|
|
519
517
|
|
|
520
|
-
export async function
|
|
518
|
+
export async function fetchDeploymentCanonicalUrls(
|
|
521
519
|
ctx: Context,
|
|
522
520
|
options: { deploymentUrl: string; adminKey: string },
|
|
523
|
-
): Promise<string> {
|
|
524
|
-
const
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
componentPath: undefined,
|
|
528
|
-
args: {},
|
|
529
|
-
});
|
|
530
|
-
if (typeof result !== "string") {
|
|
531
|
-
return await ctx.crash({
|
|
532
|
-
exitCode: 1,
|
|
533
|
-
errorType: "invalid filesystem or env vars",
|
|
534
|
-
printedMessage: "Invalid process.env.CONVEX_CLOUD_URL",
|
|
535
|
-
});
|
|
536
|
-
}
|
|
537
|
-
return result;
|
|
521
|
+
): Promise<{ convexCloudUrl: string; convexSiteUrl: string }> {
|
|
522
|
+
const client = typedDeploymentClient(ctx, options);
|
|
523
|
+
const result = await client.GET("/get_canonical_urls");
|
|
524
|
+
return result.data!;
|
|
538
525
|
}
|
|
@@ -12,7 +12,10 @@ export const componentArgumentValidator = looseObject({
|
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
export const componentDefinitionType = z.union([
|
|
15
|
-
looseObject({
|
|
15
|
+
looseObject({
|
|
16
|
+
type: z.literal("app"),
|
|
17
|
+
httpPrefix: z.string().optional(),
|
|
18
|
+
}),
|
|
16
19
|
looseObject({
|
|
17
20
|
type: z.literal("childComponent"),
|
|
18
21
|
name: identifier,
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
deploymentSelectionWithinProjectFromOptions,
|
|
9
9
|
DeploymentType,
|
|
10
10
|
fetchTeamAndProjectForKey,
|
|
11
|
+
getTeamAndProjectSlugForDeployment,
|
|
11
12
|
validateDeploymentSelectionForExistingDeployment,
|
|
12
13
|
} from "./api.js";
|
|
13
14
|
import {
|
|
@@ -21,6 +22,8 @@ import {
|
|
|
21
22
|
stripDeploymentTypePrefix,
|
|
22
23
|
} from "./deployment.js";
|
|
23
24
|
import { parseDeploymentSelector } from "./deploymentSelector.js";
|
|
25
|
+
import { loadProjectLocalConfig } from "./localDeployment/filePaths.js";
|
|
26
|
+
import { chalkStderr } from "chalk";
|
|
24
27
|
import { getBuildEnvironment } from "./envvars.js";
|
|
25
28
|
import { readGlobalConfig } from "./utils/globalConfig.js";
|
|
26
29
|
import {
|
|
@@ -381,9 +384,9 @@ async function _getDeploymentSelection(
|
|
|
381
384
|
};
|
|
382
385
|
}
|
|
383
386
|
|
|
384
|
-
// If --deployment is a fully qualified selector (team:project:ref
|
|
385
|
-
// deployment name), we don't need a current project context
|
|
386
|
-
// before env var resolution.
|
|
387
|
+
// If --deployment is a fully qualified selector (team:project:ref,
|
|
388
|
+
// deployment name, or "local"), we don't need a current project context
|
|
389
|
+
// → handle it before env var resolution.
|
|
387
390
|
if (cliArgs.deployment !== undefined) {
|
|
388
391
|
const parsed = parseDeploymentSelector(cliArgs.deployment);
|
|
389
392
|
if (parsed.kind === "inTeamProject") {
|
|
@@ -414,6 +417,25 @@ async function _getDeploymentSelection(
|
|
|
414
417
|
},
|
|
415
418
|
};
|
|
416
419
|
}
|
|
420
|
+
if (parsed.kind === "local") {
|
|
421
|
+
const localConfig = loadProjectLocalConfig(ctx);
|
|
422
|
+
if (localConfig !== null) {
|
|
423
|
+
return {
|
|
424
|
+
kind: "deploymentWithinProject",
|
|
425
|
+
targetProject: {
|
|
426
|
+
kind: "deploymentName",
|
|
427
|
+
deploymentName: localConfig.deploymentName,
|
|
428
|
+
deploymentType: "local",
|
|
429
|
+
},
|
|
430
|
+
selectionWithinProject,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
return ctx.crash({
|
|
434
|
+
exitCode: 1,
|
|
435
|
+
errorType: "fatal",
|
|
436
|
+
printedMessage: `No local deployment found. Run ${chalkStderr.bold("npx convex deployment create local")} to create one.`,
|
|
437
|
+
});
|
|
438
|
+
}
|
|
417
439
|
}
|
|
418
440
|
|
|
419
441
|
if (cliArgs.envFile !== undefined) {
|
|
@@ -467,10 +489,12 @@ async function _getDeploymentSelection(
|
|
|
467
489
|
}
|
|
468
490
|
// none of these?
|
|
469
491
|
|
|
470
|
-
// Check if they're logged in
|
|
471
492
|
const isLoggedIn = ctx.bigBrainAuth() !== null;
|
|
472
493
|
if (
|
|
473
|
-
(!isLoggedIn ||
|
|
494
|
+
(!isLoggedIn ||
|
|
495
|
+
process.env.CONVEX_AGENT_MODE === "anonymous" ||
|
|
496
|
+
!process.stdin.isTTY) &&
|
|
497
|
+
!cliArgs.implicitProd &&
|
|
474
498
|
shouldAllowAnonymousDevelopment()
|
|
475
499
|
) {
|
|
476
500
|
return {
|
|
@@ -654,6 +678,16 @@ async function getDeploymentSelectionFromEnv(
|
|
|
654
678
|
};
|
|
655
679
|
}
|
|
656
680
|
|
|
681
|
+
// Overwrite the selection within project
|
|
682
|
+
const newSelectionWithinProject =
|
|
683
|
+
selectionWithinProject.kind === "unspecified" &&
|
|
684
|
+
// Fetching local deployment credentials uses the "unspecified" code path
|
|
685
|
+
targetDeploymentType !== "local"
|
|
686
|
+
? {
|
|
687
|
+
kind: "deploymentName" as const,
|
|
688
|
+
deploymentName: targetDeploymentName,
|
|
689
|
+
}
|
|
690
|
+
: selectionWithinProject;
|
|
657
691
|
return {
|
|
658
692
|
kind: "success",
|
|
659
693
|
metadata: {
|
|
@@ -663,7 +697,7 @@ async function getDeploymentSelectionFromEnv(
|
|
|
663
697
|
deploymentName: targetDeploymentName,
|
|
664
698
|
deploymentType: targetDeploymentType,
|
|
665
699
|
},
|
|
666
|
-
selectionWithinProject,
|
|
700
|
+
selectionWithinProject: newSelectionWithinProject,
|
|
667
701
|
},
|
|
668
702
|
};
|
|
669
703
|
}
|
|
@@ -753,6 +787,25 @@ export async function getProjectDetails(
|
|
|
753
787
|
): Promise<PlatformProjectDetails> {
|
|
754
788
|
switch (projectSelection.kind) {
|
|
755
789
|
case "deploymentName": {
|
|
790
|
+
if (projectSelection.deploymentType === "local") {
|
|
791
|
+
const result = await getTeamAndProjectSlugForDeployment(ctx, {
|
|
792
|
+
deploymentName: projectSelection.deploymentName,
|
|
793
|
+
});
|
|
794
|
+
if (result === null) {
|
|
795
|
+
return ctx.crash({
|
|
796
|
+
exitCode: 1,
|
|
797
|
+
errorType: "fatal",
|
|
798
|
+
printedMessage:
|
|
799
|
+
"You don't have access to the selected project. Run `npx convex dev` to select a different project.",
|
|
800
|
+
});
|
|
801
|
+
}
|
|
802
|
+
return await getProjectDetails(ctx, {
|
|
803
|
+
kind: "teamAndProjectSlugs",
|
|
804
|
+
teamSlug: result.teamSlug,
|
|
805
|
+
projectSlug: result.projectSlug,
|
|
806
|
+
});
|
|
807
|
+
}
|
|
808
|
+
|
|
756
809
|
const deployment = (
|
|
757
810
|
await typedPlatformClient(ctx).GET("/deployments/{deployment_name}", {
|
|
758
811
|
params: {
|
|
@@ -16,6 +16,12 @@ describe("parseDeploymentSelector", () => {
|
|
|
16
16
|
});
|
|
17
17
|
});
|
|
18
18
|
|
|
19
|
+
test('"local"', () => {
|
|
20
|
+
expect(parseDeploymentSelector("local")).toEqual({
|
|
21
|
+
kind: "local",
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
|
|
19
25
|
test('"tall-forest-123"', () => {
|
|
20
26
|
expect(parseDeploymentSelector("tall-forest-123")).toEqual({
|
|
21
27
|
kind: "deploymentName",
|
|
@@ -5,6 +5,7 @@ export type InProjectSelector =
|
|
|
5
5
|
|
|
6
6
|
export type ParsedDeploymentSelector =
|
|
7
7
|
| { kind: "deploymentName"; deploymentName: string }
|
|
8
|
+
| { kind: "local" }
|
|
8
9
|
| { kind: "inCurrentProject"; selector: InProjectSelector }
|
|
9
10
|
| { kind: "inProject"; projectSlug: string; selector: InProjectSelector }
|
|
10
11
|
| {
|
|
@@ -26,6 +27,7 @@ function parseInProjectSelector(s: string): InProjectSelector {
|
|
|
26
27
|
export function parseDeploymentSelector(
|
|
27
28
|
selector: string,
|
|
28
29
|
): ParsedDeploymentSelector {
|
|
30
|
+
if (selector === "local") return { kind: "local" };
|
|
29
31
|
if (/^[a-z]+-[a-z]+-[0-9]+$/.test(selector)) {
|
|
30
32
|
return { kind: "deploymentName", deploymentName: selector };
|
|
31
33
|
}
|