@lovrabet/rabetbase-cli 2.5.2 → 2.5.3-beta.2
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/lib/api/api-doc.js +1 -1
- package/lib/api/fetch-model-list.js +1 -1
- package/lib/api/generate-api-file.d.ts +1 -1
- package/lib/api/generate-api-file.js +1 -1
- package/lib/api/generate-sdk-config-file.d.ts +2 -1
- package/lib/api/generate-sdk-config-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/logs.d.ts +7 -0
- package/lib/commands/bff/logs.js +1 -0
- 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/delete.js +1 -1
- package/lib/commands/config/get.js +1 -1
- package/lib/commands/config/index.js +1 -1
- package/lib/commands/config/init.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/dataset/batch-design.d.ts +21 -0
- package/lib/commands/dataset/batch-design.js +1 -0
- package/lib/commands/dataset/business-group-update.js +1 -1
- package/lib/commands/dataset/business-groups.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-restore.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/dataset/user-deleted-field-list.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-refresh-start.js +1 -1
- package/lib/commands/db/diff-refresh-status.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/table-diff-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/deployment/index.js +1 -1
- package/lib/commands/deployment/sync-all.js +1 -1
- package/lib/commands/deployment/sync-jobs.js +1 -1
- package/lib/commands/deployment/sync-status.js +1 -1
- package/lib/commands/doctor.js +1 -1
- package/lib/commands/file/index.js +1 -1
- package/lib/commands/flow/create.d.ts +2 -0
- package/lib/commands/flow/create.js +1 -0
- package/lib/commands/flow/detail.d.ts +2 -0
- package/lib/commands/flow/detail.js +1 -0
- package/lib/commands/flow/index.d.ts +3 -0
- package/lib/commands/flow/index.js +1 -0
- package/lib/commands/flow/list.d.ts +2 -0
- package/lib/commands/flow/list.js +1 -0
- package/lib/commands/flow/publish.d.ts +2 -0
- package/lib/commands/flow/publish.js +1 -0
- package/lib/commands/flow/runtime-resources-shared.d.ts +40 -0
- package/lib/commands/flow/runtime-resources-shared.js +1 -0
- package/lib/commands/flow/runtime-role-list.d.ts +2 -0
- package/lib/commands/flow/runtime-role-list.js +1 -0
- package/lib/commands/flow/runtime-role-user-list.d.ts +2 -0
- package/lib/commands/flow/runtime-role-user-list.js +1 -0
- package/lib/commands/flow/runtime-user-search.d.ts +2 -0
- package/lib/commands/flow/runtime-user-search.js +1 -0
- package/lib/commands/flow/shared.d.ts +41 -0
- package/lib/commands/flow/shared.js +1 -0
- package/lib/commands/flow/update.d.ts +2 -0
- package/lib/commands/flow/update.js +1 -0
- package/lib/commands/flow/validate.d.ts +3 -0
- package/lib/commands/flow/validate.js +1 -0
- package/lib/commands/instant-api-policy/current.js +1 -1
- package/lib/commands/instant-api-policy/index.js +1 -1
- package/lib/commands/instant-api-policy/init.js +1 -1
- package/lib/commands/instant-api-policy/publish.js +1 -1
- package/lib/commands/instant-api-policy/pull.js +1 -1
- package/lib/commands/instant-api-policy/revision.js +1 -1
- package/lib/commands/instant-api-policy/revisions.js +1 -1
- package/lib/commands/instant-api-policy/rollback.js +1 -1
- package/lib/commands/instant-api-policy/shared.js +1 -1
- package/lib/commands/instant-api-policy/validate.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/search.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/menu/visibility-update.js +1 -1
- package/lib/commands/notification/config-create.js +1 -1
- package/lib/commands/notification/config-delete.js +1 -1
- package/lib/commands/notification/config-list.js +1 -1
- package/lib/commands/notification/config-update.js +1 -1
- package/lib/commands/notification/index.js +1 -1
- package/lib/commands/notification/shared.js +1 -1
- package/lib/commands/ocr/index.js +1 -1
- package/lib/commands/page/create.js +1 -1
- package/lib/commands/page/custom/detail.js +1 -1
- package/lib/commands/page/custom/list.js +1 -1
- package/lib/commands/page/custom/publish.js +1 -1
- package/lib/commands/page/custom/shared.js +1 -1
- package/lib/commands/page/custom/syntax.js +1 -1
- package/lib/commands/page/custom/update.js +1 -1
- package/lib/commands/page/data-list-status.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/relation-audit.js +1 -1
- package/lib/commands/page/restore.js +1 -1
- package/lib/commands/page/shared.js +1 -1
- package/lib/commands/page/sync.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/materialize-project-template.js +1 -1
- package/lib/commands/project/create/project-name.js +1 -1
- package/lib/commands/project/create/project-template-archive.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/domain-routing-sync.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/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/rule/get.js +1 -1
- package/lib/commands/rule/index.js +1 -1
- package/lib/commands/rule/list.js +1 -1
- package/lib/commands/rule/set.js +1 -1
- package/lib/commands/rule/shared.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.js +1 -1
- package/lib/commands/user-account/index.js +1 -1
- 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/domain-config.js +1 -1
- package/lib/config/project-domain-routing.js +1 -1
- package/lib/config/region-config.d.ts +23 -0
- package/lib/config/region-config.js +1 -0
- package/lib/config/schema.d.ts +15 -0
- 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/region.js +1 -1
- package/lib/constant/risk.js +1 -1
- package/lib/constant/routing-profile.js +1 -1
- package/lib/context/app-resolver.d.ts +6 -0
- 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.d.ts +13 -0
- package/lib/context.js +1 -1
- package/lib/core/alias-resolver.js +1 -1
- package/lib/core/api-client.d.ts +172 -1
- 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/hook-directory.d.ts +55 -0
- package/lib/core/bff/hook-directory.js +1 -0
- package/lib/core/bff/lock.js +1 -1
- package/lib/core/bff/types.d.ts +15 -0
- package/lib/core/bff/utils.js +1 -1
- package/lib/core/db-resolver.js +1 -1
- package/lib/core/flow-config.d.ts +628 -0
- package/lib/core/flow-config.js +1 -0
- package/lib/core/instant-api-policy/config.js +1 -1
- package/lib/core/kb-search-client.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/page/lr-smart-jsx.d.ts +6 -0
- package/lib/core/page/lr-smart-jsx.js +1 -0
- 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/supported-flags.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/generated/official-routing.js +1 -1
- package/lib/generated/routing-contract.js +1 -1
- package/lib/help.js +1 -1
- package/lib/postinstall.js +1 -1
- 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.js +1 -1
- package/lib/skills/main.js +1 -1
- 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/types/index.d.ts +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.d.ts +2 -8
- package/lib/utils/config.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/sleep.js +1 -1
- package/lib/utils/template-replacer.d.ts +2 -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 +1 -1
- package/skills/rabetbase/SKILL.md +27 -8
- package/skills/rabetbase/guides/approval-flow-development-workflow.md +137 -0
- package/skills/rabetbase/guides/backend-function.md +19 -9
- package/skills/rabetbase/guides/bff-creation-workflow.md +10 -1
- package/skills/rabetbase/guides/conflict-detection.md +2 -0
- package/skills/rabetbase/guides/page-development-workflow.md +3 -0
- package/skills/rabetbase/guides/sdk-client-generation.md +6 -5
- package/skills/rabetbase/knowledge/approval-flow/config-json-schema.md +290 -0
- package/skills/rabetbase/knowledge/page-schema/LrSmartJsx.md +11 -3
- package/skills/rabetbase/references/rabetbase-api-pull.md +5 -4
- package/skills/rabetbase/references/rabetbase-app-list.md +3 -0
- package/skills/rabetbase/references/rabetbase-bff-create.md +1 -1
- package/skills/rabetbase/references/rabetbase-bff-list.md +1 -1
- package/skills/rabetbase/references/rabetbase-bff-logs.md +47 -0
- package/skills/rabetbase/references/rabetbase-bff-pull.md +9 -3
- package/skills/rabetbase/references/rabetbase-bff-push.md +10 -2
- package/skills/rabetbase/references/rabetbase-bff-status.md +2 -0
- package/skills/rabetbase/references/rabetbase-config.md +10 -9
- package/skills/rabetbase/references/rabetbase-dataset-generate.md +52 -2
- package/skills/rabetbase/references/rabetbase-doctor.md +2 -2
- package/skills/rabetbase/references/rabetbase-flow-commands.md +86 -0
- package/skills/rabetbase/references/rabetbase-flow-resources.md +83 -0
- package/skills/rabetbase/references/rabetbase-flow-runtime-boundary.md +25 -0
- package/skills/rabetbase/references/rabetbase-instant-api-policy.md +103 -11
- package/skills/rabetbase/references/rabetbase-notification-config-list.md +17 -0
- package/skills/rabetbase/references/rabetbase-page-push.md +5 -1
- package/skills/rabetbase/references/rabetbase-workspace.md +4 -2
- package/skills/rabetbase.manifest.json +9 -3
- package/templates/generate-api/client.ts.tpl +1 -1
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# Rabetbase FlowConfig 契约
|
|
2
|
+
|
|
3
|
+
本文件描述 `rabetbase flow validate/create/update/detail --output` 使用的可移植本地清单。服务端生成的 id、编码、状态和部署信息不属于本地文件。
|
|
4
|
+
|
|
5
|
+
## 外层结构
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"flowName": "采购审批",
|
|
10
|
+
"flowDesc": "采购申请的主管审批",
|
|
11
|
+
"flowType": "INDEPENDENT_FLOW",
|
|
12
|
+
"flowJson": {
|
|
13
|
+
"pageMode": "CUSTOM_PAGE",
|
|
14
|
+
"startPageId": 10001,
|
|
15
|
+
"nodes": [],
|
|
16
|
+
"edges": []
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
必填字段:
|
|
22
|
+
|
|
23
|
+
- `flowName`:非空流程名称。
|
|
24
|
+
- `flowType`:`FORM_FLOW` 或 `INDEPENDENT_FLOW`,不得根据节点或数据集绑定推断。
|
|
25
|
+
- `flowJson.nodes`:非空节点数组。
|
|
26
|
+
- `flowJson.edges`:非空连线数组。
|
|
27
|
+
|
|
28
|
+
可选字段:`flowDesc`、`datasetCode`、`pageId`。
|
|
29
|
+
|
|
30
|
+
`flowType` 是产品语义分类,不由节点形状推断:
|
|
31
|
+
|
|
32
|
+
- `FORM_FLOW`:表单审批流,可以配置 `datasetCode`、`pageId`;人工节点只允许 `taskMode: "APPROVAL"`,禁止 `HANDLE`。
|
|
33
|
+
- `INDEPENDENT_FLOW`:独立工作流,不能配置外层 `datasetCode` 或外层 `pageId`;可以同时使用 `APPROVAL` 和 `HANDLE`。
|
|
34
|
+
|
|
35
|
+
独立工作流中出现审批节点不会把它变成表单审批流。需要填写、补充材料、执行或确认等人工办理步骤时使用 `INDEPENDENT_FLOW + HANDLE`。
|
|
36
|
+
|
|
37
|
+
`flowJson.pageMode` 只适用于 `INDEPENDENT_FLOW`:
|
|
38
|
+
|
|
39
|
+
- `CUSTOM_PAGE`:业务自定义页面,缺省时按此值处理。
|
|
40
|
+
- `PLATFORM_FORM`:服务端的平台表单页面语义;当前 Skill 和 CLI 不支持生成或提交。
|
|
41
|
+
|
|
42
|
+
`FORM_FLOW` 不得配置 `pageMode`。自定义页面 SDK/OpenAPI 只返回 `INDEPENDENT_FLOW + CUSTOM_PAGE`。
|
|
43
|
+
|
|
44
|
+
`INDEPENDENT_FLOW + CUSTOM_PAGE` 可选配置正整数 `flowJson.startPageId`,并在 `APPROVAL` 人工节点上可选配置正整数 `pageId`。二者只用于页面跳转,不参与流程执行或业务判断;缺失时调用方自行选择页面。其他流程类型、`PLATFORM_FORM` 或非人工节点不得配置这两个导航字段。
|
|
45
|
+
|
|
46
|
+
本地 FlowConfig 必须显式填写 `flowType`。CLI 不再利用服务端的历史默认值推断为 `FORM_FLOW`,避免表单审批流和独立工作流混用。
|
|
47
|
+
|
|
48
|
+
Skill 根据业务逻辑直接生成完整 `nodes + edges` 拓扑,不读取或填写 SmartCode `templateName`。
|
|
49
|
+
|
|
50
|
+
`appCode` 来自当前 CLI 工作区,远程定义 `id` 来自 `--id`。二者都不落本地文件。
|
|
51
|
+
|
|
52
|
+
## 规范化
|
|
53
|
+
|
|
54
|
+
`normalizeFlowConfig` 不修改调用方对象,并对下列旧字段产生 warning 后从规范结果移除:
|
|
55
|
+
|
|
56
|
+
- 外层:`id`、`appCode`、`templateName`
|
|
57
|
+
- `flowJson`:`flowKey`、`flowCode`、`flowName`、`bindDatasetCode`、`datasetCode`、`appCode`、`pageId`、`templateName`
|
|
58
|
+
- 任意层级值为空的 `metadata`
|
|
59
|
+
|
|
60
|
+
`flowJson.schemaVersion` 按 SmartCode 规则单独处理:空值或默认值 `approval.simple-flow.v1` 会警告并移除;其他值保留在规范结果中,并由本地校验明确返回 `Unsupported schemaVersion`。这样不会把未知或未来版本静默降级为 v1。
|
|
61
|
+
|
|
62
|
+
`flow validate --write-normalized` 只写规范结果。校验器从外层元数据创建独立内存副本,临时注入编译上下文;这些值不会污染文件。
|
|
63
|
+
|
|
64
|
+
## 页面模式
|
|
65
|
+
|
|
66
|
+
使用 `INDEPENDENT_FLOW + CUSTOM_PAGE` 时:
|
|
67
|
+
|
|
68
|
+
- 采购申请等业务数据由自定义页面直接读写业务数据集,并按业务状态展示不同页面和操作。
|
|
69
|
+
- 流程只保存路由、办理人、脚本、通知等执行配置;页面通过 SDK 发起或办理任务,成功后自行更新业务状态。
|
|
70
|
+
- 禁止 `flowJson.formSchema`、`flowJson.formDefinitions`、`flowJson.formPermissions`、节点 `form`、节点 `formPermission` 和 `cc.readSources`。
|
|
71
|
+
- `validate/create/update/detail --output` 遇到上述字段会明确报错,不会静默删除或导出丢字段的文件。普通 `detail` 仍可只读查看远端原始定义。
|
|
72
|
+
|
|
73
|
+
`INDEPENDENT_FLOW + PLATFORM_FORM` 使用平台表单能力,不属于自定义页面 SDK 的返回范围。当前 CLI 只识别该服务端语义用于明确报错,`validate/create/update/detail --output` 均拒绝生成或提交此模式;Skill 必须返回 `NEEDS_DSL_EXTENSION`。普通 `detail` 仍可只读查看远端原始定义。
|
|
74
|
+
|
|
75
|
+
## 通用节点
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"id": "managerApprove",
|
|
80
|
+
"type": "APPROVAL",
|
|
81
|
+
"name": "主管审批",
|
|
82
|
+
"position": { "x": 300, "y": 180 }
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
- 支持 `START`、`END`、`APPROVAL`、`CONDITION`、`SCRIPT`、`NOTIFICATION`。
|
|
87
|
+
- 每个节点都必须有非空 `name`。
|
|
88
|
+
- 每个节点都必须显式提供有限且大于等于 0 的 `position.x/y`。
|
|
89
|
+
- 节点 ID 和边 ID 使用 `[A-Za-z_][A-Za-z0-9_]*`。
|
|
90
|
+
- 节点和边共用一个 BPMN ID 命名空间,任何元素都不能重名。
|
|
91
|
+
|
|
92
|
+
## 图结构
|
|
93
|
+
|
|
94
|
+
- 必须且只能有一个 `START`,至少有一个 `END`。
|
|
95
|
+
- `START` 无入边,`END` 无出边;其他节点必须同时满足必要的入边/出边要求。
|
|
96
|
+
- 所有节点必须从 `START` 可达,并且每个可达节点都必须存在一条通往某个 `END` 的路径。
|
|
97
|
+
- 支持自环、回退连线和多节点有向环;环路必须保留能够到达 `END` 的退出路径,不能形成无出口闭环。
|
|
98
|
+
- 相同 `source + target + conditionType` 只能出现一次,即使边 ID 或 expression 不同。
|
|
99
|
+
|
|
100
|
+
## APPROVAL
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"id": "managerApprove",
|
|
105
|
+
"type": "APPROVAL",
|
|
106
|
+
"name": "主管审批",
|
|
107
|
+
"pageId": 10002,
|
|
108
|
+
"position": { "x": 300, "y": 180 },
|
|
109
|
+
"taskMode": "APPROVAL",
|
|
110
|
+
"approvalMode": "SINGLE",
|
|
111
|
+
"sequential": false,
|
|
112
|
+
"assignee": {
|
|
113
|
+
"strategy": "FIXED",
|
|
114
|
+
"userIds": ["82"]
|
|
115
|
+
},
|
|
116
|
+
"transferCandidates": {
|
|
117
|
+
"strategy": "FIXED",
|
|
118
|
+
"userIds": ["15023", "16001"]
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
- `taskMode` 支持 `APPROVAL`、`HANDLE`;省略时按 `APPROVAL`。`FORM_FLOW` 只能使用 `APPROVAL`,`HANDLE` 仅允许出现在 `INDEPENDENT_FLOW`。
|
|
124
|
+
- `pageId` 可省略;仅 `INDEPENDENT_FLOW + CUSTOM_PAGE` 的 `APPROVAL` 人工节点可配置,用于待办、已办和任务详情跳转,不影响节点执行。
|
|
125
|
+
- `approvalMode` 支持 `SINGLE`、`ALL`、`ANY`;省略时按 `SINGLE`。`sequential` 控制多办理人是否顺序执行,默认 `false`。
|
|
126
|
+
- `FIXED` 需要非空有效 `userIds`;`SINGLE + FIXED` 只能有一个不同用户。
|
|
127
|
+
- `ROLE` 需要正整数 `roleId`。
|
|
128
|
+
- `transferCandidates` 可省略;存在时只支持 `FIXED`,且 `userIds` 必须非空,每项为非空字符串或正整数。
|
|
129
|
+
- `taskMode: "APPROVAL"` 必须且只能有一条 `APPROVED` 出边和一条 `REJECTED` 出边,两条边都不能是默认边。
|
|
130
|
+
- `taskMode: "HANDLE"` 必须且只能有一条 `ALWAYS` 出边,不能配置 `defaultFlow` 或 `expression`;办理完成后直接沿该边继续。
|
|
131
|
+
- 只要流程包含决策型 `APPROVAL` 任务,就必须同时存在 `result: "APPROVED"` 和 `result: "REJECTED"` 的 END 节点。只有 `HANDLE` 的流程不要求这两个结果节点。
|
|
132
|
+
|
|
133
|
+
### HANDLE 后续路由
|
|
134
|
+
|
|
135
|
+
- `HANDLE` 自身不选择业务分支。自定义页面可在办理请求中的 `variables` 更新业务变量,或通过 `formPatch` 增量更新 `formData`;任务完成后,下游节点读取更新后的值。
|
|
136
|
+
- 路由变量已准备好时使用 `HANDLE → CONDITION`,由 CONDITION 的表达式和默认边决定后续路径。
|
|
137
|
+
- 需要 Backend Function 先计算、校验或归一化路由变量时使用 `HANDLE → SCRIPT → CONDITION`;不需要计算时可省略 SCRIPT。
|
|
138
|
+
- 不允许给 HANDLE 配置多条出边,也不允许通过 `targetNodeId` 让调用方直接选择目标节点。办理节点存在多个业务结果不应判定为 `NEEDS_DSL_EXTENSION`,因为分支职责属于下游 CONDITION。
|
|
139
|
+
|
|
140
|
+
### 审批超时
|
|
141
|
+
|
|
142
|
+
`APPROVAL.timeout.enabled=true` 时必须配置正整数 `duration.value` 和 `SECONDS/MINUTES/HOURS/DAYS` 单位:
|
|
143
|
+
|
|
144
|
+
- `AUTO_APPROVE`、`AUTO_REJECT` 必须中断当前任务,`interrupting` 省略时默认 `true`。
|
|
145
|
+
- `EXECUTE_BFF` 必须配置 `scriptName`,不能中断当前任务,`interrupting` 省略时默认 `false`;可用 `resultVariable` 保存结果。
|
|
146
|
+
- `HANDLE` 超时只支持 `EXECUTE_BFF`。
|
|
147
|
+
|
|
148
|
+
## CONDITION
|
|
149
|
+
|
|
150
|
+
```json
|
|
151
|
+
[
|
|
152
|
+
{
|
|
153
|
+
"id": "edge_amount_finance",
|
|
154
|
+
"source": "amountCheck",
|
|
155
|
+
"target": "financeApprove",
|
|
156
|
+
"conditionType": "EXPRESSION",
|
|
157
|
+
"expression": "${formData.amount > 10000}"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"id": "edge_amount_default",
|
|
161
|
+
"source": "amountCheck",
|
|
162
|
+
"target": "approvedEnd",
|
|
163
|
+
"conditionType": "ALWAYS",
|
|
164
|
+
"defaultFlow": true
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
- CONDITION 至少有两条出边。
|
|
170
|
+
- 必须且只能有一条 `defaultFlow: true`。
|
|
171
|
+
- 默认边必须使用 `ALWAYS`,且不能定义 `expression`。
|
|
172
|
+
- 其余边必须使用 `EXPRESSION`,且必须有非空 `expression`。
|
|
173
|
+
|
|
174
|
+
表达式直接读取顶层流程变量;例如发起或办理请求中的 `variables.amount` 在表达式中写作 `${amount > 10000}`,`formData` 字段写作 `${formData.amount > 10000}`。生成表达式前先按开发工作流建立变量契约,不猜测变量名或类型。
|
|
175
|
+
|
|
176
|
+
## SCRIPT
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"id": "checkPrice",
|
|
181
|
+
"type": "SCRIPT",
|
|
182
|
+
"name": "价格校验",
|
|
183
|
+
"position": { "x": 520, "y": 180 },
|
|
184
|
+
"scriptName": "checkProductPrice",
|
|
185
|
+
"resultVariable": "priceCheckResult",
|
|
186
|
+
"async": {
|
|
187
|
+
"enabled": true,
|
|
188
|
+
"retryCount": 3,
|
|
189
|
+
"retryInterval": { "value": 30, "unit": "SECONDS" }
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
- `scriptName` 必填。
|
|
195
|
+
- `resultVariable` 可省略;Runtime 省略时写入默认变量 `scriptResult`。存在时必须符合变量命名规则并在流程内唯一;多个 SCRIPT 或 `EXECUTE_BFF` 超时动作必须显式配置不同的结果变量,避免默认值互相覆盖。
|
|
196
|
+
- 禁止 `formData`、`approved` 和 `approval_sys_` 前缀。
|
|
197
|
+
- 表达式引用某个 `resultVariable` 时,产生该变量的 SCRIPT 必须位于引用边 source 的所有上游路径;SCRIPT 自己的出边可以读取刚写入的结果。
|
|
198
|
+
- `async.enabled=true` 时使用 Flowable 异步 Job;`retryCount` 默认 3、范围 1~10,`retryInterval` 默认 30 秒,也支持 `MINUTES/HOURS/DAYS`。
|
|
199
|
+
- SCRIPT 接收当前流程变量作为顶层 `params`,并额外收到 `params.approvalContext`;因此业务变量 `amount`、表单字段 `formData.amount` 分别通过 `params.amount`、`params.formData.amount` 读取,不使用 `params.variables` 包装。
|
|
200
|
+
|
|
201
|
+
## 节点默认抄送
|
|
202
|
+
|
|
203
|
+
APPROVAL 和 END 节点可配置 `cc.recipientUserIds`。APPROVAL 在整个节点办理结束后创建默认只读抄送记录(会签/或签不会按每个办理人重复抄送),END 在到达结果节点后创建。用户 ID 必须是 1~100 个不重复的非空字符串;`visible` 可限制可见表单字段。抄送详情的 `businessVariables` 从流程当前 variables 中读取,并过滤 `approval_sys_*`、`formData` 和 `approved`;当前页面模式不支持 `cc.readSources`。
|
|
204
|
+
|
|
205
|
+
## NOTIFICATION
|
|
206
|
+
|
|
207
|
+
```json
|
|
208
|
+
{
|
|
209
|
+
"id": "notifyApproved",
|
|
210
|
+
"type": "NOTIFICATION",
|
|
211
|
+
"name": "发送审批结果通知",
|
|
212
|
+
"position": { "x": 740, "y": 180 },
|
|
213
|
+
"config": {
|
|
214
|
+
"version": "v1",
|
|
215
|
+
"configCode": "approval_email",
|
|
216
|
+
"failurePolicy": "CONTINUE",
|
|
217
|
+
"template": {
|
|
218
|
+
"title": "审批结果通知",
|
|
219
|
+
"summary": "${event.initiatorUsername} 发起的申请已经${event.approvalResultName}",
|
|
220
|
+
"facts": [
|
|
221
|
+
{
|
|
222
|
+
"label": "申请金额",
|
|
223
|
+
"value": "${variables.formData.amount}"
|
|
224
|
+
}
|
|
225
|
+
],
|
|
226
|
+
"detailMarkdown": "**审批节点:** ${context.nodeName}",
|
|
227
|
+
"actions": [
|
|
228
|
+
{
|
|
229
|
+
"text": "审批详情页",
|
|
230
|
+
"url": "${context.detailUrl}"
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
"recipients": [
|
|
235
|
+
{
|
|
236
|
+
"type": "USER",
|
|
237
|
+
"role": "TO",
|
|
238
|
+
"value": "${event.initiatorUserId}"
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
配置规则:
|
|
246
|
+
|
|
247
|
+
- `version` 可省略或留空,默认 `v1`;当前只支持 `v1`。
|
|
248
|
+
- `configCode` 必须是从 `notification config-list` 选出的固定非空值,不能使用占位符、渠道名、URL、dataset code 或凭据。
|
|
249
|
+
- `failurePolicy` 支持 `CONTINUE`、`FAIL`,默认 `CONTINUE`。
|
|
250
|
+
- `template` 必填;不要输出 `theme` 或 `templateType`。
|
|
251
|
+
- `template.title`、`template.summary` 必须是非空字符串。
|
|
252
|
+
- `template.detailMarkdown` 可选,存在时必须是字符串。
|
|
253
|
+
- `template.facts` 可选,最多 8 项;每项需要非空 `label`、`value`。
|
|
254
|
+
- `template.actions` 可选,最多 2 项;每项需要非空 `text`、`url`。
|
|
255
|
+
- `actions[].url` 必须使用 `http://`、`https://`,或完整受支持占位符,例如 `${context.detailUrl}`。
|
|
256
|
+
|
|
257
|
+
占位符只允许以下命名空间,且根名称区分大小写:
|
|
258
|
+
|
|
259
|
+
```text
|
|
260
|
+
${event.xxx}
|
|
261
|
+
${context.xxx}
|
|
262
|
+
${variables.xxx}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
不要使用 `{appCode}`、`${appCode}` 或其他未声明根命名空间。模板标题、摘要、facts、detailMarkdown、actions 和收件人 value 都执行该检查。
|
|
266
|
+
|
|
267
|
+
收件人规则:
|
|
268
|
+
|
|
269
|
+
- `recipients` 可省略或为空,此时使用渠道配置的默认目标。
|
|
270
|
+
- 显式项的 `type` 支持 `USER`、`ROLE`、`EMAIL`。
|
|
271
|
+
- `value` 必须是非空固定值或受支持占位符。
|
|
272
|
+
- `role` 可选,支持 `TO`、`CC`、`BCC`,默认 `TO`。
|
|
273
|
+
- 非空显式列表至少包含一个 `TO`。
|
|
274
|
+
- `CC`、`BCC` 只对 EMAIL 渠道有效。
|
|
275
|
+
- 显式收件人只用于 EMAIL 或飞书 APP 机器人;钉钉、企业微信、通用 Webhook 和飞书 Webhook 使用渠道默认目标。
|
|
276
|
+
- 飞书显式收件人应使用 `TO`,并符合渠道配置的 `receiveIdType`。
|
|
277
|
+
|
|
278
|
+
本地 validator 可确定并检查 version、模板必填字段、数量上限、action URL、占位符语法和 recipients 结构。`configCode` 是否存在、渠道是否支持显式收件人、模板变量解析后的真实值仍以服务端为准。
|
|
279
|
+
|
|
280
|
+
## 本地校验边界
|
|
281
|
+
|
|
282
|
+
当前本地校验统一由 `rabetbase flow validate` 调用内置 TS validator,覆盖本文明确列出的本地结构、规范化、节点配置、NOTIFICATION 可确定规则和图拓扑规则。Skill 不维护额外的校验脚本。
|
|
283
|
+
|
|
284
|
+
本地校验不能确认:
|
|
285
|
+
|
|
286
|
+
- userId、roleId、datasetCode、pageId、scriptName、configCode 是否在目标环境真实存在。
|
|
287
|
+
- `configCode` 对应的当前通知渠道是否支持指定模板或显式收件人。
|
|
288
|
+
- 服务端保存、编译、部署和 Runtime 执行是否成功。
|
|
289
|
+
|
|
290
|
+
这些结果必须分别通过资源发现命令、服务端 flow 命令响应和 Runtime 验证确认。
|
|
@@ -21,7 +21,13 @@ tags: [jsx, custom-component, page-schema]
|
|
|
21
21
|
|
|
22
22
|
## 机制
|
|
23
23
|
|
|
24
|
-
`render` 只写 `source
|
|
24
|
+
`render` 只写 `source`,不手工写编译后的 `value`。`source` 按 React 组件源码编写,固定使用 `function render(props)`;页面上下文从 `props.env` 读取。Agent 只维护 `source`。
|
|
25
|
+
|
|
26
|
+
页面编辑器与 `rabetbase page push` 都使用平台正式 JSX 编译器把 `source` 包装为运行时函数,并在调用源码组件时注入 `{ env, sdkClient }`。因此:
|
|
27
|
+
|
|
28
|
+
- `props.env` / `props.sdkClient` 是源码 React 组件的 props,不是原始 `render.value` 函数的直接参数
|
|
29
|
+
- 不要根据运行时外层 `function render(env)` 手工拼装 `value`,也不要在源码中改用 `this`
|
|
30
|
+
- 通过 CLI 推送时,缺失或变化的 `value` 会自动生成;编译失败时页面不会更新
|
|
25
31
|
|
|
26
32
|
推荐固定写法:
|
|
27
33
|
|
|
@@ -45,6 +51,7 @@ function render(props) {
|
|
|
45
51
|
|------|------|------|
|
|
46
52
|
| `props.render.type` | 是 | 固定为 `JSFunction` |
|
|
47
53
|
| `props.render.source` | 是 | JSX 源码 |
|
|
54
|
+
| `props._context` | 是 | 页面运行时上下文,固定为 `{ "type": "JSExpression", "value": "this" }`;`rabetbase page push` 会自动补齐或规范化 |
|
|
48
55
|
|
|
49
56
|
### source 可用参数
|
|
50
57
|
|
|
@@ -114,6 +121,7 @@ function render(props) {
|
|
|
114
121
|
|
|
115
122
|
| 要点 | 说明 |
|
|
116
123
|
|------|------|
|
|
117
|
-
|
|
|
118
|
-
| source 中访问上下文 | 使用 `props.env
|
|
124
|
+
| 只需维护 `source` | `value` 由页面编辑器或 `rabetbase page push` 使用平台正式编译器生成 |
|
|
125
|
+
| source 中访问上下文 | 使用 `props.env` / `props.sdkClient`;不要手写编译后的函数参数,不要改用 `this` |
|
|
126
|
+
| `_context` 固定 | 运行时需要页面上下文;CLI 推送时会自动规范为 `JSExpression: this` |
|
|
119
127
|
| `setState` 触发刷新的前提 | 数据源 params 必须绑定 `this.state.xxx` |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# api pull
|
|
2
2
|
|
|
3
|
-
拉取当前 App 下所有数据集(Dataset
|
|
3
|
+
拉取当前 App 下所有数据集(Dataset)的元信息,刷新对应 SDK 路由配置,并在 `api.ts` / `client.ts` **缺失时**写入 Cookie-first 脚手架。默认应用使用 `src/api/sdk-config.ts`,非默认应用使用 `<name>-sdk-config.ts`。项目公开 Domain 路由由 [`project domain-routing-sync`](rabetbase-project-domain-routing-sync.md) 独立维护。
|
|
4
4
|
|
|
5
5
|
已有 TypeScript 默认**不会被覆盖**。Agent 必须用返回的 `data.models` 按 [`sdk-client-generation.md`](../guides/sdk-client-generation.md) 更新 `api.ts` / `client.ts`。人类明确要放弃本地定制并重新生成完整脚手架时,可使用 `--force --yes`。
|
|
6
6
|
|
|
@@ -40,7 +40,8 @@ rabetbase api pull --appcode app-order-001 --format compress
|
|
|
40
40
|
多应用模式下:
|
|
41
41
|
- **不加 `--app` / `--appcode`**:遍历已配置应用(默认仅 **项目** `.rabetbase.json` 中的 `apps`;若需包含全局里合并进来的应用,加 **`--global`**)
|
|
42
42
|
- **加 `--app <name>`**:仅拉取指定应用
|
|
43
|
-
- **加 `--appcode <code>`**:反查到对应 app profile
|
|
43
|
+
- **加 `--appcode <code>`**:反查到对应 app profile 时,使用其 `region`、cookie 和 apiDir;没有匹配 profile 时使用顶层国家/地区回退
|
|
44
|
+
- 每个应用请求前都会切换到其有效 `region`,不会沿用上一个应用的官方服务地址
|
|
44
45
|
|
|
45
46
|
## 配置作用域
|
|
46
47
|
|
|
@@ -52,11 +53,11 @@ rabetbase api pull --appcode app-order-001 --format compress
|
|
|
52
53
|
|
|
53
54
|
| 文件 | 行为 |
|
|
54
55
|
|------|------|
|
|
55
|
-
| `sdk-config.ts` |
|
|
56
|
+
| `sdk-config.ts` / `<prefix>-sdk-config.ts` | **每次刷新**。默认应用无前缀,非默认应用使用应用名前缀;只含必要的最终 `runtimeDomain`,不含凭证 |
|
|
56
57
|
| `<prefix>-api.ts` | 文件缺失时写入脚手架(含当前 `models`);已存在时默认跳过,`--force` 时整体替换 |
|
|
57
58
|
| `<prefix>-client.ts` | 文件缺失时写入 Cookie-first `createClient`;已存在时默认跳过,`--force` 时整体替换 |
|
|
58
59
|
|
|
59
|
-
默认 `prefix`
|
|
60
|
+
默认 `prefix` 为空(单应用或默认应用),多应用非 default 应用使用应用名作为 prefix;生成的 `<prefix>-client.ts` 导入同前缀 SDK 路由文件。
|
|
60
61
|
|
|
61
62
|
`project create` 在拷贝空 demo 脚手架后会覆盖写入一次 TypeScript,以便带上真实 models。首次拉取失败时,恢复提示会要求执行 `rabetbase api pull --force --yes`,避免占位脚手架被继续保留。日常 `api pull` 遇到已有 `api.ts` / `client.ts` 时跳过,只刷新 `sdk-config.ts` 并返回 Dataset 事实。
|
|
62
63
|
|
|
@@ -48,6 +48,9 @@ rabetbase app list --remote
|
|
|
48
48
|
| `definedIn` | `global` / `project` / `both`(合并视图下;单边视图下为对应侧) |
|
|
49
49
|
| `isDefault` | 是否为当前解析出的默认应用 |
|
|
50
50
|
| `isCurrent` | 是否为当前激活应用(合并视图) |
|
|
51
|
+
| `region` | profile 中显式保存的国家/地区;未配置时为 `null` |
|
|
52
|
+
| `effectiveRegion` | 当前应用最终使用的国家/地区 |
|
|
53
|
+
| `regionSource` | `app` / `project` / `global` / `default`,表示有效值来源 |
|
|
51
54
|
|
|
52
55
|
**jq 示例**(只取命名应用名):`--format json --jq '.data.items[] | select(.named) | .name'`
|
|
53
56
|
|
|
@@ -29,7 +29,7 @@ rabetbase bff create --type HOOK --name beforeFilter --alias appUser --operation
|
|
|
29
29
|
|------|------|
|
|
30
30
|
| ENDPOINT | `.rabetbase/bff/<appCode>/ENDPOINT/<name>.js` |
|
|
31
31
|
| COMMON | `.rabetbase/bff/<appCode>/COMMON/<name>.js` |
|
|
32
|
-
| HOOK | `.rabetbase/bff/<appCode>/HOOK/<alias-or-datasetCode>/<operationType>/<functionNode>/<name>.js` |
|
|
32
|
+
| HOOK 草稿 | `.rabetbase/bff/<appCode>/HOOK/<alias-or-datasetCode>/<operationType>/<functionNode>/<name>.js` |
|
|
33
33
|
|
|
34
34
|
Backend Function 源码**仅**应在此目录树内创建与长期维护(与 `bff status` / `bff push` 扫描一致);不要在本仓库其他路径手写 Backend Function 再尝试推送。
|
|
35
35
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# bff logs
|
|
2
|
+
|
|
3
|
+
查询当前 App 的 Backend Function 运行日志,用于开发调试。命令只读,不执行或修改脚本。
|
|
4
|
+
|
|
5
|
+
## 命令
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
rabetbase bff logs --format compress
|
|
9
|
+
rabetbase bff logs --since 10 --level ERROR --keyword timeout --format compress
|
|
10
|
+
rabetbase bff logs --start-time 1788433200000 --end-time 1788435000000 --limit 500 --format json
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 参数
|
|
14
|
+
|
|
15
|
+
| Flag | 类型 | 必填 | 默认 | 说明 |
|
|
16
|
+
|------|------|------|------|------|
|
|
17
|
+
| `--app <name>` | string | 否 | — | 多应用模式下指定应用名称 |
|
|
18
|
+
| `--appcode <code>` | string | 否 | — | 直接指定 App Code |
|
|
19
|
+
| `--since <minutes>` | number | 否 | `30` | 从结束时间向前查询的分钟数;不能与 `--start-time` 同时使用 |
|
|
20
|
+
| `--start-time <ms>` | number | 否 | — | 查询开始时间,Unix 毫秒时间戳 |
|
|
21
|
+
| `--end-time <ms>` | number | 否 | 当前时间 | 查询结束时间,Unix 毫秒时间戳 |
|
|
22
|
+
| `--level <level>` | string | 否 | — | `DEBUG` / `INFO` / `WARN` / `ERROR` |
|
|
23
|
+
| `--keyword <text>` | string | 否 | — | 对服务端格式化后的整行日志做关键字过滤 |
|
|
24
|
+
| `--limit <count>` | number | 否 | `200` | 最大返回条数,范围 `1-1000` |
|
|
25
|
+
|
|
26
|
+
## 时间范围
|
|
27
|
+
|
|
28
|
+
- 未传时间参数时查询最近 30 分钟。
|
|
29
|
+
- `--end-time` 可与 `--since` 配合,查询以指定结束时间为基准的时间窗。
|
|
30
|
+
- 需要精确范围时传 `--start-time`,可同时传 `--end-time`;未传结束时间时使用当前时间。
|
|
31
|
+
- `--since` 与 `--start-time` 互斥,时间戳必须为正整数,开始时间不得晚于结束时间。
|
|
32
|
+
|
|
33
|
+
## 输出
|
|
34
|
+
|
|
35
|
+
结构化输出的 `data` 包含:
|
|
36
|
+
|
|
37
|
+
- `query`:最终发送的 `appCode`、`startTime`、`endTime`、可选过滤条件和 `limit`
|
|
38
|
+
- `count`:本次返回的日志行数
|
|
39
|
+
- `logs`:服务端已格式化的原始日志字符串数组
|
|
40
|
+
|
|
41
|
+
无结果时先确认 App Code、运行环境和时间范围,再逐步移除 `level` 或 `keyword`。不要把查询不到日志解释为脚本一定未执行。
|
|
42
|
+
|
|
43
|
+
## 参考
|
|
44
|
+
|
|
45
|
+
- [backend-function.md](../guides/backend-function.md)
|
|
46
|
+
- [bff detail](rabetbase-bff-detail.md)
|
|
47
|
+
- [bff status](rabetbase-bff-status.md)
|
|
@@ -25,15 +25,21 @@ rabetbase bff pull --type HOOK --force --format json
|
|
|
25
25
|
返回:
|
|
26
26
|
- `pulled`
|
|
27
27
|
- `skipped`
|
|
28
|
+
- `conflicts`
|
|
28
29
|
- `failed`
|
|
29
30
|
|
|
30
|
-
`--dry-run` 时返回预览对象,包含远端脚本、目标 `filePath
|
|
31
|
+
`--dry-run` 时返回预览对象,包含远端脚本、目标 `filePath`、`alias`、`datasetCode`、Hook operation/node 和预期状态(如 `would_pull` / `conflict`)。有已跟踪的旧 HOOK 目录需要迁移时,还会返回 `hookDirectoryMigrations`。
|
|
32
|
+
|
|
33
|
+
远端脚本列表会自动聚合服务端全部分页;不会只同步第一页。
|
|
31
34
|
|
|
32
35
|
## 提示
|
|
33
36
|
|
|
34
|
-
- 默认会保护本地未同步改动,冲突时进入 `
|
|
37
|
+
- 默认会保护本地未同步改动,冲突时进入 `conflicts`,包含受审阅约束的 `nextAction`
|
|
38
|
+
- `conflicts[].code=BFF_LOCAL_UNSYNCED` 表示本地脚本自上次 pull 后已修改;先审阅,再在本地版本应成为事实来源时执行 `nextAction.command` 精确推送更新远端。不要把它报告为失败或用 `--force` 覆盖内容
|
|
35
39
|
- `--dry-run` 不会改本地文件,也不会写 lock
|
|
36
|
-
-
|
|
40
|
+
- HOOK 一级目录优先使用 `api.ts` 模型中的 alias;没有 alias 时使用 Dataset code
|
|
41
|
+
- 挂载关系中有明确 Dataset code、但当前 SDK 模型没有 alias 时,仍按原始 Dataset code 下载,不阻断其他脚本;push 更新已有脚本时仍须回读确认脚本身份、版本与挂载关系
|
|
42
|
+
- pull 会将 lock 跟踪的旧表名或过期 alias 目录迁到当前 SDK alias;当前没有 alias 时迁到 Dataset code。若目标目录已存在、旧目录已被另一 Dataset alias 复用且含未跟踪脚本,或本地文件系统无法安全迁移,命令会停止且不覆盖本地脚本
|
|
37
43
|
- 拉取后建议立刻跑一次 `bff status`
|
|
38
44
|
|
|
39
45
|
## 参考
|
|
@@ -28,12 +28,15 @@ rabetbase bff push --type HOOK --name beforeFilter --format json
|
|
|
28
28
|
返回:
|
|
29
29
|
- `uploaded`
|
|
30
30
|
- `skipped`
|
|
31
|
+
- `conflicts`
|
|
31
32
|
- `failed`
|
|
32
33
|
|
|
33
34
|
常见 `skipped` 原因:
|
|
34
35
|
- `unchanged`
|
|
35
36
|
|
|
36
|
-
`--dry-run` 时返回预览对象,包含本地 `filePath
|
|
37
|
+
`--dry-run` 时返回预览对象,包含本地 `filePath`、`alias`、`datasetCode`、Hook operation/node、warning、目标模式(`create` / `update`)和预期状态(如 `unchanged` / `would_push`)。
|
|
38
|
+
|
|
39
|
+
`conflicts[].code=BFF_REMOTE_VERSION_CHANGED` 或 `BFF_REMOTE_VERSION_MISSING` 表示本地 lock 不能安全更新远端脚本。保留本地脚本,先执行 `nextAction.command` 的 `bff detail` 取得远端源码,审阅并合并后再重试;只在明确放弃本地修改时才考虑 `--force`。这类同步分歧不进入 `failed`,其 `nextAction` 仅供审阅后执行。
|
|
37
40
|
|
|
38
41
|
## 推送前检查
|
|
39
42
|
|
|
@@ -53,7 +56,12 @@ rabetbase bff push --type HOOK --name beforeFilter --format json
|
|
|
53
56
|
- 推送前先跑 `bff status`
|
|
54
57
|
- `--dry-run` 不会上传远端,也不会改 lock
|
|
55
58
|
- 精确推单个函数时用 `--type + --name`
|
|
56
|
-
- HOOK
|
|
59
|
+
- HOOK 优先从 SDK alias 目录解析 Dataset;没有 alias 时 Dataset code 目录保持可读
|
|
60
|
+
- 正式上传仍使用平台真实 Dataset ID,目录名不会替代远端 Dataset 身份
|
|
61
|
+
- 已有 HOOK 的 Dataset 元数据缺失时,CLI 回读脚本 ID、应用、名称、类型、版本及唯一挂载关系;全部与本地 lock 匹配才允许按脚本 ID 更新且不重绑,返回 `EXISTING_HOOK_BINDING_PRESERVED` warning;新建 HOOK 不走此路径
|
|
62
|
+
- 无法解析或查不到目标 Dataset 的 HOOK 单独进入 `failed`,其余可确认目标的脚本继续上传;部分失败时命令返回 `ok: false`,必须检查 `uploaded` 与 `failed`,不要整批盲目重试
|
|
63
|
+
- 预演中无法确认目标的脚本显示 `status: failed` 与 `error`,不会上传或更改 lock
|
|
64
|
+
- alias 与 Dataset code 命名空间碰撞、Dataset 映射漂移或同一 Dataset 出现多个本地目录会在首次远端写入前阻断
|
|
57
65
|
- HOOK 可挂载 `DB_TABLE` 或 `METADATA` 数据集;METADATA 不支持 SQL / aggregate 路径,脚本中使用平台返回的标准数据操作
|
|
58
66
|
- 推送成功只代表脚本配置已同步到平台;如需确认最终运行效果,使用运行验证(例如 `lovrabet bff exec --name <functionName> --params '<json>' --format compress`)
|
|
59
67
|
- 管理态已同步但运行态仍旧版本时,按传播延迟 / 缓存延迟处理:等待后重试,必要时对目标脚本精确执行 `--force` 推送;仍不生效时记录平台运行态缓存风险
|
|
@@ -33,6 +33,8 @@ rabetbase workspace init --appcode <code>
|
|
|
33
33
|
|
|
34
34
|
CLI 对旧版顶层 `appcode` 仍兼容读取,但它已经不是推荐主模型。
|
|
35
35
|
|
|
36
|
+
CLI 新写入或重写配置时不会持久化默认内部路由字段;历史文件仍保持读取兼容。若顶层存在非默认值,而某个应用显式回到默认值,写入时会把非默认值下沉到实际继承它的应用,再省略默认标记,确保配置精简且生效语义不变。
|
|
37
|
+
|
|
36
38
|
## 兼容读取的单应用模式
|
|
37
39
|
|
|
38
40
|
兼容读取的最简配置只需 `appcode` 和 `env`:
|
|
@@ -59,7 +61,6 @@ CLI 对旧版顶层 `appcode` 仍兼容读取,但它已经不是推荐主模
|
|
|
59
61
|
```json
|
|
60
62
|
{
|
|
61
63
|
"appcode": "app-xxx",
|
|
62
|
-
"env": "production",
|
|
63
64
|
"locale": "en-US",
|
|
64
65
|
"cookie": "session-cookie-value",
|
|
65
66
|
"accessKey": "ak-xxx",
|
|
@@ -94,20 +95,20 @@ CLI 对旧版顶层 `appcode` 仍兼容读取,但它已经不是推荐主模
|
|
|
94
95
|
},
|
|
95
96
|
"product": {
|
|
96
97
|
"appcode": "app-zzzzzzzz",
|
|
97
|
-
"
|
|
98
|
+
"region": "id",
|
|
98
99
|
"apiDir": "./src/api/product"
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
103
|
```
|
|
103
104
|
|
|
104
|
-
每个 app profile
|
|
105
|
+
每个 app profile 可单独覆盖普通顶层字段。顶层 `region` 是共享国家/地区回退值,`apps.<name>.region` 优先;因此同一个项目可以同时登记中国大陆与印尼应用。唯一 app 自动激活;两个及以上 app 必须通过 `--app <name>` 临时选择,或用 `defaultApp` 持久选择,CLI 不按 JSON key 顺序猜测。`riskLevel` 是安全例外:默认值为 `write`,全局、项目与 profile 决定基础上限并取最严格值。权限不足时停止执行并请求授权人员处理;Agent 和自动化脚本不得自行修改 `riskLevel`、配置文件、环境变量或尝试提权。
|
|
105
106
|
|
|
106
107
|
管理命令(声明式 flags,非位置参数):
|
|
107
108
|
|
|
108
109
|
```bash
|
|
109
110
|
rabetbase workspace add order --appcode app-order-001 --env daily
|
|
110
|
-
rabetbase workspace add product --appcode app-product-002
|
|
111
|
+
rabetbase workspace add product --appcode app-product-002 --region id
|
|
111
112
|
rabetbase workspace use --app order
|
|
112
113
|
rabetbase app list
|
|
113
114
|
rabetbase workspace remove product --yes
|
|
@@ -120,7 +121,7 @@ rabetbase workspace remove product --yes
|
|
|
120
121
|
| 字段 | 类型 | 默认值 | 说明 |
|
|
121
122
|
|------|------|--------|------|
|
|
122
123
|
| `appcode` | string | — | 顶层单应用兼容字段。新写入优先使用 `apps`。兼容旧名 `app` |
|
|
123
|
-
| `env` | string |
|
|
124
|
+
| `env` | string | — | 历史兼容字段;默认连接不落盘,读取旧配置时仍兼容 |
|
|
124
125
|
| `locale` | string | `"en-US"` | 应用本地化设置(不是 CLI 语言;目前命令尚未消费) |
|
|
125
126
|
| `cookie` | string | — | 内联 session cookie。设置后优先于 `~/.lovrabet/cookie` 文件 |
|
|
126
127
|
| `accessKey` | string | — | Access Key 认证(预留,未来替代 cookie) |
|
|
@@ -146,7 +147,8 @@ rabetbase workspace remove product --yes
|
|
|
146
147
|
| 字段 | 类型 | 说明 |
|
|
147
148
|
|------|------|------|
|
|
148
149
|
| `appcode` | string | **必填**。该应用的 appcode |
|
|
149
|
-
| `
|
|
150
|
+
| `region` | string | 覆盖顶层国家/地区;当前可写 `cn`、`id`。显式 `cn` 会保留,以便覆盖顶层 `id` |
|
|
151
|
+
| `env` | string | 历史兼容字段;默认连接不落盘 |
|
|
150
152
|
| `apiDir` | string | 覆盖顶层 `apiDir` |
|
|
151
153
|
| `cookie` | string | 覆盖顶层 `cookie` |
|
|
152
154
|
| `accessKey` | string | 覆盖顶层 `accessKey` |
|
|
@@ -160,9 +162,9 @@ rabetbase workspace remove product --yes
|
|
|
160
162
|
每个配置项的解析优先级从高到低(`appcode` 不从环境变量自动解析,必须来自 `--appcode` 或配置文件):
|
|
161
163
|
|
|
162
164
|
```
|
|
163
|
-
CLI flag (--appcode, --
|
|
165
|
+
CLI flag (--appcode, --format, --app ...)
|
|
164
166
|
↓
|
|
165
|
-
当前项目 app profile
|
|
167
|
+
当前项目 app profile(包括 `region`)/ 顶层字段
|
|
166
168
|
↓
|
|
167
169
|
环境变量 (RABETBASE_ENV, RABETBASE_FORMAT ...)
|
|
168
170
|
↓
|
|
@@ -243,7 +245,6 @@ rabetbase dataset list --appcode "$RABETBASE_APPCODE"
|
|
|
243
245
|
},
|
|
244
246
|
"product": {
|
|
245
247
|
"appcode": "app-product-002",
|
|
246
|
-
"env": "production",
|
|
247
248
|
"riskLevel": "read"
|
|
248
249
|
}
|
|
249
250
|
}
|