openxiangda 1.0.255 → 1.0.257
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 +9 -2
- package/lib/cli.js +23 -2
- package/lib/runtime-lineage.js +4 -2
- package/openxiangda-skills/SKILL.md +1 -1
- package/openxiangda-skills/references/forms/component-registry.md +1 -0
- package/openxiangda-skills/skills/openxiangda-core/SKILL.md +1 -1
- package/openxiangda-skills/skills/openxiangda-form/SKILL.md +1 -0
- package/package.json +3 -2
- package/packages/sdk/dist/{ProcessPreview-DRJwSXYG.d.mts → ProcessPreview-DSUIJi5V.d.mts} +19 -2
- package/packages/sdk/dist/{ProcessPreview-DRJwSXYG.d.ts → ProcessPreview-DSUIJi5V.d.ts} +19 -2
- package/packages/sdk/dist/components/index.cjs +417 -248
- package/packages/sdk/dist/components/index.cjs.map +1 -1
- package/packages/sdk/dist/components/index.d.mts +10 -4
- package/packages/sdk/dist/components/index.d.ts +10 -4
- package/packages/sdk/dist/components/index.mjs +582 -413
- package/packages/sdk/dist/components/index.mjs.map +1 -1
- package/packages/sdk/dist/{dataManagementApi-DwZ13_9n.d.ts → dataManagementApi-Ro9itwm8.d.ts} +1 -1
- package/packages/sdk/dist/{dataManagementApi-COXXyOK-.d.mts → dataManagementApi-p_HOhQnA.d.mts} +1 -1
- package/packages/sdk/dist/runtime/index.cjs +392 -223
- package/packages/sdk/dist/runtime/index.cjs.map +1 -1
- package/packages/sdk/dist/runtime/index.d.mts +2 -2
- package/packages/sdk/dist/runtime/index.d.ts +2 -2
- package/packages/sdk/dist/runtime/index.mjs +508 -339
- package/packages/sdk/dist/runtime/index.mjs.map +1 -1
- package/packages/sdk/dist/runtime/react.d.mts +1 -1
- package/packages/sdk/dist/runtime/react.d.ts +1 -1
- package/templates/openxiangda-react-spa/.cursor/rules/openxiangda.mdc +1 -1
- package/templates/openxiangda-react-spa/.qoder/rules/openxiangda.md +1 -1
- package/templates/openxiangda-react-spa/AGENTS.md +1 -1
- package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda.mdc +1 -1
- package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda.md +1 -1
- package/templates/sy-lowcode-app-workspace/AGENTS.md +2 -1
package/README.md
CHANGED
|
@@ -45,6 +45,13 @@ same Runtime bytes. An exact same-package retry may reuse an `uploaded` release
|
|
|
45
45
|
only after verifying its content hash, source revision, and Runtime parent;
|
|
46
46
|
immutable storage objects are never overwritten.
|
|
47
47
|
|
|
48
|
+
The package release gate includes an equivalent-scale conformance scenario with
|
|
49
|
+
four Forms, fifteen form permission groups, two Functions, two DataViews, one
|
|
50
|
+
Runtime, repository aliases, preproduction execution, injected failure, and
|
|
51
|
+
cross-machine checkpoint recovery. A CLI/SDK package cannot be published when
|
|
52
|
+
that combined compiler → plan → executor → retry contract fails, even if its
|
|
53
|
+
smaller component tests still pass.
|
|
54
|
+
|
|
48
55
|
The lower-level commands later in this README remain available for V1
|
|
49
56
|
compatibility and diagnostics; do not use them to assemble a normal V2 release.
|
|
50
57
|
|
|
@@ -126,7 +133,7 @@ openxiangda app snapshot APP_XXXX --profile dev --json
|
|
|
126
133
|
|
|
127
134
|
User tokens are stored in `~/.openxiangda/profiles.json` with `0600` permissions. Shared workspace environment values, including `APP_OSS_*`, can live in `~/.openxiangda/.env` and are inherited by new workspaces. Project `.env` files still work and override the global defaults. Project state is stored in `.openxiangda/state.json` and contains only durable profile-specific resource IDs and environment bindings; volatile candidate/deployment progress lives in the private `.openxiangda/releases/` journal so a release does not dirty the reviewed Git state. Durable CLI writes use a workspace lock plus atomic merge/rename so concurrent processes do not truncate another profile's state.
|
|
128
135
|
|
|
129
|
-
An environment-managed workspace keeps one logical application with independent `preproduction` and `production` targets. Each target owns its own `appType`, resource IDs, release heads, data, and side-effect policy; IDs must never be copied across targets. `release ship` always executes the same ordered candidate → preproduction → production protocol. The normal first invocation seals the candidate, deploys only to preproduction, and stops at `awaiting_production_confirmation`; a later invocation with `--confirm-production` promotes it. For an explicitly authorized emergency, supplying `--confirm-production` on the first invocation runs both phases in one command without bypassing preproduction, CAS, evidence, or production confirmation. Candidate sealing covers source, `public/`, build controls/scripts, stable environment/resource bindings, and target-specific hashed Runtime artifacts. Both deployments upload those artifacts with `--no-build`;
|
|
136
|
+
An environment-managed workspace keeps one logical application with independent `preproduction` and `production` targets. Each target owns its own `appType`, resource IDs, release heads, data, and side-effect policy; IDs must never be copied across targets. `release ship` always executes the same ordered candidate → preproduction → production protocol. The normal first invocation seals the candidate, deploys only to preproduction, and stops at `awaiting_production_confirmation`; a later invocation with `--confirm-production` promotes it. For an explicitly authorized emergency, supplying `--confirm-production` on the first invocation runs both phases in one command without bypassing preproduction, CAS, evidence, or production confirmation. Candidate sealing covers source, `public/`, build controls/scripts, stable environment/resource bindings, and target-specific hashed Runtime artifacts. Both deployments upload those artifacts with `--no-build`; Backend, Runtime, and Root children all retain the sealed candidate `sourceRevision`, even when promotion starts from a later clean descendant mainline commit. Each deployment is completed with evidence and reaches terminal `succeeded`, so it cannot leave the target slot blocked. Unrelated commits may land on authoritative mainline between phases only while the sealed commit remains an ancestor and every sealed input/binding/artifact still validates. Real human acceptance remains the recommended default and `--acceptance-note` records it. For audited historical-lineage adoption or reviewed Backend manifest replacement, the existing paired flags and exact-scope gates remain mandatory. Supported configuration resources use exact `resourceSelectors`; unknown, wildcard, destructive, and genuinely unscoped generic resources remain blocked. Lower-level candidate/deploy/test/fail/promote commands are recovery primitives. `release fail` requires an explicit preproduction target, deployment ID, and audit message; it verifies the deployment belongs to that preproduction environment before writing optional code/details to the platform failure audit. Direct `release publish` is retained only for legacy unmanaged workspaces.
|
|
130
137
|
|
|
131
138
|
DataView `status` is a last-observed lifecycle value, not a stable candidate binding: the same managed deployment legitimately moves it between `draft` and `active`. Candidate creation and validation therefore omit only `resources.dataViews.<code>.status`, including when resuming a candidate sealed by an older CLI. `dataViewId`, `materializedViewName`, `storageMode`, candidate hashes, environment identity, CAS, lease, source and every non-DataView status remain fail-closed.
|
|
132
139
|
|
|
@@ -156,7 +163,7 @@ React SPA workspaces publish their frontend with `openxiangda runtime deploy`. E
|
|
|
156
163
|
|
|
157
164
|
Environment-managed `release ship`, recovery `release deploy`, and `release promote` accept the same audited Runtime rollback pair. It is forwarded only to `runtime-stage`, never to resource stages or `app-finalize`. Ship freezes the intent in its private journal so production confirmation can inherit it automatically; without the explicit pair, lineage divergence remains blocked.
|
|
158
165
|
|
|
159
|
-
Before publishing the OpenXiangda npm package, run `npm run test:release` once on the final clean version commit. For an AdminList-only SDK patch, use the fixed `npm run test:release:sdk-admin-list` profile instead; it runs the AdminList state and response contracts plus the release-evidence guard without exercising unrelated deployment orchestration. Both commands write hash-bound evidence under `.openxiangda/evidence/tests/<HEAD>/release.json`. `npm publish` validates that evidence against the exact Git commit, package version, Node version, and complete passing result, then runs the mainline guard; it does not execute the selected suite a second time. Unknown or cross-module changes should continue to use the full release suite. Any commit, version, runtime, result, or evidence-hash drift remains fail closed.
|
|
166
|
+
Before publishing the OpenXiangda npm package, run `npm run test:release` once on the final clean version commit. The full suite always includes the equivalent-scale Delivery V2 conformance scenario above. For an AdminList-only SDK patch, use the fixed `npm run test:release:sdk-admin-list` profile instead; it runs the AdminList state and response contracts plus the release-evidence guard without exercising unrelated deployment orchestration. Both commands write hash-bound evidence under `.openxiangda/evidence/tests/<HEAD>/release.json`. `npm publish` validates that evidence against the exact Git commit, package version, Node version, and complete passing result, then runs the mainline guard; it does not execute the selected suite a second time. Unknown or cross-module changes should continue to use the full release suite. Any commit, version, runtime, result, or evidence-hash drift remains fail closed.
|
|
160
167
|
|
|
161
168
|
Parallel tasks develop and test in isolated worktrees, but feature worktrees do not publish. After approved commits are merged and pushed, `sdd bundle <release-change> --changes ...` unions their exact structured scope and preserves the source changes' common Git baseline instead of adopting the post-merge `HEAD`. Old imported changes that predate source-base metadata must pass `--source-base-ref <commit>` explicitly. Commit/push the bundle, then run `release publish --change <release-change> --profile <name>` from a clean local main/master whose commit exactly equals the authoritative remote tip. It verifies without rewriting reviewed SDD files, waits for the app lease, freezes one authoritative App capture, executes exact Form/Backend/Runtime staged steps, atomically finalizes the Root App release, and records a resumable local execution journal. Runtime checks use the narrow head endpoint; immutable Git-base artifact hashes are reused across plans.
|
|
162
169
|
|
package/lib/cli.js
CHANGED
|
@@ -5214,7 +5214,7 @@ async function release(args) {
|
|
|
5214
5214
|
' openxiangda release app-finalize --change <id> --staged-resources-json <JSON|file> --profile <name>',
|
|
5215
5215
|
'说明:',
|
|
5216
5216
|
' - ship 是环境托管应用的有序快车道:默认首次只部署预发并停止,第二次以同一 candidate 晋级正式;明确授权紧急发布时可在首次携带 --confirm-production,一条命令顺序完成两阶段。人工验收备注可选。',
|
|
5217
|
-
' - candidate
|
|
5217
|
+
' - candidate 封存环境/资源绑定、源码身份和两目标 Runtime 哈希产物;预发与正式部署均不现场重建,Backend/Runtime/Root 始终使用 candidate sourceRevision,并以 deployment succeeded 闭环。',
|
|
5218
5218
|
' - 已合入主线但线上来自多次历史 lineage 的精确非删除恢复可显式使用 --adopt-online-baseline 与 --adoption-reason;预发冻结后,正式确认会从 ship.json 自动复用同一意图,仍保留冻结 Head、CAS、租约、staged children 和单次 App finalize。',
|
|
5219
5219
|
' - ship 的 --replace-manifest 与 --reason 必须成对,只透传给精确 Backend Function/Automation stage;正式确认必须复用与预发完全相同的参数。',
|
|
5220
5220
|
' - --allow-runtime-rollback 与 --reason 必须成对,只透传给 runtime-stage;ship 会冻结并在正式确认自动复用该审计意图,app-finalize 不会收到这些参数。',
|
|
@@ -6052,6 +6052,12 @@ async function runBackendReleaseCommand(
|
|
|
6052
6052
|
if (!releaseId) {
|
|
6053
6053
|
fail('用法: openxiangda release backend-abort <releaseId> [--reason text] [--profile name]');
|
|
6054
6054
|
}
|
|
6055
|
+
const releaseContext = await ensureBackendReleasePublishContext(
|
|
6056
|
+
config,
|
|
6057
|
+
target,
|
|
6058
|
+
flags,
|
|
6059
|
+
'Backend Release abort'
|
|
6060
|
+
);
|
|
6055
6061
|
data = await requestWithAuth(
|
|
6056
6062
|
config,
|
|
6057
6063
|
target.profileName,
|
|
@@ -6061,7 +6067,10 @@ async function runBackendReleaseCommand(
|
|
|
6061
6067
|
),
|
|
6062
6068
|
{
|
|
6063
6069
|
method: 'POST',
|
|
6064
|
-
body: stripUndefinedValues({
|
|
6070
|
+
body: stripUndefinedValues({
|
|
6071
|
+
...releaseContext.control,
|
|
6072
|
+
reason: readStringFlag(flags, 'reason'),
|
|
6073
|
+
}),
|
|
6065
6074
|
}
|
|
6066
6075
|
);
|
|
6067
6076
|
} else if (subcommand === 'backend-retry') {
|
|
@@ -15559,6 +15568,12 @@ async function runtime(args) {
|
|
|
15559
15568
|
const runtimeHead = await telemetry.runPhase('head', async () =>
|
|
15560
15569
|
loadRuntimeHeadApp(config, target)
|
|
15561
15570
|
);
|
|
15571
|
+
const releaseBaseline = activeDeliveryV2Context
|
|
15572
|
+
? null
|
|
15573
|
+
: getStoredChangeBaseline(target);
|
|
15574
|
+
const sealedCandidateSourceRevision = releaseBaseline?.candidateId
|
|
15575
|
+
? releaseBaseline.releaseSourceRevision
|
|
15576
|
+
: null;
|
|
15562
15577
|
const runtimeLineage = activeDeliveryV2Context
|
|
15563
15578
|
? {
|
|
15564
15579
|
sourceRevision: activeDeliveryV2Context.sourceRevision,
|
|
@@ -15578,6 +15593,9 @@ async function runtime(args) {
|
|
|
15578
15593
|
activate: !flags['no-activate'],
|
|
15579
15594
|
allowRollback: flags['allow-runtime-rollback'],
|
|
15580
15595
|
reason: readStringFlag(flags, 'reason'),
|
|
15596
|
+
...(sealedCandidateSourceRevision
|
|
15597
|
+
? { sourceRevision: sealedCandidateSourceRevision }
|
|
15598
|
+
: {}),
|
|
15581
15599
|
});
|
|
15582
15600
|
if (runtimeLineage.lineageStatus === 'rollback-bypass') {
|
|
15583
15601
|
warn(
|
|
@@ -15665,6 +15683,9 @@ async function runtime(args) {
|
|
|
15665
15683
|
activate: !flags['no-activate'],
|
|
15666
15684
|
allowRollback: flags['allow-runtime-rollback'],
|
|
15667
15685
|
reason: readStringFlag(flags, 'reason'),
|
|
15686
|
+
...(sealedCandidateSourceRevision
|
|
15687
|
+
? { sourceRevision: sealedCandidateSourceRevision }
|
|
15688
|
+
: {}),
|
|
15668
15689
|
});
|
|
15669
15690
|
assertRuntimeSourceRevisionStable(
|
|
15670
15691
|
runtimeLineage.sourceRevision,
|
package/lib/runtime-lineage.js
CHANGED
|
@@ -47,11 +47,13 @@ function prepareRuntimeDeployLineage(options = {}) {
|
|
|
47
47
|
|
|
48
48
|
let sourceRevision;
|
|
49
49
|
try {
|
|
50
|
-
sourceRevision = normalizeRuntimeSourceRevision(
|
|
50
|
+
sourceRevision = normalizeRuntimeSourceRevision(
|
|
51
|
+
options.sourceRevision || readGitSourceBase(cwd, 'HEAD')
|
|
52
|
+
);
|
|
51
53
|
} catch (error) {
|
|
52
54
|
throw runtimeLineageError(
|
|
53
55
|
'RUNTIME_SOURCE_LINEAGE_REQUIRED',
|
|
54
|
-
`创建 Runtime release
|
|
56
|
+
`创建 Runtime release 前必须使用可审计的已提交源码版本;当前目录无法解析 Runtime source revision。${formatCause(error)}`
|
|
55
57
|
);
|
|
56
58
|
}
|
|
57
59
|
|
|
@@ -143,7 +143,7 @@ For a workspace registered by `environment init` or connected by `environment at
|
|
|
143
143
|
|
|
144
144
|
Candidate binding checks treat only `resources.dataViews.<code>.status` as a mutable platform lifecycle observation, so a candidate survives its own `active → draft → active` staging sequence and older sealed candidates remain resumable. DataView IDs, materialized-view names, storage modes, other resource statuses, candidate hashes, environment identity, CAS, lease, and source/mainline checks remain exact.
|
|
145
145
|
|
|
146
|
-
A sealed candidate may be promoted from a later clean, pushed authoritative mainline commit only when the candidate commit remains its Git ancestor and every sealed candidate input file still has the exact recorded hash. This permits unrelated parallel merges without allowing stale candidate inputs to overwrite newer work. Do not edit private candidate metadata to bypass `CANDIDATE_INPUTS_CHANGED`. The CLI waits for both the app lease and target deployment slot; each target permits only one running or evidence-pending deployment. Emergency fixes stay on the same candidate → preproduction → production path with a narrow L1 scope. `--wait-seconds 0` is fail-fast, not a binding-contract, CAS, or production-confirmation bypass.
|
|
146
|
+
A sealed candidate may be promoted from a later clean, pushed authoritative mainline commit only when the candidate commit remains its Git ancestor and every sealed candidate input file still has the exact recorded hash. This permits unrelated parallel merges without allowing stale candidate inputs to overwrite newer work. The later HEAD is only a safety gate: Backend, Runtime, and Root child releases all keep the sealed candidate `sourceRevision`; cleanup commands such as `backend-abort` remain protected by the same publish lease/baseline/session. Do not edit private candidate metadata to bypass `CANDIDATE_INPUTS_CHANGED`. The CLI waits for both the app lease and target deployment slot; each target permits only one running or evidence-pending deployment. Emergency fixes stay on the same candidate → preproduction → production path with a narrow L1 scope. `--wait-seconds 0` is fail-fast, not a binding-contract, CAS, or production-confirmation bypass.
|
|
147
147
|
|
|
148
148
|
For an audited catch-up whose exact non-delete targets are already merged but whose active resources combine multiple historical release lineages, the first ship invocation may add `--adopt-online-baseline --adoption-reason "..."`. Ship validates and freezes the pair before candidate/deployment creation; the later `--confirm-production` invocation automatically reuses the same intent from the private ship journal and forwards it only to exact scoped resource stages. Frozen online heads, change/lease ownership, delete/prune/force rejection, server CAS, staged-child verification, and the single atomic App finalize remain mandatory.
|
|
149
149
|
|
|
@@ -78,6 +78,7 @@ Rules:
|
|
|
78
78
|
- For custom OSS attachment or image upload, first declare a `src/resources/storage/<code>.json` resource, optionally enable `configJson.cors.managed` for browser direct-upload CORS, then set `uploadProvider: "oss"` and `storageCode: "<code>"` on `AttachmentField` or `ImageField`. Never put OSS AK/SK values in schema, page code, or committed resource files.
|
|
79
79
|
- For image thumbnails or lightweight previews, set `imageCompression: { enabled: true }` on `ImageField` or `AttachmentField`. The runtime keeps the original `url` and adds `thumbUrl`, `previewUrl`, and `variants` when compressed image variants are created.
|
|
80
80
|
- For `SubFormField`, use `columns` for child fields and keep child `fieldId` values stable within the subform.
|
|
81
|
+
- `JSONField` renders a validated structured-text editor in `NORMAL` / `DISABLED` mode and a formatted value in `READONLY` mode. Invalid JSON becomes a form validation error and cannot be silently saved as an older value. For one field, use its `renderer` / `editor` callbacks; for a whole standard form or a `DataManagementList` detail/submit drawer, pass `components={{ JSONField: CustomJsonField }}` so the registry is preserved through `StandardFormPage` and `FormProvider`.
|
|
81
82
|
- `TextAreaField` is accepted by workspace tools and normalized to runtime `TextareaField`; prefer `TextAreaField` in OpenXiangda docs for readability.
|
|
82
83
|
|
|
83
84
|
Common validation rule examples:
|
|
@@ -148,7 +148,7 @@ Once `environment init` registers a logical application, or `environment attach`
|
|
|
148
148
|
|
|
149
149
|
Treat DataView `status` as a platform lifecycle observation during candidate binding checks. The same deployment may change `resources.dataViews.<code>.status` between `draft` and `active`, including between preproduction and production confirmation, without invalidating the sealed candidate. Continue to validate the DataView ID, materialized-view name, storage mode, every other resource status, hashes, environment identity, CAS, lease, and source/mainline evidence exactly.
|
|
150
150
|
|
|
151
|
-
A sealed candidate may continue from a later clean, pushed authoritative mainline commit only when its commit remains a Git ancestor and all sealed release inputs retain their exact hashes. If any input changed, create a new candidate; never edit the private candidate file. The CLI waits for the app lease and target deployment slot before writes, and the platform permits one running or evidence-pending deployment per target. Emergency releases still use a narrow L1 scope and the same candidate → preproduction → production path; `--wait-seconds 0` only fails fast.
|
|
151
|
+
A sealed candidate may continue from a later clean, pushed authoritative mainline commit only when its commit remains a Git ancestor and all sealed release inputs retain their exact hashes. The later HEAD is only a safety gate: Backend, Runtime, and Root children keep the sealed candidate `sourceRevision`, and `backend-abort` uses the same publish lease/baseline/session as the staged release. If any input changed, create a new candidate; never edit the private candidate file. The CLI waits for the app lease and target deployment slot before writes, and the platform permits one running or evidence-pending deployment per target. Emergency releases still use a narrow L1 scope and the same candidate → preproduction → production path; `--wait-seconds 0` only fails fast.
|
|
152
152
|
|
|
153
153
|
When a reviewed catch-up contains exact non-delete targets that are already on authoritative mainline but the active application combines several historical release lineages, the first ship invocation may add `--adopt-online-baseline --adoption-reason "..."`. Ship validates and freezes the pair before candidate/deployment creation. The later `--confirm-production` invocation automatically reuses the same intent from `ship.json` and forwards it only to exact scoped resource stages. It does not relax frozen online heads, change/lease ownership, delete/prune/force rejection, server CAS, staged-child verification, or the single atomic App finalize.
|
|
154
154
|
|
|
@@ -37,6 +37,7 @@ openxiangda release app-finalize --staged-resources-json .openxiangda/releases/<
|
|
|
37
37
|
- ✅ Permission scope keys / sync keys / derived fields stay in schema with `behavior: "HIDDEN"`, derived from visible select/person/department fields via `valueSync`.
|
|
38
38
|
- ✅ Always provide `options` for option components (Select / MultiSelect / Radio / Checkbox / CascadeSelect).
|
|
39
39
|
- ✅ `schema.ts` is the source of data fields and platform field components; `page.tsx` is presentation only and should render through the OpenXiangda standard form/runtime.
|
|
40
|
+
- ✅ Use built-in `JSONField` for editable structured JSON. Customize one field with `renderer` / `editor`, or pass a `components` registry through `StandardFormPage` / `DataManagementList` when the whole surface needs a domain-specific JSON component.
|
|
40
41
|
- ✅ If a custom layout or widget is truly needed, wrap OpenXiangda platform components first. If no platform component exists, wrap `antd` / `antd-mobile` and preserve their props, refs, keyboard behavior, and overlay handling.
|
|
41
42
|
- ❌ `AssociationFormField` for new form work (use `linkedForm` SelectField).
|
|
42
43
|
- ❌ Top-level `schema.rules` as validation array. Top-level `rules` is `FormEffect[]` only (`when` / `then`).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openxiangda",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.257",
|
|
4
4
|
"description": "OpenXiangda CLI, workspace build tools, runtime SDK, and form components.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"bin": {
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"source:admin-list": "node scripts/sync-admin-list-source.mjs",
|
|
69
69
|
"check": "node --check bin/openxiangda.js && node --check lib/*.js && node --check packages/sdk/src/build-source/src/cli.mjs && node --check packages/sdk/src/build-source/scripts/*.mjs && node --check packages/sdk/src/build-source/scripts/utils/*.mjs",
|
|
70
70
|
"test": "npm run test:fast",
|
|
71
|
-
"test:fast": "npm run check && node scripts/delivery-v2-package-smoke.mjs && node scripts/delivery-v2-executor-smoke.mjs && node scripts/http-proxy-smoke.mjs && node scripts/form-export-cli-smoke.mjs && node scripts/open-api-cli-smoke.mjs && node scripts/release-plan-smoke.mjs && node scripts/typed-resource-plan-smoke.mjs && node scripts/integration-bundle-smoke.mjs && node scripts/content-cache-smoke.mjs && node scripts/dependency-capsule-smoke.mjs && node scripts/sdd-stages-smoke.mjs && node scripts/environment-swap-cli-smoke.mjs && node scripts/environment-policy-cli-smoke.mjs",
|
|
71
|
+
"test:fast": "npm run check && node scripts/delivery-v2-package-smoke.mjs && node scripts/delivery-v2-executor-smoke.mjs && node scripts/delivery-v2-release-conformance-smoke.mjs && node scripts/http-proxy-smoke.mjs && node scripts/form-export-cli-smoke.mjs && node scripts/open-api-cli-smoke.mjs && node scripts/release-plan-smoke.mjs && node scripts/typed-resource-plan-smoke.mjs && node scripts/integration-bundle-smoke.mjs && node scripts/content-cache-smoke.mjs && node scripts/dependency-capsule-smoke.mjs && node scripts/sdd-stages-smoke.mjs && node scripts/environment-swap-cli-smoke.mjs && node scripts/environment-policy-cli-smoke.mjs",
|
|
72
72
|
"test:changed": "npm run check && node scripts/run-test-suite.mjs --changed --evidence",
|
|
73
73
|
"test:contract": "npm run check && node scripts/run-test-suite.mjs --contract --evidence",
|
|
74
74
|
"test:release": "npm run check && node scripts/run-test-suite.mjs --release --evidence",
|
|
@@ -117,6 +117,7 @@
|
|
|
117
117
|
"release:evidence:verify": "node scripts/release-evidence-guard.mjs",
|
|
118
118
|
"test:delivery-v2-package": "node scripts/delivery-v2-package-smoke.mjs",
|
|
119
119
|
"test:delivery-v2-executor": "node scripts/delivery-v2-executor-smoke.mjs",
|
|
120
|
+
"test:delivery-v2-release-conformance": "node scripts/delivery-v2-release-conformance-smoke.mjs",
|
|
120
121
|
"test:task-status": "node scripts/task-status-smoke.mjs",
|
|
121
122
|
"test:policy": "node scripts/policy-smoke.mjs",
|
|
122
123
|
"test:release-plan": "node scripts/release-plan-smoke.mjs",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
1
|
+
import React__default, { ReactNode } from 'react';
|
|
2
2
|
|
|
3
3
|
type FormSectionVariant = 'plain' | 'card';
|
|
4
4
|
type FormSectionAccent = 'blue' | 'green';
|
|
@@ -952,8 +952,25 @@ interface DigitalSignatureFieldProps extends BaseFieldProps {
|
|
|
952
952
|
bucketName?: string;
|
|
953
953
|
allowClear?: boolean;
|
|
954
954
|
}
|
|
955
|
+
interface JSONFieldRendererContext {
|
|
956
|
+
fieldId: string;
|
|
957
|
+
label: string;
|
|
958
|
+
value: any;
|
|
959
|
+
formattedValue: string;
|
|
960
|
+
behavior: FieldBehavior;
|
|
961
|
+
}
|
|
962
|
+
interface JSONFieldEditorContext extends JSONFieldRendererContext {
|
|
963
|
+
disabled: boolean;
|
|
964
|
+
error?: string;
|
|
965
|
+
onChange: (value: any) => void;
|
|
966
|
+
onError: (error?: string) => void;
|
|
967
|
+
}
|
|
955
968
|
interface JSONFieldProps extends BaseFieldProps {
|
|
956
969
|
defaultValue?: any;
|
|
970
|
+
indent?: number;
|
|
971
|
+
rows?: number;
|
|
972
|
+
renderer?: (context: JSONFieldRendererContext) => ReactNode;
|
|
973
|
+
editor?: (context: JSONFieldEditorContext) => ReactNode;
|
|
957
974
|
}
|
|
958
975
|
/** 流程状态 */
|
|
959
976
|
type ProcessStatus = 'running' | 'waiting' | 'exception' | 'completed' | 'terminated' | 'withdrawn' | 'pending' | 'cancelled';
|
|
@@ -1272,4 +1289,4 @@ interface ProcessPreviewProps {
|
|
|
1272
1289
|
}
|
|
1273
1290
|
declare const ProcessPreview: React__default.FC<ProcessPreviewProps>;
|
|
1274
1291
|
|
|
1275
|
-
export { type DepartmentSelectFieldProps as $, type ApprovalPermission as A, type ReturnParams as B, type ChangeRecordQueryParams as C, type SaveTaskParams as D, type TransferParams as E, type FieldDefinition as F, type TextFieldProps as G, type TextAreaFieldProps as H, type InitiatorSelectCandidate as I, type SelectFieldProps as J, type RadioFieldProps as K, type CheckboxFieldProps as L, type MultiSelectFieldProps as M, type NumberFieldProps as N, type OptionItem as O, type ProcessStatus as P, type DateFieldProps as Q, type RuntimeResponse as R, type StatusMeta as S, type TaskStatus as T, type CascadeDateFieldProps as U, type ValidationPreset as V, type WithdrawParams as W, type AttachmentFieldProps as X, type ImageFieldProps as Y, type SubFormFieldProps as Z, type UserSelectFieldProps as _, type FormRuntimeApi as a, type ImageVariant as a$, type CascadeSelectFieldProps as a0, type AddressFieldProps as a1, type AssociationFormFieldProps as a2, type EditorFieldProps as a3, type EditorChoiceOption as a4, type SerialNumberFieldProps as a5, type LocationFieldProps as a6, type DigitalSignatureFieldProps as a7, type JSONFieldProps as a8, type AttachmentItem as a9, type DefaultValueLinkageConfig as aA, type DepartmentSearchParams as aB, type DepartmentSearchResult as aC, type DepartmentSearchScope as aD, type DepartmentTreeNode as aE, type DigitalSignatureValue as aF, type EditorToolbarAction as aG, type FieldLayoutNode as aH, type FieldValueSyncConfig as aI, type FilePreviewCapabilityBatch as aJ, type FilePreviewProvider as aK, type FilePreviewRenderMode as aL, type FilePreviewSurface as aM, type FilePreviewType as aN, type FormEffectAction as aO, type FormEffectCondition as aP, type FormEffectConditionOperator as aQ, type FormEngineMode as aR, type FormLayoutNode as aS, FormSection as aT, type FormSectionProps as aU, type FormSubmitBehavior as aV, type FormTemplateConfig as aW, type GridLayoutCell as aX, type GridLayoutNode as aY, type ImageCompressionConfig as aZ, type ImageCompressionVariantConfig as a_, type PreparedFilePreview as aa, type FilePreviewCapability as ab, type FilePreviewMetadata as ac, type FilePreviewRequest as ad, type ProcessAction as ae, type InitiatorSelectedApprovers as af, type ReturnPolicy as ag, type ChangeRecord as ah, type StandardFormPageMode as ai, type LowcodePageSchema as aj, type AddressValue as ak, type ApprovalActionType as al, ApprovalTimeline as am, type ApprovalTimelineProps as an, type AssociationFormConfig as ao, type AssociationValue as ap, type AttachmentImageVariants as aq, type BaseFieldProps as ar, type BaseLayoutNode as as, type DataFilter as at, type DataLinkageCondition as au, type DataLinkageConfig as av, type DateRangeRestriction as aw, type DateRestrictionConfig as ax, type DateShortcutConfig as ay, type DateShortcutType as az, type FormSchema as b, type InitiatorSelectScope as b0, type
|
|
1292
|
+
export { type DepartmentSelectFieldProps as $, type ApprovalPermission as A, type ReturnParams as B, type ChangeRecordQueryParams as C, type SaveTaskParams as D, type TransferParams as E, type FieldDefinition as F, type TextFieldProps as G, type TextAreaFieldProps as H, type InitiatorSelectCandidate as I, type SelectFieldProps as J, type RadioFieldProps as K, type CheckboxFieldProps as L, type MultiSelectFieldProps as M, type NumberFieldProps as N, type OptionItem as O, type ProcessStatus as P, type DateFieldProps as Q, type RuntimeResponse as R, type StatusMeta as S, type TaskStatus as T, type CascadeDateFieldProps as U, type ValidationPreset as V, type WithdrawParams as W, type AttachmentFieldProps as X, type ImageFieldProps as Y, type SubFormFieldProps as Z, type UserSelectFieldProps as _, type FormRuntimeApi as a, type ImageVariant as a$, type CascadeSelectFieldProps as a0, type AddressFieldProps as a1, type AssociationFormFieldProps as a2, type EditorFieldProps as a3, type EditorChoiceOption as a4, type SerialNumberFieldProps as a5, type LocationFieldProps as a6, type DigitalSignatureFieldProps as a7, type JSONFieldProps as a8, type AttachmentItem as a9, type DefaultValueLinkageConfig as aA, type DepartmentSearchParams as aB, type DepartmentSearchResult as aC, type DepartmentSearchScope as aD, type DepartmentTreeNode as aE, type DigitalSignatureValue as aF, type EditorToolbarAction as aG, type FieldLayoutNode as aH, type FieldValueSyncConfig as aI, type FilePreviewCapabilityBatch as aJ, type FilePreviewProvider as aK, type FilePreviewRenderMode as aL, type FilePreviewSurface as aM, type FilePreviewType as aN, type FormEffectAction as aO, type FormEffectCondition as aP, type FormEffectConditionOperator as aQ, type FormEngineMode as aR, type FormLayoutNode as aS, FormSection as aT, type FormSectionProps as aU, type FormSubmitBehavior as aV, type FormTemplateConfig as aW, type GridLayoutCell as aX, type GridLayoutNode as aY, type ImageCompressionConfig as aZ, type ImageCompressionVariantConfig as a_, type PreparedFilePreview as aa, type FilePreviewCapability as ab, type FilePreviewMetadata as ac, type FilePreviewRequest as ad, type ProcessAction as ae, type InitiatorSelectedApprovers as af, type ReturnPolicy as ag, type ChangeRecord as ah, type StandardFormPageMode as ai, type LowcodePageSchema as aj, type AddressValue as ak, type ApprovalActionType as al, ApprovalTimeline as am, type ApprovalTimelineProps as an, type AssociationFormConfig as ao, type AssociationValue as ap, type AttachmentImageVariants as aq, type BaseFieldProps as ar, type BaseLayoutNode as as, type DataFilter as at, type DataLinkageCondition as au, type DataLinkageConfig as av, type DateRangeRestriction as aw, type DateRestrictionConfig as ax, type DateShortcutConfig as ay, type DateShortcutType as az, type FormSchema as b, type InitiatorSelectScope as b0, type JSONFieldEditorContext as b1, type JSONFieldRendererContext as b2, type LayoutVisibleWhen as b3, type LinkedFormOptionConfig as b4, type LocationValue as b5, type LowcodePageMeta as b6, type LowcodePageNode as b7, type LowcodePageNodeType as b8, type OptionSourceType as b9, type PeopleShortcutConfig as ba, type PeopleShortcutType as bb, type PreviewImageItem as bc, type ProcessNodeType as bd, ProcessPreview as be, type ProcessPreviewProps as bf, type RuntimeAuthHeadersProvider as bg, type RuntimeDataQueryParams as bh, type RuntimeDataQueryResult as bi, type RuntimeRequestConfig as bj, type RuntimeUploadOptions as bk, type RuntimeUploadProvider as bl, type SectionLayoutNode as bm, type SignaturePoint as bn, type StepLayoutItem as bo, type StepsLayoutNode as bp, type SubFormColumn as bq, type TabLayoutItem as br, type TabsLayoutNode as bs, type TextShortcutConfig as bt, type TextShortcutType as bu, type UserDisplayFormat as bv, type UserItem as bw, type FormRuntimeApiConfig as c, type FormEngineConfig as d, type FieldBehavior as e, type FormRuntimeConfig as f, type FormAppearanceConfig as g, type ValidationRule as h, type FormEffect as i, type OptionSourceConfig as j, type FormDataDeleteParams as k, type ChangeRecordListResponse as l, type FormDataQueryParams as m, type FormInstanceData as n, type InitiatorSelectRequirement as o, type ProcessBasicInfo as p, type ProcessDefinition as q, type ProcessTask as r, type ReturnableNodeResult as s, type ReturnableNode as t, type ViewPermissionQueryParams as u, type ViewPermissionSummary as v, type ApproveParams as w, type PreviewParams as x, type ProcessRoute as y, type ResubmitParams as z };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
1
|
+
import React__default, { ReactNode } from 'react';
|
|
2
2
|
|
|
3
3
|
type FormSectionVariant = 'plain' | 'card';
|
|
4
4
|
type FormSectionAccent = 'blue' | 'green';
|
|
@@ -952,8 +952,25 @@ interface DigitalSignatureFieldProps extends BaseFieldProps {
|
|
|
952
952
|
bucketName?: string;
|
|
953
953
|
allowClear?: boolean;
|
|
954
954
|
}
|
|
955
|
+
interface JSONFieldRendererContext {
|
|
956
|
+
fieldId: string;
|
|
957
|
+
label: string;
|
|
958
|
+
value: any;
|
|
959
|
+
formattedValue: string;
|
|
960
|
+
behavior: FieldBehavior;
|
|
961
|
+
}
|
|
962
|
+
interface JSONFieldEditorContext extends JSONFieldRendererContext {
|
|
963
|
+
disabled: boolean;
|
|
964
|
+
error?: string;
|
|
965
|
+
onChange: (value: any) => void;
|
|
966
|
+
onError: (error?: string) => void;
|
|
967
|
+
}
|
|
955
968
|
interface JSONFieldProps extends BaseFieldProps {
|
|
956
969
|
defaultValue?: any;
|
|
970
|
+
indent?: number;
|
|
971
|
+
rows?: number;
|
|
972
|
+
renderer?: (context: JSONFieldRendererContext) => ReactNode;
|
|
973
|
+
editor?: (context: JSONFieldEditorContext) => ReactNode;
|
|
957
974
|
}
|
|
958
975
|
/** 流程状态 */
|
|
959
976
|
type ProcessStatus = 'running' | 'waiting' | 'exception' | 'completed' | 'terminated' | 'withdrawn' | 'pending' | 'cancelled';
|
|
@@ -1272,4 +1289,4 @@ interface ProcessPreviewProps {
|
|
|
1272
1289
|
}
|
|
1273
1290
|
declare const ProcessPreview: React__default.FC<ProcessPreviewProps>;
|
|
1274
1291
|
|
|
1275
|
-
export { type DepartmentSelectFieldProps as $, type ApprovalPermission as A, type ReturnParams as B, type ChangeRecordQueryParams as C, type SaveTaskParams as D, type TransferParams as E, type FieldDefinition as F, type TextFieldProps as G, type TextAreaFieldProps as H, type InitiatorSelectCandidate as I, type SelectFieldProps as J, type RadioFieldProps as K, type CheckboxFieldProps as L, type MultiSelectFieldProps as M, type NumberFieldProps as N, type OptionItem as O, type ProcessStatus as P, type DateFieldProps as Q, type RuntimeResponse as R, type StatusMeta as S, type TaskStatus as T, type CascadeDateFieldProps as U, type ValidationPreset as V, type WithdrawParams as W, type AttachmentFieldProps as X, type ImageFieldProps as Y, type SubFormFieldProps as Z, type UserSelectFieldProps as _, type FormRuntimeApi as a, type ImageVariant as a$, type CascadeSelectFieldProps as a0, type AddressFieldProps as a1, type AssociationFormFieldProps as a2, type EditorFieldProps as a3, type EditorChoiceOption as a4, type SerialNumberFieldProps as a5, type LocationFieldProps as a6, type DigitalSignatureFieldProps as a7, type JSONFieldProps as a8, type AttachmentItem as a9, type DefaultValueLinkageConfig as aA, type DepartmentSearchParams as aB, type DepartmentSearchResult as aC, type DepartmentSearchScope as aD, type DepartmentTreeNode as aE, type DigitalSignatureValue as aF, type EditorToolbarAction as aG, type FieldLayoutNode as aH, type FieldValueSyncConfig as aI, type FilePreviewCapabilityBatch as aJ, type FilePreviewProvider as aK, type FilePreviewRenderMode as aL, type FilePreviewSurface as aM, type FilePreviewType as aN, type FormEffectAction as aO, type FormEffectCondition as aP, type FormEffectConditionOperator as aQ, type FormEngineMode as aR, type FormLayoutNode as aS, FormSection as aT, type FormSectionProps as aU, type FormSubmitBehavior as aV, type FormTemplateConfig as aW, type GridLayoutCell as aX, type GridLayoutNode as aY, type ImageCompressionConfig as aZ, type ImageCompressionVariantConfig as a_, type PreparedFilePreview as aa, type FilePreviewCapability as ab, type FilePreviewMetadata as ac, type FilePreviewRequest as ad, type ProcessAction as ae, type InitiatorSelectedApprovers as af, type ReturnPolicy as ag, type ChangeRecord as ah, type StandardFormPageMode as ai, type LowcodePageSchema as aj, type AddressValue as ak, type ApprovalActionType as al, ApprovalTimeline as am, type ApprovalTimelineProps as an, type AssociationFormConfig as ao, type AssociationValue as ap, type AttachmentImageVariants as aq, type BaseFieldProps as ar, type BaseLayoutNode as as, type DataFilter as at, type DataLinkageCondition as au, type DataLinkageConfig as av, type DateRangeRestriction as aw, type DateRestrictionConfig as ax, type DateShortcutConfig as ay, type DateShortcutType as az, type FormSchema as b, type InitiatorSelectScope as b0, type
|
|
1292
|
+
export { type DepartmentSelectFieldProps as $, type ApprovalPermission as A, type ReturnParams as B, type ChangeRecordQueryParams as C, type SaveTaskParams as D, type TransferParams as E, type FieldDefinition as F, type TextFieldProps as G, type TextAreaFieldProps as H, type InitiatorSelectCandidate as I, type SelectFieldProps as J, type RadioFieldProps as K, type CheckboxFieldProps as L, type MultiSelectFieldProps as M, type NumberFieldProps as N, type OptionItem as O, type ProcessStatus as P, type DateFieldProps as Q, type RuntimeResponse as R, type StatusMeta as S, type TaskStatus as T, type CascadeDateFieldProps as U, type ValidationPreset as V, type WithdrawParams as W, type AttachmentFieldProps as X, type ImageFieldProps as Y, type SubFormFieldProps as Z, type UserSelectFieldProps as _, type FormRuntimeApi as a, type ImageVariant as a$, type CascadeSelectFieldProps as a0, type AddressFieldProps as a1, type AssociationFormFieldProps as a2, type EditorFieldProps as a3, type EditorChoiceOption as a4, type SerialNumberFieldProps as a5, type LocationFieldProps as a6, type DigitalSignatureFieldProps as a7, type JSONFieldProps as a8, type AttachmentItem as a9, type DefaultValueLinkageConfig as aA, type DepartmentSearchParams as aB, type DepartmentSearchResult as aC, type DepartmentSearchScope as aD, type DepartmentTreeNode as aE, type DigitalSignatureValue as aF, type EditorToolbarAction as aG, type FieldLayoutNode as aH, type FieldValueSyncConfig as aI, type FilePreviewCapabilityBatch as aJ, type FilePreviewProvider as aK, type FilePreviewRenderMode as aL, type FilePreviewSurface as aM, type FilePreviewType as aN, type FormEffectAction as aO, type FormEffectCondition as aP, type FormEffectConditionOperator as aQ, type FormEngineMode as aR, type FormLayoutNode as aS, FormSection as aT, type FormSectionProps as aU, type FormSubmitBehavior as aV, type FormTemplateConfig as aW, type GridLayoutCell as aX, type GridLayoutNode as aY, type ImageCompressionConfig as aZ, type ImageCompressionVariantConfig as a_, type PreparedFilePreview as aa, type FilePreviewCapability as ab, type FilePreviewMetadata as ac, type FilePreviewRequest as ad, type ProcessAction as ae, type InitiatorSelectedApprovers as af, type ReturnPolicy as ag, type ChangeRecord as ah, type StandardFormPageMode as ai, type LowcodePageSchema as aj, type AddressValue as ak, type ApprovalActionType as al, ApprovalTimeline as am, type ApprovalTimelineProps as an, type AssociationFormConfig as ao, type AssociationValue as ap, type AttachmentImageVariants as aq, type BaseFieldProps as ar, type BaseLayoutNode as as, type DataFilter as at, type DataLinkageCondition as au, type DataLinkageConfig as av, type DateRangeRestriction as aw, type DateRestrictionConfig as ax, type DateShortcutConfig as ay, type DateShortcutType as az, type FormSchema as b, type InitiatorSelectScope as b0, type JSONFieldEditorContext as b1, type JSONFieldRendererContext as b2, type LayoutVisibleWhen as b3, type LinkedFormOptionConfig as b4, type LocationValue as b5, type LowcodePageMeta as b6, type LowcodePageNode as b7, type LowcodePageNodeType as b8, type OptionSourceType as b9, type PeopleShortcutConfig as ba, type PeopleShortcutType as bb, type PreviewImageItem as bc, type ProcessNodeType as bd, ProcessPreview as be, type ProcessPreviewProps as bf, type RuntimeAuthHeadersProvider as bg, type RuntimeDataQueryParams as bh, type RuntimeDataQueryResult as bi, type RuntimeRequestConfig as bj, type RuntimeUploadOptions as bk, type RuntimeUploadProvider as bl, type SectionLayoutNode as bm, type SignaturePoint as bn, type StepLayoutItem as bo, type StepsLayoutNode as bp, type SubFormColumn as bq, type TabLayoutItem as br, type TabsLayoutNode as bs, type TextShortcutConfig as bt, type TextShortcutType as bu, type UserDisplayFormat as bv, type UserItem as bw, type FormRuntimeApiConfig as c, type FormEngineConfig as d, type FieldBehavior as e, type FormRuntimeConfig as f, type FormAppearanceConfig as g, type ValidationRule as h, type FormEffect as i, type OptionSourceConfig as j, type FormDataDeleteParams as k, type ChangeRecordListResponse as l, type FormDataQueryParams as m, type FormInstanceData as n, type InitiatorSelectRequirement as o, type ProcessBasicInfo as p, type ProcessDefinition as q, type ProcessTask as r, type ReturnableNodeResult as s, type ReturnableNode as t, type ViewPermissionQueryParams as u, type ViewPermissionSummary as v, type ApproveParams as w, type PreviewParams as x, type ProcessRoute as y, type ResubmitParams as z };
|