veryfront 0.1.111 → 0.1.113
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/esm/cli/auth/login.d.ts.map +1 -1
- package/esm/cli/auth/login.js +13 -0
- package/esm/cli/commands/analyze-chunks/command-help.d.ts.map +1 -1
- package/esm/cli/commands/analyze-chunks/command-help.js +1 -0
- package/esm/cli/commands/build/command-help.d.ts.map +1 -1
- package/esm/cli/commands/build/command-help.js +1 -0
- package/esm/cli/commands/build/command.d.ts.map +1 -1
- package/esm/cli/commands/build/command.js +47 -2
- package/esm/cli/commands/clean/command-help.d.ts.map +1 -1
- package/esm/cli/commands/clean/command-help.js +1 -0
- package/esm/cli/commands/completions/command-help.d.ts +3 -0
- package/esm/cli/commands/completions/command-help.d.ts.map +1 -0
- package/esm/cli/commands/completions/command-help.js +13 -0
- package/esm/cli/commands/completions/command.d.ts +28 -0
- package/esm/cli/commands/completions/command.d.ts.map +1 -0
- package/esm/cli/commands/completions/command.js +133 -0
- package/esm/cli/commands/completions/handler.d.ts +3 -0
- package/esm/cli/commands/completions/handler.d.ts.map +1 -0
- package/esm/cli/commands/completions/handler.js +20 -0
- package/esm/cli/commands/demo/command-help.d.ts.map +1 -1
- package/esm/cli/commands/demo/command-help.js +1 -0
- package/esm/cli/commands/deploy/command-help.d.ts.map +1 -1
- package/esm/cli/commands/deploy/command-help.js +1 -0
- package/esm/cli/commands/deploy/command.d.ts.map +1 -1
- package/esm/cli/commands/deploy/command.js +73 -1
- package/esm/cli/commands/dev/command-help.d.ts.map +1 -1
- package/esm/cli/commands/dev/command-help.js +1 -0
- package/esm/cli/commands/doctor/command-help.d.ts.map +1 -1
- package/esm/cli/commands/doctor/command-help.js +1 -0
- package/esm/cli/commands/files/command-help.d.ts.map +1 -1
- package/esm/cli/commands/files/command-help.js +1 -0
- package/esm/cli/commands/generate/command-help.d.ts.map +1 -1
- package/esm/cli/commands/generate/command-help.js +1 -0
- package/esm/cli/commands/init/command-help.d.ts.map +1 -1
- package/esm/cli/commands/init/command-help.js +1 -0
- package/esm/cli/commands/install/command-help.d.ts.map +1 -1
- package/esm/cli/commands/install/command-help.js +2 -0
- package/esm/cli/commands/issues/command-help.d.ts.map +1 -1
- package/esm/cli/commands/issues/command-help.js +1 -0
- package/esm/cli/commands/knowledge/command-help.d.ts.map +1 -1
- package/esm/cli/commands/knowledge/command-help.js +1 -0
- package/esm/cli/commands/lint/command-help.d.ts +3 -0
- package/esm/cli/commands/lint/command-help.d.ts.map +1 -0
- package/esm/cli/commands/lint/command-help.js +13 -0
- package/esm/cli/commands/lint/command.d.ts +24 -0
- package/esm/cli/commands/lint/command.d.ts.map +1 -0
- package/esm/cli/commands/lint/command.js +34 -0
- package/esm/cli/commands/lint/handler.d.ts +3 -0
- package/esm/cli/commands/lint/handler.d.ts.map +1 -0
- package/esm/cli/commands/lint/handler.js +33 -0
- package/esm/cli/commands/lock/command-help.d.ts.map +1 -1
- package/esm/cli/commands/lock/command-help.js +1 -0
- package/esm/cli/commands/login/command-help.d.ts.map +1 -1
- package/esm/cli/commands/login/command-help.js +1 -0
- package/esm/cli/commands/logout/command-help.d.ts.map +1 -1
- package/esm/cli/commands/logout/command-help.js +1 -0
- package/esm/cli/commands/mcp/command-help.d.ts.map +1 -1
- package/esm/cli/commands/mcp/command-help.js +1 -0
- package/esm/cli/commands/merge/command-help.d.ts.map +1 -1
- package/esm/cli/commands/merge/command-help.js +1 -0
- package/esm/cli/commands/pull/command-help.d.ts.map +1 -1
- package/esm/cli/commands/pull/command-help.js +1 -0
- package/esm/cli/commands/push/command-help.d.ts.map +1 -1
- package/esm/cli/commands/push/command-help.js +1 -0
- package/esm/cli/commands/routes/command-help.d.ts.map +1 -1
- package/esm/cli/commands/routes/command-help.js +1 -0
- package/esm/cli/commands/schema/command-help.d.ts +3 -0
- package/esm/cli/commands/schema/command-help.d.ts.map +1 -0
- package/esm/cli/commands/schema/command-help.js +15 -0
- package/esm/cli/commands/schema/command.d.ts +30 -0
- package/esm/cli/commands/schema/command.d.ts.map +1 -0
- package/esm/cli/commands/schema/command.js +39 -0
- package/esm/cli/commands/schema/handler.d.ts +3 -0
- package/esm/cli/commands/schema/handler.d.ts.map +1 -0
- package/esm/cli/commands/schema/handler.js +25 -0
- package/esm/cli/commands/serve/command-help.d.ts.map +1 -1
- package/esm/cli/commands/serve/command-help.js +1 -0
- package/esm/cli/commands/skills/command-help.d.ts +3 -0
- package/esm/cli/commands/skills/command-help.d.ts.map +1 -0
- package/esm/cli/commands/skills/command-help.js +21 -0
- package/esm/cli/commands/skills/command.d.ts +9 -0
- package/esm/cli/commands/skills/command.d.ts.map +1 -0
- package/esm/cli/commands/skills/command.js +17 -0
- package/esm/cli/commands/skills/create.d.ts +3 -0
- package/esm/cli/commands/skills/create.d.ts.map +1 -0
- package/esm/cli/commands/skills/create.js +65 -0
- package/esm/cli/commands/skills/handler.d.ts +3 -0
- package/esm/cli/commands/skills/handler.d.ts.map +1 -0
- package/esm/cli/commands/skills/handler.js +82 -0
- package/esm/cli/commands/skills/validate.d.ts +3 -0
- package/esm/cli/commands/skills/validate.d.ts.map +1 -0
- package/esm/cli/commands/skills/validate.js +91 -0
- package/esm/cli/commands/start/command-help.d.ts.map +1 -1
- package/esm/cli/commands/start/command-help.js +1 -0
- package/esm/cli/commands/studio/command-help.d.ts.map +1 -1
- package/esm/cli/commands/studio/command-help.js +1 -0
- package/esm/cli/commands/styles/command-help.d.ts.map +1 -1
- package/esm/cli/commands/styles/command-help.js +1 -0
- package/esm/cli/commands/task/command-help.d.ts.map +1 -1
- package/esm/cli/commands/task/command-help.js +1 -0
- package/esm/cli/commands/test/command-help.d.ts +3 -0
- package/esm/cli/commands/test/command-help.d.ts.map +1 -0
- package/esm/cli/commands/test/command-help.js +16 -0
- package/esm/cli/commands/test/command.d.ts +25 -0
- package/esm/cli/commands/test/command.d.ts.map +1 -0
- package/esm/cli/commands/test/command.js +68 -0
- package/esm/cli/commands/test/handler.d.ts +3 -0
- package/esm/cli/commands/test/handler.d.ts.map +1 -0
- package/esm/cli/commands/test/handler.js +61 -0
- package/esm/cli/commands/up/command-help.d.ts.map +1 -1
- package/esm/cli/commands/up/command-help.js +1 -0
- package/esm/cli/commands/uploads/command-help.d.ts.map +1 -1
- package/esm/cli/commands/uploads/command-help.js +1 -0
- package/esm/cli/commands/whoami/command-help.d.ts.map +1 -1
- package/esm/cli/commands/whoami/command-help.js +1 -0
- package/esm/cli/commands/workflow/command-help.d.ts.map +1 -1
- package/esm/cli/commands/workflow/command-help.js +1 -0
- package/esm/cli/help/command-definitions.d.ts.map +1 -1
- package/esm/cli/help/command-definitions.js +10 -0
- package/esm/cli/help/main-help.d.ts.map +1 -1
- package/esm/cli/help/main-help.js +38 -5
- package/esm/cli/help/types.d.ts +2 -0
- package/esm/cli/help/types.d.ts.map +1 -1
- package/esm/cli/mcp/advanced-tools.d.ts.map +1 -1
- package/esm/cli/mcp/advanced-tools.js +4 -0
- package/esm/cli/mcp/server.d.ts.map +1 -1
- package/esm/cli/mcp/server.js +68 -0
- package/esm/cli/mcp/standalone.d.ts +2 -0
- package/esm/cli/mcp/standalone.d.ts.map +1 -1
- package/esm/cli/mcp/standalone.js +117 -2
- package/esm/cli/mcp/tools/cicd-tools.d.ts +3 -0
- package/esm/cli/mcp/tools/cicd-tools.d.ts.map +1 -0
- package/esm/cli/mcp/tools/cicd-tools.js +75 -0
- package/esm/cli/mcp/tools/introspection-tools.d.ts +3 -0
- package/esm/cli/mcp/tools/introspection-tools.d.ts.map +1 -0
- package/esm/cli/mcp/tools/introspection-tools.js +38 -0
- package/esm/cli/router.d.ts.map +1 -1
- package/esm/cli/router.js +35 -1
- package/esm/cli/shared/args.d.ts +4 -0
- package/esm/cli/shared/args.d.ts.map +1 -1
- package/esm/cli/shared/args.js +2 -0
- package/esm/cli/shared/interactive.d.ts +13 -0
- package/esm/cli/shared/interactive.d.ts.map +1 -0
- package/esm/cli/shared/interactive.js +26 -0
- package/esm/cli/shared/json-output.d.ts +52 -0
- package/esm/cli/shared/json-output.d.ts.map +1 -0
- package/esm/cli/shared/json-output.js +58 -0
- package/esm/cli/shared/suggest.d.ts +8 -0
- package/esm/cli/shared/suggest.d.ts.map +1 -0
- package/esm/cli/shared/suggest.js +25 -0
- package/esm/cli/skills/core-skills.d.ts +9 -0
- package/esm/cli/skills/core-skills.d.ts.map +1 -0
- package/esm/cli/skills/core-skills.js +230 -0
- package/esm/cli/skills/loader.d.ts +13 -0
- package/esm/cli/skills/loader.d.ts.map +1 -0
- package/esm/cli/skills/loader.js +87 -0
- package/esm/cli/skills/types.d.ts +29 -0
- package/esm/cli/skills/types.d.ts.map +1 -0
- package/esm/cli/skills/types.js +25 -0
- package/esm/cli/utils/index.d.ts.map +1 -1
- package/esm/cli/utils/index.js +3 -0
- package/esm/deno.d.ts +2 -0
- package/esm/deno.js +3 -1
- package/esm/src/html/dev-scripts.d.ts.map +1 -1
- package/esm/src/html/dev-scripts.js +3 -2
- package/esm/src/html/html-injection.d.ts.map +1 -1
- package/esm/src/html/html-injection.js +2 -1
- package/esm/src/html/html-shell-generator.js +1 -1
- package/esm/src/html/hydration-script-builder/dev-client-renderer.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/dev-client-renderer.js +2 -1
- package/esm/src/html/hydration-script-builder/dev-component-manifest.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/dev-component-manifest.js +2 -1
- package/esm/src/html/hydration-script-builder/dev-error-logger.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/dev-error-logger.js +2 -1
- package/esm/src/html/hydration-script-builder/dev-scripts.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/dev-scripts.js +2 -1
- package/esm/src/html/hydration-script-builder/prod-hydration.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/prod-hydration.js +2 -1
- package/esm/src/html/hydration-script-builder/prod-scripts.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/prod-scripts.js +2 -1
- package/esm/src/html/styles-builder/dev-styles.d.ts.map +1 -1
- package/esm/src/html/styles-builder/dev-styles.js +2 -1
- package/esm/src/modules/react-loader/ssr-module-loader/http-bundle-helpers.d.ts +10 -0
- package/esm/src/modules/react-loader/ssr-module-loader/http-bundle-helpers.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/http-bundle-helpers.js +53 -26
- package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/loader.js +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/ssr-cache-manager.js +3 -3
- package/esm/src/rendering/orchestrator/html.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/html.js +94 -5
- package/esm/src/rendering/orchestrator/module-loader/index.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/module-loader/index.js +2 -2
- package/esm/src/rendering/rsc/client-boot.ts +30 -4
- package/esm/src/rendering/snippet-renderer.js +1 -1
- package/esm/src/security/http/response/security-handler.d.ts.map +1 -1
- package/esm/src/security/http/response/security-handler.js +3 -2
- package/esm/src/server/dev-server/error-overlay/html-template.d.ts +1 -1
- package/esm/src/server/dev-server/error-overlay/html-template.d.ts.map +1 -1
- package/esm/src/server/dev-server/error-overlay/html-template.js +4 -3
- package/esm/src/server/dev-server/error-overlay/overlay-renderer.d.ts +1 -1
- package/esm/src/server/dev-server/error-overlay/overlay-renderer.d.ts.map +1 -1
- package/esm/src/server/dev-server/error-overlay/overlay-renderer.js +2 -2
- package/esm/src/server/services/rendering/ssr.service.d.ts.map +1 -1
- package/esm/src/server/services/rendering/ssr.service.js +3 -3
- package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.d.ts.map +1 -1
- package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.js +10 -5
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.d.ts +2 -2
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.js +13 -10
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/cache-keys.d.ts +2 -2
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/cache-keys.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/cache-keys.js +4 -4
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/framework-validator.d.ts +2 -3
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/framework-validator.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/framework-validator.js +71 -50
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.js +7 -5
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/module-cache.d.ts +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/module-cache.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/module-cache.js +3 -2
- package/esm/src/utils/version.d.ts +1 -1
- package/esm/src/utils/version.js +1 -1
- package/package.json +1 -1
- package/src/cli/auth/login.ts +14 -0
- package/src/cli/commands/analyze-chunks/command-help.ts +1 -0
- package/src/cli/commands/build/command-help.ts +1 -0
- package/src/cli/commands/build/command.ts +47 -2
- package/src/cli/commands/clean/command-help.ts +1 -0
- package/src/cli/commands/completions/command-help.ts +15 -0
- package/src/cli/commands/completions/command.ts +163 -0
- package/src/cli/commands/completions/handler.ts +29 -0
- package/src/cli/commands/demo/command-help.ts +1 -0
- package/src/cli/commands/deploy/command-help.ts +1 -0
- package/src/cli/commands/deploy/command.ts +82 -1
- package/src/cli/commands/dev/command-help.ts +1 -0
- package/src/cli/commands/doctor/command-help.ts +1 -0
- package/src/cli/commands/files/command-help.ts +1 -0
- package/src/cli/commands/generate/command-help.ts +1 -0
- package/src/cli/commands/init/command-help.ts +1 -0
- package/src/cli/commands/install/command-help.ts +2 -0
- package/src/cli/commands/issues/command-help.ts +1 -0
- package/src/cli/commands/knowledge/command-help.ts +1 -0
- package/src/cli/commands/lint/command-help.ts +15 -0
- package/src/cli/commands/lint/command.ts +59 -0
- package/src/cli/commands/lint/handler.ts +36 -0
- package/src/cli/commands/lock/command-help.ts +1 -0
- package/src/cli/commands/login/command-help.ts +1 -0
- package/src/cli/commands/logout/command-help.ts +1 -0
- package/src/cli/commands/mcp/command-help.ts +1 -0
- package/src/cli/commands/merge/command-help.ts +1 -0
- package/src/cli/commands/pull/command-help.ts +1 -0
- package/src/cli/commands/push/command-help.ts +1 -0
- package/src/cli/commands/routes/command-help.ts +1 -0
- package/src/cli/commands/schema/command-help.ts +17 -0
- package/src/cli/commands/schema/command.ts +64 -0
- package/src/cli/commands/schema/handler.ts +32 -0
- package/src/cli/commands/serve/command-help.ts +1 -0
- package/src/cli/commands/skills/command-help.ts +23 -0
- package/src/cli/commands/skills/command.ts +23 -0
- package/src/cli/commands/skills/create.ts +87 -0
- package/src/cli/commands/skills/handler.ts +106 -0
- package/src/cli/commands/skills/validate.ts +110 -0
- package/src/cli/commands/start/command-help.ts +1 -0
- package/src/cli/commands/studio/command-help.ts +1 -0
- package/src/cli/commands/styles/command-help.ts +1 -0
- package/src/cli/commands/task/command-help.ts +1 -0
- package/src/cli/commands/test/command-help.ts +18 -0
- package/src/cli/commands/test/command.ts +90 -0
- package/src/cli/commands/test/handler.ts +70 -0
- package/src/cli/commands/up/command-help.ts +1 -0
- package/src/cli/commands/uploads/command-help.ts +1 -0
- package/src/cli/commands/whoami/command-help.ts +1 -0
- package/src/cli/commands/workflow/command-help.ts +1 -0
- package/src/cli/help/command-definitions.ts +10 -0
- package/src/cli/help/main-help.ts +48 -5
- package/src/cli/help/types.ts +9 -0
- package/src/cli/mcp/advanced-tools.ts +4 -0
- package/src/cli/mcp/server.ts +72 -0
- package/src/cli/mcp/standalone.ts +133 -1
- package/src/cli/mcp/tools/cicd-tools.ts +86 -0
- package/src/cli/mcp/tools/introspection-tools.ts +46 -0
- package/src/cli/router.ts +32 -1
- package/src/cli/shared/args.ts +2 -0
- package/src/cli/shared/interactive.ts +33 -0
- package/src/cli/shared/json-output.ts +96 -0
- package/src/cli/shared/suggest.ts +33 -0
- package/src/cli/skills/core-skills.ts +233 -0
- package/src/cli/skills/loader.ts +98 -0
- package/src/cli/skills/types.ts +39 -0
- package/src/cli/utils/index.ts +2 -0
- package/src/deno.js +3 -1
- package/src/src/html/dev-scripts.ts +4 -2
- package/src/src/html/html-injection.ts +2 -1
- package/src/src/html/html-shell-generator.ts +1 -1
- package/src/src/html/hydration-script-builder/dev-client-renderer.ts +2 -1
- package/src/src/html/hydration-script-builder/dev-component-manifest.ts +2 -1
- package/src/src/html/hydration-script-builder/dev-error-logger.ts +3 -1
- package/src/src/html/hydration-script-builder/dev-scripts.ts +2 -1
- package/src/src/html/hydration-script-builder/prod-hydration.ts +2 -1
- package/src/src/html/hydration-script-builder/prod-scripts.ts +2 -1
- package/src/src/html/styles-builder/dev-styles.ts +2 -1
- package/src/src/modules/react-loader/ssr-module-loader/http-bundle-helpers.ts +65 -31
- package/src/src/modules/react-loader/ssr-module-loader/loader.ts +1 -0
- package/src/src/modules/react-loader/ssr-module-loader/ssr-cache-manager.ts +4 -4
- package/src/src/rendering/orchestrator/html.ts +113 -4
- package/src/src/rendering/orchestrator/module-loader/index.ts +2 -1
- package/src/src/rendering/snippet-renderer.ts +1 -1
- package/src/src/security/http/response/security-handler.ts +3 -2
- package/src/src/server/dev-server/error-overlay/html-template.ts +4 -2
- package/src/src/server/dev-server/error-overlay/overlay-renderer.ts +2 -1
- package/src/src/server/services/rendering/ssr.service.ts +12 -7
- package/src/src/server/services/rsc/endpoints/rsc-bundles.generated.ts +1 -1
- package/src/src/transforms/mdx/esm-module-loader/cache/index.ts +15 -4
- package/src/src/transforms/mdx/esm-module-loader/cache-format.ts +24 -6
- package/src/src/transforms/mdx/esm-module-loader/module-fetcher/cache-keys.ts +10 -3
- package/src/src/transforms/mdx/esm-module-loader/module-fetcher/framework-validator.ts +98 -51
- package/src/src/transforms/mdx/esm-module-loader/module-fetcher/index.ts +20 -4
- package/src/src/transforms/mdx/esm-module-loader/module-fetcher/module-cache.ts +3 -1
- package/src/src/utils/version.ts +1 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell completion generators
|
|
3
|
+
*
|
|
4
|
+
* Generates completion scripts from the COMMANDS registry.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands/completions
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { COMMANDS } from "../../help/command-definitions.js";
|
|
10
|
+
import type { CommandOption } from "../../help/types.js";
|
|
11
|
+
|
|
12
|
+
/** Escape a string for use in shell single-quoted contexts */
|
|
13
|
+
export function shellEscape(s: string): string {
|
|
14
|
+
return s.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Extract long flags (--name) from a CommandOption flag string.
|
|
19
|
+
* Handles formats like: "--port", "-p, --port", "-p, --port <number>"
|
|
20
|
+
*/
|
|
21
|
+
export function extractLongFlags(options: CommandOption[]): string[] {
|
|
22
|
+
return options.flatMap((o) =>
|
|
23
|
+
o.flag
|
|
24
|
+
.split(",")
|
|
25
|
+
.map((f) => f.trim().split(" ")[0]!)
|
|
26
|
+
.filter((f) => f.startsWith("--"))
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Extract short and long flags for fish completions.
|
|
32
|
+
* Returns { short: "p", long: "port" } pairs.
|
|
33
|
+
*/
|
|
34
|
+
export function extractFishFlags(
|
|
35
|
+
options: CommandOption[],
|
|
36
|
+
): Array<{ short?: string; long?: string; description: string }> {
|
|
37
|
+
return options.map((o) => {
|
|
38
|
+
const parts = o.flag.split(",").map((f) => f.trim().split(" ")[0]!);
|
|
39
|
+
const short = parts.find((p) => p.match(/^-[a-zA-Z]$/))?.slice(1);
|
|
40
|
+
const long = parts.find((p) => p.startsWith("--"))?.slice(2);
|
|
41
|
+
return { short, long, description: o.description };
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const GLOBAL_FLAGS = [
|
|
46
|
+
"--json",
|
|
47
|
+
"--yes",
|
|
48
|
+
"--quiet",
|
|
49
|
+
"--verbose",
|
|
50
|
+
"--help",
|
|
51
|
+
"--version",
|
|
52
|
+
"--no-color",
|
|
53
|
+
"--output",
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
export function generateBashCompletions(): string {
|
|
57
|
+
const commands = Object.values(COMMANDS);
|
|
58
|
+
const cmdNames = commands.map((c) => c.name).join(" ");
|
|
59
|
+
|
|
60
|
+
let script = `# Veryfront CLI bash completions\n_veryfront_completions() {\n`;
|
|
61
|
+
script += ` local cur prev commands\n`;
|
|
62
|
+
script += ` cur="\${COMP_WORDS[COMP_CWORD]}"\n`;
|
|
63
|
+
script += ` prev="\${COMP_WORDS[COMP_CWORD-1]}"\n`;
|
|
64
|
+
script += ` commands="${cmdNames}"\n\n`;
|
|
65
|
+
script += ` if [[ \${COMP_CWORD} -eq 1 ]]; then\n`;
|
|
66
|
+
script += ` COMPREPLY=( $(compgen -W "\${commands}" -- "\${cur}") )\n`;
|
|
67
|
+
script += ` return\n`;
|
|
68
|
+
script += ` fi\n\n`;
|
|
69
|
+
script += ` case "\${COMP_WORDS[1]}" in\n`;
|
|
70
|
+
|
|
71
|
+
for (const cmd of commands) {
|
|
72
|
+
const flags = extractLongFlags(cmd.options ?? [])
|
|
73
|
+
.concat(GLOBAL_FLAGS)
|
|
74
|
+
.join(" ");
|
|
75
|
+
script += ` ${cmd.name}) COMPREPLY=( $(compgen -W "${flags}" -- "\${cur}") ) ;;\n`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
script += ` *) COMPREPLY=( $(compgen -W "${GLOBAL_FLAGS.join(" ")}" -- "\${cur}") ) ;;\n`;
|
|
79
|
+
script += ` esac\n`;
|
|
80
|
+
script += `}\n`;
|
|
81
|
+
script += `complete -F _veryfront_completions veryfront\n`;
|
|
82
|
+
return script;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function generateZshCompletions(): string {
|
|
86
|
+
const commands = Object.values(COMMANDS);
|
|
87
|
+
let script = `#compdef veryfront\n# Veryfront CLI zsh completions\n\n`;
|
|
88
|
+
script += `_veryfront() {\n`;
|
|
89
|
+
script += ` local -a commands\n`;
|
|
90
|
+
script += ` commands=(\n`;
|
|
91
|
+
|
|
92
|
+
for (const cmd of commands) {
|
|
93
|
+
const desc = shellEscape(cmd.description);
|
|
94
|
+
script += ` '${cmd.name}:${desc}'\n`;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
script += ` )\n\n`;
|
|
98
|
+
script += ` _arguments -C \\\n`;
|
|
99
|
+
script += ` '1:command:->command' \\\n`;
|
|
100
|
+
script += ` '*::arg:->args'\n\n`;
|
|
101
|
+
script += ` case $state in\n`;
|
|
102
|
+
script += ` command)\n`;
|
|
103
|
+
script += ` _describe 'command' commands\n`;
|
|
104
|
+
script += ` ;;\n`;
|
|
105
|
+
script += ` args)\n`;
|
|
106
|
+
script += ` case \${words[1]} in\n`;
|
|
107
|
+
|
|
108
|
+
for (const cmd of commands) {
|
|
109
|
+
const flags = extractLongFlags(cmd.options ?? []).concat(GLOBAL_FLAGS);
|
|
110
|
+
if (flags.length > 0) {
|
|
111
|
+
const zshFlags = flags.map((f) =>
|
|
112
|
+
`'${f}[${
|
|
113
|
+
shellEscape(
|
|
114
|
+
(cmd.options ?? []).find((o) => o.flag.includes(f))?.description ??
|
|
115
|
+
"",
|
|
116
|
+
)
|
|
117
|
+
}]'`
|
|
118
|
+
).join(" ");
|
|
119
|
+
script += ` ${cmd.name}) _arguments ${zshFlags} ;;\n`;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
script += ` esac\n`;
|
|
124
|
+
script += ` ;;\n`;
|
|
125
|
+
script += ` esac\n`;
|
|
126
|
+
script += `}\n\n`;
|
|
127
|
+
script += `_veryfront\n`;
|
|
128
|
+
return script;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function generateFishCompletions(): string {
|
|
132
|
+
const commands = Object.values(COMMANDS);
|
|
133
|
+
let script = `# Veryfront CLI fish completions\n`;
|
|
134
|
+
|
|
135
|
+
for (const cmd of commands) {
|
|
136
|
+
const desc = shellEscape(cmd.description);
|
|
137
|
+
script += `complete -c veryfront -n '__fish_use_subcommand' -a '${cmd.name}' -d '${desc}'\n`;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
script += `\n`;
|
|
141
|
+
|
|
142
|
+
for (const cmd of commands) {
|
|
143
|
+
const flags = extractFishFlags(cmd.options ?? []);
|
|
144
|
+
for (const flag of flags) {
|
|
145
|
+
if (flag.long) {
|
|
146
|
+
const desc = shellEscape(flag.description);
|
|
147
|
+
let line =
|
|
148
|
+
`complete -c veryfront -n '__fish_seen_subcommand_from ${cmd.name}' -l '${flag.long}'`;
|
|
149
|
+
if (flag.short) {
|
|
150
|
+
line += ` -s '${flag.short}'`;
|
|
151
|
+
}
|
|
152
|
+
line += ` -d '${desc}'\n`;
|
|
153
|
+
script += line;
|
|
154
|
+
} else if (flag.short) {
|
|
155
|
+
const desc = shellEscape(flag.description);
|
|
156
|
+
script +=
|
|
157
|
+
`complete -c veryfront -n '__fish_seen_subcommand_from ${cmd.name}' -s '${flag.short}' -d '${desc}'\n`;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return script;
|
|
163
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as dntShim from "../../../_dnt.shims.js";
|
|
2
|
+
import type { ParsedArgs } from "../../shared/types.js";
|
|
3
|
+
import {
|
|
4
|
+
generateBashCompletions,
|
|
5
|
+
generateFishCompletions,
|
|
6
|
+
generateZshCompletions,
|
|
7
|
+
} from "./command.js";
|
|
8
|
+
|
|
9
|
+
export async function handleCompletionsCommand(
|
|
10
|
+
args: ParsedArgs,
|
|
11
|
+
): Promise<void> {
|
|
12
|
+
const shell = args._[1] as string | undefined;
|
|
13
|
+
|
|
14
|
+
switch (shell) {
|
|
15
|
+
case "bash":
|
|
16
|
+
console.log(generateBashCompletions());
|
|
17
|
+
break;
|
|
18
|
+
case "zsh":
|
|
19
|
+
console.log(generateZshCompletions());
|
|
20
|
+
break;
|
|
21
|
+
case "fish":
|
|
22
|
+
console.log(generateFishCompletions());
|
|
23
|
+
break;
|
|
24
|
+
default:
|
|
25
|
+
console.error("Usage: veryfront completions <bash|zsh|fish>");
|
|
26
|
+
console.error('Example: eval "$(veryfront completions bash)"');
|
|
27
|
+
dntShim.Deno.exit(1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -13,6 +13,7 @@ import { type ApiClient, createApiClient, resolveConfigWithAuth } from "../../sh
|
|
|
13
13
|
import { CommonArgs, createArgParser } from "../../shared/args.js";
|
|
14
14
|
import { confirmPrompt, logInfo, logSuccess } from "../../utils/index.js";
|
|
15
15
|
import { createNoopSpinner, createSpinner, muted } from "../../ui/index.js";
|
|
16
|
+
import { isJsonMode, streamJsonLine } from "../../shared/json-output.js";
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* Zod schema for deploy command arguments
|
|
@@ -148,9 +149,12 @@ export function createDeployment(
|
|
|
148
149
|
export async function deployCommand(options: DeployOptions): Promise<void> {
|
|
149
150
|
const { branch, env, releaseName, dryRun, force, quiet } = options;
|
|
150
151
|
|
|
152
|
+
if (isJsonMode()) {
|
|
153
|
+
return deployCommandJson(options);
|
|
154
|
+
}
|
|
155
|
+
|
|
151
156
|
let spinner = quiet ? createNoopSpinner() : createSpinner("Resolving configuration...");
|
|
152
157
|
|
|
153
|
-
// Use interactive auth - prompts for login if not authenticated
|
|
154
158
|
const config = await resolveConfigWithAuth(cwd());
|
|
155
159
|
const client = createApiClient(config);
|
|
156
160
|
|
|
@@ -196,3 +200,80 @@ export async function deployCommand(options: DeployOptions): Promise<void> {
|
|
|
196
200
|
logInfo(` Release: ${release.name} (${release.version})`);
|
|
197
201
|
logInfo(` Environment: ${env}`);
|
|
198
202
|
}
|
|
203
|
+
|
|
204
|
+
async function deployCommandJson(options: DeployOptions): Promise<void> {
|
|
205
|
+
const { branch, env, releaseName, dryRun, force } = options;
|
|
206
|
+
|
|
207
|
+
try {
|
|
208
|
+
// JSON mode requires --force or --yes to prevent accidental deploys
|
|
209
|
+
const { isInteractive } = await import("../../shared/interactive.js");
|
|
210
|
+
if (!force && isInteractive()) {
|
|
211
|
+
streamJsonLine({
|
|
212
|
+
type: "result",
|
|
213
|
+
success: false,
|
|
214
|
+
error:
|
|
215
|
+
"Deploy in JSON mode requires --force or --yes to confirm. This prevents accidental production deploys.",
|
|
216
|
+
});
|
|
217
|
+
const { exit } = await import("../../../src/platform/index.js");
|
|
218
|
+
exit(1);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
streamJsonLine({ type: "step", name: "resolve-config", status: "started" });
|
|
223
|
+
const config = await resolveConfigWithAuth(cwd());
|
|
224
|
+
const client = createApiClient(config);
|
|
225
|
+
streamJsonLine({ type: "step", name: "resolve-config", status: "completed" });
|
|
226
|
+
|
|
227
|
+
streamJsonLine({ type: "step", name: "resolve-environment", status: "started" });
|
|
228
|
+
const environment = await getEnvironmentByName(client, config.projectSlug, env);
|
|
229
|
+
if (!environment) {
|
|
230
|
+
streamJsonLine({
|
|
231
|
+
type: "result",
|
|
232
|
+
success: false,
|
|
233
|
+
error: `Environment "${env}" not found`,
|
|
234
|
+
});
|
|
235
|
+
const { exit } = await import("../../../src/platform/index.js");
|
|
236
|
+
exit(1);
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
streamJsonLine({ type: "step", name: "resolve-environment", status: "completed" });
|
|
240
|
+
|
|
241
|
+
if (dryRun) {
|
|
242
|
+
streamJsonLine({
|
|
243
|
+
type: "result",
|
|
244
|
+
success: true,
|
|
245
|
+
data: { dryRun: true, branch, environment: env },
|
|
246
|
+
});
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
streamJsonLine({ type: "step", name: "create-release", status: "started" });
|
|
251
|
+
const release = await createRelease(client, config.projectSlug, {
|
|
252
|
+
name: releaseName,
|
|
253
|
+
branch,
|
|
254
|
+
});
|
|
255
|
+
streamJsonLine({ type: "step", name: "create-release", status: "completed" });
|
|
256
|
+
|
|
257
|
+
streamJsonLine({ type: "step", name: "deploy", status: "started" });
|
|
258
|
+
await createDeployment(client, config.projectSlug, release.id, environment.id);
|
|
259
|
+
streamJsonLine({ type: "step", name: "deploy", status: "completed" });
|
|
260
|
+
|
|
261
|
+
streamJsonLine({
|
|
262
|
+
type: "result",
|
|
263
|
+
success: true,
|
|
264
|
+
data: {
|
|
265
|
+
release: { id: release.id, name: release.name, version: release.version },
|
|
266
|
+
environment: env,
|
|
267
|
+
branch,
|
|
268
|
+
},
|
|
269
|
+
});
|
|
270
|
+
} catch (error) {
|
|
271
|
+
streamJsonLine({
|
|
272
|
+
type: "result",
|
|
273
|
+
success: false,
|
|
274
|
+
error: error instanceof Error ? error.message : String(error),
|
|
275
|
+
});
|
|
276
|
+
const { exit } = await import("../../../src/platform/index.js");
|
|
277
|
+
exit(1);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
@@ -2,6 +2,7 @@ import type { CommandHelp } from "../../help/types.js";
|
|
|
2
2
|
|
|
3
3
|
export const installHelp: CommandHelp = {
|
|
4
4
|
name: "install",
|
|
5
|
+
category: "project",
|
|
5
6
|
description: "Install AI assistant integrations (Cursor, Claude Code, etc.)",
|
|
6
7
|
usage: "veryfront install [options]",
|
|
7
8
|
options: [
|
|
@@ -35,6 +36,7 @@ export const installHelp: CommandHelp = {
|
|
|
35
36
|
|
|
36
37
|
export const uninstallHelp: CommandHelp = {
|
|
37
38
|
name: "uninstall",
|
|
39
|
+
category: "project",
|
|
38
40
|
description: "Remove AI assistant integrations",
|
|
39
41
|
usage: "veryfront uninstall [options]",
|
|
40
42
|
options: [
|
|
@@ -2,6 +2,7 @@ import type { CommandHelp } from "../../help/types.js";
|
|
|
2
2
|
|
|
3
3
|
export const knowledgeHelp: CommandHelp = {
|
|
4
4
|
name: "knowledge",
|
|
5
|
+
category: "files",
|
|
5
6
|
description: "Ingest documents into the project knowledge base",
|
|
6
7
|
usage: "veryfront knowledge ingest <source...> [options]",
|
|
7
8
|
options: [
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CommandHelp } from "../../help/types.js";
|
|
2
|
+
|
|
3
|
+
export const lintHelp: CommandHelp = {
|
|
4
|
+
name: "lint",
|
|
5
|
+
category: "development",
|
|
6
|
+
description: "Run linter with optional structured JSON output",
|
|
7
|
+
usage: "veryfront lint [options]",
|
|
8
|
+
options: [
|
|
9
|
+
{ flag: "--json", description: "Output structured JSON results" },
|
|
10
|
+
],
|
|
11
|
+
examples: [
|
|
12
|
+
"veryfront lint",
|
|
13
|
+
"veryfront lint --json",
|
|
14
|
+
],
|
|
15
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lint wrapper command
|
|
3
|
+
*
|
|
4
|
+
* Runs deno lint and transforms output to structured JSON.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands/lint
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export interface LintDiagnostic {
|
|
10
|
+
file: string;
|
|
11
|
+
line: number;
|
|
12
|
+
col: number;
|
|
13
|
+
code: string;
|
|
14
|
+
message: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface LintResult {
|
|
18
|
+
success: boolean;
|
|
19
|
+
diagnostics: LintDiagnostic[];
|
|
20
|
+
summary: {
|
|
21
|
+
total: number;
|
|
22
|
+
files_checked: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function parseLintJsonOutput(output: string, exitCode: number): LintResult {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = JSON.parse(output);
|
|
29
|
+
const diagnostics: LintDiagnostic[] = (parsed.diagnostics ?? []).map(
|
|
30
|
+
(d: {
|
|
31
|
+
filename?: string;
|
|
32
|
+
range?: { start?: { line?: number; col?: number } };
|
|
33
|
+
code?: string;
|
|
34
|
+
message?: string;
|
|
35
|
+
}) => ({
|
|
36
|
+
file: d.filename ?? "",
|
|
37
|
+
line: d.range?.start?.line ?? 0,
|
|
38
|
+
col: d.range?.start?.col ?? 0,
|
|
39
|
+
code: d.code ?? "",
|
|
40
|
+
message: d.message ?? "",
|
|
41
|
+
}),
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
success: exitCode === 0,
|
|
46
|
+
diagnostics,
|
|
47
|
+
summary: {
|
|
48
|
+
total: diagnostics.length,
|
|
49
|
+
files_checked: new Set(diagnostics.map((d) => d.file)).size,
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
} catch {
|
|
53
|
+
return {
|
|
54
|
+
success: exitCode === 0,
|
|
55
|
+
diagnostics: [],
|
|
56
|
+
summary: { total: 0, files_checked: 0 },
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as dntShim from "../../../_dnt.shims.js";
|
|
2
|
+
import type { ParsedArgs } from "../../shared/types.js";
|
|
3
|
+
import { createSuccessEnvelope, isJsonMode, outputJson } from "../../shared/json-output.js";
|
|
4
|
+
import { parseLintJsonOutput } from "./command.js";
|
|
5
|
+
|
|
6
|
+
export async function handleLintCommand(_args: ParsedArgs): Promise<void> {
|
|
7
|
+
const cmd = new dntShim.Deno.Command("deno", {
|
|
8
|
+
args: ["lint", "--json"],
|
|
9
|
+
stdout: "piped",
|
|
10
|
+
stderr: "piped",
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const result = await cmd.output();
|
|
14
|
+
const stdout = new TextDecoder().decode(result.stdout);
|
|
15
|
+
|
|
16
|
+
if (isJsonMode()) {
|
|
17
|
+
const parsed = parseLintJsonOutput(stdout, result.code);
|
|
18
|
+
await outputJson(createSuccessEnvelope("lint", parsed));
|
|
19
|
+
} else {
|
|
20
|
+
if (result.code === 0) {
|
|
21
|
+
console.log("No lint issues found.");
|
|
22
|
+
} else {
|
|
23
|
+
// Re-run without --json for human-readable output
|
|
24
|
+
const humanCmd = new dntShim.Deno.Command("deno", {
|
|
25
|
+
args: ["lint"],
|
|
26
|
+
stdout: "inherit",
|
|
27
|
+
stderr: "inherit",
|
|
28
|
+
});
|
|
29
|
+
const humanResult = await humanCmd.output();
|
|
30
|
+
dntShim.Deno.exit(humanResult.code);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
dntShim.Deno.exit(result.code);
|
|
36
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CommandHelp } from "../../help/types.js";
|
|
2
|
+
|
|
3
|
+
export const schemaHelp: CommandHelp = {
|
|
4
|
+
name: "schema",
|
|
5
|
+
category: "development",
|
|
6
|
+
description: "Show CLI command schema for agent discovery",
|
|
7
|
+
usage: "veryfront schema [command] [options]",
|
|
8
|
+
options: [
|
|
9
|
+
{ flag: "--json", description: "Output as JSON (default for this command)" },
|
|
10
|
+
{ flag: "--category <cat>", description: "Filter commands by category" },
|
|
11
|
+
],
|
|
12
|
+
examples: [
|
|
13
|
+
"veryfront schema --json",
|
|
14
|
+
"veryfront schema deploy --json",
|
|
15
|
+
"veryfront schema --category ai --json",
|
|
16
|
+
],
|
|
17
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema introspection command
|
|
3
|
+
*
|
|
4
|
+
* Generates a machine-readable description of all CLI commands,
|
|
5
|
+
* their arguments, flags, and output schemas.
|
|
6
|
+
* Single source of truth: derived from COMMANDS registry and help definitions.
|
|
7
|
+
*
|
|
8
|
+
* @module cli/commands/schema
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { COMMANDS } from "../../help/command-definitions.js";
|
|
12
|
+
import type { CommandCategory, CommandHelp } from "../../help/types.js";
|
|
13
|
+
import { VERSION } from "../../utils/index.js";
|
|
14
|
+
|
|
15
|
+
export interface CommandSchema {
|
|
16
|
+
name: string;
|
|
17
|
+
category: string;
|
|
18
|
+
description: string;
|
|
19
|
+
usage: string;
|
|
20
|
+
options: Array<{
|
|
21
|
+
flag: string;
|
|
22
|
+
description: string;
|
|
23
|
+
default?: string;
|
|
24
|
+
}>;
|
|
25
|
+
flags: string[];
|
|
26
|
+
examples: string[];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface FullSchema {
|
|
30
|
+
version: string;
|
|
31
|
+
commands: CommandSchema[];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function commandToSchema(help: CommandHelp): CommandSchema {
|
|
35
|
+
const globalFlags = ["--json", "--quiet", "--verbose", "--yes", "--help"];
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
name: help.name,
|
|
39
|
+
category: help.category,
|
|
40
|
+
description: help.description,
|
|
41
|
+
usage: help.usage,
|
|
42
|
+
options: (help.options ?? []).map((o) => ({
|
|
43
|
+
flag: o.flag,
|
|
44
|
+
description: o.description,
|
|
45
|
+
...(o.default ? { default: o.default } : {}),
|
|
46
|
+
})),
|
|
47
|
+
flags: globalFlags,
|
|
48
|
+
examples: help.examples ?? [],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function generateSchema(category?: CommandCategory): FullSchema {
|
|
53
|
+
const commands = Object.values(COMMANDS)
|
|
54
|
+
.filter((cmd) => !category || cmd.category === category)
|
|
55
|
+
.map(commandToSchema);
|
|
56
|
+
|
|
57
|
+
return { version: VERSION, commands };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function generateCommandSchema(name: string): CommandSchema | null {
|
|
61
|
+
const help = COMMANDS[name];
|
|
62
|
+
if (!help) return null;
|
|
63
|
+
return commandToSchema(help);
|
|
64
|
+
}
|