primitive-admin 1.1.0-alpha.7 → 1.1.0-alpha.71
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 +404 -80
- package/assets/skill/skills/primitive-platform/SKILL.md +808 -0
- package/dist/bin/primitive.d.ts +2 -0
- package/dist/bin/primitive.js +294 -21
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.d.ts +2 -0
- package/dist/src/commands/admins.js +138 -19
- package/dist/src/commands/admins.js.map +1 -1
- package/dist/src/commands/analytics.d.ts +2 -0
- package/dist/src/commands/analytics.js +544 -55
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.d.ts +2 -0
- package/dist/src/commands/apps.js +51 -96
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth.d.ts +2 -0
- package/dist/src/commands/auth.js +177 -7
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.d.ts +2 -0
- package/dist/src/commands/blob-buckets.js +330 -0
- package/dist/src/commands/blob-buckets.js.map +1 -0
- package/dist/src/commands/catalog.d.ts +2 -0
- package/dist/src/commands/catalog.js +37 -38
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collection-type-configs.d.ts +2 -0
- package/dist/src/commands/collection-type-configs.js +92 -0
- package/dist/src/commands/collection-type-configs.js.map +1 -0
- package/dist/src/commands/collections.d.ts +2 -0
- package/dist/src/commands/collections.js +565 -0
- package/dist/src/commands/collections.js.map +1 -0
- package/dist/src/commands/comparisons.d.ts +2 -0
- package/dist/src/commands/comparisons.js +6 -6
- package/dist/src/commands/comparisons.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.d.ts +2 -0
- package/dist/src/commands/cron-triggers.js +265 -0
- package/dist/src/commands/cron-triggers.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/src/commands/database-types.js +471 -0
- package/dist/src/commands/database-types.js.map +1 -0
- package/dist/src/commands/databases.d.ts +65 -0
- package/dist/src/commands/databases.js +2140 -112
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.d.ts +2 -0
- package/dist/src/commands/documents.js +1357 -19
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.d.ts +2 -0
- package/dist/src/commands/email-templates.js +174 -0
- package/dist/src/commands/email-templates.js.map +1 -0
- package/dist/src/commands/env.d.ts +23 -0
- package/dist/src/commands/env.js +333 -0
- package/dist/src/commands/env.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/src/commands/group-type-configs.js +86 -0
- package/dist/src/commands/group-type-configs.js.map +1 -0
- package/dist/src/commands/groups.d.ts +2 -0
- package/dist/src/commands/groups.js +38 -99
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.d.ts +223 -0
- package/dist/src/commands/guides.js +617 -65
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/init.d.ts +25 -0
- package/dist/src/commands/init.js +1605 -208
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.d.ts +2 -0
- package/dist/src/commands/integrations.js +380 -178
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/llm.d.ts +2 -0
- package/dist/src/commands/llm.js +4 -2
- package/dist/src/commands/llm.js.map +1 -1
- package/dist/src/commands/locks.d.ts +8 -0
- package/dist/src/commands/locks.js +160 -0
- package/dist/src/commands/locks.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/src/commands/metadata.js +281 -0
- package/dist/src/commands/metadata.js.map +1 -0
- package/dist/src/commands/prompts.d.ts +2 -0
- package/dist/src/commands/prompts.js +225 -584
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +3 -0
- package/dist/src/commands/rule-sets.js +272 -0
- package/dist/src/commands/rule-sets.js.map +1 -0
- package/dist/src/commands/scripts.d.ts +20 -0
- package/dist/src/commands/scripts.js +554 -0
- package/dist/src/commands/scripts.js.map +1 -0
- package/dist/src/commands/secrets.d.ts +2 -0
- package/dist/src/commands/secrets.js +108 -0
- package/dist/src/commands/secrets.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/src/commands/skill.js +29 -0
- package/dist/src/commands/skill.js.map +1 -0
- package/dist/src/commands/sync-app-settings.d.ts +158 -0
- package/dist/src/commands/sync-app-settings.js +330 -0
- package/dist/src/commands/sync-app-settings.js.map +1 -0
- package/dist/src/commands/sync.d.ts +2323 -0
- package/dist/src/commands/sync.js +15065 -843
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.d.ts +2 -0
- package/dist/src/commands/tokens.js +130 -21
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.d.ts +2 -0
- package/dist/src/commands/users.js +532 -23
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/vars.d.ts +8 -0
- package/dist/src/commands/vars.js +96 -0
- package/dist/src/commands/vars.js.map +1 -0
- package/dist/src/commands/waitlist.d.ts +2 -0
- package/dist/src/commands/waitlist.js +10 -10
- package/dist/src/commands/waitlist.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +2 -0
- package/dist/src/commands/webhooks.js +562 -0
- package/dist/src/commands/webhooks.js.map +1 -0
- package/dist/src/commands/workflows.d.ts +116 -0
- package/dist/src/commands/workflows.js +1583 -681
- 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 +1936 -0
- package/dist/src/lib/api-client.js +1826 -138
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
- package/dist/src/lib/app-settings-descriptor.js +575 -0
- package/dist/src/lib/app-settings-descriptor.js.map +1 -0
- package/dist/src/lib/auth-flow.d.ts +8 -0
- package/dist/src/lib/batch.d.ts +26 -0
- package/dist/src/lib/batch.js +32 -0
- package/dist/src/lib/batch.js.map +1 -0
- package/dist/src/lib/block-layout.d.ts +160 -0
- package/dist/src/lib/block-layout.js +451 -0
- package/dist/src/lib/block-layout.js.map +1 -0
- 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/channel.d.ts +30 -0
- package/dist/src/lib/channel.js +68 -0
- package/dist/src/lib/channel.js.map +1 -0
- package/dist/src/lib/cli-manifest.d.ts +68 -0
- package/dist/src/lib/cli-manifest.js +71 -0
- package/dist/src/lib/cli-manifest.js.map +1 -0
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
- package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
- package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
- package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
- 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/config-toml.d.ts +10 -0
- package/dist/src/lib/config-toml.js +42 -0
- package/dist/src/lib/config-toml.js.map +1 -0
- package/dist/src/lib/config.d.ts +53 -0
- package/dist/src/lib/config.js +92 -53
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/confirm-prompt.d.ts +83 -0
- package/dist/src/lib/confirm-prompt.js +110 -0
- package/dist/src/lib/confirm-prompt.js.map +1 -0
- package/dist/src/lib/constants.d.ts +11 -0
- package/dist/src/lib/constants.js +12 -0
- package/dist/src/lib/constants.js.map +1 -0
- package/dist/src/lib/crash-handlers.d.ts +20 -0
- package/dist/src/lib/crash-handlers.js +49 -0
- package/dist/src/lib/crash-handlers.js.map +1 -0
- package/dist/src/lib/credentials-store.d.ts +89 -0
- package/dist/src/lib/credentials-store.js +330 -0
- package/dist/src/lib/credentials-store.js.map +1 -0
- package/dist/src/lib/csv.d.ts +47 -0
- package/dist/src/lib/csv.js +172 -0
- package/dist/src/lib/csv.js.map +1 -0
- 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/dbFingerprint.d.ts +10 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
- package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
- package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
- package/dist/src/lib/db-codegen/dbNaming.js +180 -0
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
- package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js +517 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
- 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 +84 -0
- package/dist/src/lib/env-resolver.js +133 -0
- package/dist/src/lib/env-resolver.js.map +1 -0
- package/dist/src/lib/fetch.d.ts +5 -0
- package/dist/src/lib/generated-allowlist.d.ts +28 -0
- package/dist/src/lib/generated-allowlist.js +277 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -0
- 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 +98 -0
- package/dist/src/lib/init-config.js +186 -0
- package/dist/src/lib/init-config.js.map +1 -0
- 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 +49 -0
- package/dist/src/lib/migration-nag.js +163 -0
- package/dist/src/lib/migration-nag.js.map +1 -0
- 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 +109 -0
- package/dist/src/lib/output.js +191 -8
- 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 +83 -0
- package/dist/src/lib/paginate.js +95 -0
- package/dist/src/lib/paginate.js.map +1 -0
- package/dist/src/lib/platform-owned.d.ts +63 -0
- package/dist/src/lib/platform-owned.js +85 -0
- package/dist/src/lib/platform-owned.js.map +1 -0
- package/dist/src/lib/project-config.d.ts +97 -0
- package/dist/src/lib/project-config.js +217 -0
- package/dist/src/lib/project-config.js.map +1 -0
- package/dist/src/lib/query-operators.d.ts +43 -0
- package/dist/src/lib/query-operators.js +80 -0
- package/dist/src/lib/query-operators.js.map +1 -0
- 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/refresh-admin-credentials.d.ts +65 -0
- package/dist/src/lib/refresh-admin-credentials.js +103 -0
- package/dist/src/lib/refresh-admin-credentials.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 +74 -0
- package/dist/src/lib/resolve-platform.js +105 -0
- package/dist/src/lib/resolve-platform.js.map +1 -0
- 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 +25 -0
- package/dist/src/lib/skill-installer.js +266 -0
- package/dist/src/lib/skill-installer.js.map +1 -0
- package/dist/src/lib/snapshots.d.ts +99 -0
- package/dist/src/lib/snapshots.js +357 -0
- package/dist/src/lib/snapshots.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +914 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
- package/dist/src/lib/swift-codegen/generator.d.ts +94 -0
- package/dist/src/lib/swift-codegen/generator.js +440 -0
- package/dist/src/lib/swift-codegen/generator.js.map +1 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +72 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +644 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
- package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
- 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 +111 -0
- package/dist/src/lib/sync-paths.js +198 -0
- package/dist/src/lib/sync-paths.js.map +1 -0
- package/dist/src/lib/sync-resource-types.d.ts +544 -0
- package/dist/src/lib/sync-resource-types.js +975 -0
- package/dist/src/lib/sync-resource-types.js.map +1 -0
- 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 +170 -0
- package/dist/src/lib/template.js +484 -68
- 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/token-inject.d.ts +56 -0
- package/dist/src/lib/token-inject.js +204 -0
- package/dist/src/lib/token-inject.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +123 -0
- package/dist/src/lib/toml-database-config.js +527 -0
- package/dist/src/lib/toml-database-config.js.map +1 -0
- package/dist/src/lib/toml-metadata-config.d.ts +151 -0
- package/dist/src/lib/toml-metadata-config.js +476 -0
- package/dist/src/lib/toml-metadata-config.js.map +1 -0
- package/dist/src/lib/toml-native-form.d.ts +46 -0
- package/dist/src/lib/toml-native-form.js +78 -0
- package/dist/src/lib/toml-native-form.js.map +1 -0
- package/dist/src/lib/toml-params-validator.d.ts +129 -0
- package/dist/src/lib/toml-params-validator.js +298 -0
- package/dist/src/lib/toml-params-validator.js.map +1 -0
- 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 +35 -0
- package/dist/src/lib/version-check.js +241 -0
- package/dist/src/lib/version-check.js.map +1 -0
- 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 +110 -0
- package/dist/src/lib/workflow-apply.js +164 -0
- package/dist/src/lib/workflow-apply.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
- package/dist/src/lib/workflow-codegen/generator.js +361 -0
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
- package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
- package/dist/src/lib/workflow-codegen/naming.js +81 -0
- package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
- 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 +64 -0
- package/dist/src/lib/workflow-fragments.js +342 -0
- package/dist/src/lib/workflow-fragments.js.map +1 -0
- 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 +98 -0
- package/dist/src/lib/workflow-payload.js +178 -0
- package/dist/src/lib/workflow-payload.js.map +1 -0
- package/dist/src/lib/workflow-toml-validator.d.ts +202 -0
- package/dist/src/lib/workflow-toml-validator.js +757 -0
- package/dist/src/lib/workflow-toml-validator.js.map +1 -0
- package/dist/src/types/index.d.ts +581 -0
- package/dist/src/validators.d.ts +65 -0
- package/dist/src/validators.js +64 -0
- package/dist/src/validators.js.map +1 -0
- package/package.json +32 -8
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Legacy-mode migration nag.
|
|
3
|
+
*
|
|
4
|
+
* Prints a one-time, opt-out, rate-limited startup warning that points
|
|
5
|
+
* users still on the legacy `~/.primitive/credentials.json` config at the
|
|
6
|
+
* project-scoped `primitive env add` migration path. The warning is purely
|
|
7
|
+
* informational — it never mutates anything other than the small
|
|
8
|
+
* `~/.primitive/migration-nag.json` cache used for the 24h rate-limit.
|
|
9
|
+
*
|
|
10
|
+
* Detection signal (warn iff ALL of):
|
|
11
|
+
* 1. `peekLegacyCredentials()` is non-null (legacy creds file present).
|
|
12
|
+
* 2. `findProjectConfigPath()` is null (no project config in scope).
|
|
13
|
+
* 3. `./config/.primitive-sync.json` exists in CWD (strong signal the
|
|
14
|
+
* user has actually run `primitive config pull` here — the
|
|
15
|
+
* population at risk from #548).
|
|
16
|
+
*
|
|
17
|
+
* Suppression (skip if ANY of):
|
|
18
|
+
* - `PRIMITIVE_NO_MIGRATE_NAG=1`
|
|
19
|
+
* - `CI` env var set (non-empty)
|
|
20
|
+
* - `!process.stdout.isTTY`
|
|
21
|
+
* - argv contains `--help` / `-h` / `--version` / `-V` / `--json`
|
|
22
|
+
* - Subcommand is `env *`, `init`, `login`, `logout`, or `token`
|
|
23
|
+
* - `now - lastWarnedAt < 24h`
|
|
24
|
+
*
|
|
25
|
+
* Modeled on `cli/src/lib/version-check.ts`: the whole body is wrapped
|
|
26
|
+
* in try/catch that swallows every error so a corrupt cache file or any
|
|
27
|
+
* other unexpected failure can never break the CLI.
|
|
28
|
+
*
|
|
29
|
+
* TODO(#auto-migration): When we ship an interactive auto-migration flow
|
|
30
|
+
* (separate issue from #552), it should either delete this nag cache or
|
|
31
|
+
* bump `lastWarnedAt` far into the future so freshly-migrated users
|
|
32
|
+
* don't see the nag again. The cache lives at `${PRIMITIVE_CONFIG_DIR ||
|
|
33
|
+
* ~/.primitive}/migration-nag.json`.
|
|
34
|
+
*/
|
|
35
|
+
export interface MaybeWarnLegacyMigrationOptions {
|
|
36
|
+
argv: string[];
|
|
37
|
+
/**
|
|
38
|
+
* Override the working directory used for project-shape detection and
|
|
39
|
+
* the upward `.primitive/config.json` search. Defaults to
|
|
40
|
+
* `process.cwd()`. Exists so unit tests (which run in worker threads
|
|
41
|
+
* that disallow `process.chdir()`) can point at a tmpdir.
|
|
42
|
+
*/
|
|
43
|
+
cwd?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Print the legacy-mode migration nag if the detection signal matches
|
|
47
|
+
* and no suppression condition applies. Never throws.
|
|
48
|
+
*/
|
|
49
|
+
export declare function maybeWarnLegacyMigration(options: MaybeWarnLegacyMigrationOptions): void;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Legacy-mode migration nag.
|
|
3
|
+
*
|
|
4
|
+
* Prints a one-time, opt-out, rate-limited startup warning that points
|
|
5
|
+
* users still on the legacy `~/.primitive/credentials.json` config at the
|
|
6
|
+
* project-scoped `primitive env add` migration path. The warning is purely
|
|
7
|
+
* informational — it never mutates anything other than the small
|
|
8
|
+
* `~/.primitive/migration-nag.json` cache used for the 24h rate-limit.
|
|
9
|
+
*
|
|
10
|
+
* Detection signal (warn iff ALL of):
|
|
11
|
+
* 1. `peekLegacyCredentials()` is non-null (legacy creds file present).
|
|
12
|
+
* 2. `findProjectConfigPath()` is null (no project config in scope).
|
|
13
|
+
* 3. `./config/.primitive-sync.json` exists in CWD (strong signal the
|
|
14
|
+
* user has actually run `primitive config pull` here — the
|
|
15
|
+
* population at risk from #548).
|
|
16
|
+
*
|
|
17
|
+
* Suppression (skip if ANY of):
|
|
18
|
+
* - `PRIMITIVE_NO_MIGRATE_NAG=1`
|
|
19
|
+
* - `CI` env var set (non-empty)
|
|
20
|
+
* - `!process.stdout.isTTY`
|
|
21
|
+
* - argv contains `--help` / `-h` / `--version` / `-V` / `--json`
|
|
22
|
+
* - Subcommand is `env *`, `init`, `login`, `logout`, or `token`
|
|
23
|
+
* - `now - lastWarnedAt < 24h`
|
|
24
|
+
*
|
|
25
|
+
* Modeled on `cli/src/lib/version-check.ts`: the whole body is wrapped
|
|
26
|
+
* in try/catch that swallows every error so a corrupt cache file or any
|
|
27
|
+
* other unexpected failure can never break the CLI.
|
|
28
|
+
*
|
|
29
|
+
* TODO(#auto-migration): When we ship an interactive auto-migration flow
|
|
30
|
+
* (separate issue from #552), it should either delete this nag cache or
|
|
31
|
+
* bump `lastWarnedAt` far into the future so freshly-migrated users
|
|
32
|
+
* don't see the nag again. The cache lives at `${PRIMITIVE_CONFIG_DIR ||
|
|
33
|
+
* ~/.primitive}/migration-nag.json`.
|
|
34
|
+
*/
|
|
35
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
36
|
+
import { homedir } from "os";
|
|
37
|
+
import { join } from "path";
|
|
38
|
+
import { warn } from "./output.js";
|
|
39
|
+
import { peekLegacyCredentials } from "./credentials-store.js";
|
|
40
|
+
import { findProjectConfigPath } from "./project-config.js";
|
|
41
|
+
const NAG_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
42
|
+
/** Resolved per-call so tests can override PRIMITIVE_CONFIG_DIR at runtime. */
|
|
43
|
+
function getConfigDir() {
|
|
44
|
+
return process.env.PRIMITIVE_CONFIG_DIR || join(homedir(), ".primitive");
|
|
45
|
+
}
|
|
46
|
+
function getNagCacheFile() {
|
|
47
|
+
return join(getConfigDir(), "migration-nag.json");
|
|
48
|
+
}
|
|
49
|
+
function ensureConfigDir() {
|
|
50
|
+
const dir = getConfigDir();
|
|
51
|
+
if (!existsSync(dir)) {
|
|
52
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function loadNagCache() {
|
|
56
|
+
try {
|
|
57
|
+
const file = getNagCacheFile();
|
|
58
|
+
if (!existsSync(file))
|
|
59
|
+
return null;
|
|
60
|
+
const raw = JSON.parse(readFileSync(file, "utf-8"));
|
|
61
|
+
if (!raw || typeof raw !== "object")
|
|
62
|
+
return null;
|
|
63
|
+
if (typeof raw.lastWarnedAt !== "number")
|
|
64
|
+
return null;
|
|
65
|
+
return { lastWarnedAt: raw.lastWarnedAt };
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function saveNagCache(cache) {
|
|
72
|
+
try {
|
|
73
|
+
ensureConfigDir();
|
|
74
|
+
writeFileSync(getNagCacheFile(), JSON.stringify(cache, null, 2));
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Swallow — at worst the user gets re-nagged next invocation.
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Returns true if `argv` indicates the warning should be skipped:
|
|
82
|
+
* - any of `--help` / `-h` / `--version` / `-V` / `--json` present, OR
|
|
83
|
+
* - the subcommand is on the migration path (`env *`, `init`, `login`,
|
|
84
|
+
* `logout`), OR
|
|
85
|
+
* - the subcommand is `token`. The `token` command is contractually
|
|
86
|
+
* stdout-only (callers pipe its output to `--access-token` or paste it
|
|
87
|
+
* into env vars), so any extra warning lines would corrupt that output.
|
|
88
|
+
*
|
|
89
|
+
* `argv` is expected to be the same shape as `process.argv` (i.e. the
|
|
90
|
+
* subcommand sits at index 2, after `node` and the script path). Defensive
|
|
91
|
+
* about short or unusual argv shapes.
|
|
92
|
+
*/
|
|
93
|
+
function shouldSuppressByArgv(argv) {
|
|
94
|
+
for (const a of argv) {
|
|
95
|
+
if (a === "--help" || a === "-h" || a === "--version" || a === "-V" || a === "--json") {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const subcommand = argv[2];
|
|
100
|
+
if (subcommand === "env" ||
|
|
101
|
+
subcommand === "init" ||
|
|
102
|
+
subcommand === "login" ||
|
|
103
|
+
subcommand === "logout" ||
|
|
104
|
+
subcommand === "token") {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Returns true when `cwd` looks like a project that has actually been
|
|
111
|
+
* used with `primitive config` — specifically, when
|
|
112
|
+
* `<cwd>/config/.primitive-sync.json` exists. Per F4 of the approved
|
|
113
|
+
* plan, this is the only project-shape signal we use; we deliberately
|
|
114
|
+
* do not fall back to `package.json` or `.git` to avoid nagging users
|
|
115
|
+
* who run the CLI for read-only commands from incidental project
|
|
116
|
+
* directories.
|
|
117
|
+
*/
|
|
118
|
+
function isProjectShaped(cwd) {
|
|
119
|
+
try {
|
|
120
|
+
return existsSync(join(cwd, "config", ".primitive-sync.json"));
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Print the legacy-mode migration nag if the detection signal matches
|
|
128
|
+
* and no suppression condition applies. Never throws.
|
|
129
|
+
*/
|
|
130
|
+
export function maybeWarnLegacyMigration(options) {
|
|
131
|
+
try {
|
|
132
|
+
// --- Fast suppression checks (no disk I/O) ---------------------------
|
|
133
|
+
if (process.env.PRIMITIVE_NO_MIGRATE_NAG === "1")
|
|
134
|
+
return;
|
|
135
|
+
if (process.env.CI)
|
|
136
|
+
return;
|
|
137
|
+
if (!process.stdout.isTTY)
|
|
138
|
+
return;
|
|
139
|
+
if (shouldSuppressByArgv(options.argv))
|
|
140
|
+
return;
|
|
141
|
+
const cwd = options.cwd ?? process.cwd();
|
|
142
|
+
// --- Detection signal -------------------------------------------------
|
|
143
|
+
if (!isProjectShaped(cwd))
|
|
144
|
+
return;
|
|
145
|
+
if (findProjectConfigPath(cwd) !== null)
|
|
146
|
+
return;
|
|
147
|
+
if (peekLegacyCredentials() === null)
|
|
148
|
+
return;
|
|
149
|
+
// --- Rate-limit -------------------------------------------------------
|
|
150
|
+
const cache = loadNagCache();
|
|
151
|
+
const now = Date.now();
|
|
152
|
+
if (cache && now - cache.lastWarnedAt < NAG_INTERVAL_MS)
|
|
153
|
+
return;
|
|
154
|
+
// --- Print --------------------------------------------------------------
|
|
155
|
+
warn("Legacy CLI config detected at ~/.primitive/credentials.json.");
|
|
156
|
+
warn("Run `primitive env add <name> --api-url <url> --app-id <appId>` to upgrade to project-scoped config (see issue #548 for why). Set PRIMITIVE_NO_MIGRATE_NAG=1 to silence.");
|
|
157
|
+
saveNagCache({ lastWarnedAt: now });
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// Never let nag errors affect CLI operation — mirrors version-check.ts.
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=migration-nag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-nag.js","sourceRoot":"","sources":["../../../src/lib/migration-nag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `--status` on a list of one of the five carrying types (issue #2803).
|
|
3
|
+
*
|
|
4
|
+
* The filter travels to the server as a query parameter and the server filters
|
|
5
|
+
* on the CANONICAL value, so `--status paused` matched nothing and exited 0 —
|
|
6
|
+
* an empty table that reads as "there are none" rather than "that word is gone".
|
|
7
|
+
* The retired spellings therefore get the same treatment as a retired TOML key:
|
|
8
|
+
* a refusal naming what replaced them, not silence. An unknown word gets the
|
|
9
|
+
* vocabulary, because a typo answered with an empty list is the same trap.
|
|
10
|
+
*
|
|
11
|
+
* Pure: no network, no config. The list commands call it before their first
|
|
12
|
+
* request, so the refusal costs nothing and reads the same offline.
|
|
13
|
+
*/
|
|
14
|
+
/** The availability vocabulary. `archived` only for types whose delete writes it. */
|
|
15
|
+
export type ObjectStatusFilter = "active" | "inactive" | "archived";
|
|
16
|
+
/**
|
|
17
|
+
* Validate a `--status` value for `noun`, or throw with guidance.
|
|
18
|
+
*
|
|
19
|
+
* Returns the value to send (lower-cased), or `undefined` when the flag was
|
|
20
|
+
* not given.
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseStatusFilter(noun: string, value: string | undefined, vocabulary: readonly ObjectStatusFilter[]): string | undefined;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `--status` on a list of one of the five carrying types (issue #2803).
|
|
3
|
+
*
|
|
4
|
+
* The filter travels to the server as a query parameter and the server filters
|
|
5
|
+
* on the CANONICAL value, so `--status paused` matched nothing and exited 0 —
|
|
6
|
+
* an empty table that reads as "there are none" rather than "that word is gone".
|
|
7
|
+
* The retired spellings therefore get the same treatment as a retired TOML key:
|
|
8
|
+
* a refusal naming what replaced them, not silence. An unknown word gets the
|
|
9
|
+
* vocabulary, because a typo answered with an empty list is the same trap.
|
|
10
|
+
*
|
|
11
|
+
* Pure: no network, no config. The list commands call it before their first
|
|
12
|
+
* request, so the refusal costs nothing and reads the same offline.
|
|
13
|
+
*/
|
|
14
|
+
/** What a retired spelling means now, per the value the operator typed. */
|
|
15
|
+
const RETIRED = {
|
|
16
|
+
// Webhooks and cron triggers spelled "out of service" as `paused`.
|
|
17
|
+
paused: "inactive",
|
|
18
|
+
// Cron triggers escalated to `error_paused`; the reason now lives in
|
|
19
|
+
// `lastError` beside a plain `inactive`.
|
|
20
|
+
error_paused: "inactive",
|
|
21
|
+
// Workflows, integrations and prompts had a `draft` state. Nothing does.
|
|
22
|
+
draft: "inactive",
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Validate a `--status` value for `noun`, or throw with guidance.
|
|
26
|
+
*
|
|
27
|
+
* Returns the value to send (lower-cased), or `undefined` when the flag was
|
|
28
|
+
* not given.
|
|
29
|
+
*/
|
|
30
|
+
export function parseStatusFilter(noun, value, vocabulary) {
|
|
31
|
+
if (value === undefined)
|
|
32
|
+
return undefined;
|
|
33
|
+
const normalized = String(value).trim().toLowerCase();
|
|
34
|
+
if (vocabulary.includes(normalized))
|
|
35
|
+
return normalized;
|
|
36
|
+
const offered = vocabulary.join(", ");
|
|
37
|
+
const replacement = RETIRED[normalized];
|
|
38
|
+
if (replacement) {
|
|
39
|
+
throw new Error(`--status ${normalized} no longer exists (#2803). Use --status ${replacement} — ` +
|
|
40
|
+
`it matches rows still storing the old value. Availability is changed with ` +
|
|
41
|
+
`\`primitive ${noun} enable|disable\`.`);
|
|
42
|
+
}
|
|
43
|
+
throw new Error(`--status must be one of: ${offered} (got "${value}").`);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=object-status-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-status-filter.js","sourceRoot":"","sources":["../../../src/lib/object-status-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,2EAA2E;AAC3E,MAAM,OAAO,GAA2B;IACtC,mEAAmE;IACnE,MAAM,EAAE,UAAU;IAClB,qEAAqE;IACrE,yCAAyC;IACzC,YAAY,EAAE,UAAU;IACxB,yEAAyE;IACzE,KAAK,EAAE,UAAU;CAClB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,KAAyB,EACzB,UAAyC;IAEzC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,IAAK,UAAgC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAE9E,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,YAAY,UAAU,2CAA2C,WAAW,KAAK;YAC/E,4EAA4E;YAC5E,eAAe,IAAI,oBAAoB,CAC1C,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,UAAU,KAAK,KAAK,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
export interface TableColumn {
|
|
2
|
+
header: string;
|
|
3
|
+
key: string;
|
|
4
|
+
width?: number;
|
|
5
|
+
/**
|
|
6
|
+
* Opt-in flexible sizing (#1065). When `true`, the column is sized from the
|
|
7
|
+
* remaining terminal width (`options.maxWidth ?? process.stdout.columns`)
|
|
8
|
+
* minus the sibling columns' widths and the inter-column padding, so the
|
|
9
|
+
* table shows as much of this column as fits **without wrapping**. Clamped to
|
|
10
|
+
* `[max(flexFloor, header length), flexMax]`. On a non-TTY (`maxWidth`
|
|
11
|
+
* undefined — piped/redirected) there is no width to wrap against, so the
|
|
12
|
+
* column is sized to `flexMax` (or its content width when `flexMax` is
|
|
13
|
+
* unset). Reading the terminal width is gated to flex columns: tables with no
|
|
14
|
+
* flex column never consult `process.stdout.columns` and stay byte-for-byte
|
|
15
|
+
* (and TTY-) unchanged.
|
|
16
|
+
*/
|
|
17
|
+
flex?: boolean;
|
|
18
|
+
/** Minimum width for a `flex` column. Default 0 (header length is always honored). */
|
|
19
|
+
flexFloor?: number;
|
|
20
|
+
/** Maximum width for a `flex` column. Default unbounded. */
|
|
21
|
+
flexMax?: number;
|
|
22
|
+
align?: "left" | "right" | "center";
|
|
23
|
+
format?: (value: any) => string;
|
|
24
|
+
/**
|
|
25
|
+
* Opt-in truncation. When `true` (and the column has a resolved width — a
|
|
26
|
+
* fixed `width` or a computed `flex` width), cell values longer than that
|
|
27
|
+
* width are ellipsized to fit the column so downstream columns stay aligned.
|
|
28
|
+
* Defaults to `false` so existing tables keep their current non-truncating
|
|
29
|
+
* behavior — only columns that explicitly opt in are clipped.
|
|
30
|
+
*/
|
|
31
|
+
truncate?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare function formatTable(data: Record<string, any>[], columns: TableColumn[], options?: {
|
|
34
|
+
maxWidth?: number;
|
|
35
|
+
}): string;
|
|
36
|
+
export declare function success(message: string): void;
|
|
37
|
+
export declare function error(message: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Render an API error (or any Error) with its message plus the server's
|
|
40
|
+
* structured `details` payload, if present. Shared by `config push`,
|
|
41
|
+
* `workflows create`/`update`, and any command that surfaces server-side
|
|
42
|
+
* validation failures (#1173).
|
|
43
|
+
*
|
|
44
|
+
* The server's error envelope can emit `details` as either:
|
|
45
|
+
* - an **array** of validation-issue strings/objects (e.g. the workflow
|
|
46
|
+
* identity validator's per-step reasons), or
|
|
47
|
+
* - an **object** (#666 schema gate — `{ code, ... }`).
|
|
48
|
+
*
|
|
49
|
+
* Both shapes are rendered without throwing; an absent/empty `details` prints
|
|
50
|
+
* just the message. Duck-typed (reads `.message`/`.details`) so it works on
|
|
51
|
+
* any `ApiError` instance without importing the class — keeping `output.ts`
|
|
52
|
+
* dependency-free.
|
|
53
|
+
*/
|
|
54
|
+
export declare function printApiError(err: unknown): void;
|
|
55
|
+
export declare function warn(message: string): void;
|
|
56
|
+
export declare function info(message: string): void;
|
|
57
|
+
export declare function dim(message: string): void;
|
|
58
|
+
export declare function heading(message: string): void;
|
|
59
|
+
export declare function json(data: any): void;
|
|
60
|
+
/**
|
|
61
|
+
* Print one compact JSON object on its own line (NDJSON) to stdout.
|
|
62
|
+
*
|
|
63
|
+
* A documented exception to the "single parseable JSON document" stdout rule
|
|
64
|
+
* above (issue #695): a `--follow` tail is an unbounded stream, so it cannot be
|
|
65
|
+
* one array — it emits one object per row per line, which a consumer reads with
|
|
66
|
+
* `jq -c` line by line. `--json --watch` still emits one array per redraw via
|
|
67
|
+
* `json()`; only the append-only follow stream uses `jsonLine`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function jsonLine(obj: unknown): void;
|
|
70
|
+
export declare function formatDate(date: string | Date | null | undefined): string;
|
|
71
|
+
/**
|
|
72
|
+
* Colour a status value for terminal output. Covers both the resource
|
|
73
|
+
* lifecycle statuses (draft/active/archived/deprecated) and the canonical
|
|
74
|
+
* workflow-run vocabulary from `lib/run-status.ts` (#2348), which every run
|
|
75
|
+
* status surface now reports:
|
|
76
|
+
*
|
|
77
|
+
* queued, running, apply_pending, apply_claimed,
|
|
78
|
+
* completed, failed, terminated, missing, skipped
|
|
79
|
+
*
|
|
80
|
+
* `terminated`, `queued`, the two apply-flow states and `missing` used to fall
|
|
81
|
+
* through to the uncoloured default, so an aborted run and a parked run read
|
|
82
|
+
* exactly like an unknown value.
|
|
83
|
+
*/
|
|
84
|
+
export declare function formatStatus(status: string | undefined | null): string;
|
|
85
|
+
export declare function formatId(id: string): string;
|
|
86
|
+
export declare function formatBoolean(value: boolean | undefined | null): string;
|
|
87
|
+
export declare function formatNumber(value: number | undefined | null): string;
|
|
88
|
+
export declare function formatDuration(ms: number | undefined | null): string;
|
|
89
|
+
export declare function formatPercent(value: number | undefined | null): string;
|
|
90
|
+
export declare function keyValue(label: string, value: string | number | boolean | null | undefined): void;
|
|
91
|
+
/**
|
|
92
|
+
* Print a `label: value` line on **stdout** as part of a command's primary
|
|
93
|
+
* data output (e.g., `primitive integrations get <id>`,
|
|
94
|
+
* `primitive workflows get <id>`). Same visual rendering as `keyValue()`,
|
|
95
|
+
* but on the data stream so the value survives `> out.txt` redirection.
|
|
96
|
+
*
|
|
97
|
+
* Use `keyValue()` (stderr) for post-action diagnostic summaries; use
|
|
98
|
+
* `result()` (stdout) for fields the caller specifically requested.
|
|
99
|
+
*/
|
|
100
|
+
export declare function result(label: string, value: string | number | boolean | null | undefined): void;
|
|
101
|
+
export declare function divider(): void;
|
|
102
|
+
/**
|
|
103
|
+
* In-place progress indicator for long-running commands (e.g. polling a
|
|
104
|
+
* batch run). Writes to stderr so it can't corrupt JSON on stdout under
|
|
105
|
+
* `--json`. Callers should follow the final progress line with `progressEnd()`
|
|
106
|
+
* to print a trailing newline.
|
|
107
|
+
*/
|
|
108
|
+
export declare function progress(message: string): void;
|
|
109
|
+
export declare function progressEnd(): void;
|
package/dist/src/lib/output.js
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Ellipsize `str` (its visible, ANSI-stripped length) to at most `width`
|
|
4
|
+
* characters. Strings already within `width` are returned unchanged. Very
|
|
5
|
+
* narrow widths still keep a sensible result: width 1-3 returns leading dots.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: assumes the value carries no ANSI styling (the only opt-in caller —
|
|
8
|
+
* the guides DESCRIPTION column — passes plain strings). Truncating mid-escape
|
|
9
|
+
* would corrupt styling, so truncation is opt-in per column rather than global.
|
|
10
|
+
*/
|
|
11
|
+
function truncateToWidth(str, width) {
|
|
12
|
+
const stripped = stripAnsi(str);
|
|
13
|
+
if (stripped.length <= width)
|
|
14
|
+
return str;
|
|
15
|
+
if (width <= 0)
|
|
16
|
+
return "";
|
|
17
|
+
if (width <= 3)
|
|
18
|
+
return ".".repeat(width);
|
|
19
|
+
return stripped.slice(0, width - 1) + "…";
|
|
20
|
+
}
|
|
21
|
+
export function formatTable(data, columns, options) {
|
|
3
22
|
if (data.length === 0) {
|
|
4
23
|
return chalk.dim("No results found.");
|
|
5
24
|
}
|
|
@@ -12,6 +31,33 @@ export function formatTable(data, columns) {
|
|
|
12
31
|
}));
|
|
13
32
|
return col.width ?? Math.max(headerWidth, maxDataWidth);
|
|
14
33
|
});
|
|
34
|
+
// Flex pass (#1065): size the first column marked `flex` from the remaining
|
|
35
|
+
// terminal width so the table shows as much as fits without ever wrapping.
|
|
36
|
+
// The sibling widths above are already content-derived, so subtracting their
|
|
37
|
+
// ACTUAL widths plus the exact `2 * (N - 1)` inter-column padding makes the
|
|
38
|
+
// no-wrap guarantee structural rather than maintained by hand. Gated to flex
|
|
39
|
+
// columns so non-flex tables never read `process.stdout.columns`.
|
|
40
|
+
const flexIndex = columns.findIndex((col) => col.flex);
|
|
41
|
+
if (flexIndex !== -1) {
|
|
42
|
+
const col = columns[flexIndex];
|
|
43
|
+
const floor = Math.max(col.flexFloor ?? 0, col.header.length);
|
|
44
|
+
const cap = col.flexMax ?? Infinity;
|
|
45
|
+
const maxWidth = options?.maxWidth ?? process.stdout.columns;
|
|
46
|
+
if (typeof maxWidth === "number") {
|
|
47
|
+
const siblingWidth = widths.reduce((sum, w, i) => (i === flexIndex ? sum : sum + w), 0);
|
|
48
|
+
const padding = 2 * (columns.length - 1);
|
|
49
|
+
const avail = maxWidth - siblingWidth - padding;
|
|
50
|
+
// Clamp to [floor, cap]; never below the floor (so the header/min content
|
|
51
|
+
// stays readable) and never negative.
|
|
52
|
+
widths[flexIndex] = Math.min(cap, Math.max(floor, avail));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Non-TTY (piped/redirected): no terminal width to wrap against. Show as
|
|
56
|
+
// much as the cap allows — full content up to the contract max — falling
|
|
57
|
+
// back to the content-derived width when no cap is set.
|
|
58
|
+
widths[flexIndex] = cap === Infinity ? widths[flexIndex] : cap;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
15
61
|
// Format header
|
|
16
62
|
const header = columns
|
|
17
63
|
.map((col, i) => {
|
|
@@ -24,7 +70,13 @@ export function formatTable(data, columns) {
|
|
|
24
70
|
// Format rows
|
|
25
71
|
const rows = data.map((row) => columns
|
|
26
72
|
.map((col, i) => {
|
|
27
|
-
|
|
73
|
+
let value = col.format ? col.format(row[col.key]) : String(row[col.key] ?? "");
|
|
74
|
+
// Opt-in: clip over-long cells to the column's resolved width (a fixed
|
|
75
|
+
// `width` or a computed `flex` width) so the columns that follow stay
|
|
76
|
+
// aligned (e.g. guides DESCRIPTION before LANGUAGES).
|
|
77
|
+
if (col.truncate && (col.width !== undefined || col.flex)) {
|
|
78
|
+
value = truncateToWidth(value, widths[i]);
|
|
79
|
+
}
|
|
28
80
|
return padString(value, widths[i], col.align ?? "left");
|
|
29
81
|
})
|
|
30
82
|
.join(" "));
|
|
@@ -47,33 +99,119 @@ function stripAnsi(str) {
|
|
|
47
99
|
// Simple ANSI escape code stripper
|
|
48
100
|
return str.replace(/\x1b\[[0-9;]*m/g, "");
|
|
49
101
|
}
|
|
102
|
+
// Stream-routing convention (see issue #695):
|
|
103
|
+
// - data → stdout (`json`, `result`, plus the formatter helpers below
|
|
104
|
+
// that just return strings for callers to print themselves).
|
|
105
|
+
// - diagnostics → stderr (`success`, `warn`, `info`, `dim`, `heading`,
|
|
106
|
+
// `keyValue`, `divider`, `error`).
|
|
107
|
+
//
|
|
108
|
+
// This mirrors `git`/`kubectl`/`aws`/`gh` so that any command with a `--json`
|
|
109
|
+
// flag emits a single parseable JSON document on stdout, regardless of
|
|
110
|
+
// status, warning, or progress text the same command may print. Callers
|
|
111
|
+
// running interactively still see diagnostics by default because terminals
|
|
112
|
+
// display stderr; users redirecting `2>/dev/null` get a quiet pipe; users
|
|
113
|
+
// running `2>&1` get everything mixed.
|
|
114
|
+
//
|
|
115
|
+
// `result()` vs. `keyValue()` (data vs. diagnostic split):
|
|
116
|
+
// `keyValue()` is a *diagnostic* helper — use it for the `key: value`
|
|
117
|
+
// summary lines printed *after* a side-effecting command like `apps create`,
|
|
118
|
+
// `workflows update`, or `secrets set` (those summaries are nice context but
|
|
119
|
+
// are not what the caller asked the command to produce). `result()` is the
|
|
120
|
+
// *data* counterpart — use it for the primary fields a `get` / `show` /
|
|
121
|
+
// `describe` command emits, where the caller ran the command specifically
|
|
122
|
+
// to read those fields. Keeping the two on different streams means
|
|
123
|
+
// `primitive integrations get foo > out.txt` produces a non-empty `out.txt`
|
|
124
|
+
// even though the same command's status diagnostics still go to stderr.
|
|
50
125
|
export function success(message) {
|
|
51
|
-
console.
|
|
126
|
+
console.error(chalk.green("✓") + " " + message);
|
|
52
127
|
}
|
|
53
128
|
export function error(message) {
|
|
54
129
|
console.error(chalk.red("✗") + " " + message);
|
|
55
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Render an API error (or any Error) with its message plus the server's
|
|
133
|
+
* structured `details` payload, if present. Shared by `config push`,
|
|
134
|
+
* `workflows create`/`update`, and any command that surfaces server-side
|
|
135
|
+
* validation failures (#1173).
|
|
136
|
+
*
|
|
137
|
+
* The server's error envelope can emit `details` as either:
|
|
138
|
+
* - an **array** of validation-issue strings/objects (e.g. the workflow
|
|
139
|
+
* identity validator's per-step reasons), or
|
|
140
|
+
* - an **object** (#666 schema gate — `{ code, ... }`).
|
|
141
|
+
*
|
|
142
|
+
* Both shapes are rendered without throwing; an absent/empty `details` prints
|
|
143
|
+
* just the message. Duck-typed (reads `.message`/`.details`) so it works on
|
|
144
|
+
* any `ApiError` instance without importing the class — keeping `output.ts`
|
|
145
|
+
* dependency-free.
|
|
146
|
+
*/
|
|
147
|
+
export function printApiError(err) {
|
|
148
|
+
const e = err;
|
|
149
|
+
const message = typeof e?.message === "string" && e.message.length > 0
|
|
150
|
+
? e.message
|
|
151
|
+
: String(err);
|
|
152
|
+
error(message);
|
|
153
|
+
const details = e?.details;
|
|
154
|
+
if (Array.isArray(details)) {
|
|
155
|
+
for (const detail of details) {
|
|
156
|
+
console.error(` - ${typeof detail === "string" ? detail : JSON.stringify(detail)}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else if (details && typeof details === "object") {
|
|
160
|
+
// Object form (#666 schema gate): render each key so the reason isn't
|
|
161
|
+
// hidden. Skip the redundant `code` (already implied by the message).
|
|
162
|
+
for (const [key, value] of Object.entries(details)) {
|
|
163
|
+
if (key === "code")
|
|
164
|
+
continue;
|
|
165
|
+
console.error(` ${key}: ${typeof value === "string" ? value : JSON.stringify(value)}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
56
169
|
export function warn(message) {
|
|
57
|
-
console.
|
|
170
|
+
console.error(chalk.yellow("!") + " " + message);
|
|
58
171
|
}
|
|
59
172
|
export function info(message) {
|
|
60
|
-
console.
|
|
173
|
+
console.error(chalk.blue("i") + " " + message);
|
|
61
174
|
}
|
|
62
175
|
export function dim(message) {
|
|
63
|
-
console.
|
|
176
|
+
console.error(chalk.dim(message));
|
|
64
177
|
}
|
|
65
178
|
export function heading(message) {
|
|
66
|
-
console.
|
|
179
|
+
console.error(chalk.bold.underline(message));
|
|
67
180
|
}
|
|
68
181
|
export function json(data) {
|
|
69
182
|
console.log(JSON.stringify(data, null, 2));
|
|
70
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Print one compact JSON object on its own line (NDJSON) to stdout.
|
|
186
|
+
*
|
|
187
|
+
* A documented exception to the "single parseable JSON document" stdout rule
|
|
188
|
+
* above (issue #695): a `--follow` tail is an unbounded stream, so it cannot be
|
|
189
|
+
* one array — it emits one object per row per line, which a consumer reads with
|
|
190
|
+
* `jq -c` line by line. `--json --watch` still emits one array per redraw via
|
|
191
|
+
* `json()`; only the append-only follow stream uses `jsonLine`.
|
|
192
|
+
*/
|
|
193
|
+
export function jsonLine(obj) {
|
|
194
|
+
console.log(JSON.stringify(obj));
|
|
195
|
+
}
|
|
71
196
|
export function formatDate(date) {
|
|
72
197
|
if (!date)
|
|
73
198
|
return chalk.dim("-");
|
|
74
199
|
const d = new Date(date);
|
|
75
200
|
return d.toISOString().replace("T", " ").slice(0, 19);
|
|
76
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* Colour a status value for terminal output. Covers both the resource
|
|
204
|
+
* lifecycle statuses (draft/active/archived/deprecated) and the canonical
|
|
205
|
+
* workflow-run vocabulary from `lib/run-status.ts` (#2348), which every run
|
|
206
|
+
* status surface now reports:
|
|
207
|
+
*
|
|
208
|
+
* queued, running, apply_pending, apply_claimed,
|
|
209
|
+
* completed, failed, terminated, missing, skipped
|
|
210
|
+
*
|
|
211
|
+
* `terminated`, `queued`, the two apply-flow states and `missing` used to fall
|
|
212
|
+
* through to the uncoloured default, so an aborted run and a parked run read
|
|
213
|
+
* exactly like an unknown value.
|
|
214
|
+
*/
|
|
77
215
|
export function formatStatus(status) {
|
|
78
216
|
if (!status)
|
|
79
217
|
return "-";
|
|
@@ -90,8 +228,24 @@ export function formatStatus(status) {
|
|
|
90
228
|
case "running":
|
|
91
229
|
case "pending":
|
|
92
230
|
return chalk.blue(status);
|
|
231
|
+
case "queued":
|
|
232
|
+
return chalk.cyan(status);
|
|
233
|
+
// Finished executing, parked waiting for a client to claim/apply.
|
|
234
|
+
case "apply_pending":
|
|
235
|
+
case "apply_claimed":
|
|
236
|
+
return chalk.magenta(status);
|
|
93
237
|
case "failed":
|
|
94
238
|
return chalk.red(status);
|
|
239
|
+
// Aborted before completion — an end state, but not a failure.
|
|
240
|
+
case "terminated":
|
|
241
|
+
return chalk.gray(status);
|
|
242
|
+
// No live instance to report on.
|
|
243
|
+
case "missing":
|
|
244
|
+
return chalk.yellow(status);
|
|
245
|
+
// #2636 — the run never ran: its declarative lock was held and the
|
|
246
|
+
// definition declared `onContention: "ignore"`. An outcome, not a failure.
|
|
247
|
+
case "skipped":
|
|
248
|
+
return chalk.dim.cyan(status);
|
|
95
249
|
default:
|
|
96
250
|
return status;
|
|
97
251
|
}
|
|
@@ -130,6 +284,23 @@ export function formatPercent(value) {
|
|
|
130
284
|
return `${(value * 100).toFixed(1)}%`;
|
|
131
285
|
}
|
|
132
286
|
export function keyValue(label, value) {
|
|
287
|
+
const formattedValue = value === null || value === undefined
|
|
288
|
+
? chalk.dim("-")
|
|
289
|
+
: typeof value === "boolean"
|
|
290
|
+
? formatBoolean(value)
|
|
291
|
+
: String(value);
|
|
292
|
+
console.error(`${chalk.dim(label + ":")} ${formattedValue}`);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Print a `label: value` line on **stdout** as part of a command's primary
|
|
296
|
+
* data output (e.g., `primitive integrations get <id>`,
|
|
297
|
+
* `primitive workflows get <id>`). Same visual rendering as `keyValue()`,
|
|
298
|
+
* but on the data stream so the value survives `> out.txt` redirection.
|
|
299
|
+
*
|
|
300
|
+
* Use `keyValue()` (stderr) for post-action diagnostic summaries; use
|
|
301
|
+
* `result()` (stdout) for fields the caller specifically requested.
|
|
302
|
+
*/
|
|
303
|
+
export function result(label, value) {
|
|
133
304
|
const formattedValue = value === null || value === undefined
|
|
134
305
|
? chalk.dim("-")
|
|
135
306
|
: typeof value === "boolean"
|
|
@@ -138,6 +309,18 @@ export function keyValue(label, value) {
|
|
|
138
309
|
console.log(`${chalk.dim(label + ":")} ${formattedValue}`);
|
|
139
310
|
}
|
|
140
311
|
export function divider() {
|
|
141
|
-
console.
|
|
312
|
+
console.error(chalk.dim("-".repeat(60)));
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* In-place progress indicator for long-running commands (e.g. polling a
|
|
316
|
+
* batch run). Writes to stderr so it can't corrupt JSON on stdout under
|
|
317
|
+
* `--json`. Callers should follow the final progress line with `progressEnd()`
|
|
318
|
+
* to print a trailing newline.
|
|
319
|
+
*/
|
|
320
|
+
export function progress(message) {
|
|
321
|
+
process.stderr.write(`\r${message}`);
|
|
322
|
+
}
|
|
323
|
+
export function progressEnd() {
|
|
324
|
+
process.stderr.write("\n");
|
|
142
325
|
}
|
|
143
326
|
//# sourceMappingURL=output.js.map
|