@lovrabet/rabetbase-cli 2.5.1-beta.3 → 2.5.1-beta.5
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 +75 -1
- 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/api/generate-sdk-config-file.d.ts +0 -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/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.d.ts +2 -0
- 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.d.ts +3 -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/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/auto-sync.js +1 -1
- package/lib/commands/deployment/index.js +1 -1
- package/lib/commands/deployment/sync.js +1 -1
- package/lib/commands/doctor.js +1 -1
- package/lib/commands/file/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/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/template.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.d.ts +1 -0
- 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.d.ts +2 -0
- package/lib/commands/project/domain-routing-sync.js +1 -0
- 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.d.ts +2 -0
- package/lib/commands/rule/get.js +1 -0
- package/lib/commands/rule/index.d.ts +2 -0
- package/lib/commands/rule/index.js +1 -0
- package/lib/commands/rule/list.d.ts +2 -0
- package/lib/commands/rule/list.js +1 -0
- package/lib/commands/rule/set.d.ts +2 -0
- package/lib/commands/rule/set.js +1 -0
- package/lib/commands/rule/shared.d.ts +43 -0
- package/lib/commands/rule/shared.js +1 -0
- 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/deployment-sync.js +1 -1
- package/lib/config/domain-config.d.ts +38 -2
- package/lib/config/domain-config.js +1 -1
- package/lib/config/project-domain-routing.d.ts +27 -0
- package/lib/config/project-domain-routing.js +1 -0
- package/lib/config/schema.d.ts +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.d.ts +10 -6
- 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.d.ts +4 -1
- package/lib/constant/region.js +1 -1
- package/lib/constant/risk.js +1 -1
- package/lib/constant/routing-profile.d.ts +43 -49
- package/lib/constant/routing-profile.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.d.ts +2 -0
- package/lib/context.js +1 -1
- package/lib/core/alias-resolver.js +1 -1
- package/lib/core/api-client.d.ts +37 -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.d.ts +0 -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.d.ts +83 -0
- package/lib/generated/official-routing.js +1 -0
- package/lib/generated/routing-contract.d.ts +9 -0
- package/lib/generated/routing-contract.js +1 -0
- 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 +0 -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/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.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 +2 -1
- package/skills/rabetbase/SKILL.md +16 -13
- package/skills/rabetbase/guides/sdk-client-generation.md +10 -8
- package/skills/rabetbase/references/rabetbase-api-pull.md +16 -11
- package/skills/rabetbase/references/rabetbase-config.md +3 -6
- package/skills/rabetbase/references/rabetbase-doctor.md +2 -1
- package/skills/rabetbase/references/rabetbase-init.md +32 -10
- package/skills/rabetbase/references/rabetbase-kb.md +7 -7
- package/skills/rabetbase/references/rabetbase-project-create.md +33 -8
- package/skills/rabetbase/references/rabetbase-project-domain-routing-sync.md +28 -0
- package/skills/rabetbase/references/rabetbase-rule.md +49 -0
- package/skills/rabetbase.manifest.json +5 -3
- package/lib/config/project-routing.d.ts +0 -30
- package/lib/config/project-routing.js +0 -1
- package/lib/core/kb-search-client.d.ts +0 -30
- package/lib/core/kb-search-client.js +0 -1
package/lib/utils/logger.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const a303_0x227146=a303_0x4ef5;(function(_0x5aad52,_0x513a10){const _0xa10aab=a303_0x4ef5,_0x31a37d=_0x5aad52();while(!![]){try{const _0x24580e=parseInt(_0xa10aab(0x168))/0x1+-parseInt(_0xa10aab(0x174))/0x2+parseInt(_0xa10aab(0x17f))/0x3*(-parseInt(_0xa10aab(0x19b))/0x4)+-parseInt(_0xa10aab(0x188))/0x5*(-parseInt(_0xa10aab(0x17a))/0x6)+-parseInt(_0xa10aab(0x197))/0x7*(-parseInt(_0xa10aab(0x17d))/0x8)+-parseInt(_0xa10aab(0x172))/0x9+parseInt(_0xa10aab(0x19e))/0xa;if(_0x24580e===_0x513a10)break;else _0x31a37d['push'](_0x31a37d['shift']());}catch(_0x3d04de){_0x31a37d['push'](_0x31a37d['shift']());}}}(a303_0x115b,0xdcbfe));import a303_0x93a879 from'winston';import a303_0x4ec974 from'node:fs';function a303_0x115b(){const _0x4349aa=['trim','utf8','success','748tkNxHT','stringify','logFilePath','26540660XQdhwY','transports','toISOString','182873JEHyJD','yellow','Failed\x20to\x20read\x20logs:','info','Failed\x20to\x20clear\x20logs:','message','logTask','existsSync','timestamp','command','14987448eJBdcj','setRawCommand','2350078UDqkcP','format','File','join','printf','readFileSync','135132ofgpEI','getWinstonInstance','unknown','16tkJTaN','mkdirSync','8736zrdExA','.lovrabet.log','rawCommand','warn','initWinstonLogger','combine','now','Starting:\x20','clear','10PNrXVw','Failed:\x20','red','log','addColors','winstonLogger','split','currentRawCommand','createLogger','error','setLogPath','duration','level','details','parse','4924717FRfQIQ'];a303_0x115b=function(){return _0x4349aa;};return a303_0x115b();}function a303_0x4ef5(_0x8d8eb5,_0x59476c){_0x8d8eb5=_0x8d8eb5-0x168;const _0x115b82=a303_0x115b();let _0x4ef5df=_0x115b82[_0x8d8eb5];return _0x4ef5df;}import a303_0x3100fd from'node:path';class Logger{[a303_0x227146(0x18d)];[a303_0x227146(0x19d)];['currentRawCommand']='';constructor(){const _0x5da08a=a303_0x227146;this[_0x5da08a(0x19d)]='';}[a303_0x227146(0x173)](_0x1d083e){const _0x2c7651=a303_0x227146;this[_0x2c7651(0x18f)]=_0x1d083e;}[a303_0x227146(0x183)](){const _0x1745d0=a303_0x227146,_0x3aef7e=a303_0x3100fd['dirname'](this[_0x1745d0(0x19d)]);!a303_0x4ec974['existsSync'](_0x3aef7e)&&a303_0x4ec974[_0x1745d0(0x17e)](_0x3aef7e,{'recursive':!![]});const _0x17ea93=a303_0x93a879['format'][_0x1745d0(0x184)](a303_0x93a879[_0x1745d0(0x175)][_0x1745d0(0x170)](),a303_0x93a879[_0x1745d0(0x175)]['errors']({'stack':!![]}),a303_0x93a879['format'][_0x1745d0(0x178)](_0x191942=>{const _0x1b819e=_0x1745d0,_0x1c176d={'timestamp':_0x191942[_0x1b819e(0x170)]||new Date()[_0x1b819e(0x1a0)](),'level':_0x191942[_0x1b819e(0x194)]||_0x1b819e(0x16b),'command':_0x191942[_0x1b819e(0x171)]||_0x1b819e(0x17c),'rawCommand':_0x191942[_0x1b819e(0x181)]||this[_0x1b819e(0x18f)]||undefined,'message':_0x191942[_0x1b819e(0x16d)]||'','duration':_0x191942[_0x1b819e(0x193)]||undefined,'details':_0x191942[_0x1b819e(0x195)]||undefined};return JSON[_0x1b819e(0x19c)](_0x1c176d);}));this[_0x1745d0(0x18d)]=a303_0x93a879[_0x1745d0(0x190)]({'level':'info','format':_0x17ea93,'transports':[new a303_0x93a879[(_0x1745d0(0x19f))][(_0x1745d0(0x176))]({'filename':this[_0x1745d0(0x19d)],'level':_0x1745d0(0x16b)})],'silent':![]}),a303_0x93a879[_0x1745d0(0x18c)]({'success':'green','error':_0x1745d0(0x18a),'warn':_0x1745d0(0x169),'info':'blue'});}[a303_0x227146(0x192)](_0x2db36c){const _0x25f39b=a303_0x227146;this[_0x25f39b(0x19d)]=a303_0x3100fd[_0x25f39b(0x177)](_0x2db36c,_0x25f39b(0x180)),this[_0x25f39b(0x18d)]&&this[_0x25f39b(0x18d)][_0x25f39b(0x187)](),this['initWinstonLogger']();}[a303_0x227146(0x16b)](_0x217976,_0x3c80a9,_0x46cbf7){const _0x5e983a=a303_0x227146;if(!this[_0x5e983a(0x19d)]||!this[_0x5e983a(0x18d)])return;this[_0x5e983a(0x18d)][_0x5e983a(0x16b)](_0x3c80a9,{'command':_0x217976,'details':_0x46cbf7});}[a303_0x227146(0x19a)](_0x5cecf5,_0x3c1ea7,_0x3e4a64,_0x225377){const _0x16b8f5=a303_0x227146;if(!this[_0x16b8f5(0x19d)]||!this[_0x16b8f5(0x18d)])return;this['winstonLogger'][_0x16b8f5(0x18b)](_0x16b8f5(0x16b),_0x3c1ea7,{'level':_0x16b8f5(0x19a),'command':_0x5cecf5,'duration':_0x3e4a64,'details':_0x225377});}['error'](_0x3915fc,_0x2c3faf,_0x47800d){const _0x563e3a=a303_0x227146;if(!this['logFilePath']||!this[_0x563e3a(0x18d)])return;this[_0x563e3a(0x18d)][_0x563e3a(0x191)](_0x2c3faf,{'command':_0x3915fc,'details':_0x47800d});}[a303_0x227146(0x182)](_0x28b2fc,_0x41abda,_0x18f54f){const _0x36e5ca=a303_0x227146;if(!this['logFilePath']||!this[_0x36e5ca(0x18d)])return;this['winstonLogger'][_0x36e5ca(0x182)](_0x41abda,{'command':_0x28b2fc,'details':_0x18f54f});}async[a303_0x227146(0x16e)](_0x2ff6b1,_0x3314bc,_0x432160){const _0x3a0d44=a303_0x227146,_0x91e5df=Date[_0x3a0d44(0x185)]();this[_0x3a0d44(0x16b)](_0x2ff6b1,_0x3a0d44(0x186)+_0x3314bc);try{const _0x48f7ad=await _0x432160(),_0x2c2e4f=Date['now']()-_0x91e5df;return this[_0x3a0d44(0x19a)](_0x2ff6b1,'Completed:\x20'+_0x3314bc,_0x2c2e4f),_0x48f7ad;}catch(_0x4e3e2b){const _0x4f6da9=Date[_0x3a0d44(0x185)]()-_0x91e5df;this[_0x3a0d44(0x191)](_0x2ff6b1,_0x3a0d44(0x189)+_0x3314bc,{'error':_0x4e3e2b instanceof Error?_0x4e3e2b['message']:String(_0x4e3e2b),'duration':_0x4f6da9});throw _0x4e3e2b;}}['readLogs'](){const _0x39bba6=a303_0x227146;try{if(!a303_0x4ec974[_0x39bba6(0x16f)](this[_0x39bba6(0x19d)]))return[];const _0x408e89=a303_0x4ec974[_0x39bba6(0x179)](this[_0x39bba6(0x19d)],_0x39bba6(0x199));return _0x408e89[_0x39bba6(0x18e)]('\x0a')['filter'](_0x591a78=>_0x591a78[_0x39bba6(0x198)]())['map'](_0x5f0fa7=>JSON[_0x39bba6(0x196)](_0x5f0fa7));}catch(_0x54d56b){return console['warn'](_0x39bba6(0x16a),_0x54d56b),[];}}['clearLogs'](){const _0x11378f=a303_0x227146;try{a303_0x4ec974[_0x11378f(0x16f)](this['logFilePath'])&&a303_0x4ec974['writeFileSync'](this[_0x11378f(0x19d)],'',_0x11378f(0x199));}catch(_0x545b66){console[_0x11378f(0x182)](_0x11378f(0x16c),_0x545b66);}}[a303_0x227146(0x17b)](){const _0x173721=a303_0x227146;return this[_0x173721(0x18d)];}}export const logger=new Logger();
|
package/lib/utils/params.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x43bfd3,_0xa1a40e){const _0x153432=a304_0x3757,_0x4626b8=_0x43bfd3();while(!![]){try{const _0x5ade65=parseInt(_0x153432(0x1df))/0x1*(-parseInt(_0x153432(0x1dc))/0x2)+-parseInt(_0x153432(0x1d3))/0x3*(-parseInt(_0x153432(0x1d2))/0x4)+parseInt(_0x153432(0x1d6))/0x5*(parseInt(_0x153432(0x1d9))/0x6)+parseInt(_0x153432(0x1de))/0x7+-parseInt(_0x153432(0x1e0))/0x8+parseInt(_0x153432(0x1d7))/0x9+parseInt(_0x153432(0x1da))/0xa*(-parseInt(_0x153432(0x1d5))/0xb);if(_0x5ade65===_0xa1a40e)break;else _0x4626b8['push'](_0x4626b8['shift']());}catch(_0x3893a3){_0x4626b8['push'](_0x4626b8['shift']());}}}(a304_0x4831,0xae976));import{CliErrors}from'../errors.js';function a304_0x4831(){const _0x59dc3f=['5958078ucEwKL','3612UeNiPl','9521664owdodS','validation','12876oXUotA','663suXjgl','isArray','1174877QTaXec','235DPiIgH','1288575CXWXag','--params\x20must\x20be\x20a\x20JSON\x20object','151230zjkPFb','30ULswOi','Example:\x20--params\x20\x27{\x22id\x22:123}\x27','368zOGtBU','parse'];a304_0x4831=function(){return _0x59dc3f;};return a304_0x4831();}function a304_0x3757(_0x15a02f,_0x9debe1){_0x15a02f=_0x15a02f-0x1d1;const _0x483107=a304_0x4831();let _0x375742=_0x483107[_0x15a02f];return _0x375742;}export function parseJsonParams(_0xda5442){const _0x1d62f8=a304_0x3757;if(!_0xda5442)return undefined;let _0x2b36ae;try{_0x2b36ae=JSON[_0x1d62f8(0x1dd)](_0xda5442);}catch{throw CliErrors[_0x1d62f8(0x1d1)]('Invalid\x20JSON\x20for\x20--params:\x20'+_0xda5442);}if(!_0x2b36ae||typeof _0x2b36ae!=='object'||Array[_0x1d62f8(0x1d4)](_0x2b36ae))throw CliErrors[_0x1d62f8(0x1d1)](_0x1d62f8(0x1d8),_0x1d62f8(0x1db));return _0x2b36ae;}
|
package/lib/utils/platform.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
function a305_0x3686(_0x57f62e,_0x33953a){_0x57f62e=_0x57f62e-0x131;const _0xf89080=a305_0xf890();let _0x36865e=_0xf89080[_0x57f62e];return _0x36865e;}const a305_0x283903=a305_0x3686;(function(_0x185a87,_0x199e50){const _0x4908c4=a305_0x3686,_0x18fa1f=_0x185a87();while(!![]){try{const _0xb16439=-parseInt(_0x4908c4(0x134))/0x1+-parseInt(_0x4908c4(0x137))/0x2+-parseInt(_0x4908c4(0x138))/0x3*(parseInt(_0x4908c4(0x13b))/0x4)+-parseInt(_0x4908c4(0x136))/0x5+parseInt(_0x4908c4(0x135))/0x6*(parseInt(_0x4908c4(0x131))/0x7)+parseInt(_0x4908c4(0x132))/0x8*(parseInt(_0x4908c4(0x13c))/0x9)+parseInt(_0x4908c4(0x139))/0xa;if(_0xb16439===_0x199e50)break;else _0x18fa1f['push'](_0x18fa1f['shift']());}catch(_0x291fc0){_0x18fa1f['push'](_0x18fa1f['shift']());}}}(a305_0xf890,0xd0622));function a305_0xf890(){const _0x2a12b4=['99768NWafsF','platform','1189905ZwCXKy','24yHjhVF','5183410ROaUjD','147648LSUqCf','137721nKkhep','18780690mvbaAh','win32','68McmRSX','585mEfAXd','.cmd','2179947zCoavn'];a305_0xf890=function(){return _0x2a12b4;};return a305_0xf890();}export const isWindows=process[a305_0x283903(0x133)]===a305_0x283903(0x13a);export function resolveNpmBin(_0x2bf386){const _0x4f3e59=a305_0x283903;return isWindows?_0x2bf386+_0x4f3e59(0x13d):_0x2bf386;}
|
package/lib/utils/sleep.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export function sleep(
|
|
1
|
+
export function sleep(_0x5a83fd){return new Promise(_0x4cfaca=>setTimeout(_0x4cfaca,_0x5a83fd));}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const a307_0x5d06aa=a307_0x5760;function a307_0x5760(_0x4d6ae2,_0x44ede8){_0x4d6ae2=_0x4d6ae2-0xab;const _0x369064=a307_0x3690();let _0x57607a=_0x369064[_0x4d6ae2];return _0x57607a;}(function(_0x290ad4,_0x30577a){const _0x413e0c=a307_0x5760,_0x51526f=_0x290ad4();while(!![]){try{const _0x349590=parseInt(_0x413e0c(0xd7))/0x1*(parseInt(_0x413e0c(0xbf))/0x2)+parseInt(_0x413e0c(0xcc))/0x3*(-parseInt(_0x413e0c(0xb7))/0x4)+-parseInt(_0x413e0c(0xb0))/0x5*(parseInt(_0x413e0c(0xd8))/0x6)+-parseInt(_0x413e0c(0xc1))/0x7*(-parseInt(_0x413e0c(0xbe))/0x8)+-parseInt(_0x413e0c(0xea))/0x9+-parseInt(_0x413e0c(0xe2))/0xa+parseInt(_0x413e0c(0xb8))/0xb;if(_0x349590===_0x30577a)break;else _0x51526f['push'](_0x51526f['shift']());}catch(_0x52b335){_0x51526f['push'](_0x51526f['shift']());}}}(a307_0x3690,0x2a0c0));import a307_0x2ae4c4 from'node:fs';function a307_0x3690(){const _0x2e8dda=['111aYSOgl','6EOEsvK','mkdir','now','Starting\x20template\x20content\x20replacement','name','formatLocalTimestamp','tableName','toLowerCase','getDate','utf8','716090CPDIea','toISOString','getMonth','map','processTemplate','split','toUpperCase','getSeconds','912123bbpKXT','error','isDirectory','includes','getFullYear','YourModel','pop','replace','pad','template','916915zWlLZd','replaceContent','.jsx','alias:\x20\x22','processFile','default','toDisplayTitle','76GeqOtB','6552315SlLhrs','success','writeFile','padStart','.js','alias','8HRyqcY','2402QyBuce','api','106393WriRQH','readFile','\x0a\x20\x20\x20\x20{\x20','datasetCode','Template\x20content\x20replacement\x20completed','datasetCode:\x20\x22','charAt','join','processDirectory','copyFile','.tpl','34044Zdakqk','.ts','.tsx','extname','.json','promises','info','slice','endsWith','Template\x20content\x20replacement\x20failed','.scss'];a307_0x3690=function(){return _0x2e8dda;};return a307_0x3690();}import a307_0x599f30 from'node:path';import{logger}from'../utils/logger.js';import{getCliVersion}from'../utils/version.js';const CLI_VERSION=getCliVersion();export class TemplateReplacer{static['pad'](_0x2baff3){const _0x518b83=a307_0x5760;return String(_0x2baff3)[_0x518b83(0xbb)](0x2,'0');}static[a307_0x5d06aa(0xdd)](_0x3d9aeb){const _0x2bfd1e=a307_0x5d06aa,_0xbebd7f=_0x3d9aeb[_0x2bfd1e(0xee)](),_0x3b0473=this['pad'](_0x3d9aeb[_0x2bfd1e(0xe4)]()+0x1),_0x2b73cf=this[_0x2bfd1e(0xae)](_0x3d9aeb[_0x2bfd1e(0xe0)]()),_0x5e781a=this['pad'](_0x3d9aeb['getHours']()),_0x4b5397=this[_0x2bfd1e(0xae)](_0x3d9aeb['getMinutes']()),_0x22139f=this[_0x2bfd1e(0xae)](_0x3d9aeb[_0x2bfd1e(0xe9)]());return{'createdAt':_0xbebd7f+'-'+_0x3b0473+'-'+_0x2b73cf+'\x20'+_0x5e781a+':'+_0x4b5397+':'+_0x22139f,'createdDate':_0xbebd7f+'-'+_0x3b0473+'-'+_0x2b73cf,'createdTime':_0x5e781a+':'+_0x4b5397+':'+_0x22139f};}static['toComponentName'](_0x498a9a){const _0x36eedb=a307_0x5d06aa,_0x381051=_0x498a9a['split']('/')[_0x36eedb(0xac)]()||_0x498a9a;return _0x381051['split']('-')['map'](_0x835232=>_0x835232[_0x36eedb(0xc7)](0x0)[_0x36eedb(0xe8)]()+_0x835232[_0x36eedb(0xd3)](0x1)['toLowerCase']())['join']('');}static[a307_0x5d06aa(0xb6)](_0xa35d17){const _0x1c2194=a307_0x5d06aa,_0x501b0e=_0xa35d17[_0x1c2194(0xe7)]('/')[_0x1c2194(0xac)]()||_0xa35d17;return _0x501b0e[_0x1c2194(0xe7)]('-')[_0x1c2194(0xe5)](_0x4fe2e1=>_0x4fe2e1[_0x1c2194(0xc7)](0x0)[_0x1c2194(0xe8)]()+_0x4fe2e1[_0x1c2194(0xd3)](0x1)[_0x1c2194(0xdf)]())[_0x1c2194(0xc8)]('\x20');}static[a307_0x5d06aa(0xb1)](_0x4775cd,_0x51b289,_0x15d56b){const _0x1a3390=a307_0x5d06aa,_0x344532=this['toComponentName'](_0x51b289),_0x29b881=this[_0x1a3390(0xb6)](_0x51b289),{createdAt:_0x3b0a05,createdDate:_0x6ebf8a,createdTime:_0x5d05f6}=this[_0x1a3390(0xdd)](new Date());let _0x3b6947=_0x4775cd[_0x1a3390(0xad)](/\{CliVersion\}/g,CLI_VERSION)[_0x1a3390(0xad)](/\{ComponentName\}/g,_0x344532)[_0x1a3390(0xad)](/\{DisplayTitle\}/g,_0x29b881)[_0x1a3390(0xad)](/\{PageName\}/g,_0x51b289)[_0x1a3390(0xad)](/\{TemplateName\}/g,_0x15d56b)[_0x1a3390(0xad)](/\{CreatedAt\}/g,_0x3b0a05)[_0x1a3390(0xad)](/\{CreatedDate\}/g,_0x6ebf8a)[_0x1a3390(0xad)](/\{CreatedTime\}/g,_0x5d05f6);return _0x3b6947;}static['replaceApiContent'](_0x3d8367,_0xed4c3e,_0x4b18d0,_0x2b5ab2,_0x5b2b32,_0x30dedf,_0x1dda5b,_0x35607a){const _0x1d9bf5=a307_0x5d06aa,_0x5b8ebd=new Date(),_0x1da689=_0x5b8ebd[_0x1d9bf5(0xe3)](),_0x57e7a0=_0x4b18d0[_0x1d9bf5(0xe5)](_0x553e6c=>{const _0x33df5d=_0x1d9bf5,_0x51f90c=[_0x33df5d(0xc6)+_0x553e6c[_0x33df5d(0xc4)]+'\x22','tableName:\x20\x22'+_0x553e6c[_0x33df5d(0xde)]+'\x22','name:\x20\x22'+_0x553e6c[_0x33df5d(0xdc)]+'\x22'];return _0x553e6c[_0x33df5d(0xbd)]&&_0x51f90c['push'](_0x33df5d(0xb3)+_0x553e6c[_0x33df5d(0xbd)]+'\x22'),_0x33df5d(0xc3)+_0x51f90c[_0x33df5d(0xc8)](',\x20')+'\x20},';})[_0x1d9bf5(0xc8)](''),_0x1e0cda=_0x2b5ab2||_0x4b18d0[0x0]?.[_0x1d9bf5(0xbd)]||_0x1d9bf5(0xab);let _0xb4d2d7=_0x3d8367[_0x1d9bf5(0xad)](/\{AppCode\}/g,_0xed4c3e)[_0x1d9bf5(0xad)](/\{ModelConfigs\}/g,_0x57e7a0)[_0x1d9bf5(0xad)](/\{ExampleModelName\}/g,_0x1e0cda)[_0x1d9bf5(0xad)](/\{ApiFileName\}/g,_0x5b2b32||_0x1d9bf5(0xc0))['replace'](/\{ConfigName\}/g,_0x30dedf||_0x1d9bf5(0xb5))[_0x1d9bf5(0xad)](/\{ClientConfigParam\}/g,_0x1dda5b||'')['replace'](/\{VarPrefix\}/g,_0x35607a||'LOVRABET')[_0x1d9bf5(0xad)](/\{CreatedAt\}/g,_0x1da689);return _0xb4d2d7;}static async[a307_0x5d06aa(0xe6)](_0x475a25,_0x69d970,_0x4271d3,_0xb4b26b,_0x3e171d=!![]){const _0x1f23ca=a307_0x5d06aa,_0x264f81=Date[_0x1f23ca(0xda)]();try{_0x3e171d&&logger[_0x1f23ca(0xd2)](_0x1f23ca(0xaf),_0x1f23ca(0xdb),{'templatePath':_0x475a25,'targetPath':_0x69d970,'pageName':_0x4271d3,'templateName':_0xb4b26b});await a307_0x2ae4c4['promises'][_0x1f23ca(0xd9)](_0x69d970,{'recursive':!![]}),await this[_0x1f23ca(0xc9)](_0x475a25,_0x69d970,_0x4271d3,_0xb4b26b);if(_0x3e171d){const _0x203d1b=Date['now']()-_0x264f81;logger[_0x1f23ca(0xb9)]('template',_0x1f23ca(0xc5),_0x203d1b,{'pageName':_0x4271d3,'templateName':_0xb4b26b});}}catch(_0x17af14){if(_0x3e171d){const _0x15a197=Date[_0x1f23ca(0xda)]()-_0x264f81;logger[_0x1f23ca(0xeb)](_0x1f23ca(0xaf),_0x1f23ca(0xd5),{'templatePath':_0x475a25,'targetPath':_0x69d970,'pageName':_0x4271d3,'templateName':_0xb4b26b,'error':_0x17af14 instanceof Error?_0x17af14['message']:String(_0x17af14),'duration':_0x15a197});}throw _0x17af14;}}static async['processDirectory'](_0x12fb86,_0x4cb2db,_0x12ea29,_0x43239e){const _0x473e54=a307_0x5d06aa,_0x4050c9=await a307_0x2ae4c4['promises']['readdir'](_0x12fb86,{'withFileTypes':!![]});for(const _0x436c6d of _0x4050c9){const _0x1eb991=a307_0x599f30[_0x473e54(0xc8)](_0x12fb86,_0x436c6d[_0x473e54(0xdc)]);let _0x1ad06f=a307_0x599f30[_0x473e54(0xc8)](_0x4cb2db,_0x436c6d['name']);_0x436c6d[_0x473e54(0xdc)][_0x473e54(0xd4)](_0x473e54(0xcb))&&(_0x1ad06f=a307_0x599f30['join'](_0x4cb2db,_0x436c6d[_0x473e54(0xdc)][_0x473e54(0xad)](/\.tpl$/,'')));if(_0x436c6d[_0x473e54(0xec)]())await a307_0x2ae4c4['promises'][_0x473e54(0xd9)](_0x1ad06f,{'recursive':!![]}),await this[_0x473e54(0xc9)](_0x1eb991,_0x1ad06f,_0x12ea29,_0x43239e);else _0x436c6d['isFile']()&&await this[_0x473e54(0xb4)](_0x1eb991,_0x1ad06f,_0x12ea29,_0x43239e);}}static async['processFile'](_0x1bd924,_0x1be1ee,_0x57c044,_0x385873){const _0x4b3f51=a307_0x5d06aa,_0x10edaa=a307_0x599f30[_0x4b3f51(0xcf)](_0x1bd924)[_0x4b3f51(0xdf)]();_0x1bd924[_0x4b3f51(0xd4)](_0x4b3f51(0xcb))&&(_0x1be1ee=_0x1be1ee[_0x4b3f51(0xad)](/\.tpl$/,''));const _0x534a54=[_0x4b3f51(0xce),_0x4b3f51(0xcd),_0x4b3f51(0xb2),_0x4b3f51(0xbc),_0x4b3f51(0xd0),'.md','.css',_0x4b3f51(0xd6),_0x4b3f51(0xcb)];if(_0x534a54[_0x4b3f51(0xed)](_0x10edaa)||_0x1bd924[_0x4b3f51(0xd4)](_0x4b3f51(0xcb))){const _0x37e0ce=await a307_0x2ae4c4[_0x4b3f51(0xd1)][_0x4b3f51(0xc2)](_0x1bd924,_0x4b3f51(0xe1)),_0x20ed08=this[_0x4b3f51(0xb1)](_0x37e0ce,_0x57c044,_0x385873);await a307_0x2ae4c4['promises'][_0x4b3f51(0xba)](_0x1be1ee,_0x20ed08,_0x4b3f51(0xe1));}else await a307_0x2ae4c4[_0x4b3f51(0xd1)][_0x4b3f51(0xca)](_0x1bd924,_0x1be1ee);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x42c7de,_0x2e2bdc){const _0x4d05bc=a308_0xef00,_0x3c366c=_0x42c7de();while(!![]){try{const _0x39d948=-parseInt(_0x4d05bc(0x1c0))/0x1*(-parseInt(_0x4d05bc(0x1b8))/0x2)+-parseInt(_0x4d05bc(0x1b6))/0x3+parseInt(_0x4d05bc(0x1b9))/0x4*(parseInt(_0x4d05bc(0x1d3))/0x5)+-parseInt(_0x4d05bc(0x1bf))/0x6*(parseInt(_0x4d05bc(0x1d0))/0x7)+parseInt(_0x4d05bc(0x1b4))/0x8*(-parseInt(_0x4d05bc(0x1c7))/0x9)+-parseInt(_0x4d05bc(0x1ce))/0xa+parseInt(_0x4d05bc(0x1d1))/0xb*(parseInt(_0x4d05bc(0x1d4))/0xc);if(_0x39d948===_0x2e2bdc)break;else _0x3c366c['push'](_0x3c366c['shift']());}catch(_0x754b86){_0x3c366c['push'](_0x3c366c['shift']());}}}(a308_0x3d68,0x59325));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';import a308_0x586753 from'semver';import{CLI_BIN_NAME,NPM_PACKAGE_NAME}from'../constant/cli.js';import{getCliVersionPolicy}from'../utils/cli-version-policy.js';import{getCliVersion}from'../utils/version.js';const UPDATE_CHECK_TTL_MS=0xc*0x3c*0x3c*0x3e8,UPDATE_NOTICE_TTL_MS=0x18*0x3c*0x3c*0x3e8;function isUpdateNoticeDisabled(){const _0x46aedf=a308_0xef00,_0x324727=process.env.RABETBASE_NO_UPDATE_NOTICE?.['trim']()[_0x46aedf(0x1bd)]();return _0x324727==='1'||_0x324727===_0x46aedf(0x1ba)||_0x324727===_0x46aedf(0x1c6);}function cacheRoot(){const _0x2a1b2d=a308_0xef00;return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),_0x2a1b2d(0x1c3));}export function getUpdateNoticeCachePath(){const _0x194897=a308_0xef00;return join(cacheRoot(),_0x194897(0x1c5),_0x194897(0x1bc));}async function readUpdateNoticeCache(){const _0x10a440=a308_0xef00;try{const _0x2a2920=await readFile(getUpdateNoticeCachePath(),_0x10a440(0x1cd)),_0x23afe8=JSON[_0x10a440(0x1c4)](_0x2a2920);if(!_0x23afe8||typeof _0x23afe8!==_0x10a440(0x1b7))return{};return _0x23afe8;}catch{return{};}}async function writeUpdateNoticeCache(_0x4a8a3c){const _0x2a35f2=a308_0xef00;try{const _0x11fffd=getUpdateNoticeCachePath();await mkdir(dirname(_0x11fffd),{'recursive':!![]}),await writeFile(_0x11fffd,JSON['stringify'](_0x4a8a3c,null,0x2)+'\x0a',_0x2a35f2(0x1cd));}catch{}}function isFreshCheck(_0x275b42,_0x3ef3ab){const _0x5b4e68=a308_0xef00;return typeof _0x275b42[_0x5b4e68(0x1cc)]===_0x5b4e68(0x1ca)&&_0x3ef3ab-_0x275b42[_0x5b4e68(0x1cc)]<UPDATE_CHECK_TTL_MS;}function a308_0xef00(_0x21f807,_0x3fa9ac){_0x21f807=_0x21f807-0x1b4;const _0x3d6888=a308_0x3d68();let _0xef0089=_0x3d6888[_0x21f807];return _0xef0089;}function isRecentlyNotified(_0x9b949c,_0x5df6a6,_0x52d141){const _0x278266=a308_0xef00;return _0x9b949c[_0x278266(0x1c2)]===_0x5df6a6&&typeof _0x9b949c[_0x278266(0x1c8)]===_0x278266(0x1ca)&&_0x52d141-_0x9b949c[_0x278266(0x1c8)]<UPDATE_NOTICE_TTL_MS;}export function buildNpmVersionUrl(_0x281a46){const _0x5f354a=a308_0xef00;return _0x5f354a(0x1bb)+NPM_PACKAGE_NAME+_0x5f354a(0x1c1)+_0x281a46;}export async function resolveLatestUpdateNotice(){const _0x25af2c=a308_0xef00;if(isUpdateNoticeDisabled())return null;try{const _0x55fe5f=Date[_0x25af2c(0x1c9)](),_0x2dc339=getCliVersion(),_0xf20e13=await readUpdateNoticeCache();let _0x19af13=isFreshCheck(_0xf20e13,_0x55fe5f)?_0xf20e13['latest']?.['trim']():undefined;if(!_0x19af13&&!isFreshCheck(_0xf20e13,_0x55fe5f)){const _0x41e059=await getCliVersionPolicy();_0x19af13=_0x41e059?.[_0x25af2c(0x1cb)]?.['trim']()||undefined,await writeUpdateNoticeCache({..._0xf20e13,'checkedAt':_0x55fe5f,'latest':_0x19af13,'failed':!_0x19af13});}if(!_0x19af13||!a308_0x586753[_0x25af2c(0x1cf)](_0x2dc339)||!a308_0x586753[_0x25af2c(0x1cf)](_0x19af13))return null;if(a308_0x586753['gte'](_0x2dc339,_0x19af13))return null;if(isRecentlyNotified(_0xf20e13,_0x19af13,_0x55fe5f))return null;const _0x3a9cc7=CLI_BIN_NAME+_0x25af2c(0x1be);return await writeUpdateNoticeCache({..._0xf20e13,'checkedAt':isFreshCheck(_0xf20e13,_0x55fe5f)?_0xf20e13[_0x25af2c(0x1cc)]:_0x55fe5f,'latest':_0x19af13,'failed':![],'lastNotifiedVersion':_0x19af13,'lastNotifiedAt':_0x55fe5f}),{'command':_0x3a9cc7,'current':_0x2dc339,'latest':_0x19af13,'url':buildNpmVersionUrl(_0x19af13),'message':CLI_BIN_NAME+'\x20'+_0x19af13+_0x25af2c(0x1b5)+_0x2dc339+_0x25af2c(0x1d2)+_0x3a9cc7};}catch{return null;}}function a308_0x3d68(){const _0x1659be=['number','stableVersion','checkedAt','utf8','4372720TjwJAU','valid','1057JcoTEI','55NdsyVz',',\x20run:\x20','586455ptCdUV','1917588MYyVXs','262552qAOjDP','\x20available,\x20current\x20','716925zObODk','object','2714yQEvPU','8cyMlJP','true','https://www.npmjs.com/package/','update-check.json','toLowerCase','\x20update','20970bWAfDF','419mkDBRK','/v/','lastNotifiedVersion','.cache','parse','rabetbase-cli','yes','9QJwmCN','lastNotifiedAt','now'];a308_0x3d68=function(){return _0x1659be;};return a308_0x3d68();}
|
package/lib/utils/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
(function(_0x38ffeb,_0x4d8f15){var _0x151020=a309_0x10ed,_0x251a8d=_0x38ffeb();while(!![]){try{var _0x45fcfd=parseInt(_0x151020(0x122))/0x1+parseInt(_0x151020(0x120))/0x2+-parseInt(_0x151020(0x11f))/0x3+-parseInt(_0x151020(0x11e))/0x4+-parseInt(_0x151020(0x124))/0x5*(-parseInt(_0x151020(0x123))/0x6)+parseInt(_0x151020(0x11c))/0x7*(-parseInt(_0x151020(0x11d))/0x8)+parseInt(_0x151020(0x121))/0x9;if(_0x45fcfd===_0x4d8f15)break;else _0x251a8d['push'](_0x251a8d['shift']());}catch(_0x2971a2){_0x251a8d['push'](_0x251a8d['shift']());}}}(a309_0x53bc,0x7dd27));function a309_0x53bc(){var _0x5df1eb=['4197006ppNpAP','460655jfqlSD','3975294qQvnqL','5IrcXLj','14WfQyLs','1188784ivjbtS','3282940IXmyee','591303ErpJnq','481722QhekgP'];a309_0x53bc=function(){return _0x5df1eb;};return a309_0x53bc();}import{VERSION}from'../generated/build-info.js';function a309_0x10ed(_0x703dc7,_0x2e140b){_0x703dc7=_0x703dc7-0x11c;var _0x53bc2e=a309_0x53bc();var _0x10ed9a=_0x53bc2e[_0x703dc7];return _0x10ed9a;}export function getCliVersion(){return VERSION;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x223fe0,_0x2f9dce){var _0x779c1f=a310_0x4c9a,_0x368283=_0x223fe0();while(!![]){try{var _0x3613f6=parseInt(_0x779c1f(0xac))/0x1*(parseInt(_0x779c1f(0xb2))/0x2)+parseInt(_0x779c1f(0xaa))/0x3*(-parseInt(_0x779c1f(0xab))/0x4)+parseInt(_0x779c1f(0xad))/0x5*(-parseInt(_0x779c1f(0xae))/0x6)+parseInt(_0x779c1f(0xb3))/0x7+-parseInt(_0x779c1f(0xb0))/0x8+-parseInt(_0x779c1f(0xaf))/0x9+parseInt(_0x779c1f(0xb1))/0xa;if(_0x3613f6===_0x2f9dce)break;else _0x368283['push'](_0x368283['shift']());}catch(_0x3c62a5){_0x368283['push'](_0x368283['shift']());}}}(a310_0x1f10,0x9fca5));function a310_0x4c9a(_0x49cc77,_0x21f8a9){_0x49cc77=_0x49cc77-0xaa;var _0x1f1004=a310_0x1f10();var _0x4c9aa0=_0x1f1004[_0x49cc77];return _0x4c9aa0;}import{setActiveCookie,clearActiveCookie}from'../core/api-client.js';export async function withActiveCookie(_0x1106de,_0x239986){setActiveCookie(_0x1106de);try{return await _0x239986();}finally{clearActiveCookie();}}function a310_0x1f10(){var _0x9fb203=['1038SAWSfC','1319733ytyMnA','6933824QerPCv','29785110csCxcB','675504DowBoW','3088925aUajOJ','1821957RLgnBz','8diIBBf','1JuCEgc','25290XntPoa'];a310_0x1f10=function(){return _0x9fb203;};return a310_0x1f10();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
function a311_0x2be0(_0x20b0a6,_0x1d2352){_0x20b0a6=_0x20b0a6-0xde;var _0x4a3c6a=a311_0x4a3c();var _0x2be01=_0x4a3c6a[_0x20b0a6];return _0x2be01;}(function(_0xc8a146,_0x4a5b88){var _0x26256b=a311_0x2be0,_0x4e280e=_0xc8a146();while(!![]){try{var _0x4d7cf8=parseInt(_0x26256b(0xde))/0x1*(-parseInt(_0x26256b(0xe6))/0x2)+-parseInt(_0x26256b(0xe1))/0x3+parseInt(_0x26256b(0xe8))/0x4+parseInt(_0x26256b(0xe7))/0x5+parseInt(_0x26256b(0xe0))/0x6*(parseInt(_0x26256b(0xe3))/0x7)+parseInt(_0x26256b(0xe5))/0x8+-parseInt(_0x26256b(0xe4))/0x9;if(_0x4d7cf8===_0x4a5b88)break;else _0x4e280e['push'](_0x4e280e['shift']());}catch(_0xe2bf5b){_0x4e280e['push'](_0x4e280e['shift']());}}}(a311_0x4a3c,0xc9662));function a311_0x4a3c(){var _0x36759c=['1595160NaxrZZ','215777OsMfHg','write','12rNApsb','2932122NloDCy','stderr','5237799DKSWQv','3290535bRGmbW','3255344gwbKml','8tGYQtd','3644025QcHcPL'];a311_0x4a3c=function(){return _0x36759c;};return a311_0x4a3c();}export function writeCliSideChannelLine(_0x575c81){var _0x48a0ee=a311_0x2be0;process[_0x48a0ee(0xe2)][_0x48a0ee(0xdf)](_0x575c81+'\x0a');}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lovrabet/rabetbase-cli",
|
|
3
|
-
"version": "2.5.1-beta.
|
|
3
|
+
"version": "2.5.1-beta.5",
|
|
4
4
|
"description": "Developer CLI for Lovrabet apps, datasets, pages, SQL, Backend Function, database connections, skills, and AI agent workflows.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"keywords": [
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"sync:cdn": "node scripts/sync-cdn-assets.js",
|
|
47
47
|
"verify:bundled-jq": "node scripts/verify-bundled-jq.mjs",
|
|
48
48
|
"regression:release-smoke": "node scripts/regression-release-smoke.mjs",
|
|
49
|
+
"release:summary:prepare": "node scripts/release-summary-preparation.mjs",
|
|
49
50
|
"deploy:verify": "node scripts/deploy-verify.mjs",
|
|
50
51
|
"pack:dry-run-summary": "node scripts/package-dry-run-summary.mjs",
|
|
51
52
|
"verify:release-package": "node scripts/verify-release-package.mjs",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rabetbase
|
|
3
|
-
version: 2.5.1-beta.
|
|
4
|
-
description: "Lovrabet
|
|
3
|
+
version: 2.5.1-beta.5
|
|
4
|
+
description: "Use for Lovrabet development work through the rabetbase CLI: create or bind projects (including creating an AppCode project in the current folder), pull Dataset/API facts and maintain SDK clients, or manage datasets, database connections, pages, SQL, Backend Functions, menus, notifications, knowledge bases, Agent Context Rules, roles, files, OCR, deployment metadata, platform issues, and 钉钉沙箱账号绑定. Trigger when the user mentions rabetbase, Lovrabet development, AppCode, Dataset, project creation, api pull/codegen, dblink, page, SQL, BFF, menu, notification, knowledge base, Agent Context Rules, RULES.md, DATABASE.md, rule list/get/set, role, file/OCR, or related development workflows."
|
|
5
5
|
metadata:
|
|
6
6
|
requires:
|
|
7
7
|
bins: ["rabetbase"]
|
|
@@ -12,15 +12,15 @@ metadata:
|
|
|
12
12
|
# Rabetbase CLI
|
|
13
13
|
|
|
14
14
|
> **前置条件:** 使用任何 API 命令前,需完成认证和配置(见下方)。
|
|
15
|
-
>
|
|
15
|
+
> **资料使用:** 先从意图索引定位能力,只读取当前任务直接相关的 reference。写操作、覆盖/恢复、复杂输出解析或命令契约不明确时,执行前读取对应 reference;简单只读操作可依据已确认的 CLI schema 直接完成。
|
|
16
16
|
> **命名约定:** 统一使用 `rabetbase <service> <command> [flags]` 格式。
|
|
17
17
|
> **输出格式:** AI Agent 需要结构化输出时,**优先 `--format compress`**(与 `json` 相同信封,单行紧凑、省 token);需要人类可读缩进时用 **`--format json`**。可在 **`json` / `compress`** 上叠加 **`--jq '<expr>'`**(对最终打印的整条 JSON 做 jq;二进制查找顺序为 **`JQ_PATH` → CLI 内置 sidecar jq → `PATH` 上的 jq**,通常无需单独安装系统 jq)。不确定当前 CLI 有哪些子命令或 flags 时,先跑 **`rabetbase schema`**(与 `--help` 同源的机器可读契约,无需登录)。
|
|
18
18
|
|
|
19
19
|
## 前置条件
|
|
20
20
|
|
|
21
|
-
1. **连接配置与认证分离**:首次使用先执行 `rabetbase config init
|
|
21
|
+
1. **连接配置与认证分离**:首次使用先执行 `rabetbase config init`。交互模式选择当前已开放国家/地区;非交互模式显式传 `--region`,未传时使用默认节点。企业独立部署优先导入 `lovrabet-routing/v1` 清单,也兼容旧扁平 Domain 文件和对应 `--*-domain` flags。`config init` 默认重建当前项目节点/Domain 配置,显式 `--global` 时写全局;保留 Cookie、AccessKey、format、locale 和应用绑定,但不登录、不绑定项目,随后再执行 `rabetbase auth login`
|
|
22
22
|
2. **AppCode**:确保 `.rabetbase.json` 中设置了 `apps`(单应用自动选中;多应用再配 `defaultApp`),或兼容读取的顶层 `appcode`,或通过 `--appcode <code>` / `--app <name>` 传入。旧 `.lovrabet.json` 不会自动读取
|
|
23
|
-
3. **配置文件**:`rabetbase config init`
|
|
23
|
+
3. **配置文件**:`rabetbase config init` 默认写当前项目 `.rabetbase.json`,显式 `--global` 时写 `~/.rabetbase.json`;默认节点不落冗余 `region`。官方节点模式清理显式和遗留 Domain,独立部署模式清理旧 `region`/Domain 后写入路由配置。完整字段说明见 [`.rabetbase.json` 配置参考](references/rabetbase-config.md)。当前目录应用绑定使用下方 `workspace init`
|
|
24
24
|
4. **工作目录应用绑定**:当前目录要固定使用某个应用时,使用 `rabetbase workspace init --appcode <code>` 或 `rabetbase workspace use --app <name>`(选型见「app vs workspace 职责边界」)
|
|
25
25
|
5. **多应用场景**:一个项目有多个应用时,先 `rabetbase workspace add <name> --appcode …` 登记各应用,再用 `--app <name>` 临时切换,或 `workspace use --app <name>` 修改当前工作目录默认应用
|
|
26
26
|
6. **平台发现**:当你不知道当前登录账号能访问哪些应用时,先 `rabetbase app list --remote`;它查询平台目录,不修改本地配置
|
|
@@ -60,7 +60,7 @@ metadata:
|
|
|
60
60
|
- 全部批次结束后再次执行异步差异刷新并重新获取完整差异;仍未收敛时,按 [`database-connection-workflow.md`](guides/database-connection-workflow.md) 对剩余 `toAnalyzeTables` 逐表串行重试且每表只恢复一次。仅当用户明确要求跳过分析/刷新时直接读取现有差异。状态查询失败继续使用原 `planId`,不得重复启动任务
|
|
61
61
|
- 输出很大且只需子集时,在 `compress`/`json` 上加 `--jq '.data…'` 缩小结果
|
|
62
62
|
- 需要真实业务行数据时必须交接给 `lovrabet data filter/getOne`;`lovrabet` 不可用时报告阻断并提示安装 Skill 与 CLI,不要静默安装或修复,也不要用 `rabetbase sql exec` 当行数据替代,见 [`guides/data-api-guidelines.md`](guides/data-api-guidelines.md)
|
|
63
|
-
- 需要 `src/api/api.ts` / `client.ts` 时:先 `rabetbase api pull --format compress` 取 `data.models`、`data.files`、`data.needsAgentMerge`,再按 [`sdk-client-generation.md`](guides/sdk-client-generation.md) 更新 TypeScript。`api pull`
|
|
63
|
+
- 需要 `src/api/api.ts` / `client.ts` 时:先 `rabetbase api pull --format compress` 取 `data.models`、`data.files`、`data.needsAgentMerge`,再按 [`sdk-client-generation.md`](guides/sdk-client-generation.md) 更新 TypeScript。`api pull` 默认**不会覆盖已有** `api.ts`/`client.ts`;只有用户明确要求放弃本地定制并完整重建时才使用 `--force --yes`
|
|
64
64
|
3. **SQL 工作流严格分步**
|
|
65
65
|
- 推荐路径:查现有(`sql list/detail`) 或新建(`sql create`) → 拉/落本地(`sql pull` / `sql create`) → 编辑同步目录文件 → 可选校验(`sql validate`) → 检查状态(`sql status`) → 先预览(`sql push --dry-run` / `sql delete --dry-run`) → 再 `sql push` / `sql delete` → `sql detail` / `sql exec` 验证
|
|
66
66
|
- 先使用 `sql list/detail` 查找可复用的 Custom SQL;没有满足需求的资源时,按照 [`sql-creation-workflow.md`](guides/sql-creation-workflow.md) 与 [`sql-mybatis.md`](guides/sql-mybatis.md) 创建、校验、发布并验证
|
|
@@ -156,10 +156,10 @@ metadata:
|
|
|
156
156
|
|
|
157
157
|
## 配置作用域原则(`--global`)
|
|
158
158
|
|
|
159
|
-
-
|
|
159
|
+
- **写操作默认当前项目**(包括 `config init`、`workspace add`、`config set`、`project create` 等),除非用户**显式**传 `--global`。
|
|
160
160
|
- **不要**在用户未要求时给命令加 `--global`** — 默认行为已是「项目优先」;只有用户明确要改全局配置或不在项目内且意图写全局时才使用。
|
|
161
161
|
- **`config set`**:在**没有**项目配置文件(当前目录未解析到 `.rabetbase.json`)且**未**传 `--global` 时,CLI **拒绝执行**并提示使用 `--global` 或先 `rabetbase workspace init --appcode <code>`,**不会**静默写入全局。
|
|
162
|
-
- **`project create`** 生成的新项目 `.rabetbase.json` **只继承**少量全局偏好(如 `cookie` / `locale` / `format` / `riskLevel` 等),**不会**把全局 `apps` / `defaultApp` 带入新项目文件;同时生成浏览器安全的 `src/api/sdk-config.ts` 与 `rabetbase.routing.json
|
|
162
|
+
- **`project create`** 生成的新项目 `.rabetbase.json` **只继承**少量全局偏好(如 `cookie` / `locale` / `format` / `riskLevel` 等),**不会**把全局 `apps` / `defaultApp` 带入新项目文件;同时生成浏览器安全的 `src/api/sdk-config.ts` 与 `rabetbase.domain-routing.json`。每个官方节点直接声明自己的第三方库 CDN 与 Lovrabet 自有资源 Domain;项目文件始终包含解析后的完整地址,企业独立部署从共用清单读取显式 CDN。两个生成文件都不下发认证配置;Domain 配置变化后用 `project domain-routing-sync` 刷新项目快照,`api pull` 只刷新 SDK/API 文件。
|
|
163
163
|
- **`api pull` / `api list`**:默认仅针对**项目** `apps`;需要合并全局已登记应用时加 `--global`(见各命令 reference)。
|
|
164
164
|
- **`app list`**:默认展示**合并**后的全量;`--global` 仅全局、`--project` 仅项目(见 [`rabetbase app list`](references/rabetbase-app-list.md))。
|
|
165
165
|
|
|
@@ -297,7 +297,8 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
297
297
|
| 意图 | 推荐命令 | 备注 |
|
|
298
298
|
|------|---------|------|
|
|
299
299
|
| 初始化连接配置 | [`rabetbase config init`](references/rabetbase-init.md) | 选择官方节点或导入独立部署 Domain |
|
|
300
|
-
| 创建新项目 | [`rabetbase project create`](references/rabetbase-project-create.md) |
|
|
300
|
+
| 创建新项目 | [`rabetbase project create`](references/rabetbase-project-create.md) | 支持新目录或当前空目录创建;完成口径与安全边界见 reference |
|
|
301
|
+
| 刷新项目公开 Domain 路由 | [`rabetbase project domain-routing-sync`](references/rabetbase-project-domain-routing-sync.md) | 根据当前有效配置原子生成项目级 `rabetbase.domain-routing.json`;与前端页面路由无关 |
|
|
301
302
|
| 从 lovrabet-cli 迁移 | [`rabetbase project upgrade`](references/rabetbase-project-upgrade.md) | 6 步自动迁移,`--yes` 跳过确认 |
|
|
302
303
|
| 老项目翻新蓝图 / Legacy Application Blueprint | [`guides/legacy-application-blueprint-workflow.md`](guides/legacy-application-blueprint-workflow.md) | 先输出 `.rabetbase/blueprint/<appCode>/application-blueprint.md`,把老代码逻辑与 Dataset / Relations 绑定后再生成迁移 Backlog |
|
|
303
304
|
| 运行 package.json 脚本 | [`rabetbase run <script>`](references/rabetbase-run.md) | `write`;先审阅脚本命令体,嵌入式工具暂不开放 |
|
|
@@ -315,7 +316,8 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
315
316
|
| 修改配置文件 | [`rabetbase config set <key> <value>`](references/rabetbase-config.md) | 默认写项目;无项目配置且未 `--global` 会拒绝;`--global` 写 `~/.rabetbase.json` |
|
|
316
317
|
| 列出配置 | [`rabetbase config list`](references/rabetbase-config.md) | 查看当前生效的配置 |
|
|
317
318
|
| 管理运行态 app-config | [`rabetbase app-config list/get/set/delete`](references/rabetbase-app-config.md) | 运行态 app-config 管理面;默认不输出明文 value;`set` 为 `write`,`delete` 保持 `high-risk-write` |
|
|
318
|
-
| 管理和检索当前研发应用的企业知识库 | [`rabetbase kb list/detail/search/create/update/delete`](references/rabetbase-kb.md) | 管理仅 company scope;search
|
|
319
|
+
| 管理和检索当前研发应用的企业知识库 | [`rabetbase kb list/detail/search/create/update/delete`](references/rabetbase-kb.md) | 管理仅 company scope;search 仅 COMPANY/PUBLIC;`create/update` 为 `write`,`delete` 保持 `high-risk-write` |
|
|
320
|
+
| 管理当前研发应用的 Agent context 规则 | [`rabetbase rule list/get/set`](references/rabetbase-rule.md) | `RULES.md` 供页面、API 等研发 Agent 使用且排除 DB Agent;`DATABASE.md` 仅供数据库分析时 DB Agent 使用;两者在各自流程全程参与 context;set 为 `write`,先 dry-run |
|
|
319
321
|
| 查询或管理应用级通知配置 | [`rabetbase notification config-list`](references/rabetbase-notification-config-list.md) / [`rabetbase notification config-create`](references/rabetbase-notification-config-mutations.md) / [`rabetbase notification config-update`](references/rabetbase-notification-config-mutations.md) / [`rabetbase notification config-delete`](references/rabetbase-notification-config-mutations.md) | list 获取 Backend Function 所需 `configCode`;写入只接收单一敏感 JSON 源,先 dry-run;update/delete 必须 `--yes` |
|
|
320
322
|
| 查看线上菜单事实 / 菜单异常审计 | [`rabetbase menu list`](references/rabetbase-menu-list.md) | 返回 DFS 事实、children/page、URL、最近更新人/时间和 snapshotHash;异常治理先读 [`menu-anomaly-manual-cleanup`](guides/menu-anomaly-manual-cleanup.md) |
|
|
321
323
|
| 批量显示或隐藏菜单 | [`rabetbase menu visibility-update`](references/rabetbase-menu-visibility-update.md) | 用精确 ID/path 选择目标;先 dry-run,使用 `--expect-visible` / `--expected-count` 防漂移,正式执行必须 `--yes` |
|
|
@@ -367,7 +369,7 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
367
369
|
| 恢复已删除页面 | [`rabetbase page restore --id <pageId>`](references/rabetbase-page-restore.md) | 支持 `DATA_LIST|CUSTOM` 自动识别;跨类型同 ID 时显式传 `--page-type` |
|
|
368
370
|
| 数据库连接(dblink)/ 测连 / 结构分析 | [`rabetbase db list`](references/rabetbase-db-list.md) 起 | **`id`**、**trace/plan id** 与“终态 + 复跑 diff”完成口径见 [database-connection-workflow.md](guides/database-connection-workflow.md);各子命令见 `references/rabetbase-db-*.md` |
|
|
369
371
|
| 独立部署局部同步研发元数据 | [`rabetbase deployment sync`](references/rabetbase-deployment-sync.md) | 显式命令为 `write`;服务端仅允许应用 Admin 操作并原子检查 appCode 开关,未开启时正常 no-op;非生产 BFF/SQL 可配置 push 后置同步;生产、直连、Dataset 保持显式确认;失败或结果不确定时不自动重试 |
|
|
370
|
-
| 生成 / 更新 API 客户端代码 | [`rabetbase api pull`](references/rabetbase-api-pull.md) → [`sdk-client-generation.md`](guides/sdk-client-generation.md) | `api pull` 拉 Dataset 事实并刷新 `sdk-config.ts
|
|
372
|
+
| 生成 / 更新 API 客户端代码 | [`rabetbase api pull`](references/rabetbase-api-pull.md) → [`sdk-client-generation.md`](guides/sdk-client-generation.md) | `api pull` 拉 Dataset 事实并刷新 `sdk-config.ts`;已有 `api.ts`/`client.ts` 按 guide 合并更新 |
|
|
371
373
|
| 查看生成的 API 模型 | [`rabetbase api list`](references/rabetbase-api-list.md) | 列出已生成的数据模型 |
|
|
372
374
|
| 查看现有 SQL | [`rabetbase sql list --name "xxx"`](references/rabetbase-sql-list.md) | 分页,按名称过滤;默认查当前决议到的单个应用 |
|
|
373
375
|
| 查看 SQL 详情 | [`rabetbase sql detail --sqlcode xxx`](references/rabetbase-sql-detail.md) | 含完整 SQL 内容和参数定义 |
|
|
@@ -392,7 +394,7 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
392
394
|
| 查询应用人员及角色归属 | [`rabetbase app members-list --appcode <code>`](references/rabetbase-app-members-list.md) | 全量只读;按 userId 去重,角色归属聚合到 `roles[]` |
|
|
393
395
|
| 查询租户人员 | [`rabetbase tenant members-list --tenant-code <code>`](references/rabetbase-tenant-members-list.md) | 全量只读;租户必须属于当前账号 |
|
|
394
396
|
| 查看 app 服务帮助 | `rabetbase app` | 只显示 `app` 子命令帮助,不等价于 `app list` |
|
|
395
|
-
| 绑定当前目录到应用 | [`rabetbase workspace init --appcode <code>`](references/rabetbase-workspace.md) | 首次绑定;单应用自动选中且不写 `defaultApp
|
|
397
|
+
| 绑定当前目录到应用 | [`rabetbase workspace init --appcode <code>`](references/rabetbase-workspace.md) | 首次绑定;单应用自动选中且不写 `defaultApp`;与只处理国家/地区及 Domain 的 `config init` 不同 |
|
|
396
398
|
| 切换当前工作目录默认应用 | [`rabetbase workspace use --app <name>`](references/rabetbase-workspace.md) | 持久修改当前目录 defaultApp |
|
|
397
399
|
| 登记应用 | [`rabetbase workspace add <name> --appcode <code>`](references/rabetbase-workspace.md) | 单应用不写 default;增加第二个应用时保留原应用为默认;`--global` 写全局 |
|
|
398
400
|
| 移除应用 | [`rabetbase workspace remove <name>`](references/rabetbase-workspace.md) | 只移除本地 profile,移除后自动切换 default |
|
|
@@ -406,7 +408,7 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
406
408
|
| 命令分组 | 说明 |
|
|
407
409
|
|----------|------|
|
|
408
410
|
| Quick Start | [`init`](references/rabetbase-init.md) |
|
|
409
|
-
| Project | [`create`](references/rabetbase-project-create.md) / [`upgrade`](references/rabetbase-project-upgrade.md) |
|
|
411
|
+
| Project | [`create`](references/rabetbase-project-create.md) / [`domain-routing-sync`](references/rabetbase-project-domain-routing-sync.md) / [`upgrade`](references/rabetbase-project-upgrade.md) |
|
|
410
412
|
| Workspace | [`workspace init` / `workspace use` / `workspace add` / `workspace remove`](references/rabetbase-workspace.md) |
|
|
411
413
|
| Run Scripts | [`run`](references/rabetbase-run.md) |
|
|
412
414
|
| Authentication | [`auth login`](references/rabetbase-auth-login.md) / [`auth logout`](references/rabetbase-auth-logout.md) |
|
|
@@ -419,6 +421,7 @@ const result = await client.bff.execute<DashboardData>({
|
|
|
419
421
|
| Configuration | [`config set/get/list/delete`](references/rabetbase-config.md) |
|
|
420
422
|
| Runtime App Config Management | [`app-config list/get/set/delete`](references/rabetbase-app-config.md) |
|
|
421
423
|
| Company Knowledge Base | [`kb list/detail/search/create/update/delete`](references/rabetbase-kb.md) |
|
|
424
|
+
| Agent Context Rules | [`rule list/get/set`](references/rabetbase-rule.md) |
|
|
422
425
|
| Menu | [`list`](references/rabetbase-menu-list.md) / [`external-link-create`](references/rabetbase-menu-external-link-create.md) / [`external-link-update`](references/rabetbase-menu-external-link-update.md) / [`rename`](references/rabetbase-menu-rename.md) / [`sync`](references/rabetbase-menu-sync.md) / [`asset-update`](references/rabetbase-menu-asset-update.md) / [`delete`](references/rabetbase-menu-delete.md) / [`group-create`](references/rabetbase-menu-group-create.md) / [`group-update`](references/rabetbase-menu-group-update.md) / [`move`](references/rabetbase-menu-move.md) / [`regroup-start`](references/rabetbase-menu-regroup-start.md) |
|
|
423
426
|
| Async Tasks | [`task status`](references/rabetbase-task-status.md) |
|
|
424
427
|
| Notification Configuration | [`notification config-list`](references/rabetbase-notification-config-list.md) / [`notification config-create`](references/rabetbase-notification-config-mutations.md) / [`notification config-update`](references/rabetbase-notification-config-mutations.md) / [`notification config-delete`](references/rabetbase-notification-config-mutations.md) |
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 目标:根据 `rabetbase api pull` 返回的数据集事实,生成或更新浏览器子应用的 `src/api/api.ts` 与 `src/api/client.ts`,并保留项目已有的自定义写法。
|
|
4
4
|
>
|
|
5
|
-
> CLI
|
|
5
|
+
> CLI 默认不覆盖 TypeScript。`api pull` 只保证:刷新 `sdk-config.ts`、返回 `data.models`,并在文件缺失时写入 Cookie-first 脚手架。已有文件由本指南更新;只有用户明确要求放弃本地定制并完整重建时,才使用 `--force --yes`。
|
|
6
6
|
|
|
7
7
|
## 何时执行
|
|
8
8
|
|
|
@@ -19,21 +19,24 @@
|
|
|
19
19
|
|
|
20
20
|
```
|
|
21
21
|
rabetbase api pull --format compress
|
|
22
|
-
→
|
|
22
|
+
→ 单应用读 data;项目应用清单逐项读 data.apps[]
|
|
23
|
+
→ 读取每项的 models / configName / isDefaultConfig / files / needsAgentMerge
|
|
23
24
|
→ 读已有 api.ts、client.ts、sdk-config.ts(含 {prefix}-api.ts / {prefix}-client.ts)
|
|
24
25
|
→ 按事实更新 models,保留本地 extras
|
|
25
26
|
→ 不要改已经正确的 createClient({ apiConfigName, ...LOVRABET_SDK_CONFIG })
|
|
26
27
|
```
|
|
27
28
|
|
|
28
29
|
1. 执行 `rabetbase api pull --format compress`(需要人类可读缩进时用 `--format json`)。
|
|
29
|
-
|
|
30
|
+
- 不要自动添加 `--force`。
|
|
31
|
+
- 只有用户明确要求丢弃本地 `api.ts` / `client.ts` 定制并完整重建时,才执行 `rabetbase api pull --force --yes --format compress`;此时根据返回的 `files.*.action` 回查是否为 `overwritten`。
|
|
32
|
+
2. 直接单应用结果使用 `data.models`;项目应用清单结果逐项使用 `data.apps[].models`。不要手写或猜测 `datasetCode`。也可用 `rabetbase api list --format compress` 核对目录,但写文件以 pull 返回的 models 为准。
|
|
30
33
|
3. 先读现有文件再写:
|
|
31
34
|
- 默认单应用:`src/api/api.ts`、`src/api/client.ts`、`src/api/sdk-config.ts`
|
|
32
35
|
- 多应用非 default:`{name}-api.ts` / `{name}-client.ts`(`data.files.api.path` / `data.files.client.path`)
|
|
33
36
|
4. `sdk-config.ts` 由 CLI 维护(`data.files.sdkConfig.action === "refreshed"`),不要往里面写 `cookie` / `accessKey` / `token`。
|
|
34
37
|
5. 看 `data.needsAgentMerge` 和 `data.files.*.action`,**不要**用已删除的 `wroteScaffold`:
|
|
35
38
|
- `needsAgentMerge === false` 且 `api`/`client` 均为 `created` 或 `overwritten`:脚手架已按当前 `models` 写好,只需检查项目 extras。
|
|
36
|
-
- `needsAgentMerge === true`:至少有一个 TypeScript 文件被 **preserved
|
|
39
|
+
- `needsAgentMerge === true`:至少有一个 TypeScript 文件被 **preserved**。先比较本地配置与返回事实,只在有差异时合并;即使 `client` 刚 `created`,也不能据此跳过对已保留 `api.ts` 的检查。
|
|
37
40
|
6. 默认应用:`data.isDefaultConfig === true`,`data.configName === "default"`,代码里用 `CONFIG_NAMES.DEFAULT`。
|
|
38
41
|
7. 具名应用:`data.isDefaultConfig === false`,`data.configName` 是不含引号的名字(如 `order`),`registerModels(..., "order")` 与 `apiConfigName: "order"`。不要把 `configName` 再包一层引号。
|
|
39
42
|
|
|
@@ -51,7 +54,7 @@ rabetbase api pull --format compress
|
|
|
51
54
|
export const LOVRABET_SDK_CONFIG = {} as const;
|
|
52
55
|
```
|
|
53
56
|
|
|
54
|
-
|
|
57
|
+
默认节点保持空对象;其他官方节点和企业独立部署统一写入最终 `runtimeDomain`。不要手改成认证字段。项目模板所需的完整公开 Domain 与资源策略由独立命令 `rabetbase project domain-routing-sync` 写入项目根目录的 `rabetbase.domain-routing.json`。
|
|
55
58
|
|
|
56
59
|
### api.ts
|
|
57
60
|
|
|
@@ -137,11 +140,10 @@ export const lovrabetClient = createClient({
|
|
|
137
140
|
| `configName` | `"default"` 或具名应用名(不含 TS 引号) |
|
|
138
141
|
| `isDefaultConfig` | 默认应用为 `true` |
|
|
139
142
|
| `models[]` | `datasetCode` / `tableName` / `name` / `alias` |
|
|
140
|
-
| `sdkRouting` | `{
|
|
141
|
-
| `projectRouting` | `{ path, manifest }`,最终公开 Domain 与资源策略 |
|
|
143
|
+
| `sdkRouting` | `{ runtimeDomain?: string }` |
|
|
142
144
|
| `files.api` / `files.client` / `files.sdkConfig` | `{ path, action }`;`action` 为 `created` / `overwritten` / `preserved` / `refreshed` |
|
|
143
145
|
| `needsAgentMerge` | 任一 TypeScript 被 `preserved` 时为 `true`,必须合并 `models` |
|
|
144
146
|
| `apiFilePath` / `clientFilePath` / `sdkConfigPath` | 与 `files.*.path` 相同,兼容路径字段 |
|
|
145
147
|
| `modelCount` / `datasetCount` | 模型数量 |
|
|
146
148
|
|
|
147
|
-
多应用时 `data.apps[]`
|
|
149
|
+
多应用时 `data.apps[]` 为上述对象的数组。
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# api pull
|
|
2
2
|
|
|
3
|
-
拉取当前 App 下所有数据集(Dataset)的元信息,刷新 `src/api/sdk-config.ts
|
|
3
|
+
拉取当前 App 下所有数据集(Dataset)的元信息,刷新 `src/api/sdk-config.ts`,并在 `api.ts` / `client.ts` **缺失时**写入 Cookie-first 脚手架。项目公开 Domain 路由由 [`project domain-routing-sync`](rabetbase-project-domain-routing-sync.md) 独立维护。
|
|
4
4
|
|
|
5
|
-
已有 TypeScript
|
|
5
|
+
已有 TypeScript 默认**不会被覆盖**。Agent 必须用返回的 `data.models` 按 [`sdk-client-generation.md`](../guides/sdk-client-generation.md) 更新 `api.ts` / `client.ts`。人类明确要放弃本地定制并重新生成完整脚手架时,可使用 `--force --yes`。
|
|
6
6
|
|
|
7
7
|
## 命令
|
|
8
8
|
|
|
@@ -13,6 +13,9 @@ rabetbase api pull --format compress
|
|
|
13
13
|
# 指定输出目录
|
|
14
14
|
rabetbase api pull --output ./src/generated/api/ --format compress
|
|
15
15
|
|
|
16
|
+
# 放弃本地定制,按最新 Dataset 事实整体重建 TypeScript
|
|
17
|
+
rabetbase api pull --force --yes --format compress
|
|
18
|
+
|
|
16
19
|
# 多应用:默认只解析「项目级」apps;与全局合并配置一起拉取时加 --global
|
|
17
20
|
rabetbase api pull --global --format compress
|
|
18
21
|
|
|
@@ -27,6 +30,7 @@ rabetbase api pull --appcode app-order-001 --format compress
|
|
|
27
30
|
|------|------|
|
|
28
31
|
| `--output <dir>` | 输出目录,默认 `./src/api/` |
|
|
29
32
|
| `--global` | 多应用时显式从「全局+项目」双层解析 `apps`;默认仅项目级 `apps` |
|
|
33
|
+
| `--force` | 整体替换已有 `api.ts` / `client.ts`;必须同时传 `--yes`,本地定制会丢失 |
|
|
30
34
|
| `--app <name>` | 多应用模式下,指定应用名称 |
|
|
31
35
|
| `--appcode <code>` | 直接指定 appcode,跳过配置查找 |
|
|
32
36
|
| `--format compress\|json` | 结构化信封。Agent 应读 `data.models`,不要刮 stderr |
|
|
@@ -48,14 +52,13 @@ rabetbase api pull --appcode app-order-001 --format compress
|
|
|
48
52
|
|
|
49
53
|
| 文件 | 行为 |
|
|
50
54
|
|------|------|
|
|
51
|
-
| `sdk-config.ts` |
|
|
52
|
-
|
|
|
53
|
-
| `<prefix>-
|
|
54
|
-
| `<prefix>-client.ts` | 文件缺失时写入 Cookie-first `createClient`;已存在则跳过 |
|
|
55
|
+
| `sdk-config.ts` | **每次刷新**。只含必要的最终 `runtimeDomain`,不含凭证 |
|
|
56
|
+
| `<prefix>-api.ts` | 文件缺失时写入脚手架(含当前 `models`);已存在时默认跳过,`--force` 时整体替换 |
|
|
57
|
+
| `<prefix>-client.ts` | 文件缺失时写入 Cookie-first `createClient`;已存在时默认跳过,`--force` 时整体替换 |
|
|
55
58
|
|
|
56
59
|
默认 `prefix` 为空(单应用),多应用非 default 应用使用应用名作为 prefix。
|
|
57
60
|
|
|
58
|
-
`project create` 在拷贝空 demo 脚手架后会覆盖写入一次 TypeScript,以便带上真实 models
|
|
61
|
+
`project create` 在拷贝空 demo 脚手架后会覆盖写入一次 TypeScript,以便带上真实 models。首次拉取失败时,恢复提示会要求执行 `rabetbase api pull --force --yes`,避免占位脚手架被继续保留。日常 `api pull` 遇到已有 `api.ts` / `client.ts` 时跳过,只刷新 `sdk-config.ts` 并返回 Dataset 事实。
|
|
59
62
|
|
|
60
63
|
## 输出(单应用 `data`)
|
|
61
64
|
|
|
@@ -65,14 +68,13 @@ rabetbase api pull --appcode app-order-001 --format compress
|
|
|
65
68
|
| `configName` | `"default"` 或具名应用名(不含 TS 引号) |
|
|
66
69
|
| `isDefaultConfig` | 默认应用为 `true` |
|
|
67
70
|
| `models[]` | `datasetCode` / `tableName` / `name` / `alias` |
|
|
68
|
-
| `sdkRouting` | `{
|
|
69
|
-
| `projectRouting` | `{ path, manifest }`,manifest 为最终公开路由清单 |
|
|
71
|
+
| `sdkRouting` | `{ runtimeDomain?: string }` |
|
|
70
72
|
| `files.api` / `files.client` / `files.sdkConfig` | `{ path, action }`:`created` / `overwritten` / `preserved` / `refreshed` |
|
|
71
|
-
| `needsAgentMerge` | 任一 TypeScript 被 `preserved` 时为 `true
|
|
73
|
+
| `needsAgentMerge` | 任一 TypeScript 被 `preserved` 时为 `true`;这是本地检查提示,不表示文件一定存在差异 |
|
|
72
74
|
| `apiFilePath` / `clientFilePath` / `sdkConfigPath` | 与 `files.*.path` 相同 |
|
|
73
75
|
| `modelCount` / `datasetCount` | 模型数量 |
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
项目使用 `apps` 清单解析时,`data` 为 `{ apps, succeeded, failed }`,每个 `data.apps[]` 元素都使用上表结构。因此 Dataset 事实从直接单应用结果的 `data.models` 读取,或从项目应用清单结果的 `data.apps[].models` 读取;以实际信封为准。
|
|
76
78
|
|
|
77
79
|
## 生成标识符
|
|
78
80
|
|
|
@@ -94,6 +96,9 @@ rabetbase api pull --app order --format compress
|
|
|
94
96
|
|
|
95
97
|
# 独立输出目录
|
|
96
98
|
rabetbase api pull --output ./src/generated/api/ --format compress
|
|
99
|
+
|
|
100
|
+
# 仅在明确放弃本地 TypeScript 定制时整体重建
|
|
101
|
+
rabetbase api pull --force --yes --format compress
|
|
97
102
|
```
|
|
98
103
|
|
|
99
104
|
更新已有 TypeScript:见 [`sdk-client-generation.md`](../guides/sdk-client-generation.md)。
|
|
@@ -73,7 +73,6 @@ CLI 对旧版顶层 `appcode` 仍兼容读取,但它已经不是推荐主模
|
|
|
73
73
|
"runtimeDomain": "https://custom-runtime.example.com",
|
|
74
74
|
"skillDomain": "https://custom-skills.example.com",
|
|
75
75
|
"kbDomain": "https://custom-kb.example.com",
|
|
76
|
-
"kbSearchDomain": "https://custom-kb-search.example.com",
|
|
77
76
|
"appDomain": "https://custom-app.example.com",
|
|
78
77
|
"localDomain": "https://custom-local.example.com",
|
|
79
78
|
"certificateDomain": "https://custom-cert.example.com"
|
|
@@ -129,7 +128,7 @@ rabetbase workspace remove product --yes
|
|
|
129
128
|
| `pageSize` | number | — | 默认分页大小,用于 `sql list` 等分页命令 |
|
|
130
129
|
| `riskLevel` | string | `"write"` | 允许执行的最高风险等级。可选值:`read`、`write`、`high-risk-write` |
|
|
131
130
|
| `apiDir` | string | `"./src/api"` | `api pull` 生成代码的输出目录 |
|
|
132
|
-
| `region` | string | `"cn"`(省略) | 官方节点快捷配置:当前开放 `cn`、`id`;历史 `global`
|
|
131
|
+
| `region` | string | `"cn"`(省略) | 官方节点快捷配置:当前开放 `cn`、`id`;历史 `global` 配置仅保留读取兼容。显式未知值会阻止业务命令回落默认节点,先用 `rabetbase doctor` 定位后修复 |
|
|
133
132
|
| `template_base_url` | string | 平台默认 CDN | 模板 CDN 基础 URL,一般无需修改 |
|
|
134
133
|
| `defaultApp` | string | — | 多应用模式下的默认应用名称;单应用省略 |
|
|
135
134
|
| `apps` | object | — | 多应用配置。key 为应用名,value 为 AppProfile(见下方) |
|
|
@@ -138,7 +137,6 @@ rabetbase workspace remove product --yes
|
|
|
138
137
|
| `runtimeDomain` | string | 平台默认 | 自定义运行时域名 |
|
|
139
138
|
| `skillDomain` | string | 节点默认 | SkillHub HTTPS origin 覆盖 |
|
|
140
139
|
| `kbDomain` | string | 跟随 `apiDomain` / 节点 API 默认值 | 企业知识库 HTTPS origin 覆盖;显式配置时优先,`runtimeDomain` 不参与回退 |
|
|
141
|
-
| `kbSearchDomain` | string | CN 已登记 KB Service;其他区域无默认值 | `kb search` 专用 HTTPS origin;与 KB 管理域独立,未登记区域不回退 |
|
|
142
140
|
| `appDomain` | string | 节点默认 | 工作台、页面编辑器和发布页面域名 |
|
|
143
141
|
| `localDomain` | string | 独立部署默认 `http://localhost` | 自定义 HTTPS 本地回调 origin;与 `certificateDomain` 同时配置 |
|
|
144
142
|
| `certificateDomain` | string | 节点默认;独立部署无 | 本地 HTTPS 证书服务 origin;与 `localDomain` 同时配置 |
|
|
@@ -329,7 +327,7 @@ rabetbase config set --key region --value id --global
|
|
|
329
327
|
rabetbase config init --domain-config ./lovrabet-domains.json
|
|
330
328
|
```
|
|
331
329
|
|
|
332
|
-
|
|
330
|
+
推荐使用 `lovrabet-routing/v1`,完整声明 `userDomain`、`apiDomain`、`runtimeDomain`、`skillDomain`、`kbDomain`、`appDomain`、`cdn.libraries` 与 `cdn.lovrabet`,并可选声明成对出现的 `localDomain`、`certificateDomain`。Domain 默认写成共用 HTTPS 字符串,确有差异时可按消费者覆盖。旧扁平 Domain 文件仍兼容。完整行为与命令行 flags 见 [`rabetbase config init`](rabetbase-init.md)。
|
|
333
331
|
|
|
334
332
|
也可以逐项覆盖:
|
|
335
333
|
|
|
@@ -340,8 +338,7 @@ rabetbase config set --key userDomain --value https://your-user.example.com --gl
|
|
|
340
338
|
rabetbase config set --key runtimeDomain --value https://your-runtime.example.com --global
|
|
341
339
|
rabetbase config set --key skillDomain --value https://your-skills.example.com --global
|
|
342
340
|
rabetbase config set --key kbDomain --value https://your-kb.example.com --global
|
|
343
|
-
rabetbase config set --key kbSearchDomain --value https://your-kb-search.example.com --global
|
|
344
341
|
rabetbase config set --key appDomain --value https://your-app.example.com --global
|
|
345
342
|
```
|
|
346
343
|
|
|
347
|
-
官方模式:`region` 内置 Routing Profile,默认 `cn`,配置文件可省略;当前新配置只开放 `cn`、`id`,`id` 需保存对应 region。历史文件中的 `global` 仍可读取,但不能通过 `config init` 或 `config set`
|
|
344
|
+
官方模式:`region` 内置 Routing Profile,默认 `cn`,配置文件可省略;当前新配置只开放 `cn`、`id`,`id` 需保存对应 region。历史文件中的 `global` 仍可读取,但不能通过 `config init` 或 `config set` 新写入。每个官方节点直接配置最终 `cdn.libraries` 与 `cdn.lovrabet`,因此可按节点使用独立 CDN;中国大陆当前使用 AliCDN,印尼当前使用 Cloudflare cdnjs。企业独立部署模式保存显式 Domain 与 CDN。项目级配置可覆盖全局配置;默认项目合并会继承全局节点配置。
|
|
@@ -22,9 +22,10 @@ rabetbase doctor check
|
|
|
22
22
|
| Built-in Skill | 目标路径、包版本、Skill 版本、内容状态;不一致时给出 `rabetbase cli-skill install` 修复命令 |
|
|
23
23
|
| Config Files | 全局和项目级配置文件路径 |
|
|
24
24
|
| Config JSON | 分别检测全局/项目配置文件是否为**合法 JSON**;非法时标红并给出解析错误(常见于尾随逗号、注释等,会导致该侧配置在合并时被忽略) |
|
|
25
|
+
| Country/Region Configuration | 检查项目与全局 `region`;显式未知值会标明来源,并给出对应作用域的 `config delete region` 修复命令 |
|
|
25
26
|
| Merged Config | 合并后的所有配置项(appCode / env / cookie / apiDir 等) |
|
|
26
27
|
| Apps | 多应用模式下的应用列表及各自配置 |
|
|
27
|
-
| API Endpoints | 最终生效的 region
|
|
28
|
+
| API Endpoints | 最终生效的 region 与六个域名(user / api / runtime / skill / kb / app) |
|
|
28
29
|
| Auth | 登录状态及 cookie 有效性 |
|
|
29
30
|
|
|
30
31
|
## 典型场景
|