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
package/README.md
CHANGED
|
@@ -5,9 +5,13 @@ Command-line interface for administering Primitive applications. This CLI provid
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
8
|
+
pnpm add -g primitive-admin
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
+
pnpm is the recommended package manager. If you use npm instead, run
|
|
12
|
+
`npm install -g primitive-admin` — install with one manager only, or you end up
|
|
13
|
+
with two global copies.
|
|
14
|
+
|
|
11
15
|
### Development Setup
|
|
12
16
|
|
|
13
17
|
From the **worklet root directory**:
|
|
@@ -71,11 +75,15 @@ primitive apps --help
|
|
|
71
75
|
The CLI uses browser-based OAuth for authentication. When you run `primitive login`, it opens your browser to authenticate via Google OAuth and stores credentials locally.
|
|
72
76
|
|
|
73
77
|
```bash
|
|
74
|
-
# Login to the
|
|
78
|
+
# Login to the environment resolved from .primitive/config.json
|
|
79
|
+
# (project mode), or the default/PRIMITIVE_SERVER_URL server (legacy mode)
|
|
75
80
|
primitive login
|
|
76
81
|
|
|
77
|
-
# Login to a
|
|
78
|
-
primitive
|
|
82
|
+
# Login to a specific named environment
|
|
83
|
+
primitive -e prod login
|
|
84
|
+
|
|
85
|
+
# Login to a custom server without a project config (legacy mode)
|
|
86
|
+
PRIMITIVE_SERVER_URL=https://api.example.com primitive login
|
|
79
87
|
|
|
80
88
|
# View current session
|
|
81
89
|
primitive whoami
|
|
@@ -129,17 +137,20 @@ Manage applications (requires admin access).
|
|
|
129
137
|
|
|
130
138
|
```bash
|
|
131
139
|
primitive apps list # List all accessible apps
|
|
132
|
-
primitive apps create "My App" # Create a new app
|
|
140
|
+
primitive apps create "My App" # Create a new app (mints the app id)
|
|
133
141
|
primitive apps get <app-id> # Get app details
|
|
134
|
-
primitive apps update <app-id> [opts] # Update app settings
|
|
135
142
|
primitive apps delete <app-id> # Delete an app
|
|
136
143
|
```
|
|
137
144
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
145
|
+
App settings are configuration, so they are authored in `app.toml` and applied
|
|
146
|
+
with `config push` (issue #2645) — there is no `apps update`:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
primitive apps get # what the server is running
|
|
150
|
+
primitive config pull --only app # write those settings into app.toml
|
|
151
|
+
primitive config set app app.mode=invite-only
|
|
152
|
+
primitive config push --only app # apply the edit
|
|
153
|
+
```
|
|
143
154
|
- `--google-oauth` / `--no-google-oauth` - Enable/disable Google OAuth
|
|
144
155
|
- `--passkey` / `--no-passkey` - Enable/disable passkey auth
|
|
145
156
|
- `--magic-link` / `--no-magic-link` - Enable/disable magic link auth
|
|
@@ -150,12 +161,13 @@ Manage users within an app.
|
|
|
150
161
|
|
|
151
162
|
```bash
|
|
152
163
|
primitive users list [app-id] # List users
|
|
164
|
+
primitive users create <email> [--role admin|member] # Create/add user by email
|
|
153
165
|
primitive users invite [app-id] <email> [--role admin] # Invite user
|
|
154
166
|
primitive users remove [app-id] <user-id> # Remove user
|
|
155
167
|
primitive users set-role [app-id] <user-id> <role> # Change role
|
|
156
168
|
primitive users transfer-owner [app-id] <new-owner-id> # Transfer ownership
|
|
157
|
-
primitive users
|
|
158
|
-
primitive users invitations
|
|
169
|
+
primitive users mint-jwt <user-id> [--role <role>] # Mint test JWT (dev/test only)
|
|
170
|
+
primitive users invitations [app-id] # List pending invitations
|
|
159
171
|
```
|
|
160
172
|
|
|
161
173
|
### Waitlist
|
|
@@ -175,57 +187,72 @@ Manage HTTP integrations (external API connections).
|
|
|
175
187
|
|
|
176
188
|
```bash
|
|
177
189
|
primitive integrations list [app-id] # List integrations
|
|
178
|
-
primitive integrations create [app-id] [options] # Create integration
|
|
179
190
|
primitive integrations get <integration-id> # Get details
|
|
180
|
-
primitive integrations update <id> [options] # Update integration
|
|
181
|
-
primitive integrations delete <id> # Soft delete
|
|
182
191
|
primitive integrations test <id> # Test connection
|
|
183
192
|
primitive integrations logs <id> # View invocation logs
|
|
184
193
|
```
|
|
185
194
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
195
|
+
An integration is authored in `integrations/<key>.toml` and applied with
|
|
196
|
+
`config push` — creating, updating and deleting one are all edits to that file:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
primitive config fields integration # its keys, types, defaults
|
|
200
|
+
primitive config create integration weather-api # scaffold the file
|
|
201
|
+
primitive config push --only integration/weather-api
|
|
202
|
+
```
|
|
192
203
|
|
|
193
204
|
**Secrets management:**
|
|
205
|
+
|
|
206
|
+
Integration-scoped secrets are **retired** — the `primitive integrations secrets`
|
|
207
|
+
command group no longer exists. Use app-level secrets instead
|
|
208
|
+
(`primitive secrets set <KEY> --value <value>`) and reference them in integration
|
|
209
|
+
config via `{{secrets.KEY}}`. See the **Secrets** section below.
|
|
210
|
+
|
|
211
|
+
### Secrets
|
|
212
|
+
|
|
213
|
+
Manage encrypted app secrets (API keys, tokens, credentials). Values are encrypted at rest and never displayed after creation.
|
|
214
|
+
|
|
194
215
|
```bash
|
|
195
|
-
primitive
|
|
196
|
-
primitive
|
|
197
|
-
primitive
|
|
216
|
+
primitive secrets list [--app <app-id>] # List secrets (values never shown)
|
|
217
|
+
primitive secrets set <KEY> --value <value> [--summary <text>] # Create or update a secret
|
|
218
|
+
primitive secrets delete <KEY> # Delete a secret
|
|
198
219
|
```
|
|
199
220
|
|
|
221
|
+
**Examples:**
|
|
222
|
+
```bash
|
|
223
|
+
primitive secrets set OPENAI_API_KEY --value "sk-..." --summary "Production key"
|
|
224
|
+
primitive secrets set STRIPE_SECRET --value "sk_live_..."
|
|
225
|
+
primitive secrets list --json
|
|
226
|
+
primitive secrets delete STRIPE_SECRET
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Keys must be uppercase letters, digits, and underscores (e.g., `OPENAI_API_KEY`). Max 100 secrets per app, 2 KB per value. The `set` command is an upsert — it creates or updates automatically. Use `{{secrets.KEY}}` in workflows and `secrets.KEY` in CEL rules.
|
|
230
|
+
|
|
200
231
|
### Prompts
|
|
201
232
|
|
|
202
233
|
Manage LLM prompt configurations.
|
|
203
234
|
|
|
204
235
|
```bash
|
|
205
236
|
primitive prompts list [app-id] # List prompts
|
|
206
|
-
primitive prompts create [app-id] [options] # Create prompt
|
|
207
237
|
primitive prompts get <prompt-id> # Get details
|
|
208
|
-
primitive prompts update <id> [options] # Update prompt
|
|
209
|
-
primitive prompts delete <id> # Soft delete
|
|
210
238
|
primitive prompts execute <id> --vars '{}' # Execute prompt
|
|
211
239
|
primitive prompts preview <id> --vars '{}' # Preview rendered template
|
|
212
240
|
```
|
|
213
241
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
242
|
+
A prompt is authored in `prompts/<key>.toml` and applied with `config push`:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
primitive config create prompt summarizer
|
|
246
|
+
primitive config push --only prompt/summarizer
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Configs (prompt variations)** are `[[configs]]` entries in that same file —
|
|
250
|
+
`active = true` marks the live one, `status = "archived"` retires one, and
|
|
251
|
+
duplicating is copying the block under a new `name`. The CLI reads them:
|
|
222
252
|
|
|
223
|
-
**Configs (prompt variations):**
|
|
224
253
|
```bash
|
|
225
254
|
primitive prompts configs list <prompt-id>
|
|
226
|
-
primitive prompts configs
|
|
227
|
-
primitive prompts configs activate <prompt-id> <config-id>
|
|
228
|
-
primitive prompts configs duplicate <prompt-id> <config-id>
|
|
255
|
+
primitive prompts configs get <prompt> <config>
|
|
229
256
|
```
|
|
230
257
|
|
|
231
258
|
### Workflows
|
|
@@ -234,20 +261,103 @@ Manage multi-step workflow definitions.
|
|
|
234
261
|
|
|
235
262
|
```bash
|
|
236
263
|
primitive workflows list [app-id] # List workflows
|
|
237
|
-
primitive workflows create [app-id] --from-file wf.toml # Create workflow
|
|
238
264
|
primitive workflows get <workflow-id> # Get details
|
|
239
|
-
primitive workflows update <id> [options] # Update metadata
|
|
240
|
-
primitive workflows draft update <id> --from-file wf.toml # Update draft
|
|
241
|
-
primitive workflows publish <id> # Publish draft
|
|
242
265
|
primitive workflows preview <id> --input '{}' # Preview execution
|
|
266
|
+
primitive workflows disable <id> # Take it out of service now
|
|
267
|
+
primitive workflows enable <id> # Put it back
|
|
243
268
|
```
|
|
244
269
|
|
|
270
|
+
A workflow is authored in `workflows/<key>.toml` (named config bodies in
|
|
271
|
+
`workflows/<key>.configs/<name>.toml`) and applied with `config push`:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
primitive config create workflow process-doc
|
|
275
|
+
primitive config push --only workflow/process-doc
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Revisions are read-only history from the retired legacy path (issue #2768:
|
|
279
|
+
`workflows publish` and its endpoint are gone). A workflow created before the
|
|
280
|
+
configuration model — one with no active config — is migrated by authoring
|
|
281
|
+
`workflows/<key>.configs/<name>.toml`, setting `activeConfigName = "<name>"` in
|
|
282
|
+
`workflows/<key>.toml`, and pushing.
|
|
283
|
+
|
|
245
284
|
**Run management:**
|
|
246
285
|
```bash
|
|
247
286
|
primitive workflows runs list <workflow-id>
|
|
248
287
|
primitive workflows runs status <workflow-id> <run-id>
|
|
249
288
|
```
|
|
250
289
|
|
|
290
|
+
**Workflow TOML push-time validation (issue #685):** `primitive config push` —
|
|
291
|
+
the only command that sends a workflow TOML since #2645 — runs the
|
|
292
|
+
file through `cli/src/lib/workflow-toml-validator.ts` before sending it to
|
|
293
|
+
the server. For a step whose `kind` the CLI knows about, the validator
|
|
294
|
+
rejects any top-level field outside the allowlist — most commonly catching
|
|
295
|
+
the footgun where `[steps.<id>.request]` is written under `[[steps]]` (TOML
|
|
296
|
+
places the sub-table under `steps[N][<id>]`, not the intended
|
|
297
|
+
`steps[N].request`, so the runtime silently runs the step with an empty
|
|
298
|
+
`request` block). The correct form for the most-recent step is
|
|
299
|
+
`[steps.request]`. For a step whose `kind` the CLI does NOT know (an older
|
|
300
|
+
CLI run against a newer server that registered a new step kind), the
|
|
301
|
+
per-field check is skipped — so a valid new-kind field is never falsely
|
|
302
|
+
rejected — while the kind-agnostic misnested-header footgun detector still
|
|
303
|
+
fires (issue #998).
|
|
304
|
+
|
|
305
|
+
**The allowlist is generated, not hand-maintained (issue #998):** The field
|
|
306
|
+
union and the known-kind set live in the committed artifact
|
|
307
|
+
`cli/src/lib/generated-allowlist.ts`, generated from the server step runners
|
|
308
|
+
(`src/workflows/steps/*.ts`) and the universal `BaseStepDefinition` shape by
|
|
309
|
+
`cli/scripts/gen-allowlist.mjs`. The generator runs automatically at CLI
|
|
310
|
+
`prebuild`; regenerate manually with `node cli/scripts/gen-allowlist.mjs`
|
|
311
|
+
(or `pnpm -C cli gen:allowlist`). The union is derived from what each runner
|
|
312
|
+
*reads* off the step config — not from what the `*StepDefinition` type
|
|
313
|
+
declares (types over-declare and would weaken the footgun detector). A
|
|
314
|
+
freshness guard (`node cli/scripts/gen-allowlist.mjs --check`, also asserted
|
|
315
|
+
by `cli/tests/unit/workflow-toml-validator-drift-guard.test.ts`) fails if the
|
|
316
|
+
committed artifact drifts from a fresh scan, so the historical hand-edit
|
|
317
|
+
drift (#685/#802/#971) cannot recur. When you add a new step kind or a runner
|
|
318
|
+
starts reading a new field, just regenerate and commit the artifact — there is
|
|
319
|
+
no hand-maintained list to update.
|
|
320
|
+
|
|
321
|
+
**A configuration object's field surface has ONE definition (issue #2644):**
|
|
322
|
+
`src/config-surface/` on the server records, per configuration object, which
|
|
323
|
+
`models.yaml` fields exist, which TOML key each carries, which modes the server
|
|
324
|
+
accepts it in, and — for a field with real behavior — the handler that owns it.
|
|
325
|
+
The server's create/update handlers take their accepted key set from it
|
|
326
|
+
(`pickWritableFields`), and `cli/scripts/gen-config-surfaces.mjs` vendors the
|
|
327
|
+
same modules into the committed artifact
|
|
328
|
+
`cli/src/lib/generated-config-surfaces.ts`, which the CLI's push builder, pull
|
|
329
|
+
serializer and TOML key validation read. The generator runs automatically at CLI
|
|
330
|
+
`prebuild`; regenerate manually with `node cli/scripts/gen-config-surfaces.mjs`
|
|
331
|
+
(or `pnpm -C cli gen:config-surfaces`).
|
|
332
|
+
|
|
333
|
+
Three hard-fail checks live in `cli/tests/unit/config-surface-drift-guard.test.ts`:
|
|
334
|
+
freshness (`--check`, a byte comparison), coverage (every model field of every
|
|
335
|
+
registered object is either exposed or classified `notExposed` **with a
|
|
336
|
+
reason**), and registry existence (every `SYNC_RESOURCE_TYPES` label has a
|
|
337
|
+
definition — the migration's `PENDING_MIGRATION` exemption list is gone, so
|
|
338
|
+
there is nowhere to park one). Add a
|
|
339
|
+
field to `models.yaml` and the CLI unit suite fails until you regenerate and
|
|
340
|
+
classify it — so the CLI can no longer silently drop a new server-side field.
|
|
341
|
+
This supersedes the workflow-only descriptor and generator from #2326.
|
|
342
|
+
|
|
343
|
+
**Template expressions are linted at push time (issue #2689):** the validator
|
|
344
|
+
also inspects every `{{ }}` expression on a step and rejects the ones that can
|
|
345
|
+
never resolve — an unknown root (`{{ inputs.userId }}`; the valid roots are
|
|
346
|
+
`input`, `steps`, `outputs`, `meta`, `secrets`, `vars`, plus the contextual
|
|
347
|
+
`selected`/`user`/`md`, the built-ins `now`/`today`/`uuid`/`ulid`, and — inside a
|
|
348
|
+
forEach step's body only — `iteration`/`loop` and the loop's binding name) or a
|
|
349
|
+
reference to a `steps.<id>` / `outputs.<name>` the file does not declare. An
|
|
350
|
+
expression that is only sometimes present is marked optional with
|
|
351
|
+
`| default: ''` or a trailing `|| ''`, and anything statically undecidable (a
|
|
352
|
+
dynamic bracket key) is left to the run-time check. The lint itself is a
|
|
353
|
+
verbatim generated copy of the server module
|
|
354
|
+
`src/workflows/runner/template-static-lint.ts` at
|
|
355
|
+
`cli/src/lib/generated-template-lint.ts` (`cli/scripts/gen-template-lint.mjs`,
|
|
356
|
+
run at `prebuild`, with a `--check` freshness mode asserted by
|
|
357
|
+
`cli/tests/unit/template-lint-drift-guard.test.ts`), so the CLI's push-time
|
|
358
|
+
verdict and the server's save-time verdict come from the same code.
|
|
359
|
+
|
|
360
|
+
|
|
251
361
|
### Tokens
|
|
252
362
|
|
|
253
363
|
Manage long-lived API access tokens for headless/server authentication.
|
|
@@ -263,7 +373,7 @@ primitive tokens revoke <token-id> [app-id] # Revoke t
|
|
|
263
373
|
**Create options:**
|
|
264
374
|
- `--name <name>` - Token name (required)
|
|
265
375
|
- `--user <user-id>` - App user ID to associate the token with (required)
|
|
266
|
-
- `--ttl <duration>` - Token lifetime (e.g., 7d, 30d, 4w,
|
|
376
|
+
- `--ttl <duration>` - Token lifetime (e.g., 30m, 2h, 7d, 30d, 4w, 3mo, 1y). Omit for never-expiring. Units: `m`/`min`=minutes (≤1440), `h`=hours (≤24), `d`=days, `w`=weeks, `mo`=months, `y`=years. **Note:** as of #420 `m` means minutes (was months); use `mo` for months.
|
|
267
377
|
|
|
268
378
|
### Databases
|
|
269
379
|
|
|
@@ -273,6 +383,7 @@ Manage online databases and permissions. `list` returns databases the user has d
|
|
|
273
383
|
primitive databases list [app-id] # List databases (direct access)
|
|
274
384
|
primitive databases create <title> [app-id] # Create database
|
|
275
385
|
primitive databases get <database-id> [app-id] # Get details
|
|
386
|
+
primitive databases update <database-id> [options] # Update title or type
|
|
276
387
|
primitive databases delete <database-id> [app-id] # Delete database
|
|
277
388
|
```
|
|
278
389
|
|
|
@@ -283,18 +394,48 @@ primitive databases permissions grant <database-id> --user-id <uid> --permission
|
|
|
283
394
|
primitive databases permissions revoke <database-id> <user-id> [app-id]
|
|
284
395
|
```
|
|
285
396
|
|
|
286
|
-
|
|
397
|
+
Permission values: `owner` (set at creation), `manager`
|
|
398
|
+
|
|
399
|
+
**Metadata:**
|
|
400
|
+
```bash
|
|
401
|
+
primitive databases metadata update <database-id> --data '{"key":"value"}' # Merge-update metadata
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**Operations:**
|
|
405
|
+
```bash
|
|
406
|
+
primitive databases operations list <database-id> [app-id] # List registered operations
|
|
407
|
+
primitive databases operations execute <database-id> <op-name> --params '{}' # Execute operation
|
|
408
|
+
primitive databases operations execute <database-id> <op-name> --token <jwt> # Execute as specific user
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
The `--token` flag lets you execute an operation as a specific user using a test JWT from `users mint-jwt`. Useful for testing access rules.
|
|
412
|
+
|
|
413
|
+
Under `--json`, the printed shape is the operation's own. A `query` — and a `pipeline` whose `returnField` names a query step — prints the CLI's list envelope `{ items, hasMore, nextCursor? }`, the same shape as `databases records query --json`. Every other operation type prints unchanged: `count` → `{ count }`, `aggregate` → `{ result }`, mutation → `{ results }`, `applyToQuery` → `{ matched, affected, failed, … }`, and a `returnField = "all"` pipeline → `{ steps: { … } }` with each step's own keys left alone. `--timing` adds `_timing` alongside whichever shape you get.
|
|
414
|
+
|
|
415
|
+
**Records (schema introspection):**
|
|
416
|
+
```bash
|
|
417
|
+
primitive databases records models <database-id> [app-id] # List model names
|
|
418
|
+
primitive databases records describe <database-id> <model> [app-id] # Show inferred schema
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
**Indexes:**
|
|
422
|
+
```bash
|
|
423
|
+
primitive databases indexes list <database-id> [--model <name>] # List indexes
|
|
424
|
+
primitive databases indexes create <database-id> <model> <field> [options] # Create index
|
|
425
|
+
primitive databases indexes drop <database-id> <model> <field> # Drop index
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
**Export / Import:**
|
|
287
429
|
```bash
|
|
288
|
-
primitive databases
|
|
289
|
-
primitive databases
|
|
290
|
-
primitive databases group-permissions revoke <database-id> <group-type> <group-id>
|
|
430
|
+
primitive databases export [app-id] <database-id> --output <dir> # Export records, indexes, constraints
|
|
431
|
+
primitive databases import [app-id] <path> --overwrite --dry-run # Import from export directory
|
|
291
432
|
```
|
|
292
433
|
|
|
293
|
-
|
|
434
|
+
Export creates a directory with `metadata.json`, `records.jsonl`, `indexes.json`, and `constraints.json`. Import restores records and indexes into a new or existing database. Database type config (operations, triggers, access rules) is managed separately via `primitive config` — run `config push` on the target app before importing.
|
|
294
435
|
|
|
295
436
|
### Documents
|
|
296
437
|
|
|
297
|
-
Manage document ownership
|
|
438
|
+
Manage document ownership, group permissions, and export/import.
|
|
298
439
|
|
|
299
440
|
```bash
|
|
300
441
|
primitive documents transfer-owner [app-id] <document-id> <new-owner-id> # Transfer ownership
|
|
@@ -309,6 +450,15 @@ primitive documents group-permissions revoke <document-id> <group-type> <group-i
|
|
|
309
450
|
|
|
310
451
|
Permission values: `read-write`, `reader`
|
|
311
452
|
|
|
453
|
+
**Export / Import:**
|
|
454
|
+
```bash
|
|
455
|
+
primitive documents export [app-id] <document-id> --output <dir> # Export Yjs state, blobs, permissions, aliases
|
|
456
|
+
primitive documents export-all [app-id] --user-id <id> --owned-only # Export all docs for a user
|
|
457
|
+
primitive documents import [app-id] <path> --overwrite --aliases overwrite|skip --dry-run # Import from export
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
Export creates a directory per document with `metadata.json`, `document.yjs` (Yjs state), `permissions.json` (for reference), and `blobs/` (attachments). Permissions are exported for reference but not restored during import — the importing admin is the new owner and manages sharing in the target app. Document IDs are preserved across import. User-scoped aliases can be restored with `--aliases overwrite` (update existing) or `--aliases skip` (keep existing, default).
|
|
461
|
+
|
|
312
462
|
### Groups
|
|
313
463
|
|
|
314
464
|
Manage groups, members, and memberships.
|
|
@@ -336,26 +486,44 @@ primitive groups memberships <user-id> [app-id] # List user's group mem
|
|
|
336
486
|
|
|
337
487
|
**Group resource access:**
|
|
338
488
|
```bash
|
|
339
|
-
primitive groups databases <group-type> <group-id> # List databases a group can access
|
|
340
489
|
primitive groups documents <group-type> <group-id> # List documents a group can access
|
|
341
490
|
```
|
|
342
491
|
|
|
343
|
-
Group permissions on
|
|
492
|
+
Group permissions on documents are managed via `primitive documents group-permissions` (see [Documents](#documents) above).
|
|
344
493
|
|
|
345
494
|
### Analytics
|
|
346
495
|
|
|
347
496
|
View usage analytics for an app.
|
|
348
497
|
|
|
349
498
|
```bash
|
|
350
|
-
|
|
351
|
-
primitive analytics
|
|
352
|
-
primitive analytics
|
|
353
|
-
primitive analytics
|
|
499
|
+
# Overview & active users
|
|
500
|
+
primitive analytics overview [app-id] # DAU / WAU / MAU + growth
|
|
501
|
+
primitive analytics daily-active [app-id] # Daily active users time series
|
|
502
|
+
primitive analytics rolling-active [app-id] # Rolling active users (28 points)
|
|
503
|
+
primitive analytics cohort-retention [app-id] # Weekly cohort retention matrix
|
|
504
|
+
|
|
505
|
+
# Users
|
|
506
|
+
primitive analytics top-users [app-id] # Most active users
|
|
507
|
+
primitive analytics user-search [app-id] --query <q> # Search by email or ULID
|
|
508
|
+
primitive analytics user-detail <user-ulid> [app-id] # User activity breakdown
|
|
509
|
+
primitive analytics user-snapshot <user-ulid> [app-id] # Latest context snapshot
|
|
510
|
+
|
|
511
|
+
# Events
|
|
512
|
+
primitive analytics events [app-id] # Paginated event feed
|
|
513
|
+
primitive analytics events-grouped [app-id] # Events grouped by dimension
|
|
514
|
+
|
|
515
|
+
# Features
|
|
516
|
+
primitive analytics integrations [app-id] # Integration usage metrics
|
|
517
|
+
primitive analytics workflows [app-id] # Top workflows by runs
|
|
518
|
+
primitive analytics prompts [app-id] # Top prompts by executions
|
|
354
519
|
```
|
|
355
520
|
|
|
356
|
-
**
|
|
357
|
-
- `--window-days <n>` - Time window (default
|
|
358
|
-
- `--limit <n>` - Result limit
|
|
521
|
+
**Common options:**
|
|
522
|
+
- `--window-days <n>` - Time window in days (default varies per command)
|
|
523
|
+
- `--limit <n>` - Result limit (top-users, workflows, prompts)
|
|
524
|
+
- `--group-by <dim>` - Dimension for events-grouped (action, feature, route, country, deviceType, plan, day)
|
|
525
|
+
- `--page <n>` - Page number for events feed (0-based)
|
|
526
|
+
- `--json` - Output raw JSON
|
|
359
527
|
|
|
360
528
|
### Admins (Super-Admin Only)
|
|
361
529
|
|
|
@@ -392,15 +560,15 @@ primitive catalog integrations update <catalog-id> [options]
|
|
|
392
560
|
primitive catalog integrations delete <catalog-id>
|
|
393
561
|
```
|
|
394
562
|
|
|
395
|
-
###
|
|
563
|
+
### Config (TOML Configuration)
|
|
396
564
|
|
|
397
|
-
|
|
565
|
+
Author app configuration as TOML files and reconcile them with the server.
|
|
398
566
|
|
|
399
567
|
```bash
|
|
400
|
-
primitive
|
|
401
|
-
primitive
|
|
402
|
-
primitive
|
|
403
|
-
primitive
|
|
568
|
+
primitive config init [app-id] --dir ./config # Initialize config directory
|
|
569
|
+
primitive config pull [app-id] --dir ./config # Pull remote config to local
|
|
570
|
+
primitive config push [app-id] --dir ./config # Push local config to remote
|
|
571
|
+
primitive config diff [app-id] --dir ./config # Show differences
|
|
404
572
|
```
|
|
405
573
|
|
|
406
574
|
**Options:**
|
|
@@ -436,7 +604,9 @@ baseUrl = "https://myapp.com"
|
|
|
436
604
|
[auth]
|
|
437
605
|
googleOAuthEnabled = true
|
|
438
606
|
passkeyEnabled = true
|
|
439
|
-
|
|
607
|
+
emailSignInEnabled = true # one email carrying a code and a link
|
|
608
|
+
appleSignInEnabled = true # Sign in with Apple
|
|
609
|
+
appleAudiences = ["com.example.MyApp"] # allowed Apple audiences
|
|
440
610
|
|
|
441
611
|
[cors]
|
|
442
612
|
mode = "custom"
|
|
@@ -444,6 +614,19 @@ allowedOrigins = ["https://myapp.com"]
|
|
|
444
614
|
allowCredentials = true
|
|
445
615
|
```
|
|
446
616
|
|
|
617
|
+
Notes on `[auth]`:
|
|
618
|
+
|
|
619
|
+
- Only keys you actually list are pushed. Omitting a key leaves the server's
|
|
620
|
+
current value untouched — it is **not** reset to `false`. To turn a method
|
|
621
|
+
off, set it explicitly (e.g. `emailSignInEnabled = false`).
|
|
622
|
+
- An unrecognized `[auth]` key (for example a typo like `googleOauthEnabled`)
|
|
623
|
+
produces a warning on `push` and is ignored, rather than being silently
|
|
624
|
+
dropped. The push still applies the recognized keys.
|
|
625
|
+
- `appleAudiences = []` and an omitted `appleAudiences` both mean "no
|
|
626
|
+
audiences" (the server stores them the same way), so `pull` omits the key
|
|
627
|
+
when there are no audiences. A `[] ` round-trip reading back as an omitted
|
|
628
|
+
key is expected, not data loss.
|
|
629
|
+
|
|
447
630
|
### Example: integrations/weather-api.toml
|
|
448
631
|
|
|
449
632
|
```toml
|
|
@@ -451,7 +634,6 @@ allowCredentials = true
|
|
|
451
634
|
key = "weather-api"
|
|
452
635
|
displayName = "Weather API"
|
|
453
636
|
description = "OpenWeatherMap integration"
|
|
454
|
-
status = "active"
|
|
455
637
|
timeoutMs = 30000
|
|
456
638
|
|
|
457
639
|
[requestConfig]
|
|
@@ -467,7 +649,6 @@ allowedPaths = ["/weather", "/forecast"]
|
|
|
467
649
|
key = "summarizer"
|
|
468
650
|
displayName = "Text Summarizer"
|
|
469
651
|
description = "Summarizes input text"
|
|
470
|
-
status = "active"
|
|
471
652
|
|
|
472
653
|
[[configs]]
|
|
473
654
|
name = "default"
|
|
@@ -500,6 +681,133 @@ primitive apps list
|
|
|
500
681
|
primitive apps list --json | jq '.[0].appId'
|
|
501
682
|
```
|
|
502
683
|
|
|
684
|
+
### Stdout vs. stderr
|
|
685
|
+
|
|
686
|
+
The CLI follows the same convention as `git`, `kubectl`, `aws`, and `gh`:
|
|
687
|
+
|
|
688
|
+
- **stdout** carries the *data* the command produced — JSON documents under
|
|
689
|
+
`--json`, tabular listings (`apps list`), raw values (`primitive token`),
|
|
690
|
+
and the primary `label: value` fields a `get` / `show` / `describe` command
|
|
691
|
+
emits (e.g. `primitive integrations get <id>`).
|
|
692
|
+
- **stderr** carries *diagnostics* — status text (`✓ Created…`,
|
|
693
|
+
`i Waiting for completion...`), warnings (`!` markers), progress lines, and
|
|
694
|
+
the `key: value` summaries shown *after* a side-effecting command runs
|
|
695
|
+
(e.g. the `Webhook ID: …` confirmation printed by `webhooks create`).
|
|
696
|
+
|
|
697
|
+
This means `primitive <cmd> --json | jq` always works, regardless of any
|
|
698
|
+
status / warning / progress text the command may print along the way.
|
|
699
|
+
It also means `primitive integrations get <id> > out.txt` writes the
|
|
700
|
+
integration's fields to `out.txt` while the status diagnostics still appear
|
|
701
|
+
on the terminal via stderr.
|
|
702
|
+
|
|
703
|
+
Conversely, redirecting stderr (`primitive <cmd> 2>/dev/null`) silences
|
|
704
|
+
diagnostics — including success checkmarks like `✓ Pushed 3 changes` — so
|
|
705
|
+
prefer `2>&1 >file.txt` if you want the full transcript.
|
|
706
|
+
|
|
707
|
+
For contributors writing new commands, the output helpers in
|
|
708
|
+
`cli/src/lib/output.ts` make the data-vs-diagnostic split explicit: use
|
|
709
|
+
`json()` and `result(label, value)` for data the caller asked for, and
|
|
710
|
+
`success()` / `info()` / `warn()` / `keyValue()` / `divider()` / `heading()`
|
|
711
|
+
for diagnostics about what the command did.
|
|
712
|
+
|
|
713
|
+
## Programmatic surfaces
|
|
714
|
+
|
|
715
|
+
### `primitive help --json` — command manifest
|
|
716
|
+
|
|
717
|
+
`primitive help --json` prints a machine-readable manifest of the full command
|
|
718
|
+
tree (commands, subcommands, positional args, options, aliases, global options,
|
|
719
|
+
and the CLI version) to **stdout** as a single JSON document, then exits `0`. It
|
|
720
|
+
is hidden/undocumented in human `--help` output, auth-free, and runs entirely
|
|
721
|
+
offline (no project config, no credentials, no network) — so it works in any
|
|
722
|
+
directory, including one with no `.primitive/`.
|
|
723
|
+
|
|
724
|
+
```bash
|
|
725
|
+
primitive help --json | jq '.commands[] | select(.name=="sync") | .commands[].name'
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
Shape (`schemaVersion: 1`):
|
|
729
|
+
|
|
730
|
+
```jsonc
|
|
731
|
+
{
|
|
732
|
+
"schemaVersion": 1,
|
|
733
|
+
"name": "primitive",
|
|
734
|
+
"version": "1.0.49",
|
|
735
|
+
"globalOptions": [ { "flags": "-e, --env <name>", "description": "…", "required": true, "defaultValue": null, "hidden": false } ],
|
|
736
|
+
"commands": [
|
|
737
|
+
{
|
|
738
|
+
"name": "sync",
|
|
739
|
+
"description": "…",
|
|
740
|
+
"aliases": [],
|
|
741
|
+
"args": [],
|
|
742
|
+
"options": [],
|
|
743
|
+
"commands": [
|
|
744
|
+
{
|
|
745
|
+
"name": "push",
|
|
746
|
+
"description": "…",
|
|
747
|
+
"aliases": [],
|
|
748
|
+
"args": [ { "name": "app-id", "required": false, "variadic": false, "description": "…" } ],
|
|
749
|
+
"options": [ { "flags": "--dir <path>", "description": "…", "required": true, "defaultValue": null, "hidden": false } ],
|
|
750
|
+
"commands": []
|
|
751
|
+
}
|
|
752
|
+
]
|
|
753
|
+
}
|
|
754
|
+
]
|
|
755
|
+
}
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
`hidden` marks a deprecated alias that still works but is not part of the
|
|
759
|
+
supported surface (it is omitted from human `--help` too). Tooling that treats
|
|
760
|
+
the manifest as an allowlist — the docs CLI gate does — should skip those flags.
|
|
761
|
+
|
|
762
|
+
`schemaVersion` is the contract knob: consumers assert the shape they understand
|
|
763
|
+
and fail loud if a future CLI bumps it (a breaking change for downstream tooling
|
|
764
|
+
such as docs CI that drift-gates documented invocations against the published
|
|
765
|
+
CLI).
|
|
766
|
+
|
|
767
|
+
### `primitive-admin/validators` — TOML validators
|
|
768
|
+
|
|
769
|
+
The TOML validators that `config push` runs as its load-bearing gate are exported
|
|
770
|
+
from the `primitive-admin/validators` subpath (ESM-only, with types) so external
|
|
771
|
+
tooling can validate exactly the way the published CLI does — instead of
|
|
772
|
+
re-implementing the flow and silently drifting.
|
|
773
|
+
|
|
774
|
+
```ts
|
|
775
|
+
import {
|
|
776
|
+
validateWorkflowTomlSource, // source-level wrapper (parse → expand → validate)
|
|
777
|
+
validateWorkflowToml, // raw: pure fn over already-parsed TOML
|
|
778
|
+
formatWorkflowTomlErrors,
|
|
779
|
+
validateOperations, // raw: pure fn over already-parsed operations[]
|
|
780
|
+
formatIssue,
|
|
781
|
+
} from "primitive-admin/validators";
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
Two contracts:
|
|
785
|
+
|
|
786
|
+
- **`validateWorkflowTomlSource(raw, filePath)`** — pass the **raw TOML source
|
|
787
|
+
string** and the workflow's path. It runs the *identical* parse →
|
|
788
|
+
`expandWorkflowTomlData()` (`include` fragment expansion) → `validateWorkflowToml`
|
|
789
|
+
→ `formatWorkflowTomlErrors` path that `config push` runs, so it cannot diverge
|
|
790
|
+
from `config push` on workflow `include` fragments. Returns
|
|
791
|
+
`{ errors, formatted }` (`formatted` is `null` when valid). Fragment files
|
|
792
|
+
resolve relative to `<filePath>/../../workflow-fragments/`, matching the CLI.
|
|
793
|
+
|
|
794
|
+
- **The raw validators** (`validateWorkflowToml`, `validateOperations`,
|
|
795
|
+
`formatWorkflowTomlErrors`, `formatIssue`) are **pure functions over
|
|
796
|
+
already-parsed TOML** — they do *not* read files or parse TOML. The consumer
|
|
797
|
+
parses (e.g. with `smol-toml`) and, for workflows, performs any `include`
|
|
798
|
+
expansion itself. There is **no coupling on a specific TOML parser version**:
|
|
799
|
+
pass whatever parsed object / `operations[]` you already have.
|
|
800
|
+
|
|
801
|
+
```ts
|
|
802
|
+
import * as TOML from "smol-toml";
|
|
803
|
+
const data = TOML.parse(raw);
|
|
804
|
+
const errs = validateWorkflowToml(data);
|
|
805
|
+
if (errs.length) throw new Error(formatWorkflowTomlErrors(path, errs));
|
|
806
|
+
```
|
|
807
|
+
|
|
808
|
+
Internal helpers (`collectParamRefs`, `declaredParamNames`,
|
|
809
|
+
`locateOperationLine`) are intentionally **not** exported.
|
|
810
|
+
|
|
503
811
|
## Exit Codes
|
|
504
812
|
|
|
505
813
|
- `0` - Success
|
|
@@ -508,15 +816,30 @@ primitive apps list --json | jq '.[0].appId'
|
|
|
508
816
|
|
|
509
817
|
## Environment Variables
|
|
510
818
|
|
|
511
|
-
- `PRIMITIVE_SERVER_URL` - Server URL for login (defaults to `https://primitiveapi.com`)
|
|
819
|
+
- `PRIMITIVE_SERVER_URL` - Server URL for login in legacy mode (defaults to `https://primitiveapi.com`)
|
|
820
|
+
|
|
821
|
+
**Login server resolution:**
|
|
822
|
+
1. Project mode (`.primitive/config.json` present): the active environment's
|
|
823
|
+
`apiUrl`. Select the environment with `-e <name>`, `PRIMITIVE_ENV`,
|
|
824
|
+
`primitive env use <name>` (this machine's selection, stored in the
|
|
825
|
+
gitignored `.primitive/local.json`), or the committed `defaultEnvironment`
|
|
826
|
+
— in that order. An unresolvable environment fails loudly — `login`
|
|
827
|
+
never silently falls back to production.
|
|
828
|
+
2. Legacy mode (no project config): `PRIMITIVE_SERVER_URL`, else the default
|
|
829
|
+
`https://primitiveapi.com`.
|
|
512
830
|
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
831
|
+
> `login` no longer accepts `-s/--server` (removed in a breaking change). Use
|
|
832
|
+
> `-e <env>` in a project, or `PRIMITIVE_SERVER_URL` for local dev / scripts.
|
|
833
|
+
> `init` and `bootstrap` keep their own `-s/--server` (they run before a
|
|
834
|
+
> project config exists).
|
|
517
835
|
|
|
518
836
|
## Development
|
|
519
837
|
|
|
838
|
+
Before adding or changing a command, read [`docs/cli-design.md`](../docs/cli-design.md)
|
|
839
|
+
in the repo root — the CLI's design rules (which verbs each kind of noun carries,
|
|
840
|
+
TOML-only authoring, deletion and naming rules, what a breaking change obliges).
|
|
841
|
+
It is internal maintainer guidance and is not published.
|
|
842
|
+
|
|
520
843
|
```bash
|
|
521
844
|
# Run without building (uses tsx)
|
|
522
845
|
pnpm run cli:dev -- login
|
|
@@ -570,12 +893,13 @@ cli/tests/
|
|
|
570
893
|
config.test.ts # Credentials and config management
|
|
571
894
|
output.test.ts # Output formatting functions
|
|
572
895
|
integration/
|
|
573
|
-
api-client.test.ts
|
|
574
|
-
commands.test.ts
|
|
575
|
-
tokens.test.ts
|
|
576
|
-
databases.test.ts
|
|
577
|
-
documents.test.ts
|
|
578
|
-
groups.test.ts
|
|
896
|
+
api-client.test.ts # API client HTTP tests
|
|
897
|
+
commands.test.ts # CLI command tests
|
|
898
|
+
tokens.test.ts # Token lifecycle tests
|
|
899
|
+
databases.test.ts # Database CRUD, permissions, group permissions tests
|
|
900
|
+
documents.test.ts # Document group permissions, group resource listing tests
|
|
901
|
+
groups.test.ts # Group CRUD, members, memberships tests
|
|
902
|
+
classroom-e2e.test.ts # End-to-end classroom app workflow (types, rules, operations, access)
|
|
579
903
|
```
|
|
580
904
|
|
|
581
905
|
## Troubleshooting
|