convex 1.34.0 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +98 -43
- package/dist/browser.bundle.js +13 -10
- 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/browser/sync/authentication_manager.js +4 -1
- package/dist/cjs/browser/sync/authentication_manager.js.map +2 -2
- package/dist/cjs/browser/sync/web_socket_manager.js +1 -7
- package/dist/cjs/browser/sync/web_socket_manager.js.map +2 -2
- package/dist/cjs/cli/aiFiles.js +39 -20
- 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 +34 -32
- 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 +73 -0
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/claudemd.js +73 -0
- package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/cursorrules.js +48 -0
- package/dist/cjs/cli/lib/aiFiles/cursorrules.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +58 -0
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/index.js +215 -0
- package/dist/cjs/cli/lib/aiFiles/index.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/paths.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/skills.js +196 -0
- package/dist/cjs/cli/lib/aiFiles/skills.js.map +7 -0
- 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 +198 -0
- package/dist/cjs/cli/lib/aiFiles/status.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/utils.js +128 -0
- package/dist/cjs/cli/lib/aiFiles/utils.js.map +7 -0
- 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 +10 -6
- package/dist/cjs/cli/lib/command.js.map +2 -2
- package/dist/cjs/cli/lib/config.js +43 -7
- 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 +15 -8
- 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 +12 -13
- 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/cli/lib/versionApi.js +7 -4
- package/dist/cjs/cli/lib/versionApi.js.map +2 -2
- package/dist/cjs/cli/lib/workos/workos.js +4 -6
- package/dist/cjs/cli/lib/workos/workos.js.map +2 -2
- 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/browser/sync/authentication_manager.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/web_socket_manager.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 +19 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
- package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +42 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
- package/dist/cjs-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +20 -0
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
- 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 +6 -0
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +56 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
- 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 +18 -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/cli/lib/versionApi.d.ts +7 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/workos/workos.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 +2446 -1933
- 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/browser/sync/authentication_manager.js +4 -1
- package/dist/esm/browser/sync/authentication_manager.js.map +2 -2
- package/dist/esm/browser/sync/web_socket_manager.js +1 -7
- package/dist/esm/browser/sync/web_socket_manager.js.map +2 -2
- package/dist/esm/cli/aiFiles.js +41 -23
- 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 +35 -33
- 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 +56 -0
- package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/claudemd.js +56 -0
- package/dist/esm/cli/lib/aiFiles/claudemd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/cursorrules.js +16 -0
- package/dist/esm/cli/lib/aiFiles/cursorrules.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +35 -0
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/index.js +193 -0
- package/dist/esm/cli/lib/aiFiles/index.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/paths.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/skills.js +163 -0
- package/dist/esm/cli/lib/aiFiles/skills.js.map +7 -0
- 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 +178 -0
- package/dist/esm/cli/lib/aiFiles/status.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/utils.js +97 -0
- package/dist/esm/cli/lib/aiFiles/utils.js.map +7 -0
- 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 +10 -6
- package/dist/esm/cli/lib/command.js.map +2 -2
- package/dist/esm/cli/lib/config.js +41 -6
- 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 +14 -12
- 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/cli/lib/versionApi.js +7 -4
- package/dist/esm/cli/lib/versionApi.js.map +2 -2
- package/dist/esm/cli/lib/workos/workos.js +4 -6
- package/dist/esm/cli/lib/workos/workos.js.map +2 -2
- 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/browser/sync/authentication_manager.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/web_socket_manager.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 +19 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
- package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts +42 -0
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
- package/dist/esm-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +20 -0
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
- 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 +6 -0
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +56 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
- 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 +18 -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/cli/lib/versionApi.d.ts +7 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/workos/workos.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 +55 -15
- package/dist/react.bundle.js.map +3 -3
- package/package.json +11 -7
- package/schemas/convex.schema.json +22 -3
- 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/browser/sync/authentication_manager.ts +9 -4
- package/src/browser/sync/client_node.test.ts +125 -0
- package/src/browser/sync/web_socket_manager.ts +1 -7
- package/src/cli/aiFiles.ts +56 -33
- package/src/cli/codegen_templates/readme.ts +14 -1
- package/src/cli/configure.test.ts +138 -0
- package/src/cli/configure.ts +62 -55
- 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 +399 -37
- 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/{ai → aiFiles}/MANUAL_TESTING.md +6 -2
- package/src/cli/lib/aiFiles/agentsmd.test.ts +133 -0
- package/src/cli/lib/aiFiles/agentsmd.ts +81 -0
- package/src/cli/lib/aiFiles/claudemd.test.ts +92 -0
- package/src/cli/lib/aiFiles/claudemd.ts +81 -0
- package/src/cli/lib/aiFiles/cursorrules.ts +25 -0
- package/src/cli/lib/aiFiles/guidelinesmd.test.ts +50 -0
- package/src/cli/lib/aiFiles/guidelinesmd.ts +49 -0
- package/src/cli/lib/{ai → aiFiles}/index.test.ts +343 -516
- package/src/cli/lib/aiFiles/index.ts +297 -0
- package/src/cli/lib/{ai → aiFiles}/integration.test.ts +195 -158
- package/src/cli/lib/{ai → aiFiles}/paths.ts +5 -0
- package/src/cli/lib/{ai → aiFiles}/prompt.test.ts +79 -31
- package/src/cli/lib/aiFiles/skills.ts +243 -0
- 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 +246 -0
- package/src/cli/lib/aiFiles/utils.test.ts +50 -0
- package/src/cli/lib/aiFiles/utils.ts +191 -0
- package/src/cli/lib/api.ts +88 -7
- package/src/cli/lib/command.ts +18 -8
- package/src/cli/lib/config.test.ts +185 -8
- package/src/cli/lib/config.ts +73 -12
- 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 +97 -60
- package/src/cli/lib/updates.ts +17 -15
- 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/cli/lib/versionApi.test.ts +13 -10
- package/src/cli/lib/versionApi.ts +13 -5
- package/src/cli/lib/workos/workos.ts +4 -5
- 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/ai/config.js +0 -144
- package/dist/cjs/cli/lib/ai/config.js.map +0 -7
- package/dist/cjs/cli/lib/ai/index.js +0 -704
- package/dist/cjs/cli/lib/ai/index.js.map +0 -7
- package/dist/cjs/cli/lib/ai/paths.js.map +0 -7
- package/dist/cjs-types/cli/lib/ai/config.d.ts +0 -50
- package/dist/cjs-types/cli/lib/ai/config.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/config.test.d.ts +0 -2
- package/dist/cjs-types/cli/lib/ai/config.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/index.d.ts +0 -56
- package/dist/cjs-types/cli/lib/ai/index.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/index.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/integration.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/paths.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
- package/dist/esm/cli/lib/ai/config.js +0 -109
- package/dist/esm/cli/lib/ai/config.js.map +0 -7
- package/dist/esm/cli/lib/ai/index.js +0 -684
- package/dist/esm/cli/lib/ai/index.js.map +0 -7
- package/dist/esm/cli/lib/ai/paths.js.map +0 -7
- package/dist/esm-types/cli/lib/ai/config.d.ts +0 -50
- package/dist/esm-types/cli/lib/ai/config.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/config.test.d.ts +0 -2
- package/dist/esm-types/cli/lib/ai/config.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/index.d.ts +0 -56
- package/dist/esm-types/cli/lib/ai/index.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/index.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/integration.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/paths.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
- package/src/cli/lib/ai/config.test.ts +0 -338
- package/src/cli/lib/ai/config.ts +0 -159
- package/src/cli/lib/ai/index.ts +0 -1006
- /package/dist/cjs/cli/lib/{ai → aiFiles}/paths.js +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
- /package/dist/esm/cli/lib/{ai → aiFiles}/paths.js +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { chalkStderr } from "chalk";
|
|
4
|
+
import { logMessage } from "../../../bundler/log.js";
|
|
5
|
+
import {
|
|
6
|
+
AGENTS_MD_START_MARKER,
|
|
7
|
+
AGENTS_MD_END_MARKER,
|
|
8
|
+
agentsMdConvexSection
|
|
9
|
+
} from "../../codegen_templates/agentsmd.js";
|
|
10
|
+
import {
|
|
11
|
+
CLAUDE_MD_START_MARKER,
|
|
12
|
+
CLAUDE_MD_END_MARKER,
|
|
13
|
+
claudeMdConvexSection
|
|
14
|
+
} from "../../codegen_templates/claudemd.js";
|
|
15
|
+
import { getVersion } from "../versionApi.js";
|
|
16
|
+
import { hashSha256 } from "../utils/hash.js";
|
|
17
|
+
import {
|
|
18
|
+
agentsMdPath,
|
|
19
|
+
claudeMdPath,
|
|
20
|
+
guidelinesPathForConvexDir
|
|
21
|
+
} from "./paths.js";
|
|
22
|
+
import { attemptReadAiState } from "./state.js";
|
|
23
|
+
import { isAiFilesDisabled } from "./index.js";
|
|
24
|
+
import { readFileOrNull } from "./utils.js";
|
|
25
|
+
function logGuidelinesStatus({
|
|
26
|
+
guidelinesFile,
|
|
27
|
+
guidelinesRelPath,
|
|
28
|
+
state,
|
|
29
|
+
canonicalGuidelinesHash,
|
|
30
|
+
networkAvailable
|
|
31
|
+
}) {
|
|
32
|
+
if (guidelinesFile === null || guidelinesFile === "") {
|
|
33
|
+
logMessage(
|
|
34
|
+
` ${chalkStderr.yellow("\u26A0")} ${guidelinesRelPath}: not on disk \u2014 run ${chalkStderr.bold("npx convex ai-files install")} to reinstall`
|
|
35
|
+
);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const isLocallyModified = state.guidelinesHash !== null && hashSha256(guidelinesFile) !== state.guidelinesHash;
|
|
39
|
+
if (isLocallyModified) {
|
|
40
|
+
logMessage(
|
|
41
|
+
` ${chalkStderr.yellow("\u26A0")} ${guidelinesRelPath}: installed, modified locally (changes will be overwritten on next update)`
|
|
42
|
+
);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const isOutOfDate = networkAvailable && canonicalGuidelinesHash !== null && state.guidelinesHash !== null && state.guidelinesHash !== canonicalGuidelinesHash;
|
|
46
|
+
if (isOutOfDate) {
|
|
47
|
+
logMessage(
|
|
48
|
+
` ${chalkStderr.yellow("\u26A0")} ${guidelinesRelPath}: installed, out of date \u2014 run ${chalkStderr.bold("npx convex ai-files update")}`
|
|
49
|
+
);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
logMessage(
|
|
53
|
+
` ${chalkStderr.green("\u2714")} ${guidelinesRelPath}: installed${networkAvailable ? ", up to date" : ""}`
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
function logAgentsMdStatus({
|
|
57
|
+
agentsContent,
|
|
58
|
+
state,
|
|
59
|
+
convexDirName
|
|
60
|
+
}) {
|
|
61
|
+
const hasSection = agentsContent !== null && agentsContent.includes(AGENTS_MD_START_MARKER) && agentsContent.includes(AGENTS_MD_END_MARKER);
|
|
62
|
+
if (!hasSection) {
|
|
63
|
+
logMessage(
|
|
64
|
+
` ${chalkStderr.yellow("\u26A0")} AGENTS.md: Convex section missing \u2014 run ${chalkStderr.bold("npx convex ai-files install")} to reinstall`
|
|
65
|
+
);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const currentHash = hashSha256(agentsMdConvexSection(convexDirName));
|
|
69
|
+
if (state.agentsMdSectionHash !== null && state.agentsMdSectionHash !== currentHash) {
|
|
70
|
+
logMessage(
|
|
71
|
+
` ${chalkStderr.yellow("\u26A0")} AGENTS.md: Convex section out of date \u2014 run ${chalkStderr.bold("npx convex ai-files update")}`
|
|
72
|
+
);
|
|
73
|
+
} else {
|
|
74
|
+
logMessage(
|
|
75
|
+
` ${chalkStderr.green("\u2714")} AGENTS.md: Convex section present, up to date`
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function logClaudeMdStatus({
|
|
80
|
+
claudeContent,
|
|
81
|
+
state,
|
|
82
|
+
convexDirName
|
|
83
|
+
}) {
|
|
84
|
+
const hasSection = claudeContent !== null && claudeContent.includes(CLAUDE_MD_START_MARKER) && claudeContent.includes(CLAUDE_MD_END_MARKER);
|
|
85
|
+
if (!hasSection) {
|
|
86
|
+
if (claudeContent === null) {
|
|
87
|
+
logMessage(
|
|
88
|
+
` ${chalkStderr.yellow("\u26A0")} CLAUDE.md: missing - run ${chalkStderr.bold("npx convex ai-files install")} to create it`
|
|
89
|
+
);
|
|
90
|
+
} else {
|
|
91
|
+
logMessage(
|
|
92
|
+
` ${chalkStderr.yellow("\u26A0")} CLAUDE.md: no Convex section present - run ${chalkStderr.bold("npx convex ai-files update")} to add it`
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const currentHash = hashSha256(claudeMdConvexSection(convexDirName));
|
|
98
|
+
if (state.claudeMdHash !== null && state.claudeMdHash !== currentHash) {
|
|
99
|
+
logMessage(
|
|
100
|
+
` ${chalkStderr.yellow("\u26A0")} CLAUDE.md: Convex section out of date - run ${chalkStderr.bold("npx convex ai-files update")}`
|
|
101
|
+
);
|
|
102
|
+
} else {
|
|
103
|
+
logMessage(
|
|
104
|
+
` ${chalkStderr.green("\u2714")} CLAUDE.md: Convex section present, up to date`
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function logSkillsStatus({
|
|
109
|
+
state,
|
|
110
|
+
canonicalAgentSkillsSha,
|
|
111
|
+
networkAvailable
|
|
112
|
+
}) {
|
|
113
|
+
if (state.installedSkillNames.length === 0) {
|
|
114
|
+
logMessage(
|
|
115
|
+
` ${chalkStderr.yellow("\u26A0")} Agent skills: not installed \u2014 run ${chalkStderr.bold("npx convex ai-files install")} to install`
|
|
116
|
+
);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const skillsList = state.installedSkillNames.join(", ");
|
|
120
|
+
const isStale = networkAvailable && canonicalAgentSkillsSha !== null && state.agentSkillsSha !== null && state.agentSkillsSha !== canonicalAgentSkillsSha;
|
|
121
|
+
if (isStale) {
|
|
122
|
+
logMessage(
|
|
123
|
+
` ${chalkStderr.yellow("\u26A0")} Agent skills: ${skillsList} \u2014 out of date, run ${chalkStderr.bold("npx convex ai-files update")}`
|
|
124
|
+
);
|
|
125
|
+
} else {
|
|
126
|
+
logMessage(
|
|
127
|
+
` ${chalkStderr.green("\u2714")} Agent skills: ${skillsList}${networkAvailable ? " (up to date)" : ""}`
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export async function statusAiFiles({
|
|
132
|
+
projectDir,
|
|
133
|
+
convexDir,
|
|
134
|
+
aiFilesConfig
|
|
135
|
+
}) {
|
|
136
|
+
const convexDirName = path.relative(projectDir, convexDir);
|
|
137
|
+
const guidelinesRelPath = path.relative(
|
|
138
|
+
projectDir,
|
|
139
|
+
guidelinesPathForConvexDir(convexDir)
|
|
140
|
+
);
|
|
141
|
+
if (isAiFilesDisabled(aiFilesConfig)) {
|
|
142
|
+
logMessage(`Convex AI files: ${chalkStderr.yellow("disabled")}`);
|
|
143
|
+
logMessage(
|
|
144
|
+
` Run ${chalkStderr.bold("npx convex ai-files enable")} to re-enable.`
|
|
145
|
+
);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const stateResult = await attemptReadAiState(convexDir);
|
|
149
|
+
if (stateResult.kind !== "ok") {
|
|
150
|
+
logMessage(`Convex AI files: ${chalkStderr.yellow("not installed")}`);
|
|
151
|
+
logMessage(
|
|
152
|
+
`Run ${chalkStderr.bold("npx convex ai-files install")} to get started.`
|
|
153
|
+
);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const { state } = stateResult;
|
|
157
|
+
logMessage(`Convex AI files: ${chalkStderr.green("enabled")}`);
|
|
158
|
+
const [versionData, guidelinesFile, agentsContent, claudeContent] = await Promise.all([
|
|
159
|
+
getVersion(),
|
|
160
|
+
readFileOrNull(guidelinesPathForConvexDir(convexDir)),
|
|
161
|
+
readFileOrNull(agentsMdPath(projectDir)),
|
|
162
|
+
readFileOrNull(claudeMdPath(projectDir))
|
|
163
|
+
]);
|
|
164
|
+
const networkAvailable = versionData.kind === "ok";
|
|
165
|
+
const canonicalGuidelinesHash = networkAvailable ? versionData.data.guidelinesHash : null;
|
|
166
|
+
const canonicalAgentSkillsSha = networkAvailable ? versionData.data.agentSkillsSha : null;
|
|
167
|
+
logGuidelinesStatus({
|
|
168
|
+
guidelinesFile,
|
|
169
|
+
guidelinesRelPath,
|
|
170
|
+
state,
|
|
171
|
+
canonicalGuidelinesHash,
|
|
172
|
+
networkAvailable
|
|
173
|
+
});
|
|
174
|
+
logAgentsMdStatus({ agentsContent, state, convexDirName });
|
|
175
|
+
logClaudeMdStatus({ claudeContent, state, convexDirName });
|
|
176
|
+
logSkillsStatus({ state, canonicalAgentSkillsSha, networkAvailable });
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 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
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { promises as fs } from "fs";
|
|
3
|
+
import { chalkStderr } from "chalk";
|
|
4
|
+
import { logMessage } from "../../../bundler/log.js";
|
|
5
|
+
import { hashSha256 } from "../utils/hash.js";
|
|
6
|
+
export function isInInteractiveTerminal() {
|
|
7
|
+
return process.stdin.isTTY === true;
|
|
8
|
+
}
|
|
9
|
+
export async function attemptReadFile(filePath) {
|
|
10
|
+
try {
|
|
11
|
+
const content = await fs.readFile(filePath, "utf8");
|
|
12
|
+
if (content.length === 0) return { kind: "empty" };
|
|
13
|
+
return { kind: "content", content };
|
|
14
|
+
} catch (error) {
|
|
15
|
+
if (error.code === "ENOENT")
|
|
16
|
+
return { kind: "not-found" };
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function readFileOrNull(filePath) {
|
|
21
|
+
const result = await attemptReadFile(filePath);
|
|
22
|
+
if (result.kind === "content") return result.content;
|
|
23
|
+
if (result.kind === "empty") return "";
|
|
24
|
+
if (result.kind === "not-found") return null;
|
|
25
|
+
return exhaustiveCheck(result);
|
|
26
|
+
}
|
|
27
|
+
export async function safelyDeleteFile(filePath) {
|
|
28
|
+
try {
|
|
29
|
+
await fs.unlink(filePath);
|
|
30
|
+
return true;
|
|
31
|
+
} catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export const iife = (fn) => fn();
|
|
36
|
+
export async function injectManagedSection(opts) {
|
|
37
|
+
const { filePath, startMarker, endMarker, section } = opts;
|
|
38
|
+
const existing = await readFileOrNull(filePath) ?? "";
|
|
39
|
+
const startIdx = existing.indexOf(startMarker);
|
|
40
|
+
const endIdx = existing.indexOf(endMarker);
|
|
41
|
+
const updated = iife(() => {
|
|
42
|
+
if (startIdx !== -1 && endIdx !== -1)
|
|
43
|
+
return existing.slice(0, startIdx) + section + existing.slice(endIdx + endMarker.length);
|
|
44
|
+
if (existing.length > 0)
|
|
45
|
+
return existing.trimEnd() + "\n\n" + section + "\n";
|
|
46
|
+
return section + "\n";
|
|
47
|
+
});
|
|
48
|
+
const didWrite = updated !== existing;
|
|
49
|
+
if (didWrite) await fs.writeFile(filePath, updated, "utf8");
|
|
50
|
+
return { sectionHash: hashSha256(section), didWrite };
|
|
51
|
+
}
|
|
52
|
+
export async function attemptToStripManagedSection(opts) {
|
|
53
|
+
const { filePath, startMarker, endMarker } = opts;
|
|
54
|
+
const content = await readFileOrNull(filePath);
|
|
55
|
+
if (content === null) return "none";
|
|
56
|
+
const startIdx = content.indexOf(startMarker);
|
|
57
|
+
const endIdx = content.indexOf(endMarker);
|
|
58
|
+
if (startIdx === -1 || endIdx === -1) {
|
|
59
|
+
return "none";
|
|
60
|
+
}
|
|
61
|
+
const before = content.slice(0, startIdx).trimEnd();
|
|
62
|
+
const after = content.slice(endIdx + endMarker.length).trimStart();
|
|
63
|
+
const updated = [before, after].filter(Boolean).join("\n\n");
|
|
64
|
+
if (!updated.trim()) {
|
|
65
|
+
await safelyDeleteFile(filePath);
|
|
66
|
+
return "file";
|
|
67
|
+
}
|
|
68
|
+
await fs.writeFile(filePath, updated + "\n", "utf8");
|
|
69
|
+
return "section";
|
|
70
|
+
}
|
|
71
|
+
export function exhaustiveCheck(_param) {
|
|
72
|
+
throw new Error("Internal error: exhaustive check failed.");
|
|
73
|
+
}
|
|
74
|
+
export async function attemptToRemoveMarkdownSection({
|
|
75
|
+
projectDir,
|
|
76
|
+
strip,
|
|
77
|
+
fileName
|
|
78
|
+
}) {
|
|
79
|
+
const result = await strip(projectDir);
|
|
80
|
+
if (result === "section") {
|
|
81
|
+
logMessage(
|
|
82
|
+
`${chalkStderr.green("\u2714")} Removed Convex section from ${fileName}.`
|
|
83
|
+
);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
if (result === "file") {
|
|
87
|
+
logMessage(`${chalkStderr.green("\u2714")} Deleted ${fileName}.`);
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
if (result === "none") return false;
|
|
91
|
+
return exhaustiveCheck(result);
|
|
92
|
+
}
|
|
93
|
+
export async function hasManagedSection(opts) {
|
|
94
|
+
const content = await readFileOrNull(opts.filePath);
|
|
95
|
+
return content !== null && content.includes(opts.startMarker) && content.includes(opts.endMarker);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 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
|
+
"names": []
|
|
7
|
+
}
|
package/dist/esm/cli/lib/api.js
CHANGED
|
@@ -18,6 +18,7 @@ import { loadAnonymousDeployment } from "./localDeployment/anonymous.js";
|
|
|
18
18
|
import {
|
|
19
19
|
parseDeploymentSelector
|
|
20
20
|
} from "./deploymentSelector.js";
|
|
21
|
+
import { loadProjectLocalConfig } from "./localDeployment/filePaths.js";
|
|
21
22
|
import { chalkStderr } from "chalk";
|
|
22
23
|
export async function createProject(ctx, {
|
|
23
24
|
teamSlug: selectedTeamSlug,
|
|
@@ -58,7 +59,7 @@ export const deploymentSelectionWithinProjectSchema = z.discriminatedUnion(
|
|
|
58
59
|
z.object({ kind: z.literal("deploymentName"), deploymentName: z.string() }),
|
|
59
60
|
z.object({ kind: z.literal("prod") }),
|
|
60
61
|
z.object({ kind: z.literal("implicitProd") }),
|
|
61
|
-
z.object({ kind: z.literal("
|
|
62
|
+
z.object({ kind: z.literal("unspecified") }),
|
|
62
63
|
z.object({
|
|
63
64
|
kind: z.literal("deploymentSelector"),
|
|
64
65
|
selector: z.string()
|
|
@@ -81,10 +82,10 @@ export function deploymentSelectionWithinProjectFromOptions(options) {
|
|
|
81
82
|
if (options.implicitProd) {
|
|
82
83
|
return { kind: "implicitProd" };
|
|
83
84
|
}
|
|
84
|
-
return { kind: "
|
|
85
|
+
return { kind: "unspecified" };
|
|
85
86
|
}
|
|
86
87
|
export async function validateDeploymentSelectionForExistingDeployment(ctx, deploymentSelection, source) {
|
|
87
|
-
if (deploymentSelection.kind === "
|
|
88
|
+
if (deploymentSelection.kind === "unspecified" || deploymentSelection.kind === "implicitProd") {
|
|
88
89
|
return;
|
|
89
90
|
}
|
|
90
91
|
if (deploymentSelection.kind === "deploymentSelector") {
|
|
@@ -386,7 +387,7 @@ async function handleDeploymentName(ctx, deploymentName, projectSelection) {
|
|
|
386
387
|
}
|
|
387
388
|
async function fetchDeploymentCredentialsWithinCurrentProject(ctx, projectSelection, deploymentSelection) {
|
|
388
389
|
switch (deploymentSelection.kind) {
|
|
389
|
-
case "
|
|
390
|
+
case "unspecified": {
|
|
390
391
|
return await handleOwnDev(ctx, projectSelection);
|
|
391
392
|
}
|
|
392
393
|
case "implicitProd":
|
|
@@ -440,7 +441,7 @@ async function resolveDeploymentNameByReference(ctx, teamSlug, projectSlug, refe
|
|
|
440
441
|
return await ctx.crash({
|
|
441
442
|
exitCode: 1,
|
|
442
443
|
errorType: "fatal",
|
|
443
|
-
printedMessage: `Deployment \u201C${reference}\u201D not found. To create a new deployment, use ${chalkStderr.bold(`npx convex deployment create ${
|
|
444
|
+
printedMessage: `Deployment \u201C${reference}\u201D not found. To create a new deployment, use ${chalkStderr.bold(`npx convex deployment create ${teamSlug}:${projectSlug}:${reference} --select`)}`,
|
|
444
445
|
errForSentry: err
|
|
445
446
|
});
|
|
446
447
|
}
|
|
@@ -449,8 +450,26 @@ async function resolveDeploymentNameByReference(ctx, teamSlug, projectSlug, refe
|
|
|
449
450
|
}
|
|
450
451
|
async function handleRefInProject(ctx, selector, projectSelection) {
|
|
451
452
|
switch (selector.kind) {
|
|
452
|
-
case "dev":
|
|
453
|
-
|
|
453
|
+
case "dev": {
|
|
454
|
+
const access = await checkAccessToSelectedProject(ctx, projectSelection);
|
|
455
|
+
if (access.kind !== "hasAccess") {
|
|
456
|
+
return await ctx.crash({
|
|
457
|
+
exitCode: 1,
|
|
458
|
+
errorType: "fatal",
|
|
459
|
+
printedMessage: "You don't have access to the selected project. Run `npx convex dev` to select a different project."
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
const deploymentName = await resolveDefaultCloudDevDeploymentName(
|
|
463
|
+
ctx,
|
|
464
|
+
access.teamSlug,
|
|
465
|
+
access.projectSlug
|
|
466
|
+
);
|
|
467
|
+
return await handleDeploymentName(ctx, deploymentName, {
|
|
468
|
+
kind: "teamAndProjectSlugs",
|
|
469
|
+
teamSlug: access.teamSlug,
|
|
470
|
+
projectSlug: access.projectSlug
|
|
471
|
+
});
|
|
472
|
+
}
|
|
454
473
|
case "prod":
|
|
455
474
|
return await handleProd(ctx, projectSelection);
|
|
456
475
|
case "reference": {
|
|
@@ -481,6 +500,26 @@ async function handleDeploymentSelector(ctx, selector, projectSelection) {
|
|
|
481
500
|
parsed.deploymentName,
|
|
482
501
|
projectSelection
|
|
483
502
|
);
|
|
503
|
+
case "local": {
|
|
504
|
+
const localConfig = loadProjectLocalConfig(ctx);
|
|
505
|
+
if (localConfig === null) {
|
|
506
|
+
return ctx.crash({
|
|
507
|
+
exitCode: 1,
|
|
508
|
+
errorType: "fatal",
|
|
509
|
+
printedMessage: `No local deployment found. Run ${chalkStderr.bold("npx convex deployment create local")} to create one.`
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
const credentials = await loadLocalDeploymentCredentials(
|
|
513
|
+
ctx,
|
|
514
|
+
localConfig.deploymentName
|
|
515
|
+
);
|
|
516
|
+
return {
|
|
517
|
+
deploymentName: localConfig.deploymentName,
|
|
518
|
+
adminKey: credentials.adminKey,
|
|
519
|
+
url: credentials.deploymentUrl,
|
|
520
|
+
deploymentType: "local"
|
|
521
|
+
};
|
|
522
|
+
}
|
|
484
523
|
case "inCurrentProject":
|
|
485
524
|
return await handleRefInProject(ctx, parsed.selector, projectSelection);
|
|
486
525
|
case "inProject": {
|
|
@@ -670,4 +709,28 @@ export async function getTeamsForUser(ctx) {
|
|
|
670
709
|
);
|
|
671
710
|
return teams;
|
|
672
711
|
}
|
|
712
|
+
async function resolveDefaultCloudDevDeploymentName(ctx, teamSlug, projectSlug) {
|
|
713
|
+
try {
|
|
714
|
+
const result = await typedPlatformClient(ctx, { throw: true }).GET(
|
|
715
|
+
"/teams/{team_id_or_slug}/projects/{project_slug}/deployment",
|
|
716
|
+
{
|
|
717
|
+
params: {
|
|
718
|
+
path: { team_id_or_slug: teamSlug, project_slug: projectSlug },
|
|
719
|
+
query: { defaultDev: true }
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
);
|
|
723
|
+
return result.data.name;
|
|
724
|
+
} catch (err) {
|
|
725
|
+
if (err instanceof ThrowingFetchError && err.serverErrorData?.code === "DeploymentNotFound") {
|
|
726
|
+
return await ctx.crash({
|
|
727
|
+
exitCode: 1,
|
|
728
|
+
errorType: "fatal",
|
|
729
|
+
printedMessage: `You don\u2019t have a personal cloud dev deployment in this project. Run ${chalkStderr.bold("npx convex deployment create --type dev --default")} to create one.`,
|
|
730
|
+
errForSentry: err
|
|
731
|
+
});
|
|
732
|
+
}
|
|
733
|
+
return await logAndHandleFetchError(ctx, err);
|
|
734
|
+
}
|
|
735
|
+
}
|
|
673
736
|
//# sourceMappingURL=api.js.map
|