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
|
@@ -39,29 +39,30 @@ var import_claudemd = require("../../codegen_templates/claudemd.js");
|
|
|
39
39
|
var import_versionApi = require("../versionApi.js");
|
|
40
40
|
var import_hash = require("../utils/hash.js");
|
|
41
41
|
var import_paths = require("./paths.js");
|
|
42
|
-
var
|
|
42
|
+
var import_state = require("./state.js");
|
|
43
|
+
var import_index = require("./index.js");
|
|
43
44
|
var import_utils = require("./utils.js");
|
|
44
45
|
function logGuidelinesStatus({
|
|
45
46
|
guidelinesFile,
|
|
46
47
|
guidelinesRelPath,
|
|
47
|
-
|
|
48
|
+
state,
|
|
48
49
|
canonicalGuidelinesHash,
|
|
49
50
|
networkAvailable
|
|
50
51
|
}) {
|
|
51
|
-
if (guidelinesFile === null) {
|
|
52
|
+
if (guidelinesFile === null || guidelinesFile === "") {
|
|
52
53
|
(0, import_log.logMessage)(
|
|
53
54
|
` ${import_chalk.chalkStderr.yellow("\u26A0")} ${guidelinesRelPath}: not on disk \u2014 run ${import_chalk.chalkStderr.bold("npx convex ai-files install")} to reinstall`
|
|
54
55
|
);
|
|
55
56
|
return;
|
|
56
57
|
}
|
|
57
|
-
const isLocallyModified =
|
|
58
|
+
const isLocallyModified = state.guidelinesHash !== null && (0, import_hash.hashSha256)(guidelinesFile) !== state.guidelinesHash;
|
|
58
59
|
if (isLocallyModified) {
|
|
59
60
|
(0, import_log.logMessage)(
|
|
60
61
|
` ${import_chalk.chalkStderr.yellow("\u26A0")} ${guidelinesRelPath}: installed, modified locally (changes will be overwritten on next update)`
|
|
61
62
|
);
|
|
62
63
|
return;
|
|
63
64
|
}
|
|
64
|
-
const isOutOfDate = networkAvailable && canonicalGuidelinesHash !== null &&
|
|
65
|
+
const isOutOfDate = networkAvailable && canonicalGuidelinesHash !== null && state.guidelinesHash !== null && state.guidelinesHash !== canonicalGuidelinesHash;
|
|
65
66
|
if (isOutOfDate) {
|
|
66
67
|
(0, import_log.logMessage)(
|
|
67
68
|
` ${import_chalk.chalkStderr.yellow("\u26A0")} ${guidelinesRelPath}: installed, out of date \u2014 run ${import_chalk.chalkStderr.bold("npx convex ai-files update")}`
|
|
@@ -74,7 +75,7 @@ function logGuidelinesStatus({
|
|
|
74
75
|
}
|
|
75
76
|
function logAgentsMdStatus({
|
|
76
77
|
agentsContent,
|
|
77
|
-
|
|
78
|
+
state,
|
|
78
79
|
convexDirName
|
|
79
80
|
}) {
|
|
80
81
|
const hasSection = agentsContent !== null && agentsContent.includes(import_agentsmd.AGENTS_MD_START_MARKER) && agentsContent.includes(import_agentsmd.AGENTS_MD_END_MARKER);
|
|
@@ -85,7 +86,7 @@ function logAgentsMdStatus({
|
|
|
85
86
|
return;
|
|
86
87
|
}
|
|
87
88
|
const currentHash = (0, import_hash.hashSha256)((0, import_agentsmd.agentsMdConvexSection)(convexDirName));
|
|
88
|
-
if (
|
|
89
|
+
if (state.agentsMdSectionHash !== null && state.agentsMdSectionHash !== currentHash) {
|
|
89
90
|
(0, import_log.logMessage)(
|
|
90
91
|
` ${import_chalk.chalkStderr.yellow("\u26A0")} AGENTS.md: Convex section out of date \u2014 run ${import_chalk.chalkStderr.bold("npx convex ai-files update")}`
|
|
91
92
|
);
|
|
@@ -97,7 +98,7 @@ function logAgentsMdStatus({
|
|
|
97
98
|
}
|
|
98
99
|
function logClaudeMdStatus({
|
|
99
100
|
claudeContent,
|
|
100
|
-
|
|
101
|
+
state,
|
|
101
102
|
convexDirName
|
|
102
103
|
}) {
|
|
103
104
|
const hasSection = claudeContent !== null && claudeContent.includes(import_claudemd.CLAUDE_MD_START_MARKER) && claudeContent.includes(import_claudemd.CLAUDE_MD_END_MARKER);
|
|
@@ -114,7 +115,7 @@ function logClaudeMdStatus({
|
|
|
114
115
|
return;
|
|
115
116
|
}
|
|
116
117
|
const currentHash = (0, import_hash.hashSha256)((0, import_claudemd.claudeMdConvexSection)(convexDirName));
|
|
117
|
-
if (
|
|
118
|
+
if (state.claudeMdHash !== null && state.claudeMdHash !== currentHash) {
|
|
118
119
|
(0, import_log.logMessage)(
|
|
119
120
|
` ${import_chalk.chalkStderr.yellow("\u26A0")} CLAUDE.md: Convex section out of date - run ${import_chalk.chalkStderr.bold("npx convex ai-files update")}`
|
|
120
121
|
);
|
|
@@ -125,18 +126,18 @@ function logClaudeMdStatus({
|
|
|
125
126
|
}
|
|
126
127
|
}
|
|
127
128
|
function logSkillsStatus({
|
|
128
|
-
|
|
129
|
+
state,
|
|
129
130
|
canonicalAgentSkillsSha,
|
|
130
131
|
networkAvailable
|
|
131
132
|
}) {
|
|
132
|
-
if (
|
|
133
|
+
if (state.installedSkillNames.length === 0) {
|
|
133
134
|
(0, import_log.logMessage)(
|
|
134
135
|
` ${import_chalk.chalkStderr.yellow("\u26A0")} Agent skills: not installed \u2014 run ${import_chalk.chalkStderr.bold("npx convex ai-files install")} to install`
|
|
135
136
|
);
|
|
136
137
|
return;
|
|
137
138
|
}
|
|
138
|
-
const skillsList =
|
|
139
|
-
const isStale = networkAvailable && canonicalAgentSkillsSha !== null &&
|
|
139
|
+
const skillsList = state.installedSkillNames.join(", ");
|
|
140
|
+
const isStale = networkAvailable && canonicalAgentSkillsSha !== null && state.agentSkillsSha !== null && state.agentSkillsSha !== canonicalAgentSkillsSha;
|
|
140
141
|
if (isStale) {
|
|
141
142
|
(0, import_log.logMessage)(
|
|
142
143
|
` ${import_chalk.chalkStderr.yellow("\u26A0")} Agent skills: ${skillsList} \u2014 out of date, run ${import_chalk.chalkStderr.bold("npx convex ai-files update")}`
|
|
@@ -149,34 +150,36 @@ function logSkillsStatus({
|
|
|
149
150
|
}
|
|
150
151
|
async function statusAiFiles({
|
|
151
152
|
projectDir,
|
|
152
|
-
convexDir
|
|
153
|
+
convexDir,
|
|
154
|
+
aiFilesConfig
|
|
153
155
|
}) {
|
|
154
156
|
const convexDirName = import_path.default.relative(projectDir, convexDir);
|
|
155
157
|
const guidelinesRelPath = import_path.default.relative(
|
|
156
158
|
projectDir,
|
|
157
159
|
(0, import_paths.guidelinesPathForConvexDir)(convexDir)
|
|
158
160
|
);
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
(0, import_log.logMessage)(`Convex AI files: ${import_chalk.chalkStderr.yellow("not installed")}`);
|
|
161
|
+
if ((0, import_index.isAiFilesDisabled)(aiFilesConfig)) {
|
|
162
|
+
(0, import_log.logMessage)(`Convex AI files: ${import_chalk.chalkStderr.yellow("disabled")}`);
|
|
162
163
|
(0, import_log.logMessage)(
|
|
163
|
-
` Run ${import_chalk.chalkStderr.bold("npx convex ai-files
|
|
164
|
+
` Run ${import_chalk.chalkStderr.bold("npx convex ai-files enable")} to re-enable.`
|
|
164
165
|
);
|
|
165
166
|
return;
|
|
166
167
|
}
|
|
167
|
-
|
|
168
|
-
|
|
168
|
+
const stateResult = await (0, import_state.attemptReadAiState)(convexDir);
|
|
169
|
+
if (stateResult.kind !== "ok") {
|
|
170
|
+
(0, import_log.logMessage)(`Convex AI files: ${import_chalk.chalkStderr.yellow("not installed")}`);
|
|
169
171
|
(0, import_log.logMessage)(
|
|
170
|
-
`
|
|
172
|
+
`Run ${import_chalk.chalkStderr.bold("npx convex ai-files install")} to get started.`
|
|
171
173
|
);
|
|
172
174
|
return;
|
|
173
175
|
}
|
|
176
|
+
const { state } = stateResult;
|
|
174
177
|
(0, import_log.logMessage)(`Convex AI files: ${import_chalk.chalkStderr.green("enabled")}`);
|
|
175
178
|
const [versionData, guidelinesFile, agentsContent, claudeContent] = await Promise.all([
|
|
176
179
|
(0, import_versionApi.getVersion)(),
|
|
177
|
-
(0, import_utils.
|
|
178
|
-
(0, import_utils.
|
|
179
|
-
(0, import_utils.
|
|
180
|
+
(0, import_utils.readFileOrNull)((0, import_paths.guidelinesPathForConvexDir)(convexDir)),
|
|
181
|
+
(0, import_utils.readFileOrNull)((0, import_paths.agentsMdPath)(projectDir)),
|
|
182
|
+
(0, import_utils.readFileOrNull)((0, import_paths.claudeMdPath)(projectDir))
|
|
180
183
|
]);
|
|
181
184
|
const networkAvailable = versionData.kind === "ok";
|
|
182
185
|
const canonicalGuidelinesHash = networkAvailable ? versionData.data.guidelinesHash : null;
|
|
@@ -184,12 +187,12 @@ async function statusAiFiles({
|
|
|
184
187
|
logGuidelinesStatus({
|
|
185
188
|
guidelinesFile,
|
|
186
189
|
guidelinesRelPath,
|
|
187
|
-
|
|
190
|
+
state,
|
|
188
191
|
canonicalGuidelinesHash,
|
|
189
192
|
networkAvailable
|
|
190
193
|
});
|
|
191
|
-
logAgentsMdStatus({ agentsContent,
|
|
192
|
-
logClaudeMdStatus({ claudeContent,
|
|
193
|
-
logSkillsStatus({
|
|
194
|
+
logAgentsMdStatus({ agentsContent, state, convexDirName });
|
|
195
|
+
logClaudeMdStatus({ claudeContent, state, convexDirName });
|
|
196
|
+
logSkillsStatus({ state, canonicalAgentSkillsSha, networkAvailable });
|
|
194
197
|
}
|
|
195
198
|
//# 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
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,mBAA4B;AAC5B,iBAA2B;AAC3B,sBAIO;AACP,sBAIO;AACP,wBAA2B;AAC3B,kBAA2B;AAC3B,mBAKO;AACP,
|
|
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": ["path"]
|
|
7
7
|
}
|
|
@@ -18,14 +18,16 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var utils_exports = {};
|
|
20
20
|
__export(utils_exports, {
|
|
21
|
+
attemptReadFile: () => attemptReadFile,
|
|
22
|
+
attemptToRemoveMarkdownSection: () => attemptToRemoveMarkdownSection,
|
|
23
|
+
attemptToStripManagedSection: () => attemptToStripManagedSection,
|
|
24
|
+
exhaustiveCheck: () => exhaustiveCheck,
|
|
21
25
|
hasManagedSection: () => hasManagedSection,
|
|
22
26
|
iife: () => iife,
|
|
23
27
|
injectManagedSection: () => injectManagedSection,
|
|
24
28
|
isInInteractiveTerminal: () => isInInteractiveTerminal,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
safelyDeleteFile: () => safelyDeleteFile,
|
|
28
|
-
stripManagedSection: () => stripManagedSection
|
|
29
|
+
readFileOrNull: () => readFileOrNull,
|
|
30
|
+
safelyDeleteFile: () => safelyDeleteFile
|
|
29
31
|
});
|
|
30
32
|
module.exports = __toCommonJS(utils_exports);
|
|
31
33
|
var import_fs = require("fs");
|
|
@@ -35,13 +37,24 @@ var import_hash = require("../utils/hash.js");
|
|
|
35
37
|
function isInInteractiveTerminal() {
|
|
36
38
|
return process.stdin.isTTY === true;
|
|
37
39
|
}
|
|
38
|
-
async function
|
|
40
|
+
async function attemptReadFile(filePath) {
|
|
39
41
|
try {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return
|
|
42
|
+
const content = await import_fs.promises.readFile(filePath, "utf8");
|
|
43
|
+
if (content.length === 0) return { kind: "empty" };
|
|
44
|
+
return { kind: "content", content };
|
|
45
|
+
} catch (error) {
|
|
46
|
+
if (error.code === "ENOENT")
|
|
47
|
+
return { kind: "not-found" };
|
|
48
|
+
throw error;
|
|
43
49
|
}
|
|
44
50
|
}
|
|
51
|
+
async function readFileOrNull(filePath) {
|
|
52
|
+
const result = await attemptReadFile(filePath);
|
|
53
|
+
if (result.kind === "content") return result.content;
|
|
54
|
+
if (result.kind === "empty") return "";
|
|
55
|
+
if (result.kind === "not-found") return null;
|
|
56
|
+
return exhaustiveCheck(result);
|
|
57
|
+
}
|
|
45
58
|
async function safelyDeleteFile(filePath) {
|
|
46
59
|
try {
|
|
47
60
|
await import_fs.promises.unlink(filePath);
|
|
@@ -53,7 +66,7 @@ async function safelyDeleteFile(filePath) {
|
|
|
53
66
|
const iife = (fn) => fn();
|
|
54
67
|
async function injectManagedSection(opts) {
|
|
55
68
|
const { filePath, startMarker, endMarker, section } = opts;
|
|
56
|
-
const existing = await
|
|
69
|
+
const existing = await readFileOrNull(filePath) ?? "";
|
|
57
70
|
const startIdx = existing.indexOf(startMarker);
|
|
58
71
|
const endIdx = existing.indexOf(endMarker);
|
|
59
72
|
const updated = iife(() => {
|
|
@@ -67,9 +80,9 @@ async function injectManagedSection(opts) {
|
|
|
67
80
|
if (didWrite) await import_fs.promises.writeFile(filePath, updated, "utf8");
|
|
68
81
|
return { sectionHash: (0, import_hash.hashSha256)(section), didWrite };
|
|
69
82
|
}
|
|
70
|
-
async function
|
|
83
|
+
async function attemptToStripManagedSection(opts) {
|
|
71
84
|
const { filePath, startMarker, endMarker } = opts;
|
|
72
|
-
const content = await
|
|
85
|
+
const content = await readFileOrNull(filePath);
|
|
73
86
|
if (content === null) return "none";
|
|
74
87
|
const startIdx = content.indexOf(startMarker);
|
|
75
88
|
const endIdx = content.indexOf(endMarker);
|
|
@@ -86,7 +99,10 @@ async function stripManagedSection(opts) {
|
|
|
86
99
|
await import_fs.promises.writeFile(filePath, updated + "\n", "utf8");
|
|
87
100
|
return "section";
|
|
88
101
|
}
|
|
89
|
-
|
|
102
|
+
function exhaustiveCheck(_param) {
|
|
103
|
+
throw new Error("Internal error: exhaustive check failed.");
|
|
104
|
+
}
|
|
105
|
+
async function attemptToRemoveMarkdownSection({
|
|
90
106
|
projectDir,
|
|
91
107
|
strip,
|
|
92
108
|
fileName
|
|
@@ -102,10 +118,11 @@ async function removeMarkdownSection({
|
|
|
102
118
|
(0, import_log.logMessage)(`${import_chalk.chalkStderr.green("\u2714")} Deleted ${fileName}.`);
|
|
103
119
|
return true;
|
|
104
120
|
}
|
|
105
|
-
return false;
|
|
121
|
+
if (result === "none") return false;
|
|
122
|
+
return exhaustiveCheck(result);
|
|
106
123
|
}
|
|
107
124
|
async function hasManagedSection(opts) {
|
|
108
|
-
const content = await
|
|
125
|
+
const content = await readFileOrNull(opts.filePath);
|
|
109
126
|
return content !== null && content.includes(opts.startMarker) && content.includes(opts.endMarker);
|
|
110
127
|
}
|
|
111
128
|
//# 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
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAA+B;AAC/B,mBAA4B;AAC5B,iBAA2B;AAC3B,kBAA2B;AAEpB,SAAS,0BAAmC;AACjD,SAAO,QAAQ,MAAM,UAAU;AACjC;
|
|
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": ["fs"]
|
|
7
7
|
}
|
package/dist/cjs/cli/lib/api.js
CHANGED
|
@@ -39,6 +39,7 @@ var import_zod = require("zod");
|
|
|
39
39
|
var import_localDeployment = require("./localDeployment/localDeployment.js");
|
|
40
40
|
var import_anonymous = require("./localDeployment/anonymous.js");
|
|
41
41
|
var import_deploymentSelector = require("./deploymentSelector.js");
|
|
42
|
+
var import_filePaths = require("./localDeployment/filePaths.js");
|
|
42
43
|
var import_chalk = require("chalk");
|
|
43
44
|
async function createProject(ctx, {
|
|
44
45
|
teamSlug: selectedTeamSlug,
|
|
@@ -79,7 +80,7 @@ const deploymentSelectionWithinProjectSchema = import_zod.z.discriminatedUnion(
|
|
|
79
80
|
import_zod.z.object({ kind: import_zod.z.literal("deploymentName"), deploymentName: import_zod.z.string() }),
|
|
80
81
|
import_zod.z.object({ kind: import_zod.z.literal("prod") }),
|
|
81
82
|
import_zod.z.object({ kind: import_zod.z.literal("implicitProd") }),
|
|
82
|
-
import_zod.z.object({ kind: import_zod.z.literal("
|
|
83
|
+
import_zod.z.object({ kind: import_zod.z.literal("unspecified") }),
|
|
83
84
|
import_zod.z.object({
|
|
84
85
|
kind: import_zod.z.literal("deploymentSelector"),
|
|
85
86
|
selector: import_zod.z.string()
|
|
@@ -102,10 +103,10 @@ function deploymentSelectionWithinProjectFromOptions(options) {
|
|
|
102
103
|
if (options.implicitProd) {
|
|
103
104
|
return { kind: "implicitProd" };
|
|
104
105
|
}
|
|
105
|
-
return { kind: "
|
|
106
|
+
return { kind: "unspecified" };
|
|
106
107
|
}
|
|
107
108
|
async function validateDeploymentSelectionForExistingDeployment(ctx, deploymentSelection, source) {
|
|
108
|
-
if (deploymentSelection.kind === "
|
|
109
|
+
if (deploymentSelection.kind === "unspecified" || deploymentSelection.kind === "implicitProd") {
|
|
109
110
|
return;
|
|
110
111
|
}
|
|
111
112
|
if (deploymentSelection.kind === "deploymentSelector") {
|
|
@@ -407,7 +408,7 @@ async function handleDeploymentName(ctx, deploymentName, projectSelection) {
|
|
|
407
408
|
}
|
|
408
409
|
async function fetchDeploymentCredentialsWithinCurrentProject(ctx, projectSelection, deploymentSelection) {
|
|
409
410
|
switch (deploymentSelection.kind) {
|
|
410
|
-
case "
|
|
411
|
+
case "unspecified": {
|
|
411
412
|
return await handleOwnDev(ctx, projectSelection);
|
|
412
413
|
}
|
|
413
414
|
case "implicitProd":
|
|
@@ -461,7 +462,7 @@ async function resolveDeploymentNameByReference(ctx, teamSlug, projectSlug, refe
|
|
|
461
462
|
return await ctx.crash({
|
|
462
463
|
exitCode: 1,
|
|
463
464
|
errorType: "fatal",
|
|
464
|
-
printedMessage: `Deployment \u201C${reference}\u201D not found. To create a new deployment, use ${import_chalk.chalkStderr.bold(`npx convex deployment create ${
|
|
465
|
+
printedMessage: `Deployment \u201C${reference}\u201D not found. To create a new deployment, use ${import_chalk.chalkStderr.bold(`npx convex deployment create ${teamSlug}:${projectSlug}:${reference} --select`)}`,
|
|
465
466
|
errForSentry: err
|
|
466
467
|
});
|
|
467
468
|
}
|
|
@@ -470,8 +471,26 @@ async function resolveDeploymentNameByReference(ctx, teamSlug, projectSlug, refe
|
|
|
470
471
|
}
|
|
471
472
|
async function handleRefInProject(ctx, selector, projectSelection) {
|
|
472
473
|
switch (selector.kind) {
|
|
473
|
-
case "dev":
|
|
474
|
-
|
|
474
|
+
case "dev": {
|
|
475
|
+
const access = await checkAccessToSelectedProject(ctx, projectSelection);
|
|
476
|
+
if (access.kind !== "hasAccess") {
|
|
477
|
+
return await ctx.crash({
|
|
478
|
+
exitCode: 1,
|
|
479
|
+
errorType: "fatal",
|
|
480
|
+
printedMessage: "You don't have access to the selected project. Run `npx convex dev` to select a different project."
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
const deploymentName = await resolveDefaultCloudDevDeploymentName(
|
|
484
|
+
ctx,
|
|
485
|
+
access.teamSlug,
|
|
486
|
+
access.projectSlug
|
|
487
|
+
);
|
|
488
|
+
return await handleDeploymentName(ctx, deploymentName, {
|
|
489
|
+
kind: "teamAndProjectSlugs",
|
|
490
|
+
teamSlug: access.teamSlug,
|
|
491
|
+
projectSlug: access.projectSlug
|
|
492
|
+
});
|
|
493
|
+
}
|
|
475
494
|
case "prod":
|
|
476
495
|
return await handleProd(ctx, projectSelection);
|
|
477
496
|
case "reference": {
|
|
@@ -502,6 +521,26 @@ async function handleDeploymentSelector(ctx, selector, projectSelection) {
|
|
|
502
521
|
parsed.deploymentName,
|
|
503
522
|
projectSelection
|
|
504
523
|
);
|
|
524
|
+
case "local": {
|
|
525
|
+
const localConfig = (0, import_filePaths.loadProjectLocalConfig)(ctx);
|
|
526
|
+
if (localConfig === null) {
|
|
527
|
+
return ctx.crash({
|
|
528
|
+
exitCode: 1,
|
|
529
|
+
errorType: "fatal",
|
|
530
|
+
printedMessage: `No local deployment found. Run ${import_chalk.chalkStderr.bold("npx convex deployment create local")} to create one.`
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
const credentials = await (0, import_localDeployment.loadLocalDeploymentCredentials)(
|
|
534
|
+
ctx,
|
|
535
|
+
localConfig.deploymentName
|
|
536
|
+
);
|
|
537
|
+
return {
|
|
538
|
+
deploymentName: localConfig.deploymentName,
|
|
539
|
+
adminKey: credentials.adminKey,
|
|
540
|
+
url: credentials.deploymentUrl,
|
|
541
|
+
deploymentType: "local"
|
|
542
|
+
};
|
|
543
|
+
}
|
|
505
544
|
case "inCurrentProject":
|
|
506
545
|
return await handleRefInProject(ctx, parsed.selector, projectSelection);
|
|
507
546
|
case "inProject": {
|
|
@@ -691,4 +730,28 @@ async function getTeamsForUser(ctx) {
|
|
|
691
730
|
);
|
|
692
731
|
return teams;
|
|
693
732
|
}
|
|
733
|
+
async function resolveDefaultCloudDevDeploymentName(ctx, teamSlug, projectSlug) {
|
|
734
|
+
try {
|
|
735
|
+
const result = await (0, import_utils.typedPlatformClient)(ctx, { throw: true }).GET(
|
|
736
|
+
"/teams/{team_id_or_slug}/projects/{project_slug}/deployment",
|
|
737
|
+
{
|
|
738
|
+
params: {
|
|
739
|
+
path: { team_id_or_slug: teamSlug, project_slug: projectSlug },
|
|
740
|
+
query: { defaultDev: true }
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
);
|
|
744
|
+
return result.data.name;
|
|
745
|
+
} catch (err) {
|
|
746
|
+
if (err instanceof import_utils.ThrowingFetchError && err.serverErrorData?.code === "DeploymentNotFound") {
|
|
747
|
+
return await ctx.crash({
|
|
748
|
+
exitCode: 1,
|
|
749
|
+
errorType: "fatal",
|
|
750
|
+
printedMessage: `You don\u2019t have a personal cloud dev deployment in this project. Run ${import_chalk.chalkStderr.bold("npx convex deployment create --type dev --default")} to create one.`,
|
|
751
|
+
errForSentry: err
|
|
752
|
+
});
|
|
753
|
+
}
|
|
754
|
+
return await (0, import_utils.logAndHandleFetchError)(ctx, err);
|
|
755
|
+
}
|
|
756
|
+
}
|
|
694
757
|
//# sourceMappingURL=api.js.map
|