primitive-admin 1.0.60 → 1.0.62
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 +125 -69
- package/assets/skill/skills/primitive-platform/SKILL.md +336 -37
- package/dist/bin/primitive.js +29 -14
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.js +22 -8
- package/dist/src/commands/admins.js.map +1 -1
- package/dist/src/commands/analytics.js +96 -16
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.js +49 -188
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +50 -155
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/collection-type-configs.js +14 -100
- package/dist/src/commands/collection-type-configs.js.map +1 -1
- package/dist/src/commands/collections.js +47 -8
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/config.d.ts +46 -0
- package/dist/src/commands/config.js +479 -0
- package/dist/src/commands/config.js.map +1 -0
- package/dist/src/commands/connections.d.ts +2 -0
- package/dist/src/commands/connections.js +100 -0
- package/dist/src/commands/connections.js.map +1 -0
- package/dist/src/commands/cron-triggers.js +84 -176
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/database-type-configs.d.ts +2 -0
- package/dist/src/commands/database-type-configs.js +171 -0
- package/dist/src/commands/database-type-configs.js.map +1 -0
- package/dist/src/commands/database-types.js +4 -4
- package/dist/src/commands/database-types.js.map +1 -1
- package/dist/src/commands/databases.d.ts +63 -0
- package/dist/src/commands/databases.js +649 -87
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.js +869 -12
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.js +18 -125
- package/dist/src/commands/email-templates.js.map +1 -1
- package/dist/src/commands/env.d.ts +12 -1
- package/dist/src/commands/env.js +98 -25
- package/dist/src/commands/env.js.map +1 -1
- package/dist/src/commands/feature-flags.d.ts +14 -0
- package/dist/src/commands/feature-flags.js +116 -0
- package/dist/src/commands/feature-flags.js.map +1 -0
- package/dist/src/commands/group-type-configs.js +14 -109
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/init.d.ts +9 -1
- package/dist/src/commands/init.js +1058 -279
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +136 -421
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/metadata-category-configs.d.ts +12 -0
- package/dist/src/commands/metadata-category-configs.js +112 -0
- package/dist/src/commands/metadata-category-configs.js.map +1 -0
- package/dist/src/commands/metadata.js +33 -141
- package/dist/src/commands/metadata.js.map +1 -1
- package/dist/src/commands/prompts.js +206 -563
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +1 -1
- package/dist/src/commands/rule-sets.js +16 -132
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.js +67 -234
- package/dist/src/commands/scripts.js.map +1 -1
- package/dist/src/commands/sessions.d.ts +2 -0
- package/dist/src/commands/sessions.js +75 -0
- package/dist/src/commands/sessions.js.map +1 -0
- package/dist/src/commands/skill.js +2 -2
- package/dist/src/commands/skill.js.map +1 -1
- package/dist/src/commands/sync-app-settings.d.ts +113 -70
- package/dist/src/commands/sync-app-settings.js +193 -242
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.d.ts +1932 -49
- package/dist/src/commands/sync.js +9584 -1725
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.js +8 -2
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.js +92 -1
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/vars.js +44 -58
- package/dist/src/commands/vars.js.map +1 -1
- package/dist/src/commands/webhooks.js +318 -156
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +49 -12
- package/dist/src/commands/workflows.js +652 -1043
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/access-rule-display.d.ts +21 -0
- package/dist/src/lib/access-rule-display.js +34 -0
- package/dist/src/lib/access-rule-display.js.map +1 -0
- package/dist/src/lib/api-client.d.ts +630 -61
- package/dist/src/lib/api-client.js +676 -116
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +180 -25
- package/dist/src/lib/app-settings-descriptor.js +403 -82
- package/dist/src/lib/app-settings-descriptor.js.map +1 -1
- package/dist/src/lib/canonical-json.d.ts +12 -0
- package/dist/src/lib/canonical-json.js +35 -0
- package/dist/src/lib/canonical-json.js.map +1 -0
- package/dist/src/lib/cli-manifest.d.ts +8 -0
- package/dist/src/lib/cli-manifest.js +1 -0
- package/dist/src/lib/cli-manifest.js.map +1 -1
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +6 -2
- package/dist/src/lib/codegen-shared/generatedFiles.js +9 -2
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +6 -6
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +8 -8
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
- package/dist/src/lib/config-object-descriptor.d.ts +127 -0
- package/dist/src/lib/config-object-descriptor.js +658 -0
- package/dist/src/lib/config-object-descriptor.js.map +1 -0
- package/dist/src/lib/config-payload.d.ts +85 -0
- package/dist/src/lib/config-payload.js +116 -0
- package/dist/src/lib/config-payload.js.map +1 -0
- package/dist/src/lib/config-surface.d.ts +130 -0
- package/dist/src/lib/config-surface.js +300 -0
- package/dist/src/lib/config-surface.js.map +1 -0
- package/dist/src/lib/credentials-store.d.ts +10 -0
- package/dist/src/lib/credentials-store.js +23 -0
- package/dist/src/lib/credentials-store.js.map +1 -1
- package/dist/src/lib/data-input.d.ts +23 -0
- package/dist/src/lib/data-input.js +50 -0
- package/dist/src/lib/data-input.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTemplates.js +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +1 -1
- package/dist/src/lib/env-resolver-core.d.ts +147 -0
- package/dist/src/lib/env-resolver-core.js +265 -0
- package/dist/src/lib/env-resolver-core.js.map +1 -0
- package/dist/src/lib/env-resolver.d.ts +28 -6
- package/dist/src/lib/env-resolver.js +44 -32
- package/dist/src/lib/env-resolver.js.map +1 -1
- package/dist/src/lib/generated-allowlist.js +13 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +682 -0
- package/dist/src/lib/generated-config-surfaces.js +4058 -0
- package/dist/src/lib/generated-config-surfaces.js.map +1 -0
- package/dist/src/lib/generated-template-lint.d.ts +212 -0
- package/dist/src/lib/generated-template-lint.js +624 -0
- package/dist/src/lib/generated-template-lint.js.map +1 -0
- package/dist/src/lib/init-adopt.d.ts +16 -0
- package/dist/src/lib/init-adopt.js +34 -0
- package/dist/src/lib/init-adopt.js.map +1 -0
- package/dist/src/lib/init-assets.d.ts +39 -0
- package/dist/src/lib/init-assets.js +97 -0
- package/dist/src/lib/init-assets.js.map +1 -0
- package/dist/src/lib/init-config.d.ts +44 -5
- package/dist/src/lib/init-config.js +80 -7
- package/dist/src/lib/init-config.js.map +1 -1
- package/dist/src/lib/init-ios-links.d.ts +50 -0
- package/dist/src/lib/init-ios-links.js +153 -0
- package/dist/src/lib/init-ios-links.js.map +1 -0
- package/dist/src/lib/init-plan.d.ts +80 -0
- package/dist/src/lib/init-plan.js +95 -0
- package/dist/src/lib/init-plan.js.map +1 -0
- package/dist/src/lib/init-production-env.d.ts +48 -0
- package/dist/src/lib/init-production-env.js +59 -0
- package/dist/src/lib/init-production-env.js.map +1 -0
- package/dist/src/lib/init-schema.d.ts +74 -0
- package/dist/src/lib/init-schema.js +358 -0
- package/dist/src/lib/init-schema.js.map +1 -0
- package/dist/src/lib/init-xcode.d.ts +33 -0
- package/dist/src/lib/init-xcode.js +114 -0
- package/dist/src/lib/init-xcode.js.map +1 -0
- package/dist/src/lib/integration-request-config.d.ts +30 -0
- package/dist/src/lib/integration-request-config.js +145 -0
- package/dist/src/lib/integration-request-config.js.map +1 -0
- package/dist/src/lib/local-state.d.ts +55 -0
- package/dist/src/lib/local-state.js +167 -0
- package/dist/src/lib/local-state.js.map +1 -0
- package/dist/src/lib/log-inspection.d.ts +568 -0
- package/dist/src/lib/log-inspection.js +639 -0
- package/dist/src/lib/log-inspection.js.map +1 -0
- package/dist/src/lib/migration-nag.d.ts +2 -2
- package/dist/src/lib/migration-nag.js +3 -3
- package/dist/src/lib/object-status-filter.d.ts +22 -0
- package/dist/src/lib/object-status-filter.js +45 -0
- package/dist/src/lib/object-status-filter.js.map +1 -0
- package/dist/src/lib/output.d.ts +24 -1
- package/dist/src/lib/output.js +42 -1
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/package-manager.d.ts +140 -0
- package/dist/src/lib/package-manager.js +305 -0
- package/dist/src/lib/package-manager.js.map +1 -0
- package/dist/src/lib/paginate.d.ts +50 -0
- package/dist/src/lib/paginate.js +53 -0
- package/dist/src/lib/paginate.js.map +1 -1
- package/dist/src/lib/platform-owned.d.ts +29 -3
- package/dist/src/lib/platform-owned.js +42 -3
- package/dist/src/lib/platform-owned.js.map +1 -1
- package/dist/src/lib/project-config.js +13 -5
- package/dist/src/lib/project-config.js.map +1 -1
- package/dist/src/lib/query-operators.d.ts +1 -1
- package/dist/src/lib/query-operators.js +1 -1
- package/dist/src/lib/record-filter.d.ts +18 -0
- package/dist/src/lib/record-filter.js +55 -0
- package/dist/src/lib/record-filter.js.map +1 -0
- package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
- package/dist/src/lib/resolve-init-dev-port.js +55 -0
- package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
- package/dist/src/lib/resolve-init-server.d.ts +64 -0
- package/dist/src/lib/resolve-init-server.js +77 -0
- package/dist/src/lib/resolve-init-server.js.map +1 -0
- package/dist/src/lib/resolve-platform.d.ts +43 -14
- package/dist/src/lib/resolve-platform.js +74 -12
- package/dist/src/lib/resolve-platform.js.map +1 -1
- package/dist/src/lib/run-status.d.ts +19 -0
- package/dist/src/lib/run-status.generated.d.ts +39 -0
- package/dist/src/lib/run-status.generated.js +66 -0
- package/dist/src/lib/run-status.generated.js.map +1 -0
- package/dist/src/lib/run-status.js +19 -0
- package/dist/src/lib/run-status.js.map +1 -0
- package/dist/src/lib/server-text-normalization.d.ts +51 -0
- package/dist/src/lib/server-text-normalization.js +90 -0
- package/dist/src/lib/server-text-normalization.js.map +1 -0
- package/dist/src/lib/server-url.d.ts +22 -0
- package/dist/src/lib/server-url.js +33 -0
- package/dist/src/lib/server-url.js.map +1 -0
- package/dist/src/lib/signing-secret-status.d.ts +81 -0
- package/dist/src/lib/signing-secret-status.js +116 -0
- package/dist/src/lib/signing-secret-status.js.map +1 -0
- package/dist/src/lib/skill-installer.d.ts +4 -2
- package/dist/src/lib/skill-installer.js +143 -12
- package/dist/src/lib/skill-installer.js.map +1 -1
- package/dist/src/lib/snapshots.d.ts +2 -2
- package/dist/src/lib/snapshots.js +2 -2
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +15 -2
- package/dist/src/lib/swift-codegen/dbGenerator.js +250 -18
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/swift-codegen/generator.d.ts +11 -2
- package/dist/src/lib/swift-codegen/generator.js +181 -7
- package/dist/src/lib/swift-codegen/generator.js.map +1 -1
- package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +7 -3
- package/dist/src/lib/swift-codegen/siblingSymbols.js +4 -1
- package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -1
- package/dist/src/lib/sync-dir-selector.d.ts +21 -0
- package/dist/src/lib/sync-dir-selector.js +30 -0
- package/dist/src/lib/sync-dir-selector.js.map +1 -0
- package/dist/src/lib/sync-paths.d.ts +39 -0
- package/dist/src/lib/sync-paths.js +70 -2
- package/dist/src/lib/sync-paths.js.map +1 -1
- package/dist/src/lib/sync-resource-types.d.ts +138 -31
- package/dist/src/lib/sync-resource-types.js +241 -47
- package/dist/src/lib/sync-resource-types.js.map +1 -1
- package/dist/src/lib/sync-selectors.d.ts +95 -0
- package/dist/src/lib/sync-selectors.js +228 -0
- package/dist/src/lib/sync-selectors.js.map +1 -0
- package/dist/src/lib/template.d.ts +62 -4
- package/dist/src/lib/template.js +147 -39
- package/dist/src/lib/template.js.map +1 -1
- package/dist/src/lib/test-case-keys.d.ts +29 -0
- package/dist/src/lib/test-case-keys.js +55 -0
- package/dist/src/lib/test-case-keys.js.map +1 -0
- package/dist/src/lib/test-case-variables.d.ts +15 -0
- package/dist/src/lib/test-case-variables.js +29 -0
- package/dist/src/lib/test-case-variables.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +4 -4
- package/dist/src/lib/toml-database-config.js +27 -34
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/toml-metadata-config.d.ts +9 -5
- package/dist/src/lib/toml-metadata-config.js +40 -45
- package/dist/src/lib/toml-metadata-config.js.map +1 -1
- package/dist/src/lib/toml-native-form.d.ts +1 -1
- package/dist/src/lib/toml-native-form.js +1 -1
- package/dist/src/lib/toml-params-validator.d.ts +1 -1
- package/dist/src/lib/toml-params-validator.js +1 -1
- package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
- package/dist/src/lib/toml-scalar-edit.js +283 -0
- package/dist/src/lib/toml-scalar-edit.js.map +1 -0
- package/dist/src/lib/user-selector.d.ts +24 -0
- package/dist/src/lib/user-selector.js +33 -0
- package/dist/src/lib/user-selector.js.map +1 -0
- package/dist/src/lib/version-check.d.ts +25 -0
- package/dist/src/lib/version-check.js +77 -8
- package/dist/src/lib/version-check.js.map +1 -1
- package/dist/src/lib/watch.d.ts +121 -0
- package/dist/src/lib/watch.js +169 -0
- package/dist/src/lib/watch.js.map +1 -0
- package/dist/src/lib/workflow-apply.d.ts +69 -45
- package/dist/src/lib/workflow-apply.js +99 -72
- package/dist/src/lib/workflow-apply.js.map +1 -1
- package/dist/src/lib/workflow-codegen/generator.js +4 -4
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +11 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js +5 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -1
- package/dist/src/lib/workflow-config-apply.d.ts +70 -0
- package/dist/src/lib/workflow-config-apply.js +137 -0
- package/dist/src/lib/workflow-config-apply.js.map +1 -0
- package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
- package/dist/src/lib/workflow-config-sidecar.js +96 -0
- package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
- package/dist/src/lib/workflow-defaults.d.ts +29 -0
- package/dist/src/lib/workflow-defaults.js +41 -0
- package/dist/src/lib/workflow-defaults.js.map +1 -0
- package/dist/src/lib/workflow-fragments.d.ts +23 -0
- package/dist/src/lib/workflow-fragments.js +229 -8
- package/dist/src/lib/workflow-fragments.js.map +1 -1
- package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
- package/dist/src/lib/workflow-include-preserve.js +286 -0
- package/dist/src/lib/workflow-include-preserve.js.map +1 -0
- package/dist/src/lib/workflow-payload.d.ts +31 -20
- package/dist/src/lib/workflow-payload.js +100 -93
- package/dist/src/lib/workflow-payload.js.map +1 -1
- package/dist/src/lib/workflow-toml-validator.d.ts +80 -3
- package/dist/src/lib/workflow-toml-validator.js +231 -3
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/types/index.d.ts +78 -22
- package/dist/src/validators.d.ts +7 -7
- package/dist/src/validators.js +6 -6
- package/package.json +11 -6
- package/dist/src/commands/settings.d.ts +0 -15
- package/dist/src/commands/settings.js +0 -102
- package/dist/src/commands/settings.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-include-preserve.js","sourceRoot":"","sources":["../../../src/lib/workflow-include-preserve.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Background: the CLI built the create/update workflow payload in THREE
|
|
5
5
|
* separate hand-enumerated literals — `workflows create --from-file`
|
|
6
|
-
* (`cli/src/commands/workflows.ts`), the `
|
|
7
|
-
* (`cli/src/commands/sync.ts`), and the `
|
|
6
|
+
* (`cli/src/commands/workflows.ts`), the `config push` create branch
|
|
7
|
+
* (`cli/src/commands/sync.ts`), and the `config push` update branch (the metadata
|
|
8
8
|
* PATCH in `cli/src/lib/workflow-apply.ts`). Because each site listed the
|
|
9
9
|
* `[workflow]` fields by hand, they drifted apart: a field added to one path was
|
|
10
10
|
* silently dropped by the others. `status` was the 4th field lost this way
|
|
@@ -27,18 +27,30 @@
|
|
|
27
27
|
* Presence semantics, by mode:
|
|
28
28
|
* - create: optional strings coalesce absent/empty → `undefined` (omit; the
|
|
29
29
|
* server default applies). `capabilities` forwards the raw array (absent →
|
|
30
|
-
* omit). Schemas omit when absent.
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
30
|
+
* omit). Schemas omit when absent. Booleans are raw pass-through so an
|
|
31
|
+
* explicit `false` is preserved and only a truly-absent key drops.
|
|
32
|
+
* - update: ALWAYS-SEND (#2743). The workflow TOML fully describes the
|
|
33
|
+
* workflow, so every update-mode field carries a definite value and
|
|
34
|
+
* `undefined` never appears: a defaulted scalar (`status`, the queue
|
|
35
|
+
* limits, `dequeueOrder`, `requiresClientApply`) sends its concrete model
|
|
36
|
+
* default when the file omits it, and a nullable field (`description`,
|
|
37
|
+
* `accessRule`, `runAs`, `capabilities`, the schemas, `lock`) sends `null`.
|
|
38
|
+
* Deleting a line from the file therefore CONVERGES the server rather than
|
|
39
|
+
* silently leaving the old value live (#1567's bug class). Optional strings
|
|
40
|
+
* keep their `"" → null` coalescing, so an explicit clear and an omission
|
|
41
|
+
* land on the same wire value.
|
|
42
|
+
*
|
|
43
|
+
* Defaulted scalars deliberately travel as their default, not as `null`: a
|
|
44
|
+
* server predating #2743 coerces a queue-limit `null` to `0`, while an
|
|
45
|
+
* explicit default converges identically on both. The shared map lives in
|
|
46
|
+
* `workflow-defaults.ts` (the diff normalizer reads the same copy).
|
|
47
|
+
*
|
|
48
|
+
* Omit-preserve survives only as the SERVER's contract for other clients
|
|
49
|
+
* (web-admin): the PATCH still leaves an absent key alone.
|
|
50
|
+
* - `syncCallable` is OMITTED from the builder in `mode: "update"`: its
|
|
51
|
+
* ordering relative to the steps write is `applyWorkflowBody`'s to decide
|
|
52
|
+
* (#807 — enabling must validate against the NEW steps, so it is deferred
|
|
53
|
+
* to a second PATCH; disabling rides the first PATCH). See that module.
|
|
42
54
|
*/
|
|
43
55
|
export type WorkflowPayloadMode = "create" | "update";
|
|
44
56
|
/**
|
|
@@ -68,13 +80,12 @@ export type WorkflowExpressionsPayload = {
|
|
|
68
80
|
*/
|
|
69
81
|
export declare function parseWorkflowExpressionsToml(tomlData: any): WorkflowExpressionsPayload | undefined;
|
|
70
82
|
/**
|
|
71
|
-
* The `[workflow]`-derived keys the builder emits, per mode
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
83
|
+
* The `[workflow]`-derived keys the builder emits, per mode — read from the
|
|
84
|
+
* vendored definition (#2644), not restated here. A field added to
|
|
85
|
+
* `src/config-surface/workflow.ts` is pushed with no edit to this file, which
|
|
86
|
+
* is what closes the recurring "CLI silently drops a new server field" bug.
|
|
75
87
|
*/
|
|
76
|
-
export declare
|
|
77
|
-
export declare const WORKFLOW_PAYLOAD_FIELDS_UPDATE: ReadonlyArray<string>;
|
|
88
|
+
export declare function workflowPayloadFields(mode: WorkflowPayloadMode): string[];
|
|
78
89
|
/**
|
|
79
90
|
* Build the workflow payload's `[workflow]`-derived fields from a parsed TOML
|
|
80
91
|
* `[workflow]` table. `workflow` is `tomlData.workflow` (already merged with any
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Background: the CLI built the create/update workflow payload in THREE
|
|
5
5
|
* separate hand-enumerated literals — `workflows create --from-file`
|
|
6
|
-
* (`cli/src/commands/workflows.ts`), the `
|
|
7
|
-
* (`cli/src/commands/sync.ts`), and the `
|
|
6
|
+
* (`cli/src/commands/workflows.ts`), the `config push` create branch
|
|
7
|
+
* (`cli/src/commands/sync.ts`), and the `config push` update branch (the metadata
|
|
8
8
|
* PATCH in `cli/src/lib/workflow-apply.ts`). Because each site listed the
|
|
9
9
|
* `[workflow]` fields by hand, they drifted apart: a field added to one path was
|
|
10
10
|
* silently dropped by the others. `status` was the 4th field lost this way
|
|
@@ -27,19 +27,34 @@
|
|
|
27
27
|
* Presence semantics, by mode:
|
|
28
28
|
* - create: optional strings coalesce absent/empty → `undefined` (omit; the
|
|
29
29
|
* server default applies). `capabilities` forwards the raw array (absent →
|
|
30
|
-
* omit). Schemas omit when absent.
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
30
|
+
* omit). Schemas omit when absent. Booleans are raw pass-through so an
|
|
31
|
+
* explicit `false` is preserved and only a truly-absent key drops.
|
|
32
|
+
* - update: ALWAYS-SEND (#2743). The workflow TOML fully describes the
|
|
33
|
+
* workflow, so every update-mode field carries a definite value and
|
|
34
|
+
* `undefined` never appears: a defaulted scalar (`status`, the queue
|
|
35
|
+
* limits, `dequeueOrder`, `requiresClientApply`) sends its concrete model
|
|
36
|
+
* default when the file omits it, and a nullable field (`description`,
|
|
37
|
+
* `accessRule`, `runAs`, `capabilities`, the schemas, `lock`) sends `null`.
|
|
38
|
+
* Deleting a line from the file therefore CONVERGES the server rather than
|
|
39
|
+
* silently leaving the old value live (#1567's bug class). Optional strings
|
|
40
|
+
* keep their `"" → null` coalescing, so an explicit clear and an omission
|
|
41
|
+
* land on the same wire value.
|
|
42
|
+
*
|
|
43
|
+
* Defaulted scalars deliberately travel as their default, not as `null`: a
|
|
44
|
+
* server predating #2743 coerces a queue-limit `null` to `0`, while an
|
|
45
|
+
* explicit default converges identically on both. The shared map lives in
|
|
46
|
+
* `workflow-defaults.ts` (the diff normalizer reads the same copy).
|
|
47
|
+
*
|
|
48
|
+
* Omit-preserve survives only as the SERVER's contract for other clients
|
|
49
|
+
* (web-admin): the PATCH still leaves an absent key alone.
|
|
50
|
+
* - `syncCallable` is OMITTED from the builder in `mode: "update"`: its
|
|
51
|
+
* ordering relative to the steps write is `applyWorkflowBody`'s to decide
|
|
52
|
+
* (#807 — enabling must validate against the NEW steps, so it is deferred
|
|
53
|
+
* to a second PATCH; disabling rides the first PATCH). See that module.
|
|
42
54
|
*/
|
|
55
|
+
import { writableFieldNames } from "./generated-config-surfaces.js";
|
|
56
|
+
import { WORKFLOW_TABLE } from "./config-surface.js";
|
|
57
|
+
import { WORKFLOW_MODEL_DEFAULTS } from "./workflow-defaults.js";
|
|
43
58
|
/**
|
|
44
59
|
* Parse a JSON schema field that TOML may present as a string OR (for an inline
|
|
45
60
|
* table) as an already-parsed object. Kept here in `cli/src/lib` so the builder
|
|
@@ -75,30 +90,62 @@ export function parseWorkflowExpressionsToml(tomlData) {
|
|
|
75
90
|
return Object.keys(out).length > 0 ? { cel: out } : undefined;
|
|
76
91
|
}
|
|
77
92
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
93
|
+
* Fields the SERVER accepts on update but this BUILDER deliberately leaves to
|
|
94
|
+
* the caller. This is a sequencing invariant, not a statement about the server:
|
|
95
|
+
* `syncCallable: true` is re-validated against the CURRENTLY-active steps, so
|
|
96
|
+
* enabling it has to wait for a second PATCH once the new steps are live (#807
|
|
97
|
+
* — `applyWorkflowBody` owns the whole sequence, including the `false` case it
|
|
98
|
+
* puts in the FIRST PATCH). The definition correctly declares
|
|
99
|
+
* `writableOn: ["create", "update"]`; the exception lives here, where the
|
|
100
|
+
* ordering decision is.
|
|
101
|
+
*/
|
|
102
|
+
const CREATE_ONLY_ON_THE_WIRE = new Set(["syncCallable"]);
|
|
103
|
+
/**
|
|
104
|
+
* The `[workflow]`-derived keys the builder emits, per mode — read from the
|
|
105
|
+
* vendored definition (#2644), not restated here. A field added to
|
|
106
|
+
* `src/config-surface/workflow.ts` is pushed with no edit to this file, which
|
|
107
|
+
* is what closes the recurring "CLI silently drops a new server field" bug.
|
|
108
|
+
*/
|
|
109
|
+
export function workflowPayloadFields(mode) {
|
|
110
|
+
const fields = writableFieldNames(WORKFLOW_TABLE, mode);
|
|
111
|
+
return mode === "create"
|
|
112
|
+
? fields
|
|
113
|
+
: fields.filter((f) => !CREATE_ONLY_ON_THE_WIRE.has(f));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Per-field value producers, keyed by the definition's field name. A field with
|
|
117
|
+
* no entry is a scalar passthrough: on create the TOML value is forwarded as-is
|
|
118
|
+
* (absent → `undefined`, which `JSON.stringify` drops so the server default
|
|
119
|
+
* applies); on update it converges (absent → the field's model default, or
|
|
120
|
+
* `null` when it has none). That is what makes a passthrough field authorable
|
|
121
|
+
* by editing the definition alone (#2644 criterion 1); the entries below are
|
|
122
|
+
* the fields whose value semantics are genuinely their own.
|
|
82
123
|
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
124
|
+
const PAYLOAD_VALUE = {
|
|
125
|
+
// accessRule / runAs / description — create coalesces absent/empty → omit;
|
|
126
|
+
// update coalesces both an explicit clear ("") and an omission to `null`,
|
|
127
|
+
// because the file is the whole truth (#2743). `value || null` also keeps a
|
|
128
|
+
// whitespace-only value out of the "set" state the server would trim to "".
|
|
129
|
+
accessRule: (value, create) => (create ? value || undefined : value || null),
|
|
130
|
+
runAs: (value, create) => (create ? value || undefined : value || null),
|
|
131
|
+
description: (value, create) => (create ? value : value || null),
|
|
132
|
+
// Schemas — parse a JSON string (or accept an inline table). Create omits
|
|
133
|
+
// when absent; update sends null so a cleared schema round-trips.
|
|
134
|
+
inputSchema: (value, create) => value ? safeJsonParse(value) : create ? undefined : null,
|
|
135
|
+
outputSchema: (value, create) => value ? safeJsonParse(value) : create ? undefined : null,
|
|
136
|
+
// #1972 — declarative run-scoped lock (`[workflow.lock]`, #1518 Phase 3).
|
|
137
|
+
// A TOML-owned nested-object field, mirroring the schemas above. Presence-
|
|
138
|
+
// keyed, not truthiness-keyed: forward the value whenever the KEY is present
|
|
139
|
+
// (`!== undefined`) — the server's create/PATCH accept an object OR a JSON
|
|
140
|
+
// string, so a present-but-malformed falsy value (`lock = false`/`0`) must
|
|
141
|
+
// be forwarded so the server surfaces its validation error, rather than
|
|
142
|
+
// being silently treated as absent (dropped on create, cleared on update).
|
|
143
|
+
// Absent on create → omit (server default: no lock); absent on update →
|
|
144
|
+
// null so removing `[workflow.lock]` clears the server-side lock
|
|
145
|
+
// (config-as-code). Before this the field was dropped from both sync paths,
|
|
146
|
+
// so a pull → push cycle silently lost the lock (#1972).
|
|
147
|
+
lock: (value, create) => value !== undefined ? value : create ? undefined : null,
|
|
148
|
+
};
|
|
102
149
|
/**
|
|
103
150
|
* Build the workflow payload's `[workflow]`-derived fields from a parsed TOML
|
|
104
151
|
* `[workflow]` table. `workflow` is `tomlData.workflow` (already merged with any
|
|
@@ -108,63 +155,23 @@ export const WORKFLOW_PAYLOAD_FIELDS_UPDATE = WORKFLOW_PAYLOAD_FIELDS_CREATE.fil
|
|
|
108
155
|
*/
|
|
109
156
|
export function buildWorkflowPayloadFromToml(workflow, { mode }) {
|
|
110
157
|
const create = mode === "create";
|
|
111
|
-
const payload = {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
// accessRule / runAs — create coalesces absent/empty → omit; update
|
|
120
|
-
// distinguishes explicit clear ("" → null) from leave-unset (absent →
|
|
121
|
-
// undefined).
|
|
122
|
-
accessRule: create
|
|
123
|
-
? workflow.accessRule || undefined
|
|
124
|
-
: workflow.accessRule !== undefined
|
|
125
|
-
? workflow.accessRule || null
|
|
126
|
-
: undefined,
|
|
127
|
-
runAs: create
|
|
128
|
-
? workflow.runAs || undefined
|
|
129
|
-
: workflow.runAs !== undefined
|
|
130
|
-
? workflow.runAs || null
|
|
131
|
-
: undefined,
|
|
132
|
-
// capabilities — create forwards the raw array (absent → omit); update
|
|
133
|
-
// forwards presence-aware so an explicit array round-trips. (The server
|
|
134
|
-
// update PATCH persist for capabilities is tracked separately in #1232; the
|
|
135
|
-
// round-trip guard asserts capabilities on the create leg only.)
|
|
136
|
-
capabilities: create
|
|
137
|
-
? workflow.capabilities
|
|
138
|
-
: workflow.capabilities !== undefined
|
|
139
|
-
? workflow.capabilities
|
|
140
|
-
: undefined,
|
|
141
|
-
// Queue limits — raw numeric pass-through both modes (absent → omit).
|
|
142
|
-
perUserMaxRunning: workflow.perUserMaxRunning,
|
|
143
|
-
perUserMaxQueued: workflow.perUserMaxQueued,
|
|
144
|
-
perAppMaxRunning: workflow.perAppMaxRunning,
|
|
145
|
-
perAppMaxQueued: workflow.perAppMaxQueued,
|
|
146
|
-
queueTtlSeconds: workflow.queueTtlSeconds,
|
|
147
|
-
dequeueOrder: workflow.dequeueOrder,
|
|
148
|
-
// requiresClientApply — raw boolean pass-through so an explicit `false` is
|
|
149
|
-
// preserved and only a truly-absent key drops (server default applies).
|
|
150
|
-
requiresClientApply: workflow.requiresClientApply,
|
|
151
|
-
// Schemas — parse a JSON string (or accept an inline table). Create omits
|
|
152
|
-
// when absent; update sends null so a cleared schema round-trips.
|
|
153
|
-
inputSchema: workflow.inputSchema
|
|
154
|
-
? safeJsonParse(workflow.inputSchema)
|
|
155
|
-
: create
|
|
156
|
-
? undefined
|
|
157
|
-
: null,
|
|
158
|
-
outputSchema: workflow.outputSchema
|
|
159
|
-
? safeJsonParse(workflow.outputSchema)
|
|
158
|
+
const payload = {};
|
|
159
|
+
for (const field of workflowPayloadFields(mode)) {
|
|
160
|
+
const descriptor = WORKFLOW_TABLE.fields.find((f) => f.field === field);
|
|
161
|
+
const tomlKey = descriptor?.tomlKey ?? field;
|
|
162
|
+
const produce = PAYLOAD_VALUE[field];
|
|
163
|
+
const raw = workflow[tomlKey];
|
|
164
|
+
payload[field] = produce
|
|
165
|
+
? produce(raw, create, workflow)
|
|
160
166
|
: create
|
|
161
|
-
?
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
167
|
+
? // Scalar passthrough on create: queue limits, dequeueOrder, name,
|
|
168
|
+
// capabilities, and the boolean flags — raw so an explicit `false`
|
|
169
|
+
// or `0` survives and only a truly-absent key drops.
|
|
170
|
+
raw
|
|
171
|
+
: // Update converges (#2743): a field the file omits sends its concrete
|
|
172
|
+
// model default, or `null` when it has none (`name`, `capabilities`).
|
|
173
|
+
// `??` (not `||`) so an explicit `false` / `0` still wins.
|
|
174
|
+
(raw ?? WORKFLOW_MODEL_DEFAULTS[field] ?? null);
|
|
168
175
|
}
|
|
169
176
|
return payload;
|
|
170
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-payload.js","sourceRoot":"","sources":["../../../src/lib/workflow-payload.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workflow-payload.js","sourceRoot":"","sources":["../../../src/lib/workflow-payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,12 @@ export declare const KNOWN_KINDS_FOR_DRIFT_GUARD: ReadonlySet<string>;
|
|
|
54
54
|
* errors:
|
|
55
55
|
* - `__steps_shape__`: `steps` is not an array (table or scalar).
|
|
56
56
|
* - `__step_shape__`: a step is not an object.
|
|
57
|
+
* - `__workflow_system_access_rule__`: `[workflow] runAs = "system"` with a
|
|
58
|
+
* non-empty `accessRule` — dead config the server rejects (#1447/#1258).
|
|
59
|
+
* A workflow-level error (not tied to a step): `stepIndex: -1, stepId: null`.
|
|
60
|
+
* - `__template_expression__`: a `{{ }}` expression that can never resolve
|
|
61
|
+
* (#2689). The field itself is valid — the `hint` carries the expression's
|
|
62
|
+
* location and the lint's message.
|
|
57
63
|
* `hint` is a short, user-facing explanation (used by
|
|
58
64
|
* `formatWorkflowTomlErrors` to render the multi-line diagnostic).
|
|
59
65
|
* `parentStepId` is set when this error came from a `collect` step's
|
|
@@ -70,14 +76,85 @@ export type WorkflowTomlError = {
|
|
|
70
76
|
hint: string;
|
|
71
77
|
parentStepId?: string | null;
|
|
72
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* #1447 workflow-identity predicate, extracted (codex review, 2026-07-15) so
|
|
81
|
+
* command sites that apply command-line metadata overrides can re-run it
|
|
82
|
+
* against the merged/effective workflow rather than only the parsed file.
|
|
83
|
+
*
|
|
84
|
+
* `runAs = "system"` + a non-empty `accessRule` is dead config: a system run
|
|
85
|
+
* can only be started by the system and never evaluates its accessRule, so any
|
|
86
|
+
* non-empty rule is inert. The server rejects this at save time (#1258,
|
|
87
|
+
* `src/workflows/definition-store.ts:271-280`); catching it locally keeps
|
|
88
|
+
* `config push` all-or-nothing instead of failing mid-push and leaving partial
|
|
89
|
+
* server state (#1418 drift).
|
|
90
|
+
*
|
|
91
|
+
* Mirrors the server predicate byte-for-byte: returns the sentinel error only
|
|
92
|
+
* when `runAs === "system"` AND `typeof accessRule === "string"` AND
|
|
93
|
+
* `accessRule.trim() !== ""`. Default/unset/empty/whitespace-only runAs or
|
|
94
|
+
* accessRule (and a bare non-string boolean accessRule) return `null`.
|
|
95
|
+
*
|
|
96
|
+
* @param workflow The workflow-metadata object — the `[workflow]` table, or
|
|
97
|
+
* for commands that accept unwrapped root-level metadata, the root TOML
|
|
98
|
+
* object (`tomlData.workflow || tomlData`). Non-object inputs return `null`.
|
|
99
|
+
*/
|
|
100
|
+
export declare function validateWorkflowIdentity(workflow: any): WorkflowTomlError | null;
|
|
101
|
+
/**
|
|
102
|
+
* #2643 — `templateMissingMarker` was removed from the platform. A workflow
|
|
103
|
+
* TOML that still sets it is rejected here, before the push, with the same
|
|
104
|
+
* sentence the server returns, rather than being silently dropped.
|
|
105
|
+
*/
|
|
106
|
+
export declare const REMOVED_TEMPLATE_MISSING_MARKER_MESSAGE: string;
|
|
107
|
+
/**
|
|
108
|
+
* Non-blocking notes for a workflow TOML — things worth saying on a push that
|
|
109
|
+
* are not errors.
|
|
110
|
+
*
|
|
111
|
+
* #2643: `strict` / `strictParams` are accepted and ignored, because the
|
|
112
|
+
* failure they used to opt into now applies to every workflow. A definition
|
|
113
|
+
* that sets them keeps working unchanged, so this is a note, not an error.
|
|
114
|
+
*/
|
|
115
|
+
export declare function collectWorkflowTomlNotes(tomlData: any): string[];
|
|
116
|
+
/** The runAs / accessRule pair the identity lint reads. */
|
|
117
|
+
export interface WorkflowIdentityFields {
|
|
118
|
+
runAs?: unknown;
|
|
119
|
+
accessRule?: unknown;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* #1447 (maintainer decision, 2026-07-21): compute the EFFECTIVE workflow
|
|
123
|
+
* identity that an `update --from-file` push will leave on the server — the
|
|
124
|
+
* merge of the persisted record with the incoming file/flags.
|
|
125
|
+
*
|
|
126
|
+
* The merge exists for a caller whose push OMITS one side of the
|
|
127
|
+
* runAs/accessRule pair and lets the server retain it. Linting the incoming
|
|
128
|
+
* payload alone misses the case where the OTHER side is already `system` / a
|
|
129
|
+
* stored rule: an existing `runAs="system"` workflow plus a file adding only an
|
|
130
|
+
* `accessRule`, or a file flipping a workflow with a stored rule to
|
|
131
|
+
* `runAs="system"`. Both pass a payload-only lint and are then rejected by the
|
|
132
|
+
* server's PATCH. Merging the two before `validateWorkflowIdentity` catches
|
|
133
|
+
* them locally at zero extra cost — the persisted record is already fetched at
|
|
134
|
+
* the call site.
|
|
135
|
+
*
|
|
136
|
+
* NOT `config push`, since #2743: its update is always-send, so the file alone IS
|
|
137
|
+
* the effective config (an omitted `accessRule` clears the stored rule rather
|
|
138
|
+
* than inheriting it) and its push-time lint of the file is exact. The merge
|
|
139
|
+
* semantics below are unchanged for any caller that does omit fields: a field
|
|
140
|
+
* PRESENT in `incoming` (including an empty-string clear) overrides the stored
|
|
141
|
+
* value; an ABSENT field (undefined) falls back to what the server keeps.
|
|
142
|
+
*/
|
|
143
|
+
export declare function effectiveWorkflowIdentity(existing: WorkflowIdentityFields | null | undefined, incoming: WorkflowIdentityFields | null | undefined): WorkflowIdentityFields;
|
|
73
144
|
/**
|
|
74
145
|
* Walk a parsed workflow TOML document and return all unknown-field errors.
|
|
75
146
|
*
|
|
76
147
|
* @param tomlData The output of `parseConfigToml()` for a workflow TOML file.
|
|
148
|
+
* @param opts.skipWorkflowIdentity When true, suppress the #1447 workflow
|
|
149
|
+
* identity check (`runAs="system"` + non-empty `accessRule`). Callers that
|
|
150
|
+
* merge command-line overrides after parsing re-run `validateWorkflowIdentity`
|
|
151
|
+
* against the effective metadata themselves.
|
|
77
152
|
* @returns An array of error objects, one per offending field. Empty if no
|
|
78
153
|
* errors were found.
|
|
79
154
|
*/
|
|
80
|
-
export declare function validateWorkflowToml(tomlData: any
|
|
155
|
+
export declare function validateWorkflowToml(tomlData: any, opts?: {
|
|
156
|
+
skipWorkflowIdentity?: boolean;
|
|
157
|
+
}): WorkflowTomlError[];
|
|
81
158
|
/**
|
|
82
159
|
* Render a multi-line diagnostic for a list of errors. Designed for the
|
|
83
160
|
* shape called out in the issue:
|
|
@@ -96,7 +173,7 @@ export declare function formatWorkflowTomlErrors(filePath: string, errors: Workf
|
|
|
96
173
|
/**
|
|
97
174
|
* #1614 — client-side mirror of the server's `validateWorkflowExpressions`
|
|
98
175
|
* (`src/workflows/definition-store.ts`) for named `expr.*` CEL guards. Returns
|
|
99
|
-
* structural errors so `
|
|
176
|
+
* structural errors so `config push` fails fast with the same class of diagnostic
|
|
100
177
|
* the server would 400 on:
|
|
101
178
|
* 1. every `expr.<name>` reference — in a definition body OR a step guard
|
|
102
179
|
* (`runIf` / `successWhen` / switch `when`) — names a DECLARED definition;
|
|
@@ -112,7 +189,7 @@ export declare function formatWorkflowTomlErrors(filePath: string, errors: Workf
|
|
|
112
189
|
* #1614 — validate the RAW `[expr.cel]` table shape BEFORE
|
|
113
190
|
* `parseWorkflowExpressionsToml` filters it. That parser drops any entry whose
|
|
114
191
|
* body is not a string, so a mistyped `ready = true` would vanish and, with no
|
|
115
|
-
* references left to fail on, `
|
|
192
|
+
* references left to fail on, `config push` would succeed while omitting the whole
|
|
116
193
|
* expression table. Surface non-string / empty / wrong-typed bodies (and a
|
|
117
194
|
* non-table `cel`) as a hard CLI validation error instead. Mirrors the server's
|
|
118
195
|
* `validateRawExpressionsShape` (`src/workflows/definition-store.ts`).
|