@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,137 @@
|
|
|
1
|
+
# Lovrabet 开发质量规范与最佳实践
|
|
2
|
+
|
|
3
|
+
> 目标:约束 AI 在编写代码、SQL 和 BFF 时的安全边界、命名风格和防御性编程习惯,避免生成高风险或难以维护的产物。
|
|
4
|
+
>
|
|
5
|
+
> 适用场景:编写或审查代码生成逻辑、SQL 和 BFF 脚本时。
|
|
6
|
+
|
|
7
|
+
## 需求落地标准工作流
|
|
8
|
+
|
|
9
|
+
当遇到一个新业务需求时,AI **必须**按以下漏斗模型进行思考与技术选型,严禁一上来就直接写页面或堆砌复杂的自定义 SQL/BFF:
|
|
10
|
+
|
|
11
|
+
### Step 1:模型与关系推演
|
|
12
|
+
- **强制动作**:使用 CLI 命令(`rabetbase dataset list --format json`、`rabetbase dataset list --name "xxx" --format json`、`rabetbase dataset detail --code <数据集编码> --format json`)找出所有相关的业务模型。
|
|
13
|
+
- **list 与 detail**:`dataset list` 只返回精简列表(便于扫目录);**字段、操作、关联、库表摘要**等一律以 `dataset detail` 为准——该命令默认即为完整结构化 JSON,**无需** `--verbose`。
|
|
14
|
+
- **分析深度**:必须分析数据集里的字段含义、系统字段、字段格式、数据规范以及多表之间的关联关系(主外键)。
|
|
15
|
+
- **目的**:绝不凭空捏造结构,确保后续的所有代码设计都基于平台真实的 Schema。
|
|
16
|
+
|
|
17
|
+
### Step 2:接口选型(唯一权威见 SKILL.md)
|
|
18
|
+
|
|
19
|
+
技术与实现方式优先级 **以 [SKILL.md](../SKILL.md) 的「接口选型优先级」「Agent 快速执行顺序」为准**;勿在此重复整段漏斗。
|
|
20
|
+
|
|
21
|
+
本文件仅补充执行习惯:
|
|
22
|
+
|
|
23
|
+
- **SQL**:写前先 `sql list` 查复用;统计类 SQL 主动对齐历史口径,**不一致时告知开发者**。长期维护的源文件落在 **`.rabetbase/sql/<appCode>/<dbName|db-<id>>/`**(与 `sql create` / `sql pull` / `sql push` / `sql status` 约定一致)。
|
|
24
|
+
- **BFF**:写前先 `bff list` 防重复;若逻辑可复用,**建议**抽公共函数或 service 层。脚本**仅**在 **`.rabetbase/bff/<appCode>/...`** 下维护(见 `bff create`)。
|
|
25
|
+
|
|
26
|
+
### Step 3:前端页面呈现
|
|
27
|
+
- 只有在后端的模型和接口选型彻底理清、确认可用之后,**最后一步**才是编写前端 React 页面。
|
|
28
|
+
- 确保将规划好的接口数据合理、高效地绑定到页面组件上。
|
|
29
|
+
|
|
30
|
+
## 命名规范
|
|
31
|
+
|
|
32
|
+
AI 必须使用有业务语义的规范命名,严禁使用诸如 `test`、`temp`、`query1` 等无意义名称。
|
|
33
|
+
|
|
34
|
+
### 动态值生成 JavaScript / TypeScript 标识符
|
|
35
|
+
|
|
36
|
+
- 外部动态值不得未经处理直接用于 JavaScript / TypeScript 标识符。
|
|
37
|
+
- 生成名称必须合法、确定且不存在歧义;无法安全生成时应明确失败。
|
|
38
|
+
- 已发布的公开名称应保持兼容,变更时按破坏性变更处理。
|
|
39
|
+
- 生成文件不应手工修补,应修正规则或输入后重新生成。
|
|
40
|
+
|
|
41
|
+
### SQL 查询命名
|
|
42
|
+
**推荐格式**: `[模块]-[功能]-[类型]`(小写,连字符分隔)
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
✅ 好的命名:
|
|
46
|
+
- customer-active-list # 客户-活跃列表
|
|
47
|
+
- order-payment-summary # 订单-支付汇总
|
|
48
|
+
- product-inventory-query # 产品-库存查询
|
|
49
|
+
|
|
50
|
+
❌ 禁止的命名:
|
|
51
|
+
- query1, query2 # 无意义的序号
|
|
52
|
+
- test, temp # 临时性名称
|
|
53
|
+
- abc, xyz # 无含义缩写
|
|
54
|
+
- 数据查询 # 不要使用中文作为 code/name 标识
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### BFF 脚本命名
|
|
58
|
+
**推荐格式**: `[动词]-[模块]-[功能]`(小写或驼峰视环境而定,通常连字符风格为佳)
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
✅ 好的命名:
|
|
62
|
+
- get-customer-list
|
|
63
|
+
- update-order-status
|
|
64
|
+
- validate-user-permission
|
|
65
|
+
|
|
66
|
+
❌ 禁止的命名:
|
|
67
|
+
- api1, handler2
|
|
68
|
+
- do-something
|
|
69
|
+
- test-api
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 安全与高危操作边界
|
|
73
|
+
|
|
74
|
+
当用户要求执行高危操作时,AI **必须主动拦截并要求二次确认**,并在生成代码时增加安全防护。
|
|
75
|
+
|
|
76
|
+
### SQL 高危操作识别
|
|
77
|
+
|
|
78
|
+
🔴 **高危特征**:
|
|
79
|
+
* 包含 `DELETE`、`TRUNCATE`、`DROP`
|
|
80
|
+
* 修改核心业务表(如订单、支付、库存)
|
|
81
|
+
* **无 `LIMIT` 或无 `WHERE` 限制的 `UPDATE`**
|
|
82
|
+
|
|
83
|
+
✅ **防御动作**:
|
|
84
|
+
* 如果用户给出了不带 `LIMIT` 或全局匹配的 `UPDATE`,AI 必须主动补充约束条件或提示风险。
|
|
85
|
+
* 高危 DDL/DML 不应通过 CLI 自动保存到平台,必须建议用户保存在本地 `.rabetbase/sql/` 同步目录或 `.draft.sql` 草稿中进行 review。
|
|
86
|
+
|
|
87
|
+
### BFF 高危操作识别
|
|
88
|
+
|
|
89
|
+
🔴 **高危特征**:
|
|
90
|
+
* 参数未加任何验证直接传入 `delete` 或 `update` 方法
|
|
91
|
+
* 未做权限校验直接暴露数据
|
|
92
|
+
|
|
93
|
+
✅ **防御动作**:
|
|
94
|
+
AI 编写 BFF 代码时,必须养成防御性编程习惯,默认加上参数校验和错误捕获:
|
|
95
|
+
|
|
96
|
+
```javascript
|
|
97
|
+
// ❌ 高危:无验证,直接透传
|
|
98
|
+
export default async function(params: any) {
|
|
99
|
+
return await client.models.customer.delete({ id: params.id });
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// ✅ 安全:带验证和异常处理
|
|
103
|
+
export default async function(params: any, context: any) {
|
|
104
|
+
if (!params.id) {
|
|
105
|
+
return { success: false, error: '无效的 ID' };
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// 必须捕获异常,不要让内部堆栈直接抛给前端
|
|
109
|
+
try {
|
|
110
|
+
return await context.client.models.customer.delete({ id: params.id });
|
|
111
|
+
} catch (err) {
|
|
112
|
+
return { success: false, error: '删除失败' };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## 描述与版本标记
|
|
118
|
+
|
|
119
|
+
在通过 CLI 命令保存资源(如 SQL、BFF)时,应善用 `description` 字段。AI 应在描述中主动加入语义化的标签和版本说明。
|
|
120
|
+
|
|
121
|
+
**可用标记**:
|
|
122
|
+
* `#生产使用` - 生产环境关键资源
|
|
123
|
+
* `#测试中` - 仍在联调阶段
|
|
124
|
+
* `#待废弃` - 计划移除的旧资源
|
|
125
|
+
|
|
126
|
+
**示例**:
|
|
127
|
+
```markdown
|
|
128
|
+
查询活跃客户列表 #生产使用
|
|
129
|
+
|
|
130
|
+
用途:客户管理主页面展示
|
|
131
|
+
变更记录:
|
|
132
|
+
- 2024-03-20: 增加状态筛选
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 冲突处理底线
|
|
136
|
+
|
|
137
|
+
硬性规则见 [SKILL.md](../SKILL.md)「冲突处理」;分支表、响应结构与沟通要求见 [`conflict-detection.md`](conflict-detection.md)。**禁止**捏造 `forceUpdate`、代用户强制覆盖;`blocked` 时引导平台操作或另存为新名称。
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# BFF 工作流规则
|
|
2
|
+
|
|
3
|
+
前置知识:`backend-function.md`、`data-api-guidelines.md`
|
|
4
|
+
|
|
5
|
+
## 核心原则
|
|
6
|
+
|
|
7
|
+
平台是唯一 source of truth。修改已有脚本时,从平台拉取最新内容。
|
|
8
|
+
|
|
9
|
+
## 工作流
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
速查公共函数 → 确认需求 → 校验字段 → [按需]查平台 → 编写本地脚本 → 自检 → status → dry-run → push/pull → [按需]运行态 smoke
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### 0. 速查公共函数
|
|
16
|
+
执行 `rabetbase bff list --type COMMON --format json` 查看已有公共函数。如有可复用的工具函数,先用 `rabetbase bff detail --id <id> --format json` 确认入参、返回值和副作用,避免按名称猜测。
|
|
17
|
+
|
|
18
|
+
### 1. 确认需求
|
|
19
|
+
写码前必须明确:类型(ENDPOINT/HOOK/COMMON)、函数名、入参、返回结构,以及是否涉及数据集或消息通知。缺失则先问用户。通知型 BFF 还必须确认当前应用已有的 `configCode`、接收对象、标题/摘要和是否允许执行真实发送;不能用示例编码代替真实配置。
|
|
20
|
+
|
|
21
|
+
### 2. 校验依赖事实
|
|
22
|
+
BFF 涉及数据集时,执行 `rabetbase dataset detail --code <数据集编码> --format json`(或 `compress`)确认字段名、类型、必填字段、枚举值、关联关系。禁止凭经验猜字段名,禁止把 Demo 或历史案例里的字段、表名、枚举值复制到当前脚本。
|
|
23
|
+
|
|
24
|
+
不读写数据集的纯消息通知 ENDPOINT 可以不依赖数据集;业务明确要求在数据集操作执行前发送预通知或告警时使用 Before HOOK;作为数据集操作成功后副作用的通知,只有响应结果已包含通知所需字段时才使用 After HOOK。三者都必须按 [`backend-function.md`](backend-function.md) 的“消息通知扩展”核对 `configCode`、`audiences` 和 `message`。先执行以下只读命令获取当前应用的 EMAIL 配置:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
rabetbase notification config-list --type EMAIL --format compress
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
从 `data.configs[]` 按 `configName` / `description` 选择配置,并使用同一项的 `configCode`。命令不会输出 `channelConfig`、`endpointUrl` 或通知凭据。没有结果或存在多个候选且业务目标不明确时,停下向用户确认;不得猜测。不要把 dataset 级通知通道的 `channelCode` 当成 BFF 所需的应用级 `configCode`。
|
|
31
|
+
|
|
32
|
+
BFF HOOK 可挂载 `DB_TABLE` 或 `METADATA` 数据集,具体 operation 以平台返回为准。`METADATA` 数据集不支持 SQL / aggregate 路径;脚本中应使用 `` context.client.models[`dataset_${datasetCode}`] `` 的标准操作能力。
|
|
33
|
+
|
|
34
|
+
常用字段投影:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
rabetbase dataset detail --code <数据集编码> --format compress \
|
|
38
|
+
--jq '.data.fields[] | {name, displayName, type, required, options}'
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
写入前必须确认:
|
|
42
|
+
* 业务必填字段:`data.fields[].required === true`,平台自动维护字段除外
|
|
43
|
+
* 枚举/选择字段:写入 `options[].value`,不要写展示用 `label`
|
|
44
|
+
* 外键字段:从 `data.relations[]` 或 `dataset relations` 确认真实关系
|
|
45
|
+
|
|
46
|
+
### 3. 查平台(按需)
|
|
47
|
+
* 新建 → 跳过
|
|
48
|
+
* 修改已有 → 执行 `rabetbase bff list --format json`(ENDPOINT 或 COMMON) + `rabetbase bff detail --id <id> --format json` 取 `id` 和最新内容
|
|
49
|
+
* 不确定 → 查一下
|
|
50
|
+
|
|
51
|
+
命中同名脚本时,停下问用户:修改还是另起新名。
|
|
52
|
+
|
|
53
|
+
### 4. 编写脚本(规范路径)
|
|
54
|
+
新建脚本应使用 **`rabetbase bff create`**,在 **`.rabetbase/bff/<appCode>/...`** 下生成脚手架后再编辑(路径与 `bff status` / `bff push` 一致)。**不要**在 `src/` 或仓库任意目录手写 BFF 再期望被 CLI 识别。
|
|
55
|
+
已有脚本仅在上述 BFF 树内修改;与 `backend-function.md` 中的目录约定一致。
|
|
56
|
+
|
|
57
|
+
通知需要在数据集 `create` / `update` / `delete` 执行前明确预告,并且通知失败应阻止本次操作时,选择 Before HOOK;通知由数据集操作成功触发,且响应结果已包含通知所需字段时,选择 After HOOK;响应结果不包含通知所需字段时,选择能在写入前读取并暂存必要字段、在成功后发送通知的受控 `ENDPOINT`。三者都使用 `await context.client.extension.execute("notification", "send", ...)`,并由 runtime 注入可信 `appCode` 和当前用户;不要把 `appCode`、渠道地址或密钥作为外部参数透传。
|
|
58
|
+
|
|
59
|
+
### 5. 自检
|
|
60
|
+
* 方法名正确
|
|
61
|
+
* 单条查询用 `getOne`
|
|
62
|
+
* BFF 模型键使用 `"dataset_" + 32 位数据集 code`
|
|
63
|
+
* METADATA 数据集的 BFF / HOOK 不走 SQL 或 aggregate;只使用平台返回的标准数据操作
|
|
64
|
+
* `filter()` 结果从 `.tableData` 读取,不是 `.list`
|
|
65
|
+
* `create()` 返回新记录 ID,不是完整对象;不要访问 `created.id`
|
|
66
|
+
* `batchCreate()` 返回新记录 ID 数组;入参直接使用非空对象数组,不使用 `{"items":[...]}` 包装
|
|
67
|
+
* 批量更新使用 `update({ id: [...] })`;不存在 `batchUpdate()`,也不传记录数组
|
|
68
|
+
* 枚举/选择字段写入 `options[].value`,不是展示 `label`
|
|
69
|
+
* BFF 中 `sql.execute` 返回数组,不是 `{ execSuccess, execResult }`
|
|
70
|
+
* 没有在 BFF 中使用前端 SDK 初始化能力,如 `createClient`、`registerModels`
|
|
71
|
+
* 参数校验、错误处理、脱敏
|
|
72
|
+
* 通知型 BFF 只传 `configCode` / `audiences` / `message`,并且没有 `${...}` 模板表达式、旧 MANUAL 参数或渠道密钥
|
|
73
|
+
* 通知型 ENDPOINT 限制调用者可传的字段、`configCode` 和接收对象范围,不形成任意通知转发器
|
|
74
|
+
* 通知型 Before HOOK 使用“即将执行”或“准备执行”的消息语义,`await` 发送后返回原始 `params`;不直接返回通知扩展结果,并明确接受“通知已发送但后续业务仍可能失败”
|
|
75
|
+
* 通知型 After HOOK 只使用业务接口响应结果或固定可信规则派生接收对象与消息;若通知失败或超时,按业务操作可能已完成、通知状态未知处理,不得自动重试原业务请求
|
|
76
|
+
|
|
77
|
+
### 6. 检查本地状态
|
|
78
|
+
执行 `rabetbase bff status --format json`:
|
|
79
|
+
* 确认新增脚本进入 `added`
|
|
80
|
+
* 确认修改脚本进入 `modified`
|
|
81
|
+
* 若状态异常,先不要推送
|
|
82
|
+
|
|
83
|
+
### 7. 预览推送
|
|
84
|
+
执行 `rabetbase bff push --type <type> --name <name> --dry-run --format json`:
|
|
85
|
+
* 查看本次是 `create` 还是 `update`
|
|
86
|
+
* 检查目标 `lockKey`、`filePath` 和预期状态
|
|
87
|
+
* dry-run 不会上传远端,也不会改 lock
|
|
88
|
+
|
|
89
|
+
### 8. 推送到平台
|
|
90
|
+
执行 `rabetbase bff push --yes --type <type> --name <name> --format json`:
|
|
91
|
+
* 成功项进入 `uploaded`
|
|
92
|
+
* 未变更项进入 `skipped: unchanged`
|
|
93
|
+
* 失败项进入 `failed`
|
|
94
|
+
|
|
95
|
+
### 9. 运行态 smoke(按需)
|
|
96
|
+
`rabetbase bff push` 只证明脚本配置已同步到平台管理侧。若本轮需求要求确认最终运行效果,应显式进入运行验证,例如在已安装并配置运行 CLI 的环境中执行:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
lovrabet bff exec --appcode <appCode> --name <functionName> --params '<json>' --format compress
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
边界:
|
|
103
|
+
* 通知型 BFF 的 smoke 会真实发送外部消息;必须通过已确认上下文或显式 `--appcode` 锁定同一 app,执行前向用户展示 app、函数名、`configCode`、接收对象和消息摘要并取得明确确认
|
|
104
|
+
* `lovrabet bff detail` 只确认运行契约和版本,不返回脚本源码;通知参数必须来自本地已审查脚本或明确业务契约,不能按函数名猜
|
|
105
|
+
* 通知执行超时或客户端未拿到结果时,先按“状态未知”处理;不得自动重试,避免重复发送
|
|
106
|
+
* `lovrabet` CLI 不可用、未配置或无权限时,明确记录“运行态 smoke 未执行”,不要把它写成 `rabetbase` 验证已通过
|
|
107
|
+
* 管理态已同步但运行态仍返回旧版本时,优先按传播延迟 / 缓存延迟处理:等待后重试;必要时再对目标脚本执行一次精确 `bff push --force --type <type> --name <name>`
|
|
108
|
+
* 多次重试仍旧版本时,记录平台运行态缓存风险并上报;不要通过修改 Skill、配置文件或另建脚本来掩盖
|
|
109
|
+
|
|
110
|
+
### 10. 本地文件
|
|
111
|
+
脚本内容直接保存在本地文件中,纳入 Git 管理。路径遵循 `.rabetbase/bff/<appCode>/` 目录约定(详见 `backend-function.md`):
|
|
112
|
+
* ENDPOINT → `.rabetbase/bff/<appCode>/ENDPOINT/<name>.js`
|
|
113
|
+
* HOOK → `.rabetbase/bff/<appCode>/HOOK/<alias>/<operationType>/<functionNode>/<name>.js`
|
|
114
|
+
* COMMON → `.rabetbase/bff/<appCode>/COMMON/<name>.js`
|
|
115
|
+
|
|
116
|
+
## 冲突处理
|
|
117
|
+
|
|
118
|
+
若返回 `failed`:
|
|
119
|
+
* 告知用户失败的 `lockKey` 和错误原因
|
|
120
|
+
* 不要假装成功
|
|
121
|
+
* 已成功推送的其他脚本不会自动回滚
|
|
122
|
+
|
|
123
|
+
## 本地文件
|
|
124
|
+
|
|
125
|
+
正常流程:先在本地创建/修改,再通过 `push` 同步远端,路径同 Step 10(`.rabetbase/bff/<appCode>/` 下)。
|
|
126
|
+
例外场景:
|
|
127
|
+
* 用户主动要求"同步平台最新到本地" → 从平台拉取 → 覆盖本地(`bff pull`)
|
|
128
|
+
* 用户要求删除脚本 → `bff delete --yes --target ...`
|
|
129
|
+
|
|
130
|
+
修改已有脚本时,从平台拉取最新内容。
|
|
131
|
+
|
|
132
|
+
## 修改已有脚本
|
|
133
|
+
|
|
134
|
+
`rabetbase bff list --format json` → `rabetbase bff detail --id <id> --format json` 拉最新内容 → 如需覆盖本地则 `bff pull` → 修改本地文件 → `bff status` → `bff push --yes`
|
|
135
|
+
|
|
136
|
+
## BFF 语义差异
|
|
137
|
+
|
|
138
|
+
| 场景 | 前端 SDK | BFF (context.client) |
|
|
139
|
+
|------|---------|---------------------|
|
|
140
|
+
| SQL 返回值 | `{ execSuccess, execResult }` | 直接返回数组 |
|
|
141
|
+
| 模型键 | 可通过初始化/生成代码使用 alias | 使用 `"dataset_" + 32 位数据集 code` |
|
|
142
|
+
| `filter()` 返回 | `tableData` 为列表数据 | `tableData` 为列表数据,不是 `list` |
|
|
143
|
+
| `create()` 返回 | 以 SDK 文档/类型为准 | 新记录 ID,不是完整对象 |
|
|
144
|
+
| `batchCreate()` 返回 | 以 SDK 文档/类型为准 | 新记录 ID 数组;直接传非空对象数组 |
|
|
145
|
+
| 批量更新 | 以 SDK 文档/类型为准 | `update({ id: [...] })`;不存在 `batchUpdate()` |
|
|
146
|
+
| SDK 初始化能力 | `createClient` / `registerModels` | 不可用;`context.client` 由平台注入 |
|
|
147
|
+
| 前端调 BFF | `client.bff.execute({ scriptName, params })` 返回业务数据 | — |
|
|
148
|
+
| 发送应用级通知 | — | `context.client.extension.execute("notification", "send", { configCode, audiences, message })` |
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# 冲突检测与未完成写入处理
|
|
2
|
+
|
|
3
|
+
**文档版本**: v4.0
|
|
4
|
+
**适用于**: SQL / BFF 资源的远端写入与同步
|
|
5
|
+
|
|
6
|
+
> **与 SKILL.md 的关系**:[SKILL.md](../SKILL.md) 只保留硬性规则;本文件负责解释什么叫“远端未写入成功”,以及 AI 应该如何沟通。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 当前主工作流
|
|
11
|
+
|
|
12
|
+
当前推荐路径:
|
|
13
|
+
|
|
14
|
+
- **SQL**
|
|
15
|
+
- 新建:`rabetbase sql create`
|
|
16
|
+
- 修改:编辑 `.rabetbase/sql/...` 下的同步文件后执行 `rabetbase sql push`
|
|
17
|
+
- 删除:`rabetbase sql delete`
|
|
18
|
+
- **BFF**
|
|
19
|
+
- 新建本地脚手架:`rabetbase bff create`
|
|
20
|
+
- 推送远端:`rabetbase bff push`
|
|
21
|
+
- 删除远端:`rabetbase bff delete`
|
|
22
|
+
|
|
23
|
+
## 什么时候算“没有写入成功”
|
|
24
|
+
|
|
25
|
+
只要 CLI 返回结果表明**远端没有完成创建 / 更新 / 删除 / 同步**,就必须按失败处理。常见信号包括:
|
|
26
|
+
|
|
27
|
+
- `blocked: true`
|
|
28
|
+
- `action: "blocked"`
|
|
29
|
+
- `success: false`
|
|
30
|
+
- `ok: false`
|
|
31
|
+
- 返回 message 明确表示冲突、被平台拦截、校验失败、未同步
|
|
32
|
+
- 非零退出且错误原因发生在远端写入前后
|
|
33
|
+
|
|
34
|
+
**核心原则**:
|
|
35
|
+
|
|
36
|
+
- 本地文件已生成,不等于远端已保存
|
|
37
|
+
- `--dry-run` 预览成功,不等于远端已执行
|
|
38
|
+
- 命令执行失败时,不能用“已处理”“已保存”这类表述蒙混过去
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## AI 的沟通义务
|
|
43
|
+
|
|
44
|
+
只要远端未写入成功,回复里必须同时做到:
|
|
45
|
+
|
|
46
|
+
1. **明确状态**
|
|
47
|
+
- 直接说“未保存到平台”“未完成远端同步”“只完成了本地生成/预览”。
|
|
48
|
+
2. **说明原因**
|
|
49
|
+
- 引用返回里的 `message`、`error.message`、`blocked`、或关键上下文。
|
|
50
|
+
3. **给出下一步**
|
|
51
|
+
- 去平台处理
|
|
52
|
+
- 修改本地内容后重试
|
|
53
|
+
- 先 `--dry-run`
|
|
54
|
+
- 回到 `create + 本地编辑 + push` 主路径
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 典型分支
|
|
59
|
+
|
|
60
|
+
| 场景 | 是否算远端成功 | AI 应怎么说 |
|
|
61
|
+
|------|----------------|-------------|
|
|
62
|
+
| `sql create --dry-run` 成功 | 否 | 说明只是预览,尚未创建远端 SQL |
|
|
63
|
+
| `bff create` 成功 | 否 | 说明本地脚手架已生成,尚未推送远端 |
|
|
64
|
+
| `sql push --yes` 成功 | 是 | 告知已同步远端,可附带 sqlCode / 路径 |
|
|
65
|
+
| `bff push --yes` 成功 | 是 | 告知已推送远端,可附带 lockKey / 名称 |
|
|
66
|
+
| `blocked: true` / `action: blocked` | 否 | 明确说平台未保存,提示手动处理或联系相关人 |
|
|
67
|
+
| 校验失败 / validation error | 否 | 说明未写入远端,先修内容或参数 |
|
|
68
|
+
## blocked 场景
|
|
69
|
+
|
|
70
|
+
当返回 `blocked: true` 或语义等价的“平台冲突 / 非本人资源 / 平台限制”时:
|
|
71
|
+
|
|
72
|
+
- 必须明确说:**这次没有写入到 Lovrabet 平台**
|
|
73
|
+
- 可以建议:去平台手动处理、联系上次提交人、或先保留本地草稿
|
|
74
|
+
- 禁止:重试绕过、换参数偷偷再试、把失败包装成成功
|
|
75
|
+
|
|
76
|
+
建议话术:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
这次没有同步到 Lovrabet 平台。平台返回了冲突/阻断提示:<message>。
|
|
80
|
+
如果需要继续修改,请先到平台处理冲突,或联系上次提交人;本地内容可以先保留。
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 响应示例
|
|
86
|
+
|
|
87
|
+
### 仅预览成功
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"ok": true,
|
|
92
|
+
"dryRun": true,
|
|
93
|
+
"data": {
|
|
94
|
+
"method": "POST"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
解释:**预览成功,不等于远端已执行**。
|
|
100
|
+
|
|
101
|
+
### 冲突/阻断
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"ok": false,
|
|
106
|
+
"blocked": true,
|
|
107
|
+
"message": "Resource was blocked by platform"
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
解释:**远端未写入成功,必须明确告知用户**。
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 相关文档
|
|
116
|
+
|
|
117
|
+
- **SQL 工作流**: `sql-creation-workflow.md`
|
|
118
|
+
- **BFF 工作流**: `bff-creation-workflow.md`
|
|
119
|
+
- **最佳实践**: `best-practices.md`
|