primitive-admin 1.0.63 → 1.0.64
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 +132 -42
- package/assets/skill/skills/primitive-platform/SKILL.md +142 -661
- package/dist/bin/primitive.js +121 -41
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.js +37 -50
- package/dist/src/commands/admins.js.map +1 -1
- package/dist/src/commands/analytics.js +178 -9
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.js +12 -5
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth-sessions.d.ts +7 -0
- package/dist/src/commands/auth-sessions.js +144 -0
- package/dist/src/commands/auth-sessions.js.map +1 -0
- package/dist/src/commands/auth.js +76 -116
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +2 -1
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/catalog.js +26 -10
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collection-type-configs.js +3 -10
- package/dist/src/commands/collection-type-configs.js.map +1 -1
- package/dist/src/commands/collections.js +736 -19
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/config.js +13 -27
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/connections.js +8 -9
- package/dist/src/commands/connections.js.map +1 -1
- package/dist/src/commands/cron-triggers.js +2 -1
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/database-type-configs.js +5 -12
- package/dist/src/commands/database-type-configs.js.map +1 -1
- package/dist/src/commands/databases.js +59 -72
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.d.ts +58 -0
- package/dist/src/commands/documents.js +1623 -95
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.js +2 -1
- package/dist/src/commands/email-templates.js.map +1 -1
- package/dist/src/commands/env.d.ts +1 -1
- package/dist/src/commands/env.js +89 -43
- package/dist/src/commands/env.js.map +1 -1
- package/dist/src/commands/feature-flags.js +2 -1
- package/dist/src/commands/feature-flags.js.map +1 -1
- package/dist/src/commands/functions.d.ts +20 -0
- package/dist/src/commands/functions.js +1630 -0
- package/dist/src/commands/functions.js.map +1 -0
- package/dist/src/commands/group-type-configs.js +2 -1
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/groups.js +30 -17
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.js +17 -11
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/init.d.ts +12 -15
- package/dist/src/commands/init.js +44 -92
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +35 -12
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/locks.js +17 -2
- package/dist/src/commands/locks.js.map +1 -1
- package/dist/src/commands/metadata-category-configs.js +2 -1
- package/dist/src/commands/metadata-category-configs.js.map +1 -1
- package/dist/src/commands/metadata.js +8 -1
- package/dist/src/commands/metadata.js.map +1 -1
- package/dist/src/commands/prompts.js +106 -59
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.js +3 -10
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.js +33 -28
- package/dist/src/commands/scripts.js.map +1 -1
- package/dist/src/commands/secrets.js +2 -1
- package/dist/src/commands/secrets.js.map +1 -1
- package/dist/src/commands/sessions.js +10 -9
- package/dist/src/commands/sessions.js.map +1 -1
- package/dist/src/commands/sync-app-settings.js +3 -5
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.d.ts +390 -13
- package/dist/src/commands/sync.js +2613 -451
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.js +2 -1
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.js +19 -10
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/vars.js +2 -1
- package/dist/src/commands/vars.js.map +1 -1
- package/dist/src/commands/waitlist.js +2 -1
- package/dist/src/commands/waitlist.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +29 -0
- package/dist/src/commands/webhooks.js +135 -64
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +1 -29
- package/dist/src/commands/workflows.js +113 -179
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +628 -14
- package/dist/src/lib/api-client.js +776 -70
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +1 -1
- package/dist/src/lib/app-settings-descriptor.js +9 -1
- package/dist/src/lib/app-settings-descriptor.js.map +1 -1
- package/dist/src/lib/block-selector.d.ts +58 -0
- package/dist/src/lib/block-selector.js +92 -0
- package/dist/src/lib/block-selector.js.map +1 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +24 -54
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +31 -153
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
- package/dist/src/lib/collection-export.d.ts +184 -0
- package/dist/src/lib/collection-export.js +252 -0
- package/dist/src/lib/collection-export.js.map +1 -0
- package/dist/src/lib/config-json-field.d.ts +28 -0
- package/dist/src/lib/config-json-field.js +56 -0
- package/dist/src/lib/config-json-field.js.map +1 -0
- package/dist/src/lib/config-object-descriptor.js +88 -6
- package/dist/src/lib/config-object-descriptor.js.map +1 -1
- package/dist/src/lib/config-payload.d.ts +8 -1
- package/dist/src/lib/config-payload.js +49 -4
- package/dist/src/lib/config-payload.js.map +1 -1
- package/dist/src/lib/config-surface.d.ts +12 -1
- package/dist/src/lib/config-surface.js +71 -3
- package/dist/src/lib/config-surface.js.map +1 -1
- package/dist/src/lib/config.d.ts +31 -13
- package/dist/src/lib/config.js +34 -70
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/credentials-store.d.ts +37 -22
- package/dist/src/lib/credentials-store.js +103 -97
- package/dist/src/lib/credentials-store.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTypeIR.js +8 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -1
- package/dist/src/lib/deprecation.d.ts +22 -0
- package/dist/src/lib/deprecation.js +43 -0
- package/dist/src/lib/deprecation.js.map +1 -0
- package/dist/src/lib/document-export-permissions.d.ts +30 -0
- package/dist/src/lib/document-export-permissions.js +54 -0
- package/dist/src/lib/document-export-permissions.js.map +1 -0
- package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
- package/dist/src/lib/document-ingest-artifact.js +505 -0
- package/dist/src/lib/document-ingest-artifact.js.map +1 -0
- package/dist/src/lib/document-ingest-input.d.ts +51 -0
- package/dist/src/lib/document-ingest-input.js +132 -0
- package/dist/src/lib/document-ingest-input.js.map +1 -0
- package/dist/src/lib/document-ingest-rows.d.ts +137 -0
- package/dist/src/lib/document-ingest-rows.js +181 -0
- package/dist/src/lib/document-ingest-rows.js.map +1 -0
- package/dist/src/lib/document-ingest.d.ts +101 -0
- package/dist/src/lib/document-ingest.js +384 -0
- package/dist/src/lib/document-ingest.js.map +1 -0
- package/dist/src/lib/env-resolver-core.d.ts +89 -18
- package/dist/src/lib/env-resolver-core.js +145 -23
- package/dist/src/lib/env-resolver-core.js.map +1 -1
- package/dist/src/lib/env-resolver.d.ts +18 -3
- package/dist/src/lib/env-resolver.js +23 -3
- package/dist/src/lib/env-resolver.js.map +1 -1
- package/dist/src/lib/function-bundle.d.ts +147 -0
- package/dist/src/lib/function-bundle.js +341 -0
- package/dist/src/lib/function-bundle.js.map +1 -0
- package/dist/src/lib/function-collect.d.ts +123 -0
- package/dist/src/lib/function-collect.js +610 -0
- package/dist/src/lib/function-collect.js.map +1 -0
- package/dist/src/lib/function-db-types.d.ts +202 -0
- package/dist/src/lib/function-db-types.js +870 -0
- package/dist/src/lib/function-db-types.js.map +1 -0
- package/dist/src/lib/function-document-types.d.ts +144 -0
- package/dist/src/lib/function-document-types.js +370 -0
- package/dist/src/lib/function-document-types.js.map +1 -0
- package/dist/src/lib/function-grants-preflight.d.ts +64 -0
- package/dist/src/lib/function-grants-preflight.js +105 -0
- package/dist/src/lib/function-grants-preflight.js.map +1 -0
- package/dist/src/lib/function-log-lines.d.ts +76 -0
- package/dist/src/lib/function-log-lines.js +160 -0
- package/dist/src/lib/function-log-lines.js.map +1 -0
- package/dist/src/lib/function-log-row.d.ts +29 -0
- package/dist/src/lib/function-log-row.js +73 -0
- package/dist/src/lib/function-log-row.js.map +1 -0
- package/dist/src/lib/function-log-tail.d.ts +132 -0
- package/dist/src/lib/function-log-tail.js +262 -0
- package/dist/src/lib/function-log-tail.js.map +1 -0
- package/dist/src/lib/function-run.d.ts +289 -0
- package/dist/src/lib/function-run.js +389 -0
- package/dist/src/lib/function-run.js.map +1 -0
- package/dist/src/lib/function-schema-codegen.d.ts +143 -0
- package/dist/src/lib/function-schema-codegen.js +420 -0
- package/dist/src/lib/function-schema-codegen.js.map +1 -0
- package/dist/src/lib/function-sync.d.ts +459 -0
- package/dist/src/lib/function-sync.js +1258 -0
- package/dist/src/lib/function-sync.js.map +1 -0
- package/dist/src/lib/function-trigger-listing.d.ts +27 -0
- package/dist/src/lib/function-trigger-listing.js +70 -0
- package/dist/src/lib/function-trigger-listing.js.map +1 -0
- package/dist/src/lib/function-typecheck.d.ts +86 -0
- package/dist/src/lib/function-typecheck.js +370 -0
- package/dist/src/lib/function-typecheck.js.map +1 -0
- package/dist/src/lib/function-versions.d.ts +122 -0
- package/dist/src/lib/function-versions.js +182 -0
- package/dist/src/lib/function-versions.js.map +1 -0
- package/dist/src/lib/generated-allowlist.js +4 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +2332 -78
- package/dist/src/lib/generated-config-surfaces.js +6979 -468
- package/dist/src/lib/generated-config-surfaces.js.map +1 -1
- package/dist/src/lib/generated-sdk-types.d.ts +12 -0
- package/dist/src/lib/generated-sdk-types.js +13 -0
- package/dist/src/lib/generated-sdk-types.js.map +1 -0
- package/dist/src/lib/init-adopt.js +2 -2
- package/dist/src/lib/init-adopt.js.map +1 -1
- package/dist/src/lib/init-assets.js +3 -3
- package/dist/src/lib/init-config.d.ts +1 -1
- package/dist/src/lib/init-ios-links.d.ts +6 -5
- package/dist/src/lib/init-ios-links.js +9 -8
- package/dist/src/lib/init-ios-links.js.map +1 -1
- package/dist/src/lib/init-plan.d.ts +1 -1
- package/dist/src/lib/init-plan.js +1 -1
- package/dist/src/lib/init-xcode.d.ts +6 -5
- package/dist/src/lib/init-xcode.js +34 -10
- package/dist/src/lib/init-xcode.js.map +1 -1
- package/dist/src/lib/ios-app-id.d.ts +34 -0
- package/dist/src/lib/ios-app-id.js +69 -0
- package/dist/src/lib/ios-app-id.js.map +1 -0
- package/dist/src/lib/list-options.d.ts +68 -0
- package/dist/src/lib/list-options.js +89 -0
- package/dist/src/lib/list-options.js.map +1 -0
- package/dist/src/lib/local-state.d.ts +1 -1
- package/dist/src/lib/local-state.js +1 -1
- package/dist/src/lib/local-test-cases.d.ts +1 -1
- package/dist/src/lib/local-test-cases.js +2 -1
- package/dist/src/lib/local-test-cases.js.map +1 -1
- package/dist/src/lib/log-inspection.d.ts +152 -5
- package/dist/src/lib/log-inspection.js +179 -2
- package/dist/src/lib/log-inspection.js.map +1 -1
- package/dist/src/lib/logout-admin-session.d.ts +33 -0
- package/dist/src/lib/logout-admin-session.js +70 -0
- package/dist/src/lib/logout-admin-session.js.map +1 -0
- package/dist/src/lib/output.d.ts +15 -0
- package/dist/src/lib/output.js +28 -0
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/paginate.d.ts +15 -0
- package/dist/src/lib/paginate.js +17 -0
- package/dist/src/lib/paginate.js.map +1 -1
- package/dist/src/lib/project-config.d.ts +38 -21
- package/dist/src/lib/project-config.js +57 -47
- package/dist/src/lib/project-config.js.map +1 -1
- package/dist/src/lib/prompt-cost-format.d.ts +11 -0
- package/dist/src/lib/prompt-cost-format.js +41 -0
- package/dist/src/lib/prompt-cost-format.js.map +1 -0
- package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
- package/dist/src/lib/prompt-schema-codegen.js +462 -0
- package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
- package/dist/src/lib/refresh-admin-credentials.d.ts +9 -1
- package/dist/src/lib/refresh-admin-credentials.js +22 -2
- package/dist/src/lib/refresh-admin-credentials.js.map +1 -1
- package/dist/src/lib/resolve-owner.d.ts +19 -0
- package/dist/src/lib/resolve-owner.js +20 -0
- package/dist/src/lib/resolve-owner.js.map +1 -0
- package/dist/src/lib/skill-installer.d.ts +49 -3
- package/dist/src/lib/skill-installer.js +275 -100
- package/dist/src/lib/skill-installer.js.map +1 -1
- package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
- package/dist/src/lib/snapshot-audit-source.js +58 -0
- package/dist/src/lib/snapshot-audit-source.js.map +1 -0
- package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
- package/dist/src/lib/snapshot-audit-store.js +196 -0
- package/dist/src/lib/snapshot-audit-store.js.map +1 -0
- package/dist/src/lib/snapshot-audit.d.ts +207 -0
- package/dist/src/lib/snapshot-audit.js +431 -0
- package/dist/src/lib/snapshot-audit.js.map +1 -0
- package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
- package/dist/src/lib/snapshot-build-rows.js +87 -0
- package/dist/src/lib/snapshot-build-rows.js.map +1 -0
- package/dist/src/lib/snapshot-build.d.ts +50 -0
- package/dist/src/lib/snapshot-build.js +111 -0
- package/dist/src/lib/snapshot-build.js.map +1 -0
- package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
- package/dist/src/lib/snapshot-manifest-layout.js +70 -0
- package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
- package/dist/src/lib/snapshots.d.ts +8 -9
- package/dist/src/lib/snapshots.js +20 -83
- package/dist/src/lib/snapshots.js.map +1 -1
- package/dist/src/lib/step-run-table.d.ts +43 -0
- package/dist/src/lib/step-run-table.js +129 -0
- package/dist/src/lib/step-run-table.js.map +1 -0
- package/dist/src/lib/storage-pending-retry.d.ts +26 -0
- package/dist/src/lib/storage-pending-retry.js +42 -0
- package/dist/src/lib/storage-pending-retry.js.map +1 -0
- package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
- package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
- package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
- package/dist/src/lib/swift-codegen/banners.js +25 -0
- package/dist/src/lib/swift-codegen/banners.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +19 -7
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
- package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
- package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/generator.d.ts +7 -1
- package/dist/src/lib/swift-codegen/generator.js +28 -11
- package/dist/src/lib/swift-codegen/generator.js.map +1 -1
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +15 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +21 -4
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -1
- package/dist/src/lib/sync-paths.d.ts +72 -55
- package/dist/src/lib/sync-paths.js +97 -100
- package/dist/src/lib/sync-paths.js.map +1 -1
- package/dist/src/lib/sync-resource-types.d.ts +23 -4
- package/dist/src/lib/sync-resource-types.js +106 -8
- package/dist/src/lib/sync-resource-types.js.map +1 -1
- package/dist/src/lib/sync-selectors.d.ts +45 -2
- package/dist/src/lib/sync-selectors.js +66 -5
- package/dist/src/lib/sync-selectors.js.map +1 -1
- package/dist/src/lib/template.d.ts +2 -2
- package/dist/src/lib/template.js +2 -2
- package/dist/src/lib/test-case-keys.d.ts +1 -1
- package/dist/src/lib/test-case-keys.js +1 -1
- package/dist/src/lib/test-case-variables.d.ts +14 -0
- package/dist/src/lib/test-case-variables.js +42 -0
- package/dist/src/lib/test-case-variables.js.map +1 -1
- package/dist/src/lib/toml-database-config.js +19 -2
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/webhook-deliver.d.ts +209 -0
- package/dist/src/lib/webhook-deliver.js +519 -0
- package/dist/src/lib/webhook-deliver.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +1 -1
- package/dist/src/lib/workflow-codegen/generator.js +1 -1
- package/dist/src/lib/workflow-toml-validator.d.ts +17 -8
- package/dist/src/lib/workflow-toml-validator.js +25 -12
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/lib/workflow-usage.d.ts +196 -0
- package/dist/src/lib/workflow-usage.js +310 -0
- package/dist/src/lib/workflow-usage.js.map +1 -0
- package/dist/src/types/index.d.ts +12 -2
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -59,10 +59,7 @@ The globally linked `primitive` command uses the compiled files in `cli/dist/`,
|
|
|
59
59
|
# Login via browser OAuth
|
|
60
60
|
primitive login
|
|
61
61
|
|
|
62
|
-
#
|
|
63
|
-
primitive use "My App"
|
|
64
|
-
|
|
65
|
-
# List users in the current app
|
|
62
|
+
# List users in the app this project's environment names
|
|
66
63
|
primitive users list
|
|
67
64
|
|
|
68
65
|
# View help for any command
|
|
@@ -75,14 +72,14 @@ primitive apps --help
|
|
|
75
72
|
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.
|
|
76
73
|
|
|
77
74
|
```bash
|
|
78
|
-
# Login to the environment resolved from
|
|
79
|
-
#
|
|
75
|
+
# Login to the environment resolved from the project config, or — outside a
|
|
76
|
+
# project — to the default/PRIMITIVE_SERVER_URL server
|
|
80
77
|
primitive login
|
|
81
78
|
|
|
82
79
|
# Login to a specific named environment
|
|
83
80
|
primitive -e prod login
|
|
84
81
|
|
|
85
|
-
# Login to a custom server
|
|
82
|
+
# Login to a custom server from outside a project
|
|
86
83
|
PRIMITIVE_SERVER_URL=https://api.example.com primitive login
|
|
87
84
|
|
|
88
85
|
# View current session
|
|
@@ -95,39 +92,50 @@ primitive token
|
|
|
95
92
|
primitive logout
|
|
96
93
|
```
|
|
97
94
|
|
|
98
|
-
|
|
95
|
+
Inside a project, credentials are stored per environment in the gitignored
|
|
96
|
+
`<projectRoot>/.primitive/credentials.json`; a `login` run outside a project
|
|
97
|
+
writes `~/.primitive/credentials.json`. Both are mode 0600. Only `login`,
|
|
98
|
+
`logout`, `bootstrap` and `init` work outside a project — every other command
|
|
99
|
+
stops with an error naming the missing `primitive/config.json`, rather than
|
|
100
|
+
reading the global file (see [Outside a project](#outside-a-project)).
|
|
99
101
|
|
|
100
102
|
## App Context
|
|
101
103
|
|
|
102
|
-
|
|
104
|
+
Every environment names exactly one app, via `"appId"` in
|
|
105
|
+
`primitive/config.json`. Selecting an environment selects its app, so most
|
|
106
|
+
commands need no app argument at all — and there is no separate, per-machine
|
|
107
|
+
"current app" that could point somewhere else.
|
|
103
108
|
|
|
104
|
-
|
|
105
|
-
|
|
109
|
+
```bash
|
|
110
|
+
# The app the selected environment names
|
|
111
|
+
primitive whoami
|
|
112
|
+
primitive env show
|
|
113
|
+
|
|
114
|
+
# Point an environment at a different app: edit its "appId" in
|
|
115
|
+
# primitive/config.json.
|
|
116
|
+
```
|
|
106
117
|
|
|
107
|
-
Commands that
|
|
118
|
+
Commands that read across apps still take an explicit one. Those that only need
|
|
119
|
+
an app ID (like `list`) accept it as a positional argument:
|
|
108
120
|
```bash
|
|
109
121
|
primitive users list 01HXYZ...
|
|
110
122
|
```
|
|
111
123
|
|
|
112
|
-
Commands with other required arguments use
|
|
124
|
+
Commands with other required arguments use `--app`:
|
|
113
125
|
```bash
|
|
114
126
|
primitive workflows get <workflow-id> --app 01HXYZ...
|
|
115
127
|
```
|
|
116
128
|
|
|
117
|
-
|
|
118
|
-
# Interactive app selection
|
|
119
|
-
primitive use
|
|
120
|
-
|
|
121
|
-
# Set by name or ID
|
|
122
|
-
primitive use "My App"
|
|
123
|
-
primitive use 01HXYZ...
|
|
129
|
+
### Outside a project
|
|
124
130
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
primitive
|
|
130
|
-
|
|
131
|
+
With no project config up the directory tree there is no environment, so there
|
|
132
|
+
is nothing for an app-scoped command to target. Only `login`, `logout`,
|
|
133
|
+
`bootstrap` and `init` work there; everything else (`whoami`, `apps list`,
|
|
134
|
+
`env add`, `config pull`, …) exits non-zero with an error that names the
|
|
135
|
+
missing `primitive/config.json` and points at `primitive init`. The CLI never
|
|
136
|
+
falls back to `~/.primitive/credentials.json` for those commands, and no flag
|
|
137
|
+
redirects a command at another project's tree — run it from inside the project
|
|
138
|
+
whose environment names the app.
|
|
131
139
|
|
|
132
140
|
## Commands
|
|
133
141
|
|
|
@@ -459,6 +467,40 @@ primitive documents import [app-id] <path> --overwrite --aliases overwrite|skip
|
|
|
459
467
|
|
|
460
468
|
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
469
|
|
|
470
|
+
### Collections
|
|
471
|
+
|
|
472
|
+
Group documents into a named set and share the whole set at once.
|
|
473
|
+
|
|
474
|
+
```bash
|
|
475
|
+
primitive collections list [app-id] --all # --all: every collection (admin)
|
|
476
|
+
primitive collections create <name> --description <text> # --owner <userId-or-email> (admin)
|
|
477
|
+
primitive collections get <collection-id>
|
|
478
|
+
primitive collections update <collection-id> --name <name>
|
|
479
|
+
primitive collections delete <collection-id> # documents are preserved
|
|
480
|
+
primitive collections access <collection-id> # groups + members in one view
|
|
481
|
+
primitive collections for-document <document-id>
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
**Documents, members and group grants:**
|
|
485
|
+
```bash
|
|
486
|
+
primitive collections documents list|add|remove <collection-id> [document-id]
|
|
487
|
+
primitive collections members list|add|remove <collection-id> [user-id] --permission reader
|
|
488
|
+
primitive collections share <collection-id> --group <type>/<id> --permission read-write
|
|
489
|
+
primitive collections unshare <collection-id> --group <type>/<id>
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
**Export / Import:**
|
|
493
|
+
```bash
|
|
494
|
+
primitive collections export --output <dir> # writes <dir>/collections.json
|
|
495
|
+
primitive collections import <path> --dry-run # plan and problems, writes nothing
|
|
496
|
+
primitive collections import <path> --overwrite # merge into an existing same-named collection
|
|
497
|
+
primitive collections import <path> --owner <userId-or-email> # one owner for every collection
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
`collections export` writes `collections.json` beside the `manifest.json` and `documents/` directory a document export leaves there, so one directory is one app's migration: per collection its name, description, type, context id, owner, group grants, direct members with their level, and which documents it holds. Run `documents import` **before** `collections import` — the file refers to documents by the ids that import preserves.
|
|
501
|
+
|
|
502
|
+
Both verbs are for admin tokens. Owners and members are recorded as emails, because app users are scoped to their app and a source app's user id means nothing in the target. The import reads before it writes: it resolves every owner, member, document and group, plans `create`/`merge`/`skip`/`refused` per collection, then applies group grants, members and documents in that order. Matching is by name; `--overwrite` merges only into a collection whose owner, type and context id match, since none of those can change after creation. A group grant the target holds at another level is updated to the level the file records, and effective access follows it — except above 200 documents, where the server refuses a collection-wide group change whole (`COLLECTION_FANOUT_LIMIT`) and the import reports it as a `group` problem. Per-item problems go to stderr and to `--json.problems`; the exit code is 1 when any was reported. Collection ids are not preserved, and the groups themselves, collection resource metadata and pending member invitations do not travel.
|
|
503
|
+
|
|
462
504
|
### Groups
|
|
463
505
|
|
|
464
506
|
Manage groups, members, and memberships.
|
|
@@ -565,14 +607,17 @@ primitive catalog integrations delete <catalog-id>
|
|
|
565
607
|
Author app configuration as TOML files and reconcile them with the server.
|
|
566
608
|
|
|
567
609
|
```bash
|
|
568
|
-
primitive config init
|
|
569
|
-
primitive config pull
|
|
570
|
-
primitive config push
|
|
571
|
-
primitive config diff
|
|
610
|
+
primitive config init # Scaffold the environment's config directory
|
|
611
|
+
primitive config pull # Pull remote config into it
|
|
612
|
+
primitive config push # Push it to the server
|
|
613
|
+
primitive config diff # Show differences
|
|
572
614
|
```
|
|
573
615
|
|
|
616
|
+
The directory is the selected environment's committed tree,
|
|
617
|
+
`primitive/<env>/`, and there is no flag that relocates it or points it at
|
|
618
|
+
another app: select a different environment with `--env <name>` (#3154).
|
|
619
|
+
|
|
574
620
|
**Options:**
|
|
575
|
-
- `--dir <path>` - Config directory (default: ./config)
|
|
576
621
|
- `--dry-run` - Show changes without applying (push only)
|
|
577
622
|
- `--force` - Overwrite remote changes (push only)
|
|
578
623
|
|
|
@@ -581,8 +626,8 @@ primitive config diff [app-id] --dir ./config # Show differences
|
|
|
581
626
|
The sync commands use TOML files for configuration. Here's the directory structure:
|
|
582
627
|
|
|
583
628
|
```
|
|
584
|
-
|
|
585
|
-
.
|
|
629
|
+
primitive/<env>/
|
|
630
|
+
.sync-state.json # Sync state (auto-generated, committed)
|
|
586
631
|
app.toml # App settings
|
|
587
632
|
integrations/
|
|
588
633
|
weather-api.toml # Integration configs
|
|
@@ -646,6 +691,7 @@ allowedPaths = ["/weather", "/forecast"]
|
|
|
646
691
|
|
|
647
692
|
```toml
|
|
648
693
|
[prompt]
|
|
694
|
+
kind = "chat"
|
|
649
695
|
key = "summarizer"
|
|
650
696
|
displayName = "Text Summarizer"
|
|
651
697
|
description = "Summarizes input text"
|
|
@@ -654,6 +700,8 @@ description = "Summarizes input text"
|
|
|
654
700
|
name = "default"
|
|
655
701
|
provider = "openrouter"
|
|
656
702
|
model = "google/gemini-2.0-flash-001"
|
|
703
|
+
|
|
704
|
+
[configs.chat]
|
|
657
705
|
temperature = "0.7"
|
|
658
706
|
maxTokens = 500
|
|
659
707
|
systemPrompt = "You are a helpful assistant."
|
|
@@ -663,6 +711,8 @@ userPromptTemplate = "Summarize: {{ input.text }}"
|
|
|
663
711
|
name = "concise"
|
|
664
712
|
provider = "openrouter"
|
|
665
713
|
model = "google/gemini-2.0-flash-001"
|
|
714
|
+
|
|
715
|
+
[configs.chat]
|
|
666
716
|
temperature = "0.3"
|
|
667
717
|
maxTokens = 200
|
|
668
718
|
systemPrompt = "You create very brief summaries."
|
|
@@ -678,9 +728,46 @@ All list/get commands support `--json` for machine-readable output:
|
|
|
678
728
|
primitive apps list
|
|
679
729
|
|
|
680
730
|
# JSON output for scripting
|
|
681
|
-
primitive apps list --json | jq '.[0].
|
|
731
|
+
primitive apps list --json | jq '.items[0].id'
|
|
732
|
+
```
|
|
733
|
+
|
|
734
|
+
### The list envelope
|
|
735
|
+
|
|
736
|
+
**Every** `<noun> list --json` prints the same object — no exceptions, and
|
|
737
|
+
never a bare array. It is `{ items, hasMore, nextCursor? }`, the envelope
|
|
738
|
+
#2357 named, and #3646 made universal:
|
|
739
|
+
|
|
740
|
+
```jsonc
|
|
741
|
+
{
|
|
742
|
+
"items": [ /* the rows */ ],
|
|
743
|
+
"hasMore": false, // is there another page?
|
|
744
|
+
"nextCursor": "01HXY..." // present only when hasMore is true
|
|
745
|
+
}
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
So `jq '.items[]'` works against any noun, and a script never has to know which
|
|
749
|
+
one it asked about. A `list` whose subject carries context that is not a row —
|
|
750
|
+
`env list`'s current selection, `guides list`'s resolved docs version — prints
|
|
751
|
+
those as extra keys beside these three; the three always mean the same thing.
|
|
752
|
+
|
|
753
|
+
Pagination follows the **route**, not the verb:
|
|
754
|
+
|
|
755
|
+
- A `list` backed by a paged server route carries `--limit <n>` and
|
|
756
|
+
`--cursor <cursor>`, prints exactly one page, and reports that page's
|
|
757
|
+
`hasMore`/`nextCursor`. It never walks the chain for you.
|
|
758
|
+
- A `list` backed by a route that does not paginate carries neither flag and
|
|
759
|
+
prints the whole set as `{ "items": [...], "hasMore": false }`.
|
|
760
|
+
|
|
761
|
+
```bash
|
|
762
|
+
# One page, then the next
|
|
763
|
+
primitive users list --json --limit 50
|
|
764
|
+
primitive users list --json --limit 50 --cursor "$(primitive users list --json --limit 50 | jq -r .nextCursor)"
|
|
682
765
|
```
|
|
683
766
|
|
|
767
|
+
`primitive help --json` reports which flags a given `list` carries. The rules
|
|
768
|
+
themselves, and the guard that enforces them across the whole command manifest,
|
|
769
|
+
are in [`docs/cli-design.md`](../docs/cli-design.md).
|
|
770
|
+
|
|
684
771
|
### Stdout vs. stderr
|
|
685
772
|
|
|
686
773
|
The CLI follows the same convention as `git`, `kubectl`, `aws`, and `gh`:
|
|
@@ -745,8 +832,8 @@ Shape (`schemaVersion: 1`):
|
|
|
745
832
|
"name": "push",
|
|
746
833
|
"description": "…",
|
|
747
834
|
"aliases": [],
|
|
748
|
-
"args": [
|
|
749
|
-
"options": [ { "flags": "--
|
|
835
|
+
"args": [],
|
|
836
|
+
"options": [ { "flags": "--dry-run", "description": "…", "required": false, "defaultValue": null, "hidden": false } ],
|
|
750
837
|
"commands": []
|
|
751
838
|
}
|
|
752
839
|
]
|
|
@@ -816,17 +903,17 @@ Internal helpers (`collectParamRefs`, `declaredParamNames`,
|
|
|
816
903
|
|
|
817
904
|
## Environment Variables
|
|
818
905
|
|
|
819
|
-
- `PRIMITIVE_SERVER_URL` - Server URL for login
|
|
906
|
+
- `PRIMITIVE_SERVER_URL` - Server URL for `login` outside a project (defaults to `https://primitiveapi.com`)
|
|
820
907
|
|
|
821
908
|
**Login server resolution:**
|
|
822
|
-
1. Project mode (
|
|
909
|
+
1. Project mode (`primitive/config.json` present): the active environment's
|
|
823
910
|
`apiUrl`. Select the environment with `-e <name>`, `PRIMITIVE_ENV`,
|
|
824
911
|
`primitive env use <name>` (this machine's selection, stored in the
|
|
825
912
|
gitignored `.primitive/local.json`), or the committed `defaultEnvironment`
|
|
826
913
|
— in that order. An unresolvable environment fails loudly — `login`
|
|
827
914
|
never silently falls back to production.
|
|
828
|
-
2.
|
|
829
|
-
`https://primitiveapi.com`.
|
|
915
|
+
2. Outside a project (no project config): `PRIMITIVE_SERVER_URL`, else the
|
|
916
|
+
default `https://primitiveapi.com`.
|
|
830
917
|
|
|
831
918
|
> `login` no longer accepts `-s/--server` (removed in a breaking change). Use
|
|
832
919
|
> `-e <env>` in a project, or `PRIMITIVE_SERVER_URL` for local dev / scripts.
|
|
@@ -907,8 +994,11 @@ cli/tests/
|
|
|
907
994
|
### "Not logged in" error
|
|
908
995
|
Run `primitive login` to authenticate.
|
|
909
996
|
|
|
910
|
-
### "No
|
|
911
|
-
|
|
997
|
+
### "No primitive/config.json found" error
|
|
998
|
+
The command ran outside a Primitive project. Every app-scoped command reads its
|
|
999
|
+
server, app and configuration tree from the project's environment, so `cd` into
|
|
1000
|
+
the project (any subdirectory works) or create one with `primitive init`. There
|
|
1001
|
+
is no global fallback and no flag that points the command elsewhere.
|
|
912
1002
|
|
|
913
1003
|
### Token expired
|
|
914
1004
|
The CLI automatically refreshes tokens. If issues persist, try `primitive logout` then `primitive login`.
|