@lovrabet/rabetbase-cli 2.3.16-beta.7 → 2.4.1
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/README.md +4 -10
- package/lib/api/api-doc.js +1 -1
- package/lib/api/fetch-model-list.js +1 -1
- package/lib/api/generate-api-file.js +1 -1
- package/lib/auth/auth-server-ui.js +1 -1
- package/lib/auth/auth-server.js +1 -1
- package/lib/auth/constant.js +1 -1
- package/lib/auth/get-cookie.js +1 -1
- package/lib/auth/get-session-user.js +1 -1
- package/lib/auth/is-session-valid.js +1 -1
- package/lib/auth/login-success-html.js +1 -1
- package/lib/auth/logout.js +1 -1
- package/lib/cli-flags.js +1 -1
- package/lib/cli.js +1 -1
- package/lib/commands/api/generate.js +1 -1
- package/lib/commands/api/index.js +1 -1
- package/lib/commands/api/list.js +1 -1
- package/lib/commands/api/pull.js +1 -1
- package/lib/commands/api/shared.js +1 -1
- package/lib/commands/app/index.js +1 -1
- package/lib/commands/app/list.js +1 -1
- package/lib/commands/app/members-list.js +1 -1
- package/lib/commands/app/remote-directory.js +1 -1
- package/lib/commands/app/shared.js +1 -1
- package/lib/commands/app-config/delete.js +1 -1
- package/lib/commands/app-config/get.js +1 -1
- package/lib/commands/app-config/index.js +1 -1
- package/lib/commands/app-config/list.js +1 -1
- package/lib/commands/app-config/set.js +1 -1
- package/lib/commands/app-config/shared.js +1 -1
- package/lib/commands/auth/index.js +1 -1
- package/lib/commands/bff/create.js +1 -1
- package/lib/commands/bff/delete.js +1 -1
- package/lib/commands/bff/detail.js +1 -1
- package/lib/commands/bff/index.js +1 -1
- package/lib/commands/bff/list.js +1 -1
- package/lib/commands/bff/pull.js +1 -1
- package/lib/commands/bff/push.js +1 -1
- package/lib/commands/bff/status.js +1 -1
- package/lib/commands/cli-skill/index.js +1 -1
- package/lib/commands/cli-update.js +1 -1
- package/lib/commands/codegen/index.js +1 -1
- package/lib/commands/codegen/sdk.js +1 -1
- package/lib/commands/codegen/sql.js +1 -1
- package/lib/commands/common/app-registry.js +1 -1
- package/lib/commands/common/app-selector.js +1 -1
- package/lib/commands/common/async-task.js +1 -1
- package/lib/commands/common/dry-run.js +1 -1
- package/lib/commands/common/flags.js +1 -1
- package/lib/commands/common/local-file.js +1 -1
- package/lib/commands/common/validate.js +1 -1
- package/lib/commands/config/get.js +1 -1
- package/lib/commands/config/index.js +1 -1
- package/lib/commands/config/list.js +1 -1
- package/lib/commands/config/set.js +1 -1
- package/lib/commands/config/shared.js +1 -1
- package/lib/commands/data/filter.js +1 -1
- package/lib/commands/data/getOne.js +1 -1
- package/lib/commands/data/index.js +1 -1
- package/lib/commands/data/shared.js +1 -1
- package/lib/commands/dataset/business-group-update.js +1 -1
- package/lib/commands/dataset/capability.js +1 -1
- package/lib/commands/dataset/delete.js +1 -1
- package/lib/commands/dataset/detail.js +1 -1
- package/lib/commands/dataset/extend-update.js +1 -1
- package/lib/commands/dataset/field-update.js +1 -1
- package/lib/commands/dataset/generate.js +1 -1
- package/lib/commands/dataset/index.js +1 -1
- package/lib/commands/dataset/list.js +1 -1
- package/lib/commands/dataset/operations.js +1 -1
- package/lib/commands/dataset/relation-audit.js +1 -1
- package/lib/commands/dataset/relation-create.js +1 -1
- package/lib/commands/dataset/relation-delete.js +1 -1
- package/lib/commands/dataset/relation-shared.js +1 -1
- package/lib/commands/dataset/relation-update.js +1 -1
- package/lib/commands/dataset/relations.js +1 -1
- package/lib/commands/dataset/rename.js +1 -1
- package/lib/commands/dataset/restore.js +1 -1
- package/lib/commands/db/analysis-batching.js +1 -1
- package/lib/commands/db/analyze-batch-plan.js +1 -1
- package/lib/commands/db/analyze-cancel.js +1 -1
- package/lib/commands/db/analyze-start.js +1 -1
- package/lib/commands/db/analyze-status.js +1 -1
- package/lib/commands/db/create.js +1 -1
- package/lib/commands/db/delete.js +1 -1
- package/lib/commands/db/detail.js +1 -1
- package/lib/commands/db/diff.js +1 -1
- package/lib/commands/db/index.js +1 -1
- package/lib/commands/db/list.js +1 -1
- package/lib/commands/db/shared.js +1 -1
- package/lib/commands/db/tables.js +1 -1
- package/lib/commands/db/test.js +1 -1
- package/lib/commands/db/update.js +1 -1
- package/lib/commands/doctor.js +1 -1
- package/lib/commands/file/index.js +1 -1
- package/lib/commands/init/index.js +1 -1
- package/lib/commands/issue/index.js +1 -1
- package/lib/commands/issue/nudge.js +1 -1
- package/lib/commands/issue/report.js +1 -1
- package/lib/commands/issue/shared.js +1 -1
- package/lib/commands/kb/create.js +1 -1
- package/lib/commands/kb/delete.js +1 -1
- package/lib/commands/kb/detail.js +1 -1
- package/lib/commands/kb/index.js +1 -1
- package/lib/commands/kb/list.js +1 -1
- package/lib/commands/kb/shared.js +1 -1
- package/lib/commands/kb/update.js +1 -1
- package/lib/commands/logs/index.js +1 -1
- package/lib/commands/menu/asset-update.js +1 -1
- package/lib/commands/menu/delete.js +1 -1
- package/lib/commands/menu/external-link-create.js +1 -1
- package/lib/commands/menu/external-link-update.js +1 -1
- package/lib/commands/menu/group-create.js +1 -1
- package/lib/commands/menu/group-update.js +1 -1
- package/lib/commands/menu/index.js +1 -1
- package/lib/commands/menu/list.js +1 -1
- package/lib/commands/menu/move.js +1 -1
- package/lib/commands/menu/regroup-start.js +1 -1
- package/lib/commands/menu/rename.js +1 -1
- package/lib/commands/menu/shared/compare-table.js +1 -1
- package/lib/commands/menu/shared/delete-plan.js +1 -1
- package/lib/commands/menu/shared/facts.js +1 -1
- package/lib/commands/menu/shared/index.js +1 -1
- package/lib/commands/menu/shared/inquirer.js +1 -1
- package/lib/commands/menu/shared/local-pages.js +1 -1
- package/lib/commands/menu/shared/logic.js +1 -1
- package/lib/commands/menu/shared/mutations.js +1 -1
- package/lib/commands/menu/shared/service.js +1 -1
- package/lib/commands/menu/shared/sync-core.js +1 -1
- package/lib/commands/menu/shared/update-core.js +1 -1
- package/lib/commands/menu/shared/valid-url.js +1 -1
- package/lib/commands/menu/sync.js +1 -1
- package/lib/commands/notification/config-list.js +1 -1
- package/lib/commands/notification/index.js +1 -1
- package/lib/commands/ocr/index.js +1 -1
- package/lib/commands/page/generate-start.js +1 -1
- package/lib/commands/page/generate-status.js +1 -1
- package/lib/commands/page/index.js +1 -1
- package/lib/commands/page/pull.js +1 -1
- package/lib/commands/page/push.js +1 -1
- package/lib/commands/page/react/create.d.ts +2 -0
- package/lib/commands/page/react/create.js +1 -0
- package/lib/commands/page/react/detail.d.ts +2 -0
- package/lib/commands/page/react/detail.js +1 -0
- package/lib/commands/page/react/list.d.ts +2 -0
- package/lib/commands/page/react/list.js +1 -0
- package/lib/commands/page/react/publish.d.ts +2 -0
- package/lib/commands/page/react/publish.js +1 -0
- package/lib/commands/page/react/shared.d.ts +78 -0
- package/lib/commands/page/react/shared.js +1 -0
- package/lib/commands/page/react/syntax.d.ts +18 -0
- package/lib/commands/page/react/syntax.js +1 -0
- package/lib/commands/page/react/template.d.ts +8 -0
- package/lib/commands/page/react/template.js +1 -0
- package/lib/commands/page/react/update.d.ts +2 -0
- package/lib/commands/page/react/update.js +1 -0
- package/lib/commands/page/relation-audit.js +1 -1
- package/lib/commands/page/restore.js +1 -1
- package/lib/commands/page/shared.d.ts +1 -0
- package/lib/commands/page/shared.js +1 -1
- package/lib/commands/page/standard-page-status.js +1 -1
- package/lib/commands/page/sync.js +1 -1
- package/lib/commands/permit/index.js +1 -1
- package/lib/commands/permit/page-get.js +1 -1
- package/lib/commands/permit/page-set.js +1 -1
- package/lib/commands/permit/role-apis-set.js +1 -1
- package/lib/commands/permit/role-menus-set.js +1 -1
- package/lib/commands/permit/role-menus.js +1 -1
- package/lib/commands/permit/shared.js +1 -1
- package/lib/commands/project/create/enhanced-guided-create.js +1 -1
- package/lib/commands/project/create/format-elapsed.js +1 -1
- package/lib/commands/project/create/main.js +1 -1
- package/lib/commands/project/create/non-interactive.js +1 -1
- package/lib/commands/project/create/project-template-path.js +1 -1
- package/lib/commands/project/create/use-copy-project-template.js +1 -1
- package/lib/commands/project/create/use-format-code.js +1 -1
- package/lib/commands/project/create/use-install-dependencies.js +1 -1
- package/lib/commands/project/index.js +1 -1
- package/lib/commands/project/upgrade.js +1 -1
- package/lib/commands/registry.js +1 -1
- package/lib/commands/role/create.js +1 -1
- package/lib/commands/role/delete.js +1 -1
- package/lib/commands/role/detail.js +1 -1
- package/lib/commands/role/index.js +1 -1
- package/lib/commands/role/list.js +1 -1
- package/lib/commands/role/shared.js +1 -1
- package/lib/commands/role/update.js +1 -1
- package/lib/commands/role/user-add.js +1 -1
- package/lib/commands/role/user-remove.js +1 -1
- package/lib/commands/role/user-resolve.js +1 -1
- package/lib/commands/run/index.js +1 -1
- package/lib/commands/schema.js +1 -1
- package/lib/commands/sql/create.js +1 -1
- package/lib/commands/sql/delete.js +1 -1
- package/lib/commands/sql/detail.js +1 -1
- package/lib/commands/sql/exec.js +1 -1
- package/lib/commands/sql/index.js +1 -1
- package/lib/commands/sql/list.js +1 -1
- package/lib/commands/sql/pull.js +1 -1
- package/lib/commands/sql/push.js +1 -1
- package/lib/commands/sql/shared.js +1 -1
- package/lib/commands/sql/status.js +1 -1
- package/lib/commands/sql/validate.js +1 -1
- package/lib/commands/task/index.js +1 -1
- package/lib/commands/task/status.js +1 -1
- package/lib/commands/tenant/index.js +1 -1
- package/lib/commands/tenant/members-list.js +1 -1
- package/lib/commands/tenant/shared.js +1 -1
- package/lib/commands/user-account/dingding-sandbox-bind.d.ts +2 -0
- package/lib/commands/user-account/dingding-sandbox-bind.js +1 -0
- package/lib/commands/user-account/index.d.ts +2 -0
- package/lib/commands/user-account/index.js +1 -0
- package/lib/commands/workspace/add.js +1 -1
- package/lib/commands/workspace/index.js +1 -1
- package/lib/commands/workspace/remove.js +1 -1
- package/lib/config/schema.js +1 -1
- package/lib/constant/cdn.js +1 -1
- package/lib/constant/cli.js +1 -1
- package/lib/constant/defaults.js +1 -1
- package/lib/constant/domain.js +1 -1
- package/lib/constant/env.js +1 -1
- package/lib/constant/output.js +1 -1
- package/lib/constant/paths.js +1 -1
- package/lib/constant/risk.js +1 -1
- package/lib/context/app-resolver.js +1 -1
- package/lib/context/auth-resolver.js +1 -1
- package/lib/context/config-loader.js +1 -1
- package/lib/context.js +1 -1
- package/lib/core/alias-resolver.js +1 -1
- package/lib/core/api-client.d.ts +117 -0
- package/lib/core/api-client.js +1 -1
- package/lib/core/bff/config.js +1 -1
- package/lib/core/bff/file-system.js +1 -1
- package/lib/core/bff/hash.js +1 -1
- package/lib/core/bff/lock.js +1 -1
- package/lib/core/bff/utils.js +1 -1
- package/lib/core/db-resolver.js +1 -1
- package/lib/core/page/file-system.js +1 -1
- package/lib/core/page/hash.js +1 -1
- package/lib/core/page/lock.js +1 -1
- package/lib/core/sql-index-auditor.js +1 -1
- package/lib/core/sql-sync/config.js +1 -1
- package/lib/core/sql-sync/file-system.js +1 -1
- package/lib/core/sql-sync/hash.js +1 -1
- package/lib/core/sql-sync/lock.js +1 -1
- package/lib/core/sql-sync/utils.js +1 -1
- package/lib/core/sql-validator.js +1 -1
- package/lib/errors.js +1 -1
- package/lib/framework/build-all-flags.js +1 -1
- package/lib/framework/error-output.js +1 -1
- package/lib/framework/explicit-yes.js +1 -1
- package/lib/framework/flags.js +1 -1
- package/lib/framework/help.js +1 -1
- package/lib/framework/index.js +1 -1
- package/lib/framework/output.js +1 -1
- package/lib/framework/response.js +1 -1
- package/lib/framework/runner-alias.js +1 -1
- package/lib/framework/runner.js +1 -1
- package/lib/framework/schema-export.js +1 -1
- package/lib/framework/types.js +1 -1
- package/lib/generated/build-info.d.ts +4 -4
- package/lib/generated/build-info.js +1 -1
- package/lib/help.js +1 -1
- package/lib/postinstall.d.ts +3 -0
- package/lib/postinstall.js +1 -0
- package/lib/runtime/confirmation.js +1 -1
- package/lib/runtime/event.js +1 -1
- package/lib/runtime/index.js +1 -1
- package/lib/runtime/queue.js +1 -1
- package/lib/runtime/resolve.js +1 -1
- package/lib/skills/builtin-skill.d.ts +37 -0
- package/lib/skills/builtin-skill.js +1 -0
- package/lib/skills/main.js +1 -1
- package/lib/skills/npx-skills-add.d.ts +4 -2
- package/lib/skills/npx-skills-add.js +1 -1
- package/lib/skills/skill-presence.js +1 -1
- package/lib/telemetry/cli-command-trace.js +1 -1
- package/lib/telemetry/cli-help-trace.js +1 -1
- package/lib/telemetry/ensure-cli-otel-config.js +1 -1
- package/lib/telemetry/register-otel-exit-shutdown.js +1 -1
- package/lib/telemetry/send-cli-trace-log.js +1 -1
- package/lib/telemetry/send-platform-issue-collect-log.js +1 -1
- package/lib/utils/ai_config.js +1 -1
- package/lib/utils/apply-jq-filter.js +1 -1
- package/lib/utils/cdn-config.js +1 -1
- package/lib/utils/check-sdk-version.js +1 -1
- package/lib/utils/cli-version-check.js +1 -1
- package/lib/utils/cli-version-policy.js +1 -1
- package/lib/utils/config.js +1 -1
- package/lib/utils/copy-directory.js +1 -1
- package/lib/utils/entity-with-id.js +1 -1
- package/lib/utils/file-utils.js +1 -1
- package/lib/utils/guides-cdn.js +1 -1
- package/lib/utils/http-client.js +1 -1
- package/lib/utils/is-non-interactive.js +1 -1
- package/lib/utils/logger.js +1 -1
- package/lib/utils/params.js +1 -1
- package/lib/utils/platform.js +1 -1
- package/lib/utils/rules-cdn.js +1 -1
- package/lib/utils/sleep.js +1 -1
- package/lib/utils/template-replacer.js +1 -1
- package/lib/utils/update-notice.js +1 -1
- package/lib/utils/version.js +1 -1
- package/lib/utils/with-active-cookie.js +1 -1
- package/lib/utils/write-cli-side-channel.js +1 -1
- package/package.json +9 -3
- package/scripts/postinstall.mjs +24 -0
- package/skills/rabetbase/SKILL.md +493 -0
- package/skills/rabetbase/guides/backend-function.md +835 -0
- package/skills/rabetbase/guides/best-practices.md +137 -0
- package/skills/rabetbase/guides/bff-creation-workflow.md +148 -0
- package/skills/rabetbase/guides/conflict-detection.md +119 -0
- package/skills/rabetbase/guides/data-api-guidelines.md +414 -0
- package/skills/rabetbase/guides/database-connection-workflow.md +169 -0
- package/skills/rabetbase/guides/frontend-development.md +179 -0
- package/skills/rabetbase/guides/legacy-application-blueprint-workflow.md +495 -0
- package/skills/rabetbase/guides/menu-anomaly-manual-cleanup.md +137 -0
- package/skills/rabetbase/guides/page-development-workflow.md +187 -0
- package/skills/rabetbase/guides/react-custom-page-workflow.md +184 -0
- package/skills/rabetbase/guides/role-permit-workflow.md +127 -0
- package/skills/rabetbase/guides/sql-creation-workflow.md +173 -0
- package/skills/rabetbase/guides/sql-mybatis.md +126 -0
- package/skills/rabetbase/guides/troubleshooting.md +67 -0
- package/skills/rabetbase/guides/typescript-sdk.md +227 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartCreate.md +367 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartDetail.md +153 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartEcharts.md +291 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartFilter.md +478 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartJsx.md +119 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartStatistic.md +223 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartTable.md +632 -0
- package/skills/rabetbase/knowledge/page-schema/YtPage.md +172 -0
- package/skills/rabetbase/knowledge/page-schema/dataset-relations.md +126 -0
- package/skills/rabetbase/knowledge/page-schema/external-resources-usage.md +232 -0
- package/skills/rabetbase/knowledge/page-schema/field-components.md +312 -0
- package/skills/rabetbase/knowledge/page-schema/syntax-reference.md +278 -0
- package/skills/rabetbase/knowledge/react-page/components.md +225 -0
- package/skills/rabetbase/knowledge/react-page/generation-standards.md +385 -0
- package/skills/rabetbase/references/rabetbase-api-list.md +58 -0
- package/skills/rabetbase/references/rabetbase-api-pull.md +82 -0
- package/skills/rabetbase/references/rabetbase-app-config.md +95 -0
- package/skills/rabetbase/references/rabetbase-app-list.md +79 -0
- package/skills/rabetbase/references/rabetbase-app-members-list.md +64 -0
- package/skills/rabetbase/references/rabetbase-auth-login.md +53 -0
- package/skills/rabetbase/references/rabetbase-auth-logout.md +29 -0
- package/skills/rabetbase/references/rabetbase-bff-create.md +59 -0
- package/skills/rabetbase/references/rabetbase-bff-delete.md +42 -0
- package/skills/rabetbase/references/rabetbase-bff-detail.md +38 -0
- package/skills/rabetbase/references/rabetbase-bff-list.md +61 -0
- package/skills/rabetbase/references/rabetbase-bff-pull.md +42 -0
- package/skills/rabetbase/references/rabetbase-bff-push.md +65 -0
- package/skills/rabetbase/references/rabetbase-bff-save.md +63 -0
- package/skills/rabetbase/references/rabetbase-bff-status.md +37 -0
- package/skills/rabetbase/references/rabetbase-cli-skill-install.md +42 -0
- package/skills/rabetbase/references/rabetbase-codegen-sdk.md +35 -0
- package/skills/rabetbase/references/rabetbase-codegen-sql.md +33 -0
- package/skills/rabetbase/references/rabetbase-config.md +296 -0
- package/skills/rabetbase/references/rabetbase-dataset-business-group-update.md +84 -0
- package/skills/rabetbase/references/rabetbase-dataset-delete.md +54 -0
- package/skills/rabetbase/references/rabetbase-dataset-detail.md +106 -0
- package/skills/rabetbase/references/rabetbase-dataset-extend-update.md +70 -0
- package/skills/rabetbase/references/rabetbase-dataset-field-update.md +117 -0
- package/skills/rabetbase/references/rabetbase-dataset-generate.md +206 -0
- package/skills/rabetbase/references/rabetbase-dataset-list.md +42 -0
- package/skills/rabetbase/references/rabetbase-dataset-operations.md +34 -0
- package/skills/rabetbase/references/rabetbase-dataset-relation-audit.md +63 -0
- package/skills/rabetbase/references/rabetbase-dataset-relation-mutations.md +141 -0
- package/skills/rabetbase/references/rabetbase-dataset-relations.md +71 -0
- package/skills/rabetbase/references/rabetbase-dataset-rename.md +107 -0
- package/skills/rabetbase/references/rabetbase-dataset-restore.md +54 -0
- package/skills/rabetbase/references/rabetbase-db-analyze.md +135 -0
- package/skills/rabetbase/references/rabetbase-db-create.md +54 -0
- package/skills/rabetbase/references/rabetbase-db-delete.md +26 -0
- package/skills/rabetbase/references/rabetbase-db-detail.md +27 -0
- package/skills/rabetbase/references/rabetbase-db-diff.md +57 -0
- package/skills/rabetbase/references/rabetbase-db-list.md +37 -0
- package/skills/rabetbase/references/rabetbase-db-tables.md +25 -0
- package/skills/rabetbase/references/rabetbase-db-test.md +29 -0
- package/skills/rabetbase/references/rabetbase-db-update.md +29 -0
- package/skills/rabetbase/references/rabetbase-doctor.md +62 -0
- package/skills/rabetbase/references/rabetbase-file.md +35 -0
- package/skills/rabetbase/references/rabetbase-init.md +70 -0
- package/skills/rabetbase/references/rabetbase-issue-report.md +132 -0
- package/skills/rabetbase/references/rabetbase-kb.md +62 -0
- package/skills/rabetbase/references/rabetbase-menu-asset-update.md +135 -0
- package/skills/rabetbase/references/rabetbase-menu-delete.md +54 -0
- package/skills/rabetbase/references/rabetbase-menu-external-link-create.md +63 -0
- package/skills/rabetbase/references/rabetbase-menu-external-link-update.md +74 -0
- package/skills/rabetbase/references/rabetbase-menu-group-create.md +33 -0
- package/skills/rabetbase/references/rabetbase-menu-group-update.md +38 -0
- package/skills/rabetbase/references/rabetbase-menu-list.md +144 -0
- package/skills/rabetbase/references/rabetbase-menu-move.md +54 -0
- package/skills/rabetbase/references/rabetbase-menu-regroup-start.md +45 -0
- package/skills/rabetbase/references/rabetbase-menu-rename.md +48 -0
- package/skills/rabetbase/references/rabetbase-menu-sync.md +60 -0
- package/skills/rabetbase/references/rabetbase-notification-config-list.md +80 -0
- package/skills/rabetbase/references/rabetbase-ocr.md +86 -0
- package/skills/rabetbase/references/rabetbase-page-generate-start.md +32 -0
- package/skills/rabetbase/references/rabetbase-page-generate-status.md +32 -0
- package/skills/rabetbase/references/rabetbase-page-pull.md +47 -0
- package/skills/rabetbase/references/rabetbase-page-push.md +45 -0
- package/skills/rabetbase/references/rabetbase-page-react-create.md +29 -0
- package/skills/rabetbase/references/rabetbase-page-react-detail.md +26 -0
- package/skills/rabetbase/references/rabetbase-page-react-list.md +23 -0
- package/skills/rabetbase/references/rabetbase-page-react-publish.md +23 -0
- package/skills/rabetbase/references/rabetbase-page-react-update.md +24 -0
- package/skills/rabetbase/references/rabetbase-page-relation-binding.md +72 -0
- package/skills/rabetbase/references/rabetbase-page-restore.md +45 -0
- package/skills/rabetbase/references/rabetbase-page-sync.md +36 -0
- package/skills/rabetbase/references/rabetbase-permit-page-set.md +69 -0
- package/skills/rabetbase/references/rabetbase-permit-role-apis-set.md +53 -0
- package/skills/rabetbase/references/rabetbase-permit-role-menus-set.md +57 -0
- package/skills/rabetbase/references/rabetbase-project-create.md +46 -0
- package/skills/rabetbase/references/rabetbase-project-upgrade.md +57 -0
- package/skills/rabetbase/references/rabetbase-role-list.md +68 -0
- package/skills/rabetbase/references/rabetbase-role-user-add.md +54 -0
- package/skills/rabetbase/references/rabetbase-role-user-resolve.md +27 -0
- package/skills/rabetbase/references/rabetbase-run.md +53 -0
- package/skills/rabetbase/references/rabetbase-schema.md +22 -0
- package/skills/rabetbase/references/rabetbase-sql-create.md +41 -0
- package/skills/rabetbase/references/rabetbase-sql-delete.md +37 -0
- package/skills/rabetbase/references/rabetbase-sql-detail.md +32 -0
- package/skills/rabetbase/references/rabetbase-sql-exec.md +34 -0
- package/skills/rabetbase/references/rabetbase-sql-list.md +54 -0
- package/skills/rabetbase/references/rabetbase-sql-pull.md +54 -0
- package/skills/rabetbase/references/rabetbase-sql-push.md +46 -0
- package/skills/rabetbase/references/rabetbase-sql-status.md +39 -0
- package/skills/rabetbase/references/rabetbase-sql-validate.md +73 -0
- package/skills/rabetbase/references/rabetbase-standard-page-status.md +31 -0
- package/skills/rabetbase/references/rabetbase-task-status.md +40 -0
- package/skills/rabetbase/references/rabetbase-tenant-members-list.md +69 -0
- package/skills/rabetbase/references/rabetbase-update.md +56 -0
- package/skills/rabetbase/references/rabetbase-user-account.md +45 -0
- package/skills/rabetbase/references/rabetbase-workspace.md +60 -0
- package/skills/rabetbase.manifest.json +137 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# menu asset-update
|
|
2
|
+
|
|
3
|
+
更新指定线上微前端菜单的 CDN 资源 URL。
|
|
4
|
+
|
|
5
|
+
> **风险等级:high-risk-write** — 修改线上菜单运行资源;非交互正式执行必须显式 `--yes`。
|
|
6
|
+
|
|
7
|
+
## 命令
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# 交互模式(TTY)
|
|
11
|
+
rabetbase menu asset-update
|
|
12
|
+
|
|
13
|
+
# 使用 menu list 返回的真实 path 精确预览并更新
|
|
14
|
+
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://...css"}' --dry-run --format compress
|
|
15
|
+
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://...css"}' --yes --format compress
|
|
16
|
+
|
|
17
|
+
# 按菜单 ID 精确更新,并显式切换加载方式
|
|
18
|
+
rabetbase menu asset-update --menu-ids "<menu-id>" --load-mode fetch --params '{"jsUrl":"https://...js"}' --dry-run --format compress
|
|
19
|
+
|
|
20
|
+
# 明确需要全量发布时显式选择全部
|
|
21
|
+
rabetbase menu asset-update --all --params '{"jsUrl":"https://...js","cssUrl":"https://...css"}' --dry-run --format compress
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 高频 SOP:修改菜单资源 URL
|
|
25
|
+
|
|
26
|
+
修改菜单中的 JS / CSS 资源 URL 是 `menu asset-update` 的主路径,不需要 `menu detail` 或其他配置更新命令。
|
|
27
|
+
|
|
28
|
+
1. **先确认资源现状**,只看已配置资源的菜单:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
rabetbase menu list --format json --jq '.data.menus[] | select(.resources | length > 0)'
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
2. **精确选择目标**:
|
|
35
|
+
|
|
36
|
+
- 优先从 `menu list` 取得稳定 `id` 或 `path`,使用 `--menu-ids` / `--paths`。
|
|
37
|
+
- 只有明确要更新所有已有 resources 的菜单时才使用 `--all`。
|
|
38
|
+
- `--all` 不能与 ID/path 组合;未知 ID/path 会失败,不会静默扩大更新范围。
|
|
39
|
+
|
|
40
|
+
3. **选择更新模式**:
|
|
41
|
+
|
|
42
|
+
- 默认 `--mode patch`,只替换传入类型并保留其他资源。
|
|
43
|
+
- 被更新类型已有多个资源时,单个 `jsUrl` / `cssUrl` 无法确定替换目标,patch 会拒绝;`--force` 不绕过该歧义。
|
|
44
|
+
- 同时换 JS + CSS:仍可用 `--mode patch`;只有确实要把菜单 resources 改成传入 URL 的完整集合时,才用 `replace`。
|
|
45
|
+
- 不要用裸 `replace` 做“只换 CSS”,否则可能删除已有 JS;出现 JS 删除 warning 时,除非用户明确要求,否则停止。
|
|
46
|
+
|
|
47
|
+
4. **必须先 dry-run**,检查 `diffs[]` 的 `before.resources`、`after.resources` 和 `warnings`;显式传 `--load-mode` 时还要核对 before/after `loadScriptMode`:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://...css"}' --dry-run --format compress
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
5. **正式执行必须复用 dry-run 的同一组 selector、`--mode` 和 `--params`**:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://...css"}' --yes --format compress
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
6. **执行后回查资源现状**:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
rabetbase menu list --format json --jq '.data.menus[] | select(.resources | length > 0)'
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 常用模板
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 只替换 CSS,保留已有 JS
|
|
69
|
+
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://cdn.example.com/app.css"}' --dry-run --format compress
|
|
70
|
+
rabetbase menu asset-update --paths "<menu-path>" --params '{"cssUrl":"https://cdn.example.com/app.css"}' --yes --format compress
|
|
71
|
+
|
|
72
|
+
# 只替换 JS,保留已有 CSS
|
|
73
|
+
rabetbase menu asset-update --menu-ids "<menu-id>" --params '{"jsUrl":"https://cdn.example.com/app.js"}' --dry-run --format compress
|
|
74
|
+
rabetbase menu asset-update --menu-ids "<menu-id>" --params '{"jsUrl":"https://cdn.example.com/app.js"}' --yes --format compress
|
|
75
|
+
|
|
76
|
+
# 显式更新全部菜单的 JS + CSS
|
|
77
|
+
rabetbase menu asset-update --all --params '{"jsUrl":"https://cdn.example.com/app.js","cssUrl":"https://cdn.example.com/app.css"}' --dry-run --format compress
|
|
78
|
+
rabetbase menu asset-update --all --params '{"jsUrl":"https://cdn.example.com/app.js","cssUrl":"https://cdn.example.com/app.css"}' --yes --format compress
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## 参数
|
|
82
|
+
|
|
83
|
+
| Flag | 类型 | 必填 | 默认 | 说明 |
|
|
84
|
+
|------|------|------|------|------|
|
|
85
|
+
| `--params <json>` | string | 非交互必填 | — | 预填 JS/CSS URL。JSON 格式:`{"jsUrl":"...","cssUrl":"..."}`;至少包含 `jsUrl` 或 `cssUrl` |
|
|
86
|
+
| `--menu-ids <csv>` | string | 至少一个 selector | — | 精确菜单 ID;只接受正安全整数;可与 paths 组合,不可与 all 组合 |
|
|
87
|
+
| `--paths <csv>` | string | 至少一个 selector | — | 精确菜单 path;可与 menu-ids 组合,不可与 all 组合 |
|
|
88
|
+
| `--all` | boolean | 至少一个 selector | `false` | 显式选择所有已有 resources 的菜单;不可与 ID/path 组合 |
|
|
89
|
+
| `--yes` | boolean | 正式执行必填 | — | 跳过高风险确认并更新已选择菜单,必须配合有效 `--params` |
|
|
90
|
+
| `--mode <mode>` | string | 否 | `patch` | `patch` 只在目标唯一时替换传入的同类型资源并保留其他资源;`replace` 将传入 URL 作为完整 `resources` |
|
|
91
|
+
| `--load-mode <mode>` | string | 否 | 保留线上值 | 显式修改为 `import`、`script` 或 `fetch` |
|
|
92
|
+
| `--force` | boolean | 否 | `false` | 允许 `replace` 删除已有 JS 资源;仅用于明确的资源降级/迁移 |
|
|
93
|
+
| `--dry-run` | boolean | 否 | `false` | 输出每个菜单的 before/after resources;显式修改加载方式时同时输出 loadScriptMode diff,不写入 |
|
|
94
|
+
| `--format <fmt>` | string | 否 | `compress` | 输出格式 |
|
|
95
|
+
|
|
96
|
+
## 执行模式
|
|
97
|
+
|
|
98
|
+
1. **selector + `--params` + `--dry-run`** — 非交互预览精确目标;全量必须显式 `--all`
|
|
99
|
+
2. **selector + `--params` + `--yes`** — 正式更新精确目标;必须复用 dry-run 参数
|
|
100
|
+
3. **TTY 交互式** — 未给 selector 时展示全部有资源菜单并二次确认;给 selector 时只展示目标
|
|
101
|
+
|
|
102
|
+
## 输出
|
|
103
|
+
|
|
104
|
+
- 成功:`✓ Menu asset update completed: N menu(s) updated`
|
|
105
|
+
- 无目标:`! No menus with existing resources found`
|
|
106
|
+
- 部分失败:`! N menu(s) failed`
|
|
107
|
+
- `--dry-run`:返回 `diffs[]`,包含 `id / label / path / before.resources / after.resources / warnings`;显式传 `--load-mode` 时还包含 before/after `loadScriptMode`
|
|
108
|
+
|
|
109
|
+
## 提示
|
|
110
|
+
|
|
111
|
+
- 仅更新已配置了资源 URL 且被 selector 命中的菜单
|
|
112
|
+
- 非交互和 dry-run 缺 selector 会被拒绝;`--yes` 不能裸跑;空 `--params` 也会被拒绝
|
|
113
|
+
- 写入采用 read-modify-write:默认只更新 `extend.resources`,保留 `loadScriptMode` 和其他扩展字段
|
|
114
|
+
- 只有显式传 `--load-mode` 才修改加载方式
|
|
115
|
+
- 默认 `patch`;使用 `replace` 时仍会阻止无意删除已有 JS
|
|
116
|
+
- patch 被更新类型已有多个资源时会拒绝,不通过 `--force` 猜测替换目标
|
|
117
|
+
- 典型场景:新版本构建后批量更新 CDN 地址
|
|
118
|
+
- 交互模式会展示受影响菜单的摘要表
|
|
119
|
+
|
|
120
|
+
## 常见错误
|
|
121
|
+
|
|
122
|
+
- 跳过 `--dry-run` 直接写入。
|
|
123
|
+
- `--yes` 裸跑、缺 selector 或传空 `--params`。
|
|
124
|
+
- 需要单菜单更新却使用 `--all`。
|
|
125
|
+
- 只想换 CSS 却显式使用 `replace`,导致已有 JS 被删除风险。
|
|
126
|
+
- dry-run 已出现删除 JS warning,仍未取得用户明确确认就继续执行。
|
|
127
|
+
- patch 报告同类型资源不唯一时尝试用 `--force` 绕过;应先确认完整资源集合,只有明确重写时才改用 `replace`。
|
|
128
|
+
- 把资源 URL 修改误判为需要 `menu detail` / `config-update`;资源 URL 变更统一使用 `menu asset-update`。
|
|
129
|
+
|
|
130
|
+
## 参考
|
|
131
|
+
|
|
132
|
+
- [SKILL.md](../SKILL.md)
|
|
133
|
+
- [menu list](rabetbase-menu-list.md)
|
|
134
|
+
- [menu external-link-update](rabetbase-menu-external-link-update.md)
|
|
135
|
+
- [menu sync](rabetbase-menu-sync.md)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# menu delete
|
|
2
|
+
|
|
3
|
+
按线上菜单 ID 精确删除空 folder、非 folder 叶子菜单,或一个 folder 子树。
|
|
4
|
+
|
|
5
|
+
> **风险等级:high-risk-write** — 必须先生成删除计划,正式执行必须消费该计划并显式 `--yes`。
|
|
6
|
+
|
|
7
|
+
## 命令
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
rabetbase menu delete --id "<folder-id>" --expected-children-count 0 --dry-run --plan-out ./menu-delete.plan.json --format compress
|
|
11
|
+
rabetbase menu delete --plan ./menu-delete.plan.json --yes --format compress
|
|
12
|
+
|
|
13
|
+
rabetbase menu delete --id "<folder-id>" --recursive --dry-run --plan-out ./menu-tree-delete.plan.json --format compress
|
|
14
|
+
rabetbase menu delete --plan ./menu-tree-delete.plan.json --yes --format compress
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Flags
|
|
18
|
+
|
|
19
|
+
| Flag | 类型 | 必填 | 说明 |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| `--id <id>` | number | 计划阶段 | 精确菜单 ID;不接受 label/path 定位 |
|
|
22
|
+
| `--recursive` | boolean | 否 | 计划阶段包含精确 folder ID 下的全部后代,叶子优先 |
|
|
23
|
+
| `--expect-parent-id <id\|root>` | string | 否 | 计划阶段断言当前父级 |
|
|
24
|
+
| `--expect-path <path>` | string | 否 | 计划阶段断言当前 path |
|
|
25
|
+
| `--expected-children-count <n>` | number | 否 | 计划阶段断言直接子节点数量,删除 folder 时推荐为 `0` |
|
|
26
|
+
| `--plan-out <file>` | string | 计划阶段 | 保存可审阅的删除计划 |
|
|
27
|
+
| `--dry-run` | boolean | 计划阶段 | 返回目标快照和影响计划,不写入 |
|
|
28
|
+
| `--plan <file>` | string | 正式执行 | 读取 30 分钟内生成的删除计划 |
|
|
29
|
+
| `--yes` | boolean | 正式执行 | 显式授权删除 |
|
|
30
|
+
|
|
31
|
+
## 安全规则
|
|
32
|
+
|
|
33
|
+
- 单目标必须是 `resources=[]` 的空 folder,或任意非 folder 叶子菜单;无 `pageId` 的 link/iframe 等叶子不会产生页面级联。
|
|
34
|
+
- 非空目标必须是 folder,并显式传 `--recursive`;计划必须覆盖完整子树且保持叶子优先、根目录最后。
|
|
35
|
+
- folder 的 resources 必须为空;非 folder 叶子可以保留其资源配置,具有 `pageId` 时页面与 PageSchema 删除由平台现有删除语义处理。
|
|
36
|
+
- 任一计划内 pageId 被计划外菜单引用时返回 `menu_page_shared`,避免平台页面级联影响计划外菜单。
|
|
37
|
+
- expect 条件不一致时返回 `menu_state_drift`,不写入。
|
|
38
|
+
- dry-run 必须同时提供 `--id` 和 `--plan-out`;正式执行以 `--plan` 为唯一目标来源,不再接受 ID、`--recursive` 或 expect 条件。
|
|
39
|
+
- 计划创建后 30 分钟过期,并绑定 `appCode`、`snapshotHash`、完整目标集合和删除顺序;时间字段异常、计划不完整、顺序被修改或任一事实漂移时拒绝写入。
|
|
40
|
+
- dry-run 的 `cascade.pages` 只列出菜单直接绑定的 pageId;平台可能按既有规则继续处理关联 Page/PageSchema,不要把该列表解释为服务端全部级联影响。
|
|
41
|
+
- dry-run 的 `plannedActions` 必须只有一个批量删除动作,`body.idList` 与叶子优先的 `deleteOrder` 完全一致。
|
|
42
|
+
- 正式执行只消费计划一次;批量请求不提供整体事务,错误时可能已有部分 ID 被删除。
|
|
43
|
+
- 请求错误或返回计数与计划数量不一致时不自动重试;结构化结果通过 `absentIds` 和 `remainingIds` 表达回读事实。
|
|
44
|
+
- 成功计数匹配后仍要重新读取 menu list;只有所有计划 ID 均已消失时才报告成功。
|
|
45
|
+
- 出现部分结果或状态未知时,先读取最新菜单事实并生成新计划,禁止再次消费原计划。
|
|
46
|
+
|
|
47
|
+
## 输出
|
|
48
|
+
|
|
49
|
+
dry-run 的 `data` 包含 `operation / selector / before / targets / deleteOrder / plannedActions / cascade / snapshotHash / warnings`,计划文件同时记录 `appCode`、有效期、完整目标事实和指纹。`plannedActions` 中的单个批量请求以 `idList` 携带完整 `deleteOrder`。正式执行返回批量确认与写后回查结果;计划过期、快照漂移、计划缺项、计数不一致或其他 blocker 均以结构化失败返回,不会按当前事实重新规划。
|
|
50
|
+
|
|
51
|
+
## 相关命令
|
|
52
|
+
|
|
53
|
+
- [menu list](rabetbase-menu-list.md)
|
|
54
|
+
- [菜单异常治理](../guides/menu-anomaly-manual-cleanup.md)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# menu external-link-create
|
|
2
|
+
|
|
3
|
+
创建一个外部网站链接菜单。使用产品打开方式选择应用内嵌入或新窗口打开,不要求使用者理解服务端菜单类型。
|
|
4
|
+
|
|
5
|
+
> **风险等级:write** — 创建一个新入口,不覆盖既有菜单;建议先 dry-run,正式执行不要求显式 `--yes`。
|
|
6
|
+
|
|
7
|
+
## 命令
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
rabetbase menu external-link-create \
|
|
11
|
+
--label "帮助中心" \
|
|
12
|
+
--url "https://help.example.com" \
|
|
13
|
+
--open-mode new-window \
|
|
14
|
+
--dry-run \
|
|
15
|
+
--format compress
|
|
16
|
+
|
|
17
|
+
rabetbase menu external-link-create \
|
|
18
|
+
--label "帮助中心" \
|
|
19
|
+
--url "https://help.example.com" \
|
|
20
|
+
--open-mode new-window \
|
|
21
|
+
--format compress
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 参数
|
|
25
|
+
|
|
26
|
+
| Flag | 类型 | 必填 | 默认 | 说明 |
|
|
27
|
+
|------|------|------|------|------|
|
|
28
|
+
| `--label <label>` | string | 是 | — | 菜单名称 |
|
|
29
|
+
| `--open-mode <embedded\|new-window>` | string | 是 | — | `embedded` 应用内嵌入;`new-window` 新窗口打开 |
|
|
30
|
+
| `--url <https-url>` | string | 是 | — | 无内嵌用户名密码的绝对 HTTPS URL |
|
|
31
|
+
| `--parent-id <id\|root>` | string | 否 | `root` | 父节点必须是当前 App 中已有的 folder |
|
|
32
|
+
| `--sort <n>` | number | 否 | 同级末尾 | `0..2147483647` 的整数 |
|
|
33
|
+
| `--visible` | boolean | 否 | `true` | 是否显示菜单;隐藏菜单传 `--visible=false` |
|
|
34
|
+
| `--appcode <code>` | string | 否 | 配置解析 | 显式指定 App Code |
|
|
35
|
+
| `--dry-run` | boolean | 否 | `false` | 输出创建计划,不写入 |
|
|
36
|
+
|
|
37
|
+
## 安全与输出
|
|
38
|
+
|
|
39
|
+
- `embedded` 映射为服务端 `type=iframe`;`new-window` 映射为服务端 `type=link`。HTML `_self` 表示在当前浏览上下文导航,不等同于应用内嵌入,因此不是本命令参数。
|
|
40
|
+
- URL 必须使用 HTTPS,且不能包含 URL userinfo。
|
|
41
|
+
- URL 查询参数属于菜单配置,不按参数名拦截或脱敏。
|
|
42
|
+
- URL 是可审计的菜单事实,dry-run、成功、结构化失败结果和 `menu list` 均按输入或线上值原样输出。
|
|
43
|
+
- 依赖原始异常等不可信错误文本仍会清洗,错误码只使用稳定白名单。
|
|
44
|
+
- 创建请求不发送 `path`,平台负责生成非空 path。
|
|
45
|
+
- 正式写入前重新读取菜单快照;任一菜单事实漂移都会阻断本次写入。
|
|
46
|
+
|
|
47
|
+
## 响应丢失
|
|
48
|
+
|
|
49
|
+
创建请求不自动重试。响应丢失后,只有同时满足以下条件才返回恢复成功:
|
|
50
|
+
|
|
51
|
+
1. 回查到唯一匹配的菜单;
|
|
52
|
+
2. 该 ID 在写入前快照中不存在;
|
|
53
|
+
3. ID 是正安全整数;
|
|
54
|
+
4. parent、type、label、URL、visible、sort 和非空 path 全部一致。
|
|
55
|
+
|
|
56
|
+
无法唯一确认时,执行错误中返回的 `verification.lookupCommand`,核对线上事实后再决定下一步,不要直接重提创建。
|
|
57
|
+
|
|
58
|
+
## 参考
|
|
59
|
+
|
|
60
|
+
- [menu list](rabetbase-menu-list.md)
|
|
61
|
+
- [menu external-link-update](rabetbase-menu-external-link-update.md)
|
|
62
|
+
- [menu group-create](rabetbase-menu-group-create.md)
|
|
63
|
+
- [SKILL.md](../SKILL.md)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# menu external-link-update
|
|
2
|
+
|
|
3
|
+
按精确 ID 原地更新一个既有 `iframe` 或 `link` 叶子菜单的 URL。只修改 URL,不删除重建菜单。
|
|
4
|
+
|
|
5
|
+
> **风险等级:high-risk-write** — 会改变线上菜单实际打开地址;必须先 dry-run,正式执行显式传 `--yes`。
|
|
6
|
+
|
|
7
|
+
## 命令
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
rabetbase menu external-link-update \
|
|
11
|
+
--id "<menu-id>" \
|
|
12
|
+
--url "https://admin.example.com/new-page?hideShell=true" \
|
|
13
|
+
--expect-url "https://admin.example.com/old-page?hideShell=true" \
|
|
14
|
+
--expect-parent-id "<folder-id|root>" \
|
|
15
|
+
--dry-run \
|
|
16
|
+
--format compress
|
|
17
|
+
|
|
18
|
+
rabetbase menu external-link-update \
|
|
19
|
+
--id "<menu-id>" \
|
|
20
|
+
--url "https://admin.example.com/new-page?hideShell=true" \
|
|
21
|
+
--expect-url "https://admin.example.com/old-page?hideShell=true" \
|
|
22
|
+
--expect-parent-id "<folder-id|root>" \
|
|
23
|
+
--yes \
|
|
24
|
+
--format compress
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 参数
|
|
28
|
+
|
|
29
|
+
| Flag | 类型 | 必填 | 默认 | 说明 |
|
|
30
|
+
|------|------|------|------|------|
|
|
31
|
+
| `--id <id>` | number | 是 | — | 既有菜单的精确正整数 ID |
|
|
32
|
+
| `--url <https-url>` | string | 是 | — | 新的绝对 HTTPS URL,不允许 URL userinfo |
|
|
33
|
+
| `--expect-url <current-url>` | string | 是 | — | 真正需要写入时精确断言当前 URL;允许断言历史非 HTTPS 地址 |
|
|
34
|
+
| `--expect-parent-id <id\|root>` | string | 是 | — | 始终断言当前父级 |
|
|
35
|
+
| `--appcode <code>` | string | 否 | 配置解析 | 显式指定 App Code |
|
|
36
|
+
| `--dry-run` | boolean | 否 | `false` | 输出精确 URL patch,不写入 |
|
|
37
|
+
| `--yes` | boolean | 正式执行必填 | — | 明确确认高风险写入 |
|
|
38
|
+
|
|
39
|
+
## 目标边界
|
|
40
|
+
|
|
41
|
+
- 目标类型只能是 `iframe` 或 `link`。
|
|
42
|
+
- 目标必须没有子菜单,且平台 path 非空。
|
|
43
|
+
- 命令一次只处理一个 ID,不支持 label/path 模糊定位或批量 URL patch。
|
|
44
|
+
- 服务端请求体严格为 `{ id, appCode, url }`,不发送 label、type、path、parentId、sort、visible、extend 或权限字段。
|
|
45
|
+
|
|
46
|
+
## 并发与幂等
|
|
47
|
+
|
|
48
|
+
1. `--expect-parent-id` 始终校验,包括 no-op。
|
|
49
|
+
2. 当当前 URL 不等于目标 URL、真正需要写入时,当前 URL 必须匹配 `--expect-url`。
|
|
50
|
+
3. 当当前 URL 已等于目标 URL 时,返回成功 no-op;此时允许 `--expect-url` 仍是旧 URL。
|
|
51
|
+
4. 写入前重新读取完整菜单快照;任一菜单事实漂移都会阻断写入。
|
|
52
|
+
5. 写后回读并确认 URL 已生效,同时 ID、label、type、path、parentId、sort、visible 保持不变。
|
|
53
|
+
|
|
54
|
+
## 响应丢失
|
|
55
|
+
|
|
56
|
+
更新请求永不自动重试。发生超时、连接重置等响应丢失时:
|
|
57
|
+
|
|
58
|
+
- 回读确认目标 URL 和全部不变量后,返回成功并标记 `recovered=true`。
|
|
59
|
+
- 回读仍是旧 URL、目标缺失或回读失败时,返回 `menu_update_recovery_required`,并提供 `verification.lookupCommand`。
|
|
60
|
+
- 回读发现目标 URL 已生效但其他菜单字段改变时,返回验证失败,要求人工核对。
|
|
61
|
+
|
|
62
|
+
## 常见错误
|
|
63
|
+
|
|
64
|
+
- 用 `menu asset-update` 修改 iframe URL;该命令只管理微前端 JS/CSS resources。
|
|
65
|
+
- 用 `external-link-create` 新建后删除旧菜单;这会改变 ID、path 及其权限关联。
|
|
66
|
+
- response loss 后直接重发写请求;应先执行错误中的 lookup 命令。
|
|
67
|
+
- 省略 `--expect-url` 或 `--expect-parent-id`,失去并发保护。
|
|
68
|
+
|
|
69
|
+
## 参考
|
|
70
|
+
|
|
71
|
+
- [menu list](rabetbase-menu-list.md)
|
|
72
|
+
- [menu external-link-create](rabetbase-menu-external-link-create.md)
|
|
73
|
+
- [menu asset-update](rabetbase-menu-asset-update.md)
|
|
74
|
+
- [SKILL.md](../SKILL.md)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# menu group-create
|
|
2
|
+
|
|
3
|
+
创建一个空菜单分组。group 是命令领域名称,线上持久化类型为 `folder`。
|
|
4
|
+
|
|
5
|
+
## 命令
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
rabetbase menu group-create --label "用户管理" --parent-id "<parent-folder-id>" --sort 10 --dry-run --format compress
|
|
9
|
+
rabetbase menu group-create --label "用户管理" --parent-id "<parent-folder-id>" --sort 10 --format compress
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Flags
|
|
13
|
+
|
|
14
|
+
| Flag | 类型 | 必填 | 说明 |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| `--label <label>` | string | 是 | folder 名称 |
|
|
17
|
+
| `--parent-id <id\|root>` | string | 否 | 父 folder;默认 root |
|
|
18
|
+
| `--sort <n>` | number | 否 | 非负整数;默认目标父级同级末尾 |
|
|
19
|
+
| `--dry-run` | boolean | 预览时 | 返回创建计划,不写入 |
|
|
20
|
+
|
|
21
|
+
## 事实约束
|
|
22
|
+
|
|
23
|
+
- 指定父级时,父级必须存在且 `type=folder`。
|
|
24
|
+
- 创建结果必须为 `type=folder`,并保留平台生成的非空 `path`。
|
|
25
|
+
- `resources` 必须为空且 `childrenCount=0`;命令通过 `menu list` 回查这些最终事实。
|
|
26
|
+
- dry-run 只展示一次 folder 创建请求。
|
|
27
|
+
- 创建请求成功但后续回查失败时,错误输出会返回已创建的菜单 ID 和 path。该分组可能仍在线上;先用 `menu list` 按 ID 核对,不要直接重试创建。
|
|
28
|
+
|
|
29
|
+
## 相关命令
|
|
30
|
+
|
|
31
|
+
- [menu group-update](rabetbase-menu-group-update.md)
|
|
32
|
+
- [menu regroup-start](rabetbase-menu-regroup-start.md)
|
|
33
|
+
- [menu list](rabetbase-menu-list.md)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# menu group-update
|
|
2
|
+
|
|
3
|
+
按 ID 修改现有 folder 的名称或 sort,不调整父级。修改任意菜单类型的名称时使用 `menu rename`。
|
|
4
|
+
|
|
5
|
+
## 命令
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
rabetbase menu group-update --id "<folder-id>" --label "客户管理" --sort 20 --dry-run --format compress
|
|
9
|
+
rabetbase menu group-update --id "<folder-id>" --label "客户管理" --sort 20 --format compress
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
至少提供 `--label`、`--sort` 之一。
|
|
13
|
+
|
|
14
|
+
## Flags
|
|
15
|
+
|
|
16
|
+
| Flag | 类型 | 说明 |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| `--id <id>` | number | 精确 folder ID |
|
|
19
|
+
| `--label <label>` | string | 新名称,不能是空字符串 |
|
|
20
|
+
| `--sort <n>` | number | 新 sort,非负整数 |
|
|
21
|
+
| `--expect-parent-id <id\|root>` | string | 断言当前父级 |
|
|
22
|
+
| `--expect-path <path>` | string | 断言当前 path |
|
|
23
|
+
| `--expected-children-count <n>` | number | 断言直接子节点数 |
|
|
24
|
+
| `--dry-run` | boolean | 输出 before/after,不写入 |
|
|
25
|
+
|
|
26
|
+
## 安全规则
|
|
27
|
+
|
|
28
|
+
- 目标必须为 `type=folder`。
|
|
29
|
+
- 命令只修改 label 和 sort,不修改 parentId 或 path。
|
|
30
|
+
- expect 条件漂移时不写入。
|
|
31
|
+
- 写入后自动 menu list 回查 label 和 sort。
|
|
32
|
+
|
|
33
|
+
## 相关命令
|
|
34
|
+
|
|
35
|
+
- [menu rename](rabetbase-menu-rename.md)
|
|
36
|
+
- [menu group-create](rabetbase-menu-group-create.md)
|
|
37
|
+
- [menu regroup-start](rabetbase-menu-regroup-start.md)
|
|
38
|
+
- [menu list](rabetbase-menu-list.md)
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# menu list
|
|
2
|
+
|
|
3
|
+
查询当前 App 的线上菜单事实。
|
|
4
|
+
|
|
5
|
+
> **风险等级:read** — 只读查询,不修改平台菜单配置。
|
|
6
|
+
|
|
7
|
+
## 命令
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# AI / 脚本优先
|
|
11
|
+
rabetbase menu list --format compress
|
|
12
|
+
|
|
13
|
+
# 人类阅读
|
|
14
|
+
rabetbase menu list --format json
|
|
15
|
+
|
|
16
|
+
# 按 path 片段过滤(替换占位符)
|
|
17
|
+
rabetbase menu list --format json --jq '.data.menus[] | select(.path | contains("<path-fragment>"))'
|
|
18
|
+
|
|
19
|
+
# 按 label 片段过滤(替换占位符)
|
|
20
|
+
rabetbase menu list --format json --jq '.data.menus[] | select(.label | contains("<label-fragment>"))'
|
|
21
|
+
|
|
22
|
+
# 仅查看配置了资源 URL 的菜单
|
|
23
|
+
rabetbase menu list --format json --jq '.data.menus[] | select(.resources | length > 0)'
|
|
24
|
+
|
|
25
|
+
# 查看最近更新人和更新时间
|
|
26
|
+
rabetbase menu list --format compress --jq '.data.menus[] | {id, label, path, updateUserId, updateUserName, updateTime}'
|
|
27
|
+
|
|
28
|
+
# 排查 extend.resources 原始形态
|
|
29
|
+
rabetbase menu list --verbose --format json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
如需找出重复 path、根级重名等异常菜单并生成平台手动删除清单,先按 [`menu-anomaly-manual-cleanup`](../guides/menu-anomaly-manual-cleanup.md) 执行。清单中的 `<appBaseUrl>` 由当前 `rabetbase` 环境解析:production 为 `https://app.lovrabet.com/app/<appCode>`,daily 为 `https://daily.lovrabet.com/web-app/app/<appCode>`。
|
|
33
|
+
|
|
34
|
+
## 参数
|
|
35
|
+
|
|
36
|
+
| Flag | 类型 | 必填 | 默认 | 说明 |
|
|
37
|
+
|------|------|------|------|------|
|
|
38
|
+
| `--appcode <code>` | string | 否 | 配置解析 | 显式指定 App Code,覆盖配置文件 |
|
|
39
|
+
| `--verbose` | boolean | 否 | `false` | 每个菜单项额外返回 `extend` 排障字段 |
|
|
40
|
+
| `--format <fmt>` | string | 否 | `compress` | 输出格式 |
|
|
41
|
+
| `--jq <expr>` | string | 否 | — | 对最终 JSON 信封执行 jq;仅配合 `json` / `compress` |
|
|
42
|
+
|
|
43
|
+
`menu list` 不提供 `--path` / `--label` / `--resources-only` 等领域筛选 flag。需要过滤时使用 `--jq`。
|
|
44
|
+
|
|
45
|
+
## 输出
|
|
46
|
+
|
|
47
|
+
`json` / `compress` 信封的 `data` 包含全量 `snapshotHash`:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"total": 1,
|
|
52
|
+
"snapshotHash": "sha256:<hex>",
|
|
53
|
+
"menus": [
|
|
54
|
+
{
|
|
55
|
+
"id": 21,
|
|
56
|
+
"parentId": null,
|
|
57
|
+
"depth": 0,
|
|
58
|
+
"label": "Example Menu",
|
|
59
|
+
"path": "/example-page",
|
|
60
|
+
"url": "https://example.com/example-page?hideShell=true",
|
|
61
|
+
"type": "procode",
|
|
62
|
+
"visible": true,
|
|
63
|
+
"sort": 0,
|
|
64
|
+
"childrenIds": [],
|
|
65
|
+
"childrenCount": 0,
|
|
66
|
+
"pageId": null,
|
|
67
|
+
"pageType": "",
|
|
68
|
+
"resources": [
|
|
69
|
+
"https://cdn.example.com/app.js"
|
|
70
|
+
],
|
|
71
|
+
"updateUserId": "user-1",
|
|
72
|
+
"updateUserName": "张三",
|
|
73
|
+
"updateTime": "2026-08-02T12:00:00Z"
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
默认菜单项只返回稳定字段:
|
|
80
|
+
|
|
81
|
+
- `id`
|
|
82
|
+
- `parentId`
|
|
83
|
+
- `depth`
|
|
84
|
+
- `label`
|
|
85
|
+
- `path`
|
|
86
|
+
- `url`
|
|
87
|
+
- `type`
|
|
88
|
+
- `visible`
|
|
89
|
+
- `sort`
|
|
90
|
+
- `resources`
|
|
91
|
+
- `childrenIds`
|
|
92
|
+
- `childrenCount`
|
|
93
|
+
- `pageId`
|
|
94
|
+
- `pageType`
|
|
95
|
+
- `updateUserId`
|
|
96
|
+
- `updateUserName`
|
|
97
|
+
- `updateTime`
|
|
98
|
+
|
|
99
|
+
`--verbose` 只额外返回 `extend`,不返回服务端原始 `raw`。
|
|
100
|
+
|
|
101
|
+
## 字段约定
|
|
102
|
+
|
|
103
|
+
- `menus[]` 顺序是 DFS 前序:父节点在前,子节点紧随其后,兄弟节点按 `sort` 升序。
|
|
104
|
+
- 字符串字段缺失时返回空字符串。
|
|
105
|
+
- 布尔 / 数值字段缺失时返回 `null`。
|
|
106
|
+
- 最近更新人和更新时间直接取线上菜单事实;字段缺失时返回 `null`,不回退为创建人或本地 Git 用户。
|
|
107
|
+
- folder 的 `path` 可能由平台生成;`menu list` 按线上事实原样返回。
|
|
108
|
+
- `url` 是可审计的菜单事实,按线上值原样返回,并参与快照哈希和写后核验。
|
|
109
|
+
- `extend.resources` 会被归一化为 `resources: string[]`。
|
|
110
|
+
- `extend.resources` 为 JSON 字符串、数组、异常字符串或缺失值时,命令都不会因为资源字段解析失败而失败。
|
|
111
|
+
|
|
112
|
+
## 适用场景
|
|
113
|
+
|
|
114
|
+
- 查询当前 App 已有哪些线上菜单。
|
|
115
|
+
- 确认菜单路径、层级和可见状态。
|
|
116
|
+
- 查看菜单最近更新人和更新时间,辅助确认菜单整理的协作对象。
|
|
117
|
+
- 查看菜单是否已配置 CDN 资源 URL。
|
|
118
|
+
- 审计重复 path、根级 label 重复、孤儿父节点等菜单异常,并生成平台人工处理清单。
|
|
119
|
+
- 修改菜单名称前确认 `id/label`;所有菜单类型统一使用 `menu rename`。
|
|
120
|
+
- 修改 iframe/link 页面 URL 前确认 `id/url/parentId`;写入入口使用 `menu external-link-update`。
|
|
121
|
+
- 修改微前端 JS/CSS 资源前确认当前 resources;写入入口使用 `menu asset-update`。
|
|
122
|
+
- 提供稳定的菜单事实入口,避免使用底层数据源查询菜单配置。
|
|
123
|
+
|
|
124
|
+
## 不负责
|
|
125
|
+
|
|
126
|
+
- 不做本地 `src/pages` 与线上菜单 diff;这类对比使用 `menu sync`。
|
|
127
|
+
- 不做智能列表页菜单审计;dataset-scoped 页面事实使用 `page standard-page-status`。
|
|
128
|
+
- 不修改外链 URL;使用 `menu external-link-update`,并带旧 URL 与父级断言。
|
|
129
|
+
- 不修改菜单资源;更新 JS / CSS 资源 URL 使用 `menu asset-update`,并先执行 dry-run。
|
|
130
|
+
- 不修改菜单;改名使用 `menu rename`,空 folder 删除使用计划化的 `menu delete`,分组生命周期使用 `group-create/group-update/regroup-start`,写操作都必须先 dry-run。
|
|
131
|
+
|
|
132
|
+
## 参考
|
|
133
|
+
|
|
134
|
+
- [menu sync](rabetbase-menu-sync.md)
|
|
135
|
+
- [menu external-link-create](rabetbase-menu-external-link-create.md)
|
|
136
|
+
- [menu external-link-update](rabetbase-menu-external-link-update.md)
|
|
137
|
+
- [menu rename](rabetbase-menu-rename.md)
|
|
138
|
+
- [menu asset-update](rabetbase-menu-asset-update.md)
|
|
139
|
+
- [menu delete](rabetbase-menu-delete.md)
|
|
140
|
+
- [menu group-create](rabetbase-menu-group-create.md)
|
|
141
|
+
- [menu group-update](rabetbase-menu-group-update.md)
|
|
142
|
+
- [menu regroup-start](rabetbase-menu-regroup-start.md)
|
|
143
|
+
- [task status](rabetbase-task-status.md)
|
|
144
|
+
- [SKILL.md](../SKILL.md)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# rabetbase menu move
|
|
2
|
+
|
|
3
|
+
## Use when
|
|
4
|
+
|
|
5
|
+
把当前 App 中一个已有的非 folder 叶子菜单移动到已有 folder 或根级,或者在当前父级内调整该叶子的 sort。
|
|
6
|
+
|
|
7
|
+
## Read before writing
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
rabetbase menu list --format compress
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
从返回事实中读取源菜单 `id`、当前 `parentId`、`type`、`childrenCount`、`sort`,以及目标 folder 的 `id` 和 `type`。源必须是 `childrenCount=0` 的非 folder 菜单,数字形式的目标父级必须是 folder;根级使用 `root`。
|
|
14
|
+
|
|
15
|
+
## Preview
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
rabetbase menu move --id "<menu-id>" --parent-id "<folder-id|root>" --expect-parent-id "<current-folder-id|root>" --dry-run --format compress
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
检查 `data.before.parentId`、`data.after.parentId`、`data.after.sort` 和 `data.plannedActions[].body`。跨父级且未传 `--sort` 时默认追加到目标同级末尾;同一父级未传 `--sort` 时返回 no-op。
|
|
22
|
+
|
|
23
|
+
## Execute
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
rabetbase menu move --id "<menu-id>" --parent-id "<folder-id|root>" --expect-parent-id "<current-folder-id|root>" --format compress
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
每次只执行一个源菜单。前一项只有在 `data.verification.matchesRequestedState=true` 后才处理下一项;首个失败立即停止。
|
|
30
|
+
|
|
31
|
+
## Stable result fields
|
|
32
|
+
|
|
33
|
+
- `data.operation="move"`
|
|
34
|
+
- `data.selector.id`、`data.selector.parentId`
|
|
35
|
+
- `data.before.parentId`、`data.before.sort`
|
|
36
|
+
- `data.after.parentId`、`data.after.sort`
|
|
37
|
+
- `data.succeeded[].updated`、`data.succeeded[].skipped`
|
|
38
|
+
- `data.verification.matchesRequestedState`
|
|
39
|
+
- `data.snapshotHash` 仅用于观察和排障,不作为再次执行的输入
|
|
40
|
+
|
|
41
|
+
## Failure handling
|
|
42
|
+
|
|
43
|
+
- `menu_state_drift`:当前父级与 `--expect-parent-id` 不一致;重新读取菜单并重新 dry-run。
|
|
44
|
+
- `menu_move_source_not_leaf`:源不是非 folder 叶子;选择正确的源 ID。
|
|
45
|
+
- `menu_parent_not_folder`:数字目标不是 folder;重新读取目标事实。
|
|
46
|
+
- `menu_verification_failed`:写请求可能已经生效,但最终事实未确认;先执行 `menu list`,不要直接重试写入。
|
|
47
|
+
- 其他写入失败同样先读取最新菜单事实,再决定是否生成新的 dry-run。
|
|
48
|
+
|
|
49
|
+
## Boundaries
|
|
50
|
+
|
|
51
|
+
- 命令只修改源菜单的 `parentId` 和 `sort`,不修改 label、path、url、visible、resources 或 extend。
|
|
52
|
+
- `--expect-parent-id` 是 CLI 写前检查,不是服务端原子 compare-and-set。
|
|
53
|
+
- 其他菜单的名称、资源或审计字段变化不阻断当前移动。
|
|
54
|
+
- 新建目录并归组继续使用 `menu regroup-start`;修改 folder 名称或 sort 使用 `menu group-update`。
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# menu regroup-start
|
|
2
|
+
|
|
3
|
+
提交一个异步任务:新建根级 folder,并将一组精确的非 folder 叶子菜单放入其中。命令返回重新分组任务的 `taskId/status`。
|
|
4
|
+
|
|
5
|
+
> **风险等级:high-risk-write** — 必须先 dry-run,正式执行必须显式 `--yes`。
|
|
6
|
+
|
|
7
|
+
## 命令
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
rabetbase menu regroup-start --label "业务管理" --menu-ids "<menu-id-1>,<menu-id-2>" --dry-run --format compress
|
|
11
|
+
rabetbase menu regroup-start --label "业务管理" --menu-ids "<menu-id-1>,<menu-id-2>" --yes --format compress
|
|
12
|
+
rabetbase task status --task-id "<task-id>" --format compress
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Flags
|
|
16
|
+
|
|
17
|
+
| Flag | 类型 | 必填 | 说明 |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| `--label <label>` | string | 是 | 新建根 folder 名称;不能与现有根 folder 同名 |
|
|
20
|
+
| `--menu-ids <ids>` | string | 是 | 逗号分隔的精确叶子菜单 ID,最多 100 个 |
|
|
21
|
+
| `--dry-run` | boolean | 预览时 | 返回当前快照、before/after 和请求体,不写入 |
|
|
22
|
+
| `--yes` | boolean | 正式执行时 | 显式授权重新分组 |
|
|
23
|
+
|
|
24
|
+
## 状态流
|
|
25
|
+
|
|
26
|
+
1. 命令校验精确 ID、叶子类型、重复 ID、根 folder 同名冲突和快照漂移。
|
|
27
|
+
2. 服务端接受请求并返回异步重新分组任务。
|
|
28
|
+
3. 命令收到有效 `taskId` 即视为提交成功;随后尝试回读 `menu list`。分组暂不可见或回读失败时返回 `groupingApplied="unconfirmed"`,不将任务误判为失败。
|
|
29
|
+
4. `PENDING / PROCESSING` 继续查询同一 taskId;`SUCCESS / FAILED` 是终态。
|
|
30
|
+
|
|
31
|
+
> **Agent 完成口径:** 有效 `taskId + PENDING/PROCESSING` 表示任务提交成功,但不表示重新分组完成。必须执行返回的 `data.query.command`,查询同一个 taskId 到 `SUCCESS / FAILED`。保留初始响应的 `data.verification.lookupCommand`;无论初始响应已是 `SUCCESS`,还是后续查询到 `SUCCESS`,都必须执行该只读命令并确认最终菜单事实。回读仍未确认时只重试只读查询,不得重提 `regroup-start`。
|
|
32
|
+
|
|
33
|
+
## 安全规则
|
|
34
|
+
|
|
35
|
+
- 请求非幂等:每次被接受都会新建一个根 folder。
|
|
36
|
+
- 提交失败、超时或任务长期非终态时不自动重提;有 taskId 时只查询原任务,没有 taskId 时先用 `menu list` 检查是否已经分组。
|
|
37
|
+
- 只允许非 folder 叶子菜单;既有 folder 层级调整仍由平台处理。
|
|
38
|
+
- 命令不暴露通用 `menuGroups` JSON 透传,每次只编排一个新分组。
|
|
39
|
+
|
|
40
|
+
## 相关命令
|
|
41
|
+
|
|
42
|
+
- [task status](rabetbase-task-status.md)
|
|
43
|
+
- [menu list](rabetbase-menu-list.md)
|
|
44
|
+
- [menu group-create](rabetbase-menu-group-create.md)
|
|
45
|
+
- [menu group-update](rabetbase-menu-group-update.md)
|