openxiangda 1.0.265 → 1.0.267
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 +15 -6
- package/lib/application-environments.js +15 -1
- package/lib/cli.js +57 -8
- package/lib/skills.js +59 -56
- package/openxiangda-skills/SKILL.md +2 -2
- package/openxiangda-skills/skills/openxiangda-core/SKILL.md +1 -1
- package/package.json +1 -2
- package/packages/sdk/dist/{ProcessPreview-DSUIJi5V.d.mts → ProcessPreview-Cyk6uv-w.d.mts} +3 -2
- package/packages/sdk/dist/{ProcessPreview-DSUIJi5V.d.ts → ProcessPreview-Cyk6uv-w.d.ts} +3 -2
- package/packages/sdk/dist/components/index.d.mts +42 -41
- package/packages/sdk/dist/components/index.d.ts +42 -41
- package/packages/sdk/dist/{dataManagementApi-p_HOhQnA.d.mts → dataManagementApi-4fSaCA5t.d.mts} +2 -2
- package/packages/sdk/dist/{dataManagementApi-Ro9itwm8.d.ts → dataManagementApi-CE8Zyj3a.d.ts} +2 -2
- package/packages/sdk/dist/runtime/index.d.mts +4 -3
- package/packages/sdk/dist/runtime/index.d.ts +4 -3
- package/packages/sdk/dist/runtime/react.d.mts +5 -5
- package/packages/sdk/dist/runtime/react.d.ts +5 -5
- package/templates/openxiangda-react-spa/AGENTS.md +2 -0
- package/templates/sy-lowcode-app-workspace/AGENTS.md +1 -1
- package/v2/README.md +0 -35
- package/v2/skills/manifest.json +0 -45
- package/v2/skills/openxiangda-v1-maintenance/SKILL.md +0 -21
- package/v2/skills/openxiangda-v1-maintenance/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2/SKILL.md +0 -38
- package/v2/skills/openxiangda-v2/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-architecture/SKILL.md +0 -29
- package/v2/skills/openxiangda-v2-architecture/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-backend/SKILL.md +0 -28
- package/v2/skills/openxiangda-v2-backend/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-data-authz/SKILL.md +0 -28
- package/v2/skills/openxiangda-v2-data-authz/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-delivery/SKILL.md +0 -30
- package/v2/skills/openxiangda-v2-delivery/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-frontend/SKILL.md +0 -21
- package/v2/skills/openxiangda-v2-frontend/agents/openai.yaml +0 -4
- package/v2/skills/openxiangda-v2-workflow-events/SKILL.md +0 -28
- package/v2/skills/openxiangda-v2-workflow-events/agents/openai.yaml +0 -4
package/README.md
CHANGED
|
@@ -4,14 +4,19 @@
|
|
|
4
4
|
|
|
5
5
|
OpenXiangda is a lightweight CLI and skill package for private low-code platforms.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Repository boundary
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
This repository contains only the stable OpenXiangda 1.x maintenance toolchain.
|
|
10
|
+
It maintains existing resource-based applications and its legacy Delivery V2
|
|
11
|
+
protocol. Stable applications keep this runtime and are not migrated by a
|
|
12
|
+
platform upgrade.
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
OpenXiangda 2.0 is developed and released from the independent
|
|
15
|
+
`tools/openxiangda-v2` repository pinned by the platform orchestration
|
|
16
|
+
repository. A new 2.0 workspace must use that repository's current public
|
|
17
|
+
packages, unified AI skill, templates, and documentation. It must not use the
|
|
18
|
+
1.x resource/SDD publishing commands or any historical embedded copy of the
|
|
19
|
+
2.0 toolchain.
|
|
15
20
|
|
|
16
21
|
Normal OpenXiangda app development uses platform-user login tokens through `/openxiangda-api/v1`; it does not use AK/SK. External backend and third-party integrations use the separate `openxiangda-open-api` skill, `/dingtalk-api/v1.0`, and a platform-managed AK/SK credential.
|
|
17
22
|
|
|
@@ -107,6 +112,10 @@ openxiangda resource plan function --only customer_get,customer_save --profile d
|
|
|
107
112
|
openxiangda sdd bundle mainline-release --changes add-customer-page,fix-customer-api
|
|
108
113
|
# verify, wait for the lease, stage exact children, atomically finalize, and release
|
|
109
114
|
openxiangda release publish --change mainline-release --profile dev
|
|
115
|
+
# 仅限平台已核验的旧式多历史 lineage、精确非删除恢复
|
|
116
|
+
openxiangda release publish --change mainline-release --profile dev \
|
|
117
|
+
--adopt-online-baseline \
|
|
118
|
+
--adoption-reason "已合入主线的目标来自多次历史发布,无法对应单一 Git 基线"
|
|
110
119
|
openxiangda release status --change mainline-release --watch
|
|
111
120
|
openxiangda release explain --change mainline-release --profile dev
|
|
112
121
|
# 环境托管应用一次性登记(已有应用通常作为 preproduction)
|
|
@@ -1025,7 +1025,7 @@ function releaseExecutionPath(changeId, deploymentId, cwd = process.cwd()) {
|
|
|
1025
1025
|
}
|
|
1026
1026
|
|
|
1027
1027
|
function withManagedReleaseForwardedFlags(stepId, args = [], flags = {}) {
|
|
1028
|
-
|
|
1028
|
+
let forwarded = [...args];
|
|
1029
1029
|
if (stepId === 'runtime-stage' && flags['allow-runtime-rollback']) {
|
|
1030
1030
|
forwarded.push('--allow-runtime-rollback');
|
|
1031
1031
|
const rollbackReason = String(flags.reason || '').trim();
|
|
@@ -1058,6 +1058,19 @@ function withManagedReleaseForwardedFlags(stepId, args = [], flags = {}) {
|
|
|
1058
1058
|
forwarded.push('--reason', replacementReason);
|
|
1059
1059
|
}
|
|
1060
1060
|
}
|
|
1061
|
+
forwarded = withOnlineBaselineAdoptionFlags(forwarded, flags);
|
|
1062
|
+
return forwarded;
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
function withOnlineBaselineAdoptionFlags(args = [], flags = {}) {
|
|
1066
|
+
const forwarded = [...args];
|
|
1067
|
+
const isExactResourcePublish =
|
|
1068
|
+
forwarded[0] === 'resource' &&
|
|
1069
|
+
forwarded[1] === 'publish' &&
|
|
1070
|
+
(forwarded.includes('--only') || forwarded.includes('--code'));
|
|
1071
|
+
if (!isExactResourcePublish) {
|
|
1072
|
+
return forwarded;
|
|
1073
|
+
}
|
|
1061
1074
|
if (flags['adopt-online-baseline']) {
|
|
1062
1075
|
forwarded.push('--adopt-online-baseline');
|
|
1063
1076
|
const adoptionReason = String(
|
|
@@ -1129,6 +1142,7 @@ module.exports = {
|
|
|
1129
1142
|
saveCandidate,
|
|
1130
1143
|
sha256Canonical,
|
|
1131
1144
|
withManagedReleaseForwardedFlags,
|
|
1145
|
+
withOnlineBaselineAdoptionFlags,
|
|
1132
1146
|
withReleaseClientSessionArgs,
|
|
1133
1147
|
writePrivateJsonAtomic,
|
|
1134
1148
|
};
|
package/lib/cli.js
CHANGED
|
@@ -163,6 +163,7 @@ const {
|
|
|
163
163
|
saveCandidate,
|
|
164
164
|
sha256Canonical,
|
|
165
165
|
withManagedReleaseForwardedFlags,
|
|
166
|
+
withOnlineBaselineAdoptionFlags,
|
|
166
167
|
withReleaseClientSessionArgs,
|
|
167
168
|
} = require('./application-environments');
|
|
168
169
|
const { startDeveloperCenter } = require('./developer-center');
|
|
@@ -336,7 +337,7 @@ Usage:
|
|
|
336
337
|
openxiangda status <runId> [--environment preproduction|production] [--json]
|
|
337
338
|
openxiangda retry <runId> [--environment preproduction|production] [--json]
|
|
338
339
|
openxiangda rollback <preproduction|production> --to <appReleaseId> [--json]
|
|
339
|
-
openxiangda release publish|begin|status|integration-status|renew|end [--change id] [--profile name] [--watch] [--json]
|
|
340
|
+
openxiangda release publish|begin|status|integration-status|renew|end [--change id] [--profile name] [--adopt-online-baseline --adoption-reason text] [--watch] [--json]
|
|
340
341
|
openxiangda release ship|candidate|deploy|reconcile|test|fail|promote|rollback [--candidate id] [--deployment id] [--environment target] [--replace-manifest] [--allow-runtime-rollback --reason text] [--adopt-online-baseline --adoption-reason text] [--confirm-production] [--json]
|
|
341
342
|
openxiangda task status --change <id> [--profile name] [--watch] [--json]
|
|
342
343
|
openxiangda release backend-head|backend-list|backend-detail|backend-diff|backend-rollback|backend-abort|backend-retry [releaseId] [--profile name] [--json]
|
|
@@ -2075,14 +2076,18 @@ async function endReleaseWithoutLocalLease(
|
|
|
2075
2076
|
}
|
|
2076
2077
|
|
|
2077
2078
|
function decorateEnvironmentReleaseSteps(steps, target, flags = {}) {
|
|
2078
|
-
|
|
2079
|
+
const managedEnvironment = Boolean(
|
|
2080
|
+
target.environmentId && target.targetName
|
|
2081
|
+
);
|
|
2079
2082
|
const deploymentId = readStringFlag(flags, 'deployment-id');
|
|
2080
2083
|
for (const step of steps) {
|
|
2081
|
-
step.args =
|
|
2082
|
-
step.id,
|
|
2083
|
-
step.args,
|
|
2084
|
-
|
|
2085
|
-
|
|
2084
|
+
step.args = managedEnvironment
|
|
2085
|
+
? withManagedReleaseForwardedFlags(step.id, step.args, flags)
|
|
2086
|
+
: withOnlineBaselineAdoptionFlags(step.args, flags);
|
|
2087
|
+
if (!managedEnvironment) {
|
|
2088
|
+
step.command = commandFromArgs(step.args);
|
|
2089
|
+
continue;
|
|
2090
|
+
}
|
|
2086
2091
|
step.args.push('--environment', target.targetName);
|
|
2087
2092
|
if (deploymentId) step.args.push('--deployment-id', deploymentId);
|
|
2088
2093
|
if (step.id === 'runtime-stage' && flags.__verifiedCandidate) {
|
|
@@ -2132,6 +2137,43 @@ function decorateEnvironmentReleaseSteps(steps, target, flags = {}) {
|
|
|
2132
2137
|
return steps;
|
|
2133
2138
|
}
|
|
2134
2139
|
|
|
2140
|
+
function assertReleasePublishAdoptionFlags(flags = {}) {
|
|
2141
|
+
const adoptionRequested = Boolean(flags['adopt-online-baseline']);
|
|
2142
|
+
const adoptionReasonSupplied = Object.prototype.hasOwnProperty.call(
|
|
2143
|
+
flags,
|
|
2144
|
+
'adoption-reason'
|
|
2145
|
+
);
|
|
2146
|
+
const adoptionReason = String(flags['adoption-reason'] || '').trim();
|
|
2147
|
+
if (!adoptionRequested && adoptionReasonSupplied) {
|
|
2148
|
+
const error = new Error(
|
|
2149
|
+
'RELEASE_PUBLISH_ADOPTION_FLAG_REQUIRED: --adoption-reason 必须与 --adopt-online-baseline 一起使用;命令已在任何发布租约或资源写入前终止'
|
|
2150
|
+
);
|
|
2151
|
+
error.code = 'RELEASE_PUBLISH_ADOPTION_FLAG_REQUIRED';
|
|
2152
|
+
throw error;
|
|
2153
|
+
}
|
|
2154
|
+
if (adoptionRequested && adoptionReason.length < 8) {
|
|
2155
|
+
const error = new Error(
|
|
2156
|
+
'RELEASE_PUBLISH_ADOPTION_REASON_REQUIRED: --adopt-online-baseline 必须提供至少 8 个字符的 --adoption-reason;命令已在任何发布租约或资源写入前终止'
|
|
2157
|
+
);
|
|
2158
|
+
error.code = 'RELEASE_PUBLISH_ADOPTION_REASON_REQUIRED';
|
|
2159
|
+
throw error;
|
|
2160
|
+
}
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
function assertReleasePublishAdoptionScope(steps = [], flags = {}) {
|
|
2164
|
+
if (!flags['adopt-online-baseline']) return;
|
|
2165
|
+
const adoptionSteps = steps.filter(step =>
|
|
2166
|
+
step.args?.includes('--adopt-online-baseline')
|
|
2167
|
+
);
|
|
2168
|
+
if (adoptionSteps.length === 0) {
|
|
2169
|
+
const error = new Error(
|
|
2170
|
+
'RELEASE_PUBLISH_ADOPTION_SCOPE_REQUIRED: 当前发布计划没有可精确采纳线上基线的 resource publish --only/--code 阶段;命令已在任何发布租约或资源写入前终止'
|
|
2171
|
+
);
|
|
2172
|
+
error.code = 'RELEASE_PUBLISH_ADOPTION_SCOPE_REQUIRED';
|
|
2173
|
+
throw error;
|
|
2174
|
+
}
|
|
2175
|
+
}
|
|
2176
|
+
|
|
2135
2177
|
function changeIdFromStep(step) {
|
|
2136
2178
|
const index = step.args.indexOf('--change');
|
|
2137
2179
|
return index >= 0 ? step.args[index + 1] : 'change';
|
|
@@ -2145,6 +2187,7 @@ async function publishWorkspaceRelease(config, target, flags = {}) {
|
|
|
2145
2187
|
if (!changeId) {
|
|
2146
2188
|
fail('用法: openxiangda release publish --change <id> --profile <name>');
|
|
2147
2189
|
}
|
|
2190
|
+
assertReleasePublishAdoptionFlags(flags);
|
|
2148
2191
|
assertManagedRuntimeRollbackFlags(flags);
|
|
2149
2192
|
const releaseCandidate = flags.__verifiedCandidate
|
|
2150
2193
|
? assertLocalCandidate(flags.__verifiedCandidate)
|
|
@@ -2171,6 +2214,7 @@ async function publishWorkspaceRelease(config, target, flags = {}) {
|
|
|
2171
2214
|
changeId
|
|
2172
2215
|
);
|
|
2173
2216
|
decorateEnvironmentReleaseSteps(steps, target, flags);
|
|
2217
|
+
assertReleasePublishAdoptionScope(steps, flags);
|
|
2174
2218
|
const releaseScope = getSddChangeScope({
|
|
2175
2219
|
cwd: process.cwd(),
|
|
2176
2220
|
configText: readWorkspaceConfigText(),
|
|
@@ -5308,7 +5352,7 @@ async function release(args) {
|
|
|
5308
5352
|
const { flags, positional } = parseArgs(rest);
|
|
5309
5353
|
if (wantsSubcommandHelp(subcommand, flags)) {
|
|
5310
5354
|
print([
|
|
5311
|
-
'用法: openxiangda release publish|begin|status|explain|integration-status|renew|end [--change id] [--profile name] [--json]',
|
|
5355
|
+
'用法: openxiangda release publish|begin|status|explain|integration-status|renew|end [--change id] [--profile name] [--adopt-online-baseline --adoption-reason text] [--json]',
|
|
5312
5356
|
' openxiangda release ship|candidate|deploy|reconcile|test|fail|promote|rollback [--candidate id] [--deployment id] [--environment target] [--replace-manifest] [--allow-runtime-rollback --reason text] [--adopt-online-baseline --adoption-reason text] [--confirm-production] [--json]',
|
|
5313
5357
|
' openxiangda release backend-head|backend-list|backend-detail|backend-diff|backend-rollback|backend-abort|backend-retry [releaseId] [--profile name] [--json]',
|
|
5314
5358
|
' openxiangda release app-capture|app-head|app-list|app-detail|app-diff|app-post-commit|app-retry|app-prepare|app-verify|app-activate|app-finalize|app-rollback|app-abort [releaseId] [--staged-resources-json <JSON|file>] [--activate-staged-children] [--break-glass-adopt-verified-root --reason text] [--force-activate-without-validation] [--profile name] [--json]',
|
|
@@ -5321,6 +5365,7 @@ async function release(args) {
|
|
|
5321
5365
|
' openxiangda release ship --change <id> --profile <name> --confirm-production',
|
|
5322
5366
|
' openxiangda release fail --deployment <id> --message "UAT 未通过" --code UAT_FAILED --details-json <JSON|file> --environment preproduction --profile <name>',
|
|
5323
5367
|
' openxiangda release publish --change <id> --profile <name>',
|
|
5368
|
+
' openxiangda release publish --change <id> --profile <name> --adopt-online-baseline --adoption-reason "已审计目标来自多次历史发布"',
|
|
5324
5369
|
' openxiangda release begin --change <id> --profile <name>',
|
|
5325
5370
|
' openxiangda resource publish function --only <code> --change <id> --profile <name>',
|
|
5326
5371
|
' openxiangda runtime deploy --change <id> --profile <name>',
|
|
@@ -5339,6 +5384,7 @@ async function release(args) {
|
|
|
5339
5384
|
' - release fail 只允许显式选择 preproduction target,并会先核对 deployment 的 targetEnvironmentId;message 必填,code/details 会一并写入平台审计。',
|
|
5340
5385
|
' - ship 当前不支持 --dry-run;任何未声明参数都会在 candidate/deployment 写入前 fail-closed。需要只读检查时使用 environment status/diff 与 release status。',
|
|
5341
5386
|
' - publish 默认等待租约并按私有执行日志恢复;上次写结果不确定时必须只读核对后显式 --resume-after-review。',
|
|
5387
|
+
' - 旧式非环境托管 publish 也会把线上基线采纳意图仅透传给精确的 resource publish --only/--code 阶段;无精确资源阶段、原因不足或单独提供 reason 均在获取租约前 fail-closed。',
|
|
5342
5388
|
' - app-head 默认只输出紧凑 head 摘要;需要完整 manifest 时显式追加 --full。',
|
|
5343
5389
|
' - begin 获取应用级单写者 promotion lease;不同工作区仍可并行开发和验证。',
|
|
5344
5390
|
' - 带 --change 的 resource/runtime 写命令在没有本地 lease 时会自动 begin,并在后续命令复用。',
|
|
@@ -31065,6 +31111,8 @@ function buildWorkspacePublishEnv(
|
|
|
31065
31111
|
}
|
|
31066
31112
|
|
|
31067
31113
|
module.exports = {
|
|
31114
|
+
assertReleasePublishAdoptionFlags,
|
|
31115
|
+
assertReleasePublishAdoptionScope,
|
|
31068
31116
|
assertRuntimeReleaseReusable,
|
|
31069
31117
|
buildOpenXiangdaUpdateInstallPlan,
|
|
31070
31118
|
buildResourceManifestSddTargets,
|
|
@@ -31081,4 +31129,5 @@ module.exports = {
|
|
|
31081
31129
|
resolveDataViewSourceFormCodes,
|
|
31082
31130
|
satisfiedFormCodesFromContext,
|
|
31083
31131
|
stagedDataViewFormReleaseDependencies,
|
|
31132
|
+
decorateEnvironmentReleaseSteps,
|
|
31084
31133
|
};
|
package/lib/skills.js
CHANGED
|
@@ -82,62 +82,17 @@ const SKILL_SPECS = [
|
|
|
82
82
|
sourceRelativePath: 'openxiangda-skills/skills/openxiangda-open-api',
|
|
83
83
|
type: 'subskill',
|
|
84
84
|
},
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
sourceRelativePath: 'v2/skills/openxiangda-v2-architecture',
|
|
97
|
-
type: 'subskill',
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
name: 'openxiangda-v2-frontend',
|
|
101
|
-
displayName: 'OpenXiangda 2.0 Frontend',
|
|
102
|
-
shortDescription: '开发 React、Ant Design 与标准后台页面。',
|
|
103
|
-
sourceRelativePath: 'v2/skills/openxiangda-v2-frontend',
|
|
104
|
-
type: 'subskill',
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
name: 'openxiangda-v2-backend',
|
|
108
|
-
displayName: 'OpenXiangda 2.0 Backend',
|
|
109
|
-
shortDescription: '开发平台托管的标准 NestJS 应用后端。',
|
|
110
|
-
sourceRelativePath: 'v2/skills/openxiangda-v2-backend',
|
|
111
|
-
type: 'subskill',
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
name: 'openxiangda-v2-data-authz',
|
|
115
|
-
displayName: 'OpenXiangda 2.0 Data and AuthZ',
|
|
116
|
-
shortDescription: '设计 Data API、RBAC 与上下文数据权限。',
|
|
117
|
-
sourceRelativePath: 'v2/skills/openxiangda-v2-data-authz',
|
|
118
|
-
type: 'subskill',
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
name: 'openxiangda-v2-workflow-events',
|
|
122
|
-
displayName: 'OpenXiangda 2.0 Workflow and Events',
|
|
123
|
-
shortDescription: '开发 Workflow Kernel v2 与持久事件消费者。',
|
|
124
|
-
sourceRelativePath: 'v2/skills/openxiangda-v2-workflow-events',
|
|
125
|
-
type: 'subskill',
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
name: 'openxiangda-v2-delivery',
|
|
129
|
-
displayName: 'OpenXiangda 2.0 Delivery',
|
|
130
|
-
shortDescription: '构建、部署、观察、晋级和回滚完整应用。',
|
|
131
|
-
sourceRelativePath: 'v2/skills/openxiangda-v2-delivery',
|
|
132
|
-
type: 'subskill',
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
name: 'openxiangda-v1-maintenance',
|
|
136
|
-
displayName: 'OpenXiangda 1.x Maintenance',
|
|
137
|
-
shortDescription: '不迁移地安全维护稳定 1.x 应用。',
|
|
138
|
-
sourceRelativePath: 'v2/skills/openxiangda-v1-maintenance',
|
|
139
|
-
type: 'subskill',
|
|
140
|
-
},
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
const RETIRED_SKILL_SPECS = [
|
|
88
|
+
{ name: 'openxiangda-v2', sourceRelativePath: 'v2/skills/openxiangda-v2' },
|
|
89
|
+
{ name: 'openxiangda-v2-architecture', sourceRelativePath: 'v2/skills/openxiangda-v2-architecture' },
|
|
90
|
+
{ name: 'openxiangda-v2-frontend', sourceRelativePath: 'v2/skills/openxiangda-v2-frontend' },
|
|
91
|
+
{ name: 'openxiangda-v2-backend', sourceRelativePath: 'v2/skills/openxiangda-v2-backend' },
|
|
92
|
+
{ name: 'openxiangda-v2-data-authz', sourceRelativePath: 'v2/skills/openxiangda-v2-data-authz' },
|
|
93
|
+
{ name: 'openxiangda-v2-workflow-events', sourceRelativePath: 'v2/skills/openxiangda-v2-workflow-events' },
|
|
94
|
+
{ name: 'openxiangda-v2-delivery', sourceRelativePath: 'v2/skills/openxiangda-v2-delivery' },
|
|
95
|
+
{ name: 'openxiangda-v1-maintenance', sourceRelativePath: 'v2/skills/openxiangda-v1-maintenance' },
|
|
141
96
|
];
|
|
142
97
|
|
|
143
98
|
function getDefaultCodexSkillsDir(env = process.env) {
|
|
@@ -242,6 +197,36 @@ function getSkillStatus(spec, skillsDir) {
|
|
|
242
197
|
};
|
|
243
198
|
}
|
|
244
199
|
|
|
200
|
+
function getRetiredSkillStatus(spec, skillsDir) {
|
|
201
|
+
const targetDir = path.join(skillsDir, spec.name);
|
|
202
|
+
if (!fs.existsSync(targetDir)) {
|
|
203
|
+
return {
|
|
204
|
+
name: spec.name,
|
|
205
|
+
status: 'absent',
|
|
206
|
+
targetDir,
|
|
207
|
+
sourceRelativePath: spec.sourceRelativePath,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const manifest = readManifest(targetDir);
|
|
212
|
+
const isManagedRetiredSkill =
|
|
213
|
+
manifest?.manager === MANAGER &&
|
|
214
|
+
manifest.sourceRelativePath === spec.sourceRelativePath;
|
|
215
|
+
return {
|
|
216
|
+
name: spec.name,
|
|
217
|
+
status: isManagedRetiredSkill ? 'retired-managed' : 'preserved-external',
|
|
218
|
+
targetDir,
|
|
219
|
+
sourceRelativePath: spec.sourceRelativePath,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function removeRetiredManagedSkill(spec, skillsDir) {
|
|
224
|
+
const status = getRetiredSkillStatus(spec, skillsDir);
|
|
225
|
+
if (status.status === 'retired-managed') {
|
|
226
|
+
fs.rmSync(status.targetDir, { recursive: true, force: true });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
245
230
|
function getSkillStatusReport(options = {}) {
|
|
246
231
|
const agent = validateAgent(options.agent);
|
|
247
232
|
const env = options.env || process.env;
|
|
@@ -252,10 +237,12 @@ function getSkillStatusReport(options = {}) {
|
|
|
252
237
|
const results = [];
|
|
253
238
|
for (const skillsDir of skillsDirs) {
|
|
254
239
|
const skills = SKILL_SPECS.map(spec => getSkillStatus(spec, skillsDir));
|
|
240
|
+
const retiredSkills = RETIRED_SKILL_SPECS.map(spec => getRetiredSkillStatus(spec, skillsDir));
|
|
255
241
|
results.push({
|
|
256
242
|
agent,
|
|
257
243
|
skillsDir,
|
|
258
244
|
skills,
|
|
245
|
+
retiredSkills,
|
|
259
246
|
});
|
|
260
247
|
}
|
|
261
248
|
|
|
@@ -283,6 +270,7 @@ function installSkills(options = {}) {
|
|
|
283
270
|
const results = [];
|
|
284
271
|
for (const skillsDir of skillsDirs) {
|
|
285
272
|
const before = SKILL_SPECS.map(spec => getSkillStatus(spec, skillsDir));
|
|
273
|
+
const retiredBefore = RETIRED_SKILL_SPECS.map(spec => getRetiredSkillStatus(spec, skillsDir));
|
|
286
274
|
const conflicts = before.filter(item => item.status === 'foreign');
|
|
287
275
|
|
|
288
276
|
if (conflicts.length > 0 && !force && !dryRun) {
|
|
@@ -298,17 +286,29 @@ function installSkills(options = {}) {
|
|
|
298
286
|
targetDir: item.targetDir,
|
|
299
287
|
sourceRelativePath: item.sourceRelativePath,
|
|
300
288
|
}));
|
|
289
|
+
const retiredOperations = retiredBefore.map(item => ({
|
|
290
|
+
name: item.name,
|
|
291
|
+
operation: item.status === 'retired-managed' ? 'remove-retired-managed' : 'preserve',
|
|
292
|
+
targetDir: item.targetDir,
|
|
293
|
+
sourceRelativePath: item.sourceRelativePath,
|
|
294
|
+
}));
|
|
301
295
|
|
|
302
296
|
if (!dryRun) {
|
|
303
297
|
fs.mkdirSync(skillsDir, { recursive: true });
|
|
304
298
|
for (const spec of SKILL_SPECS) {
|
|
305
299
|
installOneSkill(spec, skillsDir);
|
|
306
300
|
}
|
|
301
|
+
for (const spec of RETIRED_SKILL_SPECS) {
|
|
302
|
+
removeRetiredManagedSkill(spec, skillsDir);
|
|
303
|
+
}
|
|
307
304
|
}
|
|
308
305
|
|
|
309
306
|
const after = dryRun
|
|
310
307
|
? before
|
|
311
308
|
: SKILL_SPECS.map(spec => getSkillStatus(spec, skillsDir));
|
|
309
|
+
const retiredAfter = dryRun
|
|
310
|
+
? retiredBefore
|
|
311
|
+
: RETIRED_SKILL_SPECS.map(spec => getRetiredSkillStatus(spec, skillsDir));
|
|
312
312
|
|
|
313
313
|
results.push({
|
|
314
314
|
agent,
|
|
@@ -317,7 +317,9 @@ function installSkills(options = {}) {
|
|
|
317
317
|
dryRun,
|
|
318
318
|
force,
|
|
319
319
|
operations,
|
|
320
|
+
retiredOperations,
|
|
320
321
|
skills: after,
|
|
322
|
+
retiredSkills: retiredAfter,
|
|
321
323
|
});
|
|
322
324
|
}
|
|
323
325
|
|
|
@@ -446,6 +448,7 @@ function buildWarnings(legacySkills) {
|
|
|
446
448
|
|
|
447
449
|
module.exports = {
|
|
448
450
|
INSTALL_MANIFEST,
|
|
451
|
+
RETIRED_SKILL_SPECS,
|
|
449
452
|
SKILL_SPECS,
|
|
450
453
|
getSkillStatusReport,
|
|
451
454
|
installSkills,
|
|
@@ -13,7 +13,7 @@ This file is a router and safety card. Read only the one or two subskills select
|
|
|
13
13
|
|
|
14
14
|
## Select the runtime generation first
|
|
15
15
|
|
|
16
|
-
If the workspace contains `openxiangda.config.ts`, `apps/web`, and `apps/server`, it is a platform-2.0 application. Stop this 1.x resource flow and use `$openxiangda-v2`
|
|
16
|
+
If the workspace contains `openxiangda.config.ts`, `apps/web`, and `apps/server`, it is a platform-2.0 application. Stop this 1.x resource flow and use the independently released `$openxiangda-v2` unified skill. The 2.0 CLI operates on one immutable application package and does not use SDD or per-resource publishing.
|
|
17
17
|
|
|
18
18
|
If the workspace contains `app-workspace.config.ts`, forms/pages/resource manifests, or an existing 1.x state directory, continue with this router. Never migrate a stable 1.x application merely because platform 2.0 is available.
|
|
19
19
|
|
|
@@ -161,7 +161,7 @@ When the sealed Runtime source intentionally does not descend from the active Ru
|
|
|
161
161
|
|
|
162
162
|
`resource plan` and publish dry-runs are strictly GET/HEAD-only. `READ_ONLY_AUTH_REQUIRED` means the access token expired; run `openxiangda auth refresh --profile <name>` or log in again before retrying. Never add an automatic refresh POST inside a plan.
|
|
163
163
|
|
|
164
|
-
`release publish` is the default promotion entrypoint only for legacy unmanaged workspaces. It verifies without rewriting reviewed `change.json`/`release.json`, waits for the app lease, freezes the App capture after ownership is acquired, executes deterministic exact staged steps, resumes from `.openxiangda/releases/<change>/execution.json`, atomically finalizes, verifies mainline integration, and releases the lease. Environment-managed applications use the two-phase `release ship`; candidate/deploy/test/fail/promote, `release begin`, and child commands remain recovery/diagnostic primitives.
|
|
164
|
+
`release publish` is the default promotion entrypoint only for legacy unmanaged workspaces. It verifies without rewriting reviewed `change.json`/`release.json`, waits for the app lease, freezes the App capture after ownership is acquired, executes deterministic exact staged steps, resumes from `.openxiangda/releases/<change>/execution.json`, atomically finalizes, verifies mainline integration, and releases the lease. When the same audited historical-lineage condition applies, legacy `release publish` accepts `--adopt-online-baseline --adoption-reason "..."` and forwards the pair only to exact `resource publish --only/--code` stages; missing reasons or plans without an exact resource stage fail before lease acquisition. Environment-managed applications use the two-phase `release ship`; candidate/deploy/test/fail/promote, `release begin`, and child commands remain recovery/diagnostic primitives.
|
|
165
165
|
|
|
166
166
|
Reviewed bundle commands may retain `<profile>` as a template. The explicit real `release publish --profile <name>` value is bound to actual child argv without rewriting tracked SDD. React SPA page codes are logical coverage targets and activate through one Runtime child; they do not require PageRelease. `release app-head` and `runtime releases` are compact by default; use `--full` only when the complete manifest is required.
|
|
167
167
|
|
|
@@ -157,7 +157,7 @@ An environment-managed release may intentionally replace complete Function/Autom
|
|
|
157
157
|
|
|
158
158
|
For an audited Runtime source rollback, managed `release ship`, recovery `release deploy`, and `release promote` accept `--allow-runtime-rollback --reason "..."` with a reason of at least 8 characters. This pair is scoped only to `runtime-stage` and never reaches resource stages or `app-finalize`. Ship freezes it in `ship.json`; production confirmation inherits it automatically. The default remains fail closed.
|
|
159
159
|
|
|
160
|
-
`release publish` is the normal whole-app entrypoint for legacy unmanaged workspaces: it verifies SDD without mutating reviewed files, waits for the promotion lease, freezes one App capture, stages the exact Form/Backend/Runtime children, resumes from a private execution journal, finalizes once, and releases the lease. Managed applications use two-phase `release ship` and its deployment-scoped journal. Individual candidate/deploy/test/fail/promote commands are recovery/diagnostic primitives. `release fail --deployment <id> --message <text> [--code <code>] [--details-json <JSON|file>] --environment preproduction` records an audited UAT failure only after verifying the deployment belongs to the selected preproduction environment; production targets and mismatched deployment identities fail before the write.
|
|
160
|
+
`release publish` is the normal whole-app entrypoint for legacy unmanaged workspaces: it verifies SDD without mutating reviewed files, waits for the promotion lease, freezes one App capture, stages the exact Form/Backend/Runtime children, resumes from a private execution journal, finalizes once, and releases the lease. For an approved historical-lineage catch-up, add `--adopt-online-baseline --adoption-reason "..."`; the pair reaches only exact `resource publish --only/--code` stages, never Form ensure, Runtime, or App finalize, and invalid or empty scopes fail before lease acquisition. Managed applications use two-phase `release ship` and its deployment-scoped journal. Individual candidate/deploy/test/fail/promote commands are recovery/diagnostic primitives. `release fail --deployment <id> --message <text> [--code <code>] [--details-json <JSON|file>] --environment preproduction` records an audited UAT failure only after verifying the deployment belongs to the selected preproduction environment; production targets and mismatched deployment identities fail before the write.
|
|
161
161
|
|
|
162
162
|
Reviewed bundle commands may retain `<profile>` as a template. The explicit real `release publish --profile <name>` value is bound to actual child argv without rewriting tracked SDD. React SPA page codes remain logical coverage targets and activate through the single Runtime child; they do not require PageRelease. If local lease state disappears, `release end --change <id>` reconciles a self-owned remote lease from the private execution journal and never reports inactive while a remote lease is active.
|
|
163
163
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openxiangda",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.267",
|
|
4
4
|
"description": "OpenXiangda CLI, workspace build tools, runtime SDK, and form components.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"bin": {
|
|
@@ -55,7 +55,6 @@
|
|
|
55
55
|
"bin/",
|
|
56
56
|
"lib/",
|
|
57
57
|
"openxiangda-skills/",
|
|
58
|
-
"v2/skills/",
|
|
59
58
|
"policy/",
|
|
60
59
|
"templates/",
|
|
61
60
|
"packages/sdk/bin/",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React__default, { ReactNode } from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
3
|
|
|
3
4
|
type FormSectionVariant = 'plain' | 'card';
|
|
4
5
|
type FormSectionAccent = 'blue' | 'green';
|
|
@@ -17,7 +18,7 @@ interface FormSectionProps {
|
|
|
17
18
|
contentClassName?: string;
|
|
18
19
|
children: React__default.ReactNode;
|
|
19
20
|
}
|
|
20
|
-
declare function FormSection({ title, description, variant, accent, icon, iconKey, collapsible, defaultCollapsed, className, titleClassName, contentClassName, children, }: FormSectionProps):
|
|
21
|
+
declare function FormSection({ title, description, variant, accent, icon, iconKey, collapsible, defaultCollapsed, className, titleClassName, contentClassName, children, }: FormSectionProps): react_jsx_runtime.JSX.Element;
|
|
21
22
|
|
|
22
23
|
/** 字段行为状态 */
|
|
23
24
|
type FieldBehavior = 'NORMAL' | 'READONLY' | 'DISABLED' | 'HIDDEN';
|
|
@@ -1289,4 +1290,4 @@ interface ProcessPreviewProps {
|
|
|
1289
1290
|
}
|
|
1290
1291
|
declare const ProcessPreview: React__default.FC<ProcessPreviewProps>;
|
|
1291
1292
|
|
|
1292
|
-
export { type
|
|
1293
|
+
export { type FormDataDeleteParams as $, type AddressFieldProps as A, type BaseFieldProps as B, type CascadeDateFieldProps as C, type DataFilter as D, type DepartmentSearchParams as E, type DepartmentSearchResult as F, type DepartmentSearchScope as G, type DepartmentSelectFieldProps as H, type DepartmentTreeNode as I, type DigitalSignatureFieldProps as J, type DigitalSignatureValue as K, type EditorChoiceOption as L, type EditorFieldProps as M, type EditorToolbarAction as N, type FieldBehavior as O, type FieldDefinition as P, type FieldLayoutNode as Q, type FieldValueSyncConfig as R, type FilePreviewCapability as S, type FilePreviewCapabilityBatch as T, type FilePreviewMetadata as U, type FilePreviewProvider as V, type FilePreviewRenderMode as W, type FilePreviewRequest as X, type FilePreviewSurface as Y, type FilePreviewType as Z, type FormAppearanceConfig as _, type AddressValue as a, type RuntimeAuthHeadersProvider as a$, type FormDataQueryParams as a0, type FormEffect as a1, type FormEffectAction as a2, type FormEffectCondition as a3, type FormEffectConditionOperator as a4, type FormEngineConfig as a5, type FormEngineMode as a6, type FormInstanceData as a7, type FormLayoutNode as a8, type FormRuntimeApi as a9, type LowcodePageNodeType as aA, type LowcodePageSchema as aB, type MultiSelectFieldProps as aC, type NumberFieldProps as aD, type OptionItem as aE, type OptionSourceConfig as aF, type OptionSourceType as aG, type PeopleShortcutConfig as aH, type PeopleShortcutType as aI, type PreparedFilePreview as aJ, type PreviewImageItem as aK, type PreviewParams as aL, type ProcessAction as aM, type ProcessBasicInfo as aN, type ProcessDefinition as aO, type ProcessNodeType as aP, ProcessPreview as aQ, type ProcessPreviewProps as aR, type ProcessRoute as aS, type ProcessStatus as aT, type ProcessTask as aU, type RadioFieldProps as aV, type ResubmitParams as aW, type ReturnParams as aX, type ReturnPolicy as aY, type ReturnableNode as aZ, type ReturnableNodeResult as a_, type FormRuntimeApiConfig as aa, type FormRuntimeConfig as ab, type FormSchema as ac, FormSection as ad, type FormSectionProps as ae, type FormSubmitBehavior as af, type FormTemplateConfig as ag, type GridLayoutCell as ah, type GridLayoutNode as ai, type ImageCompressionConfig as aj, type ImageCompressionVariantConfig as ak, type ImageFieldProps as al, type ImageVariant as am, type InitiatorSelectCandidate as an, type InitiatorSelectRequirement as ao, type InitiatorSelectScope as ap, type InitiatorSelectedApprovers as aq, type JSONFieldEditorContext as ar, type JSONFieldProps as as, type JSONFieldRendererContext as at, type LayoutVisibleWhen as au, type LinkedFormOptionConfig as av, type LocationFieldProps as aw, type LocationValue as ax, type LowcodePageMeta as ay, type LowcodePageNode as az, type ApprovalActionType as b, type RuntimeDataQueryParams as b0, type RuntimeDataQueryResult as b1, type RuntimeRequestConfig as b2, type RuntimeResponse as b3, type RuntimeUploadOptions as b4, type RuntimeUploadProvider as b5, type SaveTaskParams as b6, type SectionLayoutNode as b7, type SelectFieldProps as b8, type SerialNumberFieldProps as b9, type SignaturePoint as ba, type StandardFormPageMode as bb, type StatusMeta as bc, type StepLayoutItem as bd, type StepsLayoutNode as be, type SubFormColumn as bf, type SubFormFieldProps as bg, type TabLayoutItem as bh, type TabsLayoutNode as bi, type TaskStatus as bj, type TextAreaFieldProps as bk, type TextFieldProps as bl, type TextShortcutConfig as bm, type TextShortcutType as bn, type TransferParams as bo, type UserDisplayFormat as bp, type UserItem as bq, type UserSelectFieldProps as br, type ValidationPreset as bs, type ValidationRule as bt, type ViewPermissionQueryParams as bu, type ViewPermissionSummary as bv, type WithdrawParams as bw, type ApprovalPermission as c, ApprovalTimeline as d, type ApprovalTimelineProps as e, type ApproveParams as f, type AssociationFormConfig as g, type AssociationFormFieldProps as h, type AssociationValue as i, type AttachmentFieldProps as j, type AttachmentImageVariants as k, type AttachmentItem as l, type BaseLayoutNode as m, type CascadeSelectFieldProps as n, type ChangeRecord as o, type ChangeRecordListResponse as p, type ChangeRecordQueryParams as q, type CheckboxFieldProps as r, type DataLinkageCondition as s, type DataLinkageConfig as t, type DateFieldProps as u, type DateRangeRestriction as v, type DateRestrictionConfig as w, type DateShortcutConfig as x, type DateShortcutType as y, type DefaultValueLinkageConfig as z };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React__default, { ReactNode } from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
3
|
|
|
3
4
|
type FormSectionVariant = 'plain' | 'card';
|
|
4
5
|
type FormSectionAccent = 'blue' | 'green';
|
|
@@ -17,7 +18,7 @@ interface FormSectionProps {
|
|
|
17
18
|
contentClassName?: string;
|
|
18
19
|
children: React__default.ReactNode;
|
|
19
20
|
}
|
|
20
|
-
declare function FormSection({ title, description, variant, accent, icon, iconKey, collapsible, defaultCollapsed, className, titleClassName, contentClassName, children, }: FormSectionProps):
|
|
21
|
+
declare function FormSection({ title, description, variant, accent, icon, iconKey, collapsible, defaultCollapsed, className, titleClassName, contentClassName, children, }: FormSectionProps): react_jsx_runtime.JSX.Element;
|
|
21
22
|
|
|
22
23
|
/** 字段行为状态 */
|
|
23
24
|
type FieldBehavior = 'NORMAL' | 'READONLY' | 'DISABLED' | 'HIDDEN';
|
|
@@ -1289,4 +1290,4 @@ interface ProcessPreviewProps {
|
|
|
1289
1290
|
}
|
|
1290
1291
|
declare const ProcessPreview: React__default.FC<ProcessPreviewProps>;
|
|
1291
1292
|
|
|
1292
|
-
export { type
|
|
1293
|
+
export { type FormDataDeleteParams as $, type AddressFieldProps as A, type BaseFieldProps as B, type CascadeDateFieldProps as C, type DataFilter as D, type DepartmentSearchParams as E, type DepartmentSearchResult as F, type DepartmentSearchScope as G, type DepartmentSelectFieldProps as H, type DepartmentTreeNode as I, type DigitalSignatureFieldProps as J, type DigitalSignatureValue as K, type EditorChoiceOption as L, type EditorFieldProps as M, type EditorToolbarAction as N, type FieldBehavior as O, type FieldDefinition as P, type FieldLayoutNode as Q, type FieldValueSyncConfig as R, type FilePreviewCapability as S, type FilePreviewCapabilityBatch as T, type FilePreviewMetadata as U, type FilePreviewProvider as V, type FilePreviewRenderMode as W, type FilePreviewRequest as X, type FilePreviewSurface as Y, type FilePreviewType as Z, type FormAppearanceConfig as _, type AddressValue as a, type RuntimeAuthHeadersProvider as a$, type FormDataQueryParams as a0, type FormEffect as a1, type FormEffectAction as a2, type FormEffectCondition as a3, type FormEffectConditionOperator as a4, type FormEngineConfig as a5, type FormEngineMode as a6, type FormInstanceData as a7, type FormLayoutNode as a8, type FormRuntimeApi as a9, type LowcodePageNodeType as aA, type LowcodePageSchema as aB, type MultiSelectFieldProps as aC, type NumberFieldProps as aD, type OptionItem as aE, type OptionSourceConfig as aF, type OptionSourceType as aG, type PeopleShortcutConfig as aH, type PeopleShortcutType as aI, type PreparedFilePreview as aJ, type PreviewImageItem as aK, type PreviewParams as aL, type ProcessAction as aM, type ProcessBasicInfo as aN, type ProcessDefinition as aO, type ProcessNodeType as aP, ProcessPreview as aQ, type ProcessPreviewProps as aR, type ProcessRoute as aS, type ProcessStatus as aT, type ProcessTask as aU, type RadioFieldProps as aV, type ResubmitParams as aW, type ReturnParams as aX, type ReturnPolicy as aY, type ReturnableNode as aZ, type ReturnableNodeResult as a_, type FormRuntimeApiConfig as aa, type FormRuntimeConfig as ab, type FormSchema as ac, FormSection as ad, type FormSectionProps as ae, type FormSubmitBehavior as af, type FormTemplateConfig as ag, type GridLayoutCell as ah, type GridLayoutNode as ai, type ImageCompressionConfig as aj, type ImageCompressionVariantConfig as ak, type ImageFieldProps as al, type ImageVariant as am, type InitiatorSelectCandidate as an, type InitiatorSelectRequirement as ao, type InitiatorSelectScope as ap, type InitiatorSelectedApprovers as aq, type JSONFieldEditorContext as ar, type JSONFieldProps as as, type JSONFieldRendererContext as at, type LayoutVisibleWhen as au, type LinkedFormOptionConfig as av, type LocationFieldProps as aw, type LocationValue as ax, type LowcodePageMeta as ay, type LowcodePageNode as az, type ApprovalActionType as b, type RuntimeDataQueryParams as b0, type RuntimeDataQueryResult as b1, type RuntimeRequestConfig as b2, type RuntimeResponse as b3, type RuntimeUploadOptions as b4, type RuntimeUploadProvider as b5, type SaveTaskParams as b6, type SectionLayoutNode as b7, type SelectFieldProps as b8, type SerialNumberFieldProps as b9, type SignaturePoint as ba, type StandardFormPageMode as bb, type StatusMeta as bc, type StepLayoutItem as bd, type StepsLayoutNode as be, type SubFormColumn as bf, type SubFormFieldProps as bg, type TabLayoutItem as bh, type TabsLayoutNode as bi, type TaskStatus as bj, type TextAreaFieldProps as bk, type TextFieldProps as bl, type TextShortcutConfig as bm, type TextShortcutType as bn, type TransferParams as bo, type UserDisplayFormat as bp, type UserItem as bq, type UserSelectFieldProps as br, type ValidationPreset as bs, type ValidationRule as bt, type ViewPermissionQueryParams as bu, type ViewPermissionSummary as bv, type WithdrawParams as bw, type ApprovalPermission as c, ApprovalTimeline as d, type ApprovalTimelineProps as e, type ApproveParams as f, type AssociationFormConfig as g, type AssociationFormFieldProps as h, type AssociationValue as i, type AttachmentFieldProps as j, type AttachmentImageVariants as k, type AttachmentItem as l, type BaseLayoutNode as m, type CascadeSelectFieldProps as n, type ChangeRecord as o, type ChangeRecordListResponse as p, type ChangeRecordQueryParams as q, type CheckboxFieldProps as r, type DataLinkageCondition as s, type DataLinkageConfig as t, type DateFieldProps as u, type DateRangeRestriction as v, type DateRestrictionConfig as w, type DateShortcutConfig as x, type DateShortcutType as y, type DefaultValueLinkageConfig as z };
|