primitive-admin 1.1.0-alpha.61 → 1.1.0-alpha.63

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.
Files changed (172) hide show
  1. package/README.md +34 -27
  2. package/assets/skill/skills/primitive-platform/SKILL.md +59 -21
  3. package/dist/bin/primitive.js +10 -10
  4. package/dist/bin/primitive.js.map +1 -1
  5. package/dist/src/commands/apps.js +40 -41
  6. package/dist/src/commands/apps.js.map +1 -1
  7. package/dist/src/commands/blob-buckets.js +7 -7
  8. package/dist/src/commands/blob-buckets.js.map +1 -1
  9. package/dist/src/commands/collection-type-configs.js +7 -7
  10. package/dist/src/commands/collection-type-configs.js.map +1 -1
  11. package/dist/src/commands/collections.js +47 -8
  12. package/dist/src/commands/collections.js.map +1 -1
  13. package/dist/src/commands/config.d.ts +23 -12
  14. package/dist/src/commands/config.js +80 -45
  15. package/dist/src/commands/config.js.map +1 -1
  16. package/dist/src/commands/cron-triggers.js +6 -6
  17. package/dist/src/commands/cron-triggers.js.map +1 -1
  18. package/dist/src/commands/database-type-configs.d.ts +2 -0
  19. package/dist/src/commands/database-type-configs.js +171 -0
  20. package/dist/src/commands/database-type-configs.js.map +1 -0
  21. package/dist/src/commands/database-types.js +313 -13
  22. package/dist/src/commands/database-types.js.map +1 -1
  23. package/dist/src/commands/databases.js +35 -25
  24. package/dist/src/commands/databases.js.map +1 -1
  25. package/dist/src/commands/documents.js +138 -11
  26. package/dist/src/commands/documents.js.map +1 -1
  27. package/dist/src/commands/email-templates.js +8 -8
  28. package/dist/src/commands/email-templates.js.map +1 -1
  29. package/dist/src/commands/group-type-configs.js +7 -7
  30. package/dist/src/commands/group-type-configs.js.map +1 -1
  31. package/dist/src/commands/init.js +1 -1
  32. package/dist/src/commands/init.js.map +1 -1
  33. package/dist/src/commands/integrations.js +12 -197
  34. package/dist/src/commands/integrations.js.map +1 -1
  35. package/dist/src/commands/llm.js +6 -9
  36. package/dist/src/commands/llm.js.map +1 -1
  37. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  38. package/dist/src/commands/metadata-category-configs.js +112 -0
  39. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  40. package/dist/src/commands/metadata.js +4 -129
  41. package/dist/src/commands/metadata.js.map +1 -1
  42. package/dist/src/commands/prompts.js +24 -282
  43. package/dist/src/commands/prompts.js.map +1 -1
  44. package/dist/src/commands/rule-sets.js +8 -8
  45. package/dist/src/commands/rule-sets.js.map +1 -1
  46. package/dist/src/commands/scripts.js +16 -201
  47. package/dist/src/commands/scripts.js.map +1 -1
  48. package/dist/src/commands/settings.d.ts +9 -12
  49. package/dist/src/commands/settings.js +79 -31
  50. package/dist/src/commands/settings.js.map +1 -1
  51. package/dist/src/commands/sync-app-settings.d.ts +24 -19
  52. package/dist/src/commands/sync-app-settings.js +48 -52
  53. package/dist/src/commands/sync-app-settings.js.map +1 -1
  54. package/dist/src/commands/sync.d.ts +1003 -53
  55. package/dist/src/commands/sync.js +4080 -882
  56. package/dist/src/commands/sync.js.map +1 -1
  57. package/dist/src/commands/vars.js +4 -4
  58. package/dist/src/commands/vars.js.map +1 -1
  59. package/dist/src/commands/webhooks.js +6 -6
  60. package/dist/src/commands/webhooks.js.map +1 -1
  61. package/dist/src/commands/workflows.d.ts +22 -0
  62. package/dist/src/commands/workflows.js +142 -446
  63. package/dist/src/commands/workflows.js.map +1 -1
  64. package/dist/src/lib/access-rule-display.d.ts +21 -0
  65. package/dist/src/lib/access-rule-display.js +34 -0
  66. package/dist/src/lib/access-rule-display.js.map +1 -0
  67. package/dist/src/lib/api-client.d.ts +75 -37
  68. package/dist/src/lib/api-client.js +113 -59
  69. package/dist/src/lib/api-client.js.map +1 -1
  70. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +6 -2
  71. package/dist/src/lib/codegen-shared/generatedFiles.js +9 -2
  72. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
  73. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +6 -6
  74. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +8 -8
  75. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
  76. package/dist/src/lib/config-object-descriptor.d.ts +24 -5
  77. package/dist/src/lib/config-object-descriptor.js +58 -10
  78. package/dist/src/lib/config-object-descriptor.js.map +1 -1
  79. package/dist/src/lib/config-payload.d.ts +1 -1
  80. package/dist/src/lib/config-payload.js +1 -1
  81. package/dist/src/lib/config-surface.d.ts +8 -8
  82. package/dist/src/lib/config-surface.js +10 -10
  83. package/dist/src/lib/config-surface.js.map +1 -1
  84. package/dist/src/lib/db-codegen/dbTemplates.js +1 -1
  85. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
  86. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +1 -1
  87. package/dist/src/lib/generated-allowlist.js +11 -0
  88. package/dist/src/lib/generated-allowlist.js.map +1 -1
  89. package/dist/src/lib/generated-config-surfaces.d.ts +14 -14
  90. package/dist/src/lib/generated-config-surfaces.js +63 -35
  91. package/dist/src/lib/generated-config-surfaces.js.map +1 -1
  92. package/dist/src/lib/generated-template-lint.d.ts +16 -10
  93. package/dist/src/lib/generated-template-lint.js +59 -24
  94. package/dist/src/lib/generated-template-lint.js.map +1 -1
  95. package/dist/src/lib/google-client-secret-status.d.ts +1 -1
  96. package/dist/src/lib/google-client-secret-status.js +4 -4
  97. package/dist/src/lib/google-client-secret-status.js.map +1 -1
  98. package/dist/src/lib/migration-nag.d.ts +2 -2
  99. package/dist/src/lib/migration-nag.js +3 -3
  100. package/dist/src/lib/output.d.ts +1 -1
  101. package/dist/src/lib/output.js +1 -1
  102. package/dist/src/lib/platform-owned.d.ts +5 -5
  103. package/dist/src/lib/platform-owned.js +6 -6
  104. package/dist/src/lib/platform-owned.js.map +1 -1
  105. package/dist/src/lib/query-operators.d.ts +1 -1
  106. package/dist/src/lib/query-operators.js +1 -1
  107. package/dist/src/lib/signing-secret-status.d.ts +2 -2
  108. package/dist/src/lib/signing-secret-status.js +2 -2
  109. package/dist/src/lib/snapshots.d.ts +2 -2
  110. package/dist/src/lib/snapshots.js +2 -2
  111. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +15 -2
  112. package/dist/src/lib/swift-codegen/dbGenerator.js +250 -18
  113. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
  114. package/dist/src/lib/swift-codegen/generator.js +5 -4
  115. package/dist/src/lib/swift-codegen/generator.js.map +1 -1
  116. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +7 -3
  117. package/dist/src/lib/swift-codegen/siblingSymbols.js +4 -1
  118. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -1
  119. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  120. package/dist/src/lib/sync-dir-selector.js +30 -0
  121. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  122. package/dist/src/lib/sync-paths.d.ts +39 -0
  123. package/dist/src/lib/sync-paths.js +70 -2
  124. package/dist/src/lib/sync-paths.js.map +1 -1
  125. package/dist/src/lib/sync-resource-types.d.ts +122 -31
  126. package/dist/src/lib/sync-resource-types.js +177 -42
  127. package/dist/src/lib/sync-resource-types.js.map +1 -1
  128. package/dist/src/lib/sync-selectors.d.ts +4 -4
  129. package/dist/src/lib/sync-selectors.js +4 -4
  130. package/dist/src/lib/toml-database-config.d.ts +4 -4
  131. package/dist/src/lib/toml-database-config.js +3 -3
  132. package/dist/src/lib/toml-database-config.js.map +1 -1
  133. package/dist/src/lib/toml-metadata-config.d.ts +4 -4
  134. package/dist/src/lib/toml-metadata-config.js +4 -4
  135. package/dist/src/lib/toml-native-form.d.ts +1 -1
  136. package/dist/src/lib/toml-native-form.js +1 -1
  137. package/dist/src/lib/toml-params-validator.d.ts +1 -1
  138. package/dist/src/lib/toml-params-validator.js +1 -1
  139. package/dist/src/lib/version-check.js +1 -1
  140. package/dist/src/lib/version-check.js.map +1 -1
  141. package/dist/src/lib/workflow-apply.d.ts +69 -10
  142. package/dist/src/lib/workflow-apply.js +99 -24
  143. package/dist/src/lib/workflow-apply.js.map +1 -1
  144. package/dist/src/lib/workflow-codegen/generator.js +1 -1
  145. package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
  146. package/dist/src/lib/workflow-config-apply.d.ts +1 -1
  147. package/dist/src/lib/workflow-config-apply.js +1 -1
  148. package/dist/src/lib/workflow-config-sidecar.d.ts +1 -1
  149. package/dist/src/lib/workflow-config-sidecar.js +1 -1
  150. package/dist/src/lib/workflow-config-sidecar.js.map +1 -1
  151. package/dist/src/lib/workflow-defaults.d.ts +30 -0
  152. package/dist/src/lib/workflow-defaults.js +41 -0
  153. package/dist/src/lib/workflow-defaults.js.map +1 -0
  154. package/dist/src/lib/workflow-include-preserve.d.ts +12 -7
  155. package/dist/src/lib/workflow-include-preserve.js +139 -6
  156. package/dist/src/lib/workflow-include-preserve.js.map +1 -1
  157. package/dist/src/lib/workflow-payload.d.ts +26 -14
  158. package/dist/src/lib/workflow-payload.js +61 -45
  159. package/dist/src/lib/workflow-payload.js.map +1 -1
  160. package/dist/src/lib/workflow-toml-validator.d.ts +19 -16
  161. package/dist/src/lib/workflow-toml-validator.js +19 -16
  162. package/dist/src/lib/workflow-toml-validator.js.map +1 -1
  163. package/dist/src/types/index.d.ts +15 -0
  164. package/dist/src/validators.d.ts +7 -7
  165. package/dist/src/validators.js +6 -6
  166. package/package.json +1 -3
  167. package/dist/src/lib/generated-workflow-model-fields.d.ts +0 -20
  168. package/dist/src/lib/generated-workflow-model-fields.js +0 -53
  169. package/dist/src/lib/generated-workflow-model-fields.js.map +0 -1
  170. package/dist/src/lib/workflow-field-descriptor.d.ts +0 -91
  171. package/dist/src/lib/workflow-field-descriptor.js +0 -153
  172. package/dist/src/lib/workflow-field-descriptor.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import { ApiClient } from "../lib/api-client.js";
2
2
  import { getCurrentAppId } from "../lib/config.js";
3
- import { error, info, result as printResult, formatTable, formatId, formatDate, json, } from "../lib/output.js";
3
+ import { success, error, info, keyValue, result as printResult, formatTable, formatId, formatDate, json, } from "../lib/output.js";
4
+ import { confirmPrompt } from "../lib/confirm-prompt.js";
4
5
  function resolveAppId(appId, options) {
5
6
  const resolved = appId || options.app || getCurrentAppId();
6
7
  if (!resolved) {
@@ -17,19 +18,11 @@ export function registerDatabaseTypesCommands(program) {
17
18
  Examples:
18
19
  $ primitive database-types list
19
20
  $ primitive database-types get <database-type>
20
- $ primitive config new database-type <database-type> # scaffold database-types/<type>.toml
21
- $ primitive sync push --only database-type/<database-type>
21
+ $ primitive database-types create <database-type>
22
+ $ primitive database-types update <database-type> --rule-set-id <id>
23
+ $ primitive database-types delete <database-type>
22
24
  $ primitive database-types operations list <database-type>
23
- # Operations are [[operations]] entries in database-types/<type>.toml.
24
- `);
25
- // Server-side configuration is authored in TOML and applied with `sync push`
26
- // (issue #2645) — this group no longer carries config-setting flags.
27
- dbTypes.addHelpText("after", `
28
- Configuration lives in database-types/<type>.toml:
29
- $ primitive config fields database-type # the file's keys, types and defaults
30
- $ primitive config new database-type <key> # scaffold one locally
31
- $ primitive config set database-type/<key> <path>=<value>
32
- $ primitive sync push --only database-type/<key>
25
+ $ primitive database-types operations create <database-type> <name> --type query --model Task --access true --definition '{"filter":{}}'
33
26
  `);
34
27
  // List type configs
35
28
  dbTypes
@@ -92,10 +85,162 @@ Configuration lives in database-types/<type>.toml:
92
85
  process.exit(1);
93
86
  }
94
87
  });
88
+ // Create type config
89
+ dbTypes
90
+ .command("create")
91
+ .description("Create a database type configuration")
92
+ .argument("<database-type>", "Database type name")
93
+ .option("--rule-set-id <id>", "Access rule set ID")
94
+ .option("--triggers <json>", "Trigger definitions as JSON string")
95
+ .option("--cel-context-access <cel>", "[deprecated] One CEL expression gating the database CEL context — it gates READ AND WRITE together, so anyone allowed to read can also update. Prefer a resource metadata category (separate readRule/writeRule). See docs.")
96
+ .option("--metadata-access <cel>", "[deprecated] Legacy alias for --cel-context-access (also gates read AND write); prefer a resource metadata category")
97
+ .option("--app <app-id>", "App ID")
98
+ .option("--json", "Output as JSON")
99
+ .action(async (databaseType, options) => {
100
+ const resolvedAppId = resolveAppId(undefined, options);
101
+ const client = new ApiClient();
102
+ try {
103
+ const data = { databaseType };
104
+ if (options.ruleSetId)
105
+ data.ruleSetId = options.ruleSetId;
106
+ if (options.triggers) {
107
+ try {
108
+ data.triggers = JSON.parse(options.triggers);
109
+ }
110
+ catch {
111
+ error("Invalid JSON in --triggers.");
112
+ process.exit(1);
113
+ }
114
+ }
115
+ // `--cel-context-access` is the new name; `--metadata-access` remains
116
+ // supported. Both write to the same wire field (`metadataAccess`).
117
+ const accessExpr = options.celContextAccess ?? options.metadataAccess;
118
+ if (accessExpr)
119
+ data.metadataAccess = accessExpr;
120
+ const result = await client.createDatabaseTypeConfig(resolvedAppId, data);
121
+ if (options.json) {
122
+ json(result);
123
+ return;
124
+ }
125
+ success("Database type configuration created.");
126
+ keyValue("Database Type", result.databaseType);
127
+ if (result.ruleSetId)
128
+ keyValue("Rule Set ID", result.ruleSetId);
129
+ if (result.triggers)
130
+ keyValue("Triggers", "Yes");
131
+ }
132
+ catch (err) {
133
+ error(err.message);
134
+ process.exit(1);
135
+ }
136
+ });
137
+ // Update type config
138
+ dbTypes
139
+ .command("update")
140
+ .description("Update a database type configuration")
141
+ .argument("<database-type>", "Database type name")
142
+ .option("--rule-set-id <id>", "Access rule set ID (use 'none' to clear)")
143
+ .option("--triggers <json>", "Trigger definitions as JSON string (use 'none' to clear)")
144
+ .option("--cel-context-access <cel>", "[deprecated] One CEL expression gating the database CEL context read AND write (use 'none' to clear). Prefer a resource metadata category (separate readRule/writeRule).")
145
+ .option("--metadata-access <cel>", "[deprecated] Legacy alias for --cel-context-access (also gates read AND write; use 'none' to clear); prefer a resource metadata category")
146
+ .option("--app <app-id>", "App ID")
147
+ .option("--json", "Output as JSON")
148
+ .action(async (databaseType, options) => {
149
+ const resolvedAppId = resolveAppId(undefined, options);
150
+ const client = new ApiClient();
151
+ const data = {};
152
+ if (options.ruleSetId !== undefined) {
153
+ data.ruleSetId = options.ruleSetId === "none" ? null : options.ruleSetId;
154
+ }
155
+ if (options.triggers !== undefined) {
156
+ if (options.triggers === "none") {
157
+ data.triggers = null;
158
+ }
159
+ else {
160
+ try {
161
+ data.triggers = JSON.parse(options.triggers);
162
+ }
163
+ catch {
164
+ error("Invalid JSON in --triggers.");
165
+ process.exit(1);
166
+ }
167
+ }
168
+ }
169
+ // Honour either flag; --cel-context-access wins if both are given.
170
+ const accessArg = options.celContextAccess !== undefined
171
+ ? options.celContextAccess
172
+ : options.metadataAccess;
173
+ if (accessArg !== undefined) {
174
+ data.metadataAccess = accessArg === "none" ? null : accessArg;
175
+ }
176
+ if (Object.keys(data).length === 0) {
177
+ error("Provide at least one of --rule-set-id, --triggers, --cel-context-access, or --metadata-access.");
178
+ process.exit(1);
179
+ }
180
+ try {
181
+ const result = await client.updateDatabaseTypeConfig(resolvedAppId, databaseType, data);
182
+ if (options.json) {
183
+ json(result);
184
+ return;
185
+ }
186
+ success("Database type configuration updated.");
187
+ keyValue("Database Type", result.databaseType);
188
+ keyValue("Rule Set ID", result.ruleSetId || "—");
189
+ keyValue("Triggers", result.triggers ? "Yes" : "—");
190
+ }
191
+ catch (err) {
192
+ error(err.message);
193
+ process.exit(1);
194
+ }
195
+ });
196
+ // Delete type config
197
+ dbTypes
198
+ .command("delete")
199
+ .description("Delete a database type configuration")
200
+ .argument("<database-type>", "Database type name")
201
+ .option("--app <app-id>", "App ID")
202
+ .option("-y, --yes", "Skip confirmation prompt")
203
+ .option("--force", "Delete even if live database instances of this type still exist (orphans them)")
204
+ .action(async (databaseType, options) => {
205
+ const resolvedAppId = resolveAppId(undefined, options);
206
+ // `-y/--yes` only skips the interactive confirm; it does NOT bypass the
207
+ // server's instance-orphaning guard. Only `--force` (→ ?force=true) does.
208
+ if (!options.yes) {
209
+ let confirm;
210
+ try {
211
+ confirm = await confirmPrompt(`Delete database type "${databaseType}"? This cannot be undone.`);
212
+ }
213
+ catch (err) {
214
+ error(err.message);
215
+ process.exit(1);
216
+ }
217
+ if (!confirm) {
218
+ info("Cancelled.");
219
+ return;
220
+ }
221
+ }
222
+ const client = new ApiClient();
223
+ try {
224
+ await client.deleteDatabaseTypeConfig(resolvedAppId, databaseType, {
225
+ force: Boolean(options.force),
226
+ });
227
+ success(`Database type "${databaseType}" deleted.`);
228
+ }
229
+ catch (err) {
230
+ error(err.message);
231
+ // The server refuses (409) when live instances exist and --force was
232
+ // not passed. Point the user at the escape hatch.
233
+ if (/instance/i.test(err.message) && !options.force) {
234
+ info("Delete the instances first (primitive databases delete <id>), or re-run with --force to delete the type anyway (this orphans the instances).");
235
+ }
236
+ process.exit(1);
237
+ }
238
+ });
95
239
  // ---- Operations subcommand group ----
96
240
  const operations = dbTypes
97
241
  .command("operations")
98
242
  .description("Manage operations (queries and mutations) for a database type");
243
+ // List operations
99
244
  operations
100
245
  .command("list")
101
246
  .description("List operations for a database type")
@@ -167,5 +312,160 @@ Configuration lives in database-types/<type>.toml:
167
312
  process.exit(1);
168
313
  }
169
314
  });
315
+ // Create operation
316
+ operations
317
+ .command("create")
318
+ .description("Create a new operation (query or mutation)")
319
+ .argument("<database-type>", "Database type name")
320
+ .argument("<name>", "Operation name")
321
+ .requiredOption("--type <type>", "Operation type: query, mutation, count, aggregate, or pipeline")
322
+ .requiredOption("--model <model-name>", "Model name")
323
+ .requiredOption("--access <cel>", "Access CEL expression")
324
+ .requiredOption("--definition <json>", "Definition as JSON string")
325
+ .option("--params <json>", "Parameters schema as JSON string")
326
+ .option("--app <app-id>", "App ID")
327
+ .option("--json", "Output as JSON")
328
+ .action(async (databaseType, name, options) => {
329
+ const resolvedAppId = resolveAppId(undefined, options);
330
+ const client = new ApiClient();
331
+ let definition;
332
+ try {
333
+ definition = JSON.parse(options.definition);
334
+ }
335
+ catch {
336
+ error("Invalid JSON in --definition.");
337
+ process.exit(1);
338
+ return;
339
+ }
340
+ let params;
341
+ if (options.params) {
342
+ try {
343
+ params = JSON.parse(options.params);
344
+ }
345
+ catch {
346
+ error("Invalid JSON in --params.");
347
+ process.exit(1);
348
+ return;
349
+ }
350
+ }
351
+ try {
352
+ const data = {
353
+ name,
354
+ type: options.type,
355
+ modelName: options.model,
356
+ access: options.access,
357
+ definition,
358
+ };
359
+ if (params)
360
+ data.params = params;
361
+ const result = await client.createDatabaseTypeOperation(resolvedAppId, databaseType, data);
362
+ if (options.json) {
363
+ json(result);
364
+ return;
365
+ }
366
+ success("Operation created.");
367
+ keyValue("Name", result.name);
368
+ keyValue("Type", result.type);
369
+ keyValue("Model Name", result.modelName);
370
+ }
371
+ catch (err) {
372
+ error(err.message);
373
+ process.exit(1);
374
+ }
375
+ });
376
+ // Update operation
377
+ operations
378
+ .command("update")
379
+ .description("Update an operation")
380
+ .argument("<database-type>", "Database type name")
381
+ .argument("<name>", "Operation name")
382
+ .option("--model <model-name>", "New model name")
383
+ .option("--access <cel>", "New access CEL expression")
384
+ .option("--definition <json>", "New definition as JSON string")
385
+ .option("--params <json>", "New parameters schema as JSON string")
386
+ .option("--app <app-id>", "App ID")
387
+ .option("--json", "Output as JSON")
388
+ .action(async (databaseType, name, options) => {
389
+ const resolvedAppId = resolveAppId(undefined, options);
390
+ const client = new ApiClient();
391
+ const data = {};
392
+ if (options.model)
393
+ data.modelName = options.model;
394
+ if (options.access)
395
+ data.access = options.access;
396
+ if (options.definition) {
397
+ try {
398
+ data.definition = JSON.parse(options.definition);
399
+ }
400
+ catch {
401
+ error("Invalid JSON in --definition.");
402
+ process.exit(1);
403
+ return;
404
+ }
405
+ }
406
+ if (options.params) {
407
+ try {
408
+ data.params = JSON.parse(options.params);
409
+ }
410
+ catch {
411
+ error("Invalid JSON in --params.");
412
+ process.exit(1);
413
+ return;
414
+ }
415
+ }
416
+ if (Object.keys(data).length === 0) {
417
+ error("Provide at least one of --model, --access, --definition, or --params.");
418
+ process.exit(1);
419
+ }
420
+ try {
421
+ const result = await client.updateDatabaseTypeOperation(resolvedAppId, databaseType, name, data);
422
+ if (options.json) {
423
+ json(result);
424
+ return;
425
+ }
426
+ success("Operation updated.");
427
+ keyValue("Name", result.name);
428
+ keyValue("Type", result.type);
429
+ keyValue("Model Name", result.modelName);
430
+ }
431
+ catch (err) {
432
+ error(err.message);
433
+ process.exit(1);
434
+ }
435
+ });
436
+ // Delete operation
437
+ operations
438
+ .command("delete")
439
+ .description("Delete an operation")
440
+ .argument("<database-type>", "Database type name")
441
+ .argument("<name>", "Operation name")
442
+ .option("--app <app-id>", "App ID")
443
+ .option("-y, --yes", "Skip confirmation prompt")
444
+ .action(async (databaseType, name, options) => {
445
+ const resolvedAppId = resolveAppId(undefined, options);
446
+ if (!options.yes) {
447
+ let confirm;
448
+ try {
449
+ confirm = await confirmPrompt(`Delete operation "${name}" from type "${databaseType}"?`);
450
+ }
451
+ catch (err) {
452
+ error(err.message);
453
+ process.exit(1);
454
+ }
455
+ if (!confirm) {
456
+ info("Cancelled.");
457
+ return;
458
+ }
459
+ }
460
+ const client = new ApiClient();
461
+ try {
462
+ await client.deleteDatabaseTypeOperation(resolvedAppId, databaseType, name);
463
+ success(`Operation "${name}" deleted.`);
464
+ }
465
+ catch (err) {
466
+ error(err.message);
467
+ process.exit(1);
468
+ }
469
+ });
170
470
  }
171
471
  //# sourceMappingURL=database-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database-types.js","sourceRoot":"","sources":["../../../src/commands/database-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database-types.js","sourceRoot":"","sources":["../../../src/commands/database-types.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
+ import { Option } from "commander";
1
2
  import { readFileSync, writeFileSync, appendFileSync, mkdirSync, existsSync, readdirSync } from "fs";
2
3
  import * as path from "path";
3
4
  import { ApiClient } from "../lib/api-client.js";
4
5
  import { getCurrentAppId } from "../lib/config.js";
5
6
  import { resolveCodegenSourceDir } from "../lib/codegen-shared/resolveCodegenSourceDir.js";
7
+ import { resolveSyncDirOverride } from "../lib/sync-dir-selector.js";
6
8
  import { parseCsv, applyColumnMap, buildRows } from "../lib/csv.js";
7
9
  import { chunk, parseBatchSize } from "../lib/batch.js";
8
10
  import { generateDbTypes, } from "../lib/db-codegen/dbGenerator.js";
@@ -219,9 +221,9 @@ Examples:
219
221
 
220
222
  Note: this group manages database *instances*. Database *type* configurations
221
223
  (schemas, rules, operations) are authored in TOML — see 'primitive config fields
222
- database-type' and the 'database-types' group for inspection:
223
- $ primitive database-types list
224
- $ rm database-types/<database-type>.toml && primitive sync push --prune
224
+ database-type-config' and the 'database-type-configs' group for inspection:
225
+ $ primitive database-type-configs list
226
+ $ rm database-type-configs/<database-type>.toml && primitive config push --prune
225
227
  `);
226
228
  // List databases
227
229
  databases
@@ -1908,13 +1910,17 @@ database-type' and the 'database-types' group for inspection:
1908
1910
  .description("Manage the TOML schema attached to a database type");
1909
1911
  schema
1910
1912
  .command("generate")
1911
- .description("Scaffold a starting TOML schema for <database-type> from existing operations + DO introspection, and insert it into the local database-types/<type>.toml file.")
1913
+ .description("Scaffold a starting TOML schema for <database-type> from existing operations + DO introspection, and insert it into the local database-type-configs/<type>.toml file.")
1912
1914
  .argument("<database-type>", "Database type name")
1913
1915
  .option("--app <app-id>", "App ID")
1914
- .option("--sync-dir <path>", "Override path to the sync directory (defaults to ./.primitive/sync/<env>/<appId>/)")
1916
+ .option("--dir <path>", "Config directory (overrides the auto-resolved per-env path)")
1917
+ .addOption(new Option("--sync-dir <path>", "Deprecated alias of --dir").hideHelp())
1915
1918
  .option("-f, --force", "Overwrite an existing [models.*] block in the local file")
1916
1919
  .option("--json", "Output the generated TOML as JSON")
1917
1920
  .action(async (databaseType, options) => {
1921
+ // Resolve the sync-dir override before the API call, so a caller who
1922
+ // passed both spellings hears about it without a network round trip.
1923
+ const configDir = resolveSyncDirOverride(options, "databases schema generate");
1918
1924
  const resolvedAppId = resolveAppId(undefined, options);
1919
1925
  const client = new ApiClient();
1920
1926
  try {
@@ -1925,14 +1931,14 @@ database-type' and the 'database-types' group for inspection:
1925
1931
  json({ schema: scaffoldedToml });
1926
1932
  return;
1927
1933
  }
1928
- // 2. Locate the local `database-types/<type>.toml` file. Per the
1934
+ // 2. Locate the local `database-type-configs/<type>.toml` file. Per the
1929
1935
  // plan-of-record CLI sync layout, the file lives at
1930
- // `<sync-dir>/database-types/<type>.toml`. We don't need to know the
1931
- // exact sync dir for the happy path — just look for an existing
1936
+ // `<config-dir>/database-type-configs/<type>.toml`. We don't need to know
1937
+ // the exact config dir for the happy path — just look for an existing
1932
1938
  // file relative to the CWD's `.primitive/sync/` directory tree.
1933
1939
  const candidateFiles = [];
1934
- if (options.syncDir) {
1935
- candidateFiles.push(path.join(options.syncDir, "database-types", `${databaseType}.toml`));
1940
+ if (configDir) {
1941
+ candidateFiles.push(path.join(configDir, "database-type-configs", `${databaseType}.toml`));
1936
1942
  }
1937
1943
  else {
1938
1944
  // Search any env/appId subtree under .primitive/sync that matches.
@@ -1942,7 +1948,7 @@ database-type' and the 'database-types' group for inspection:
1942
1948
  const envDir = path.join(root, env);
1943
1949
  try {
1944
1950
  for (const app of readdirSync(envDir)) {
1945
- const candidate = path.join(envDir, app, "database-types", `${databaseType}.toml`);
1951
+ const candidate = path.join(envDir, app, "database-type-configs", `${databaseType}.toml`);
1946
1952
  if (existsSync(candidate)) {
1947
1953
  candidateFiles.push(candidate);
1948
1954
  }
@@ -1957,7 +1963,7 @@ database-type' and the 'database-types' group for inspection:
1957
1963
  if (candidateFiles.length === 0) {
1958
1964
  // No local file found — print the scaffold to stdout and tell
1959
1965
  // the user where to put it.
1960
- info(`No local database-types/${databaseType}.toml found under .primitive/sync/. Generated TOML:`);
1966
+ info(`No local database-type-configs/${databaseType}.toml found under .primitive/sync/. Generated TOML:`);
1961
1967
  console.log("");
1962
1968
  console.log(scaffoldedToml);
1963
1969
  return;
@@ -1997,7 +2003,7 @@ database-type' and the 'database-types' group for inspection:
1997
2003
  writeFileSync(targetPath, merged);
1998
2004
  success(`Inserted schema into ${targetPath}`);
1999
2005
  }
2000
- info("Review the generated schema, fix types the generator guessed wrong, then run `primitive sync push` (or `primitive sync push --dry-run`).");
2006
+ info("Review the generated schema, fix types the generator guessed wrong, then run `primitive config push` (or `primitive config push --dry-run`).");
2001
2007
  }
2002
2008
  catch (err) {
2003
2009
  error(err.message);
@@ -2009,11 +2015,12 @@ database-type' and the 'database-types' group for inspection:
2009
2015
  // ============================================
2010
2016
  databases
2011
2017
  .command("codegen")
2012
- .description("Generate record + operation types from the local database-types/*.toml schema. TypeScript (default): a <type>.generated.ts per database type (record interfaces, per-op input-params interfaces, per-op result aliases, and a typed <type>Ops factory). Swift (--lang swift): a <type>.generated.swift per database type (record structs, per-op params structs, per-op result typealiases, and a typed <Type>Ops factory).\n\nFormatting: the emitted TypeScript is already formatted the way Prettier's DEFAULT config formats it, so a `codegen` -> `prettier --write` -> `codegen --check` pipeline stays green. If your project uses a NON-default Prettier config (a different printWidth, trailingComma, or quote style), Prettier will reformat the generated files and `--check` will then fail: add the generated directory to `.prettierignore` and commit the raw emission instead.")
2013
- .argument("[database-type]", "Generate for a single database type (defaults to every database-types/*.toml found)")
2018
+ .description("Generate record + operation types from the local database-type-configs/*.toml schema. TypeScript (default): a <type>.generated.ts per database type (record interfaces, per-op input-params interfaces, per-op result aliases, and a typed <type>Ops factory). Swift (--lang swift): a <type>.generated.swift per database type (record structs, per-op params structs, per-op result typealiases, and a typed <Type>Ops factory).\n\nFormatting: the emitted TypeScript is already formatted the way Prettier's DEFAULT config formats it, so a `codegen` -> `prettier --write` -> `codegen --check` pipeline stays green. If your project uses a NON-default Prettier config (a different printWidth, trailingComma, or quote style), Prettier will reformat the generated files and `--check` will then fail: add the generated directory to `.prettierignore` and commit the raw emission instead.")
2019
+ .argument("[database-type]", "Generate for a single database type (defaults to every database-type-configs/*.toml found)")
2014
2020
  .option("--app <app-id>", "App ID")
2015
- .option("--sync-dir <path>", "Override path to the sync directory (defaults to ./.primitive/sync/<env>/<appId>/)")
2016
- .option("-o, --output <dir>", "Output directory for the generated files (defaults to <sync-dir>/database-types/generated/)")
2021
+ .option("--dir <path>", "Config directory (overrides the auto-resolved per-env path)")
2022
+ .addOption(new Option("--sync-dir <path>", "Deprecated alias of --dir").hideHelp())
2023
+ .option("-o, --output <dir>", "Output directory for the generated files (defaults to <config-dir>/database-type-configs/generated/)")
2017
2024
  .option("--lang <lang>", "Target language for the generated types: 'ts' (default) or 'swift'.", "ts")
2018
2025
  .option("--check", "Exit non-zero if generated output is out of date (CI guard); does not write. Compares byte-for-byte, so the file on disk must match the emission exactly.")
2019
2026
  .option("--json", "Output the result summary as JSON")
@@ -2026,14 +2033,17 @@ database-type' and the 'database-types' group for inspection:
2026
2033
  error(`Unknown --lang "${options.lang}". Use "ts" or "swift".`);
2027
2034
  process.exit(1);
2028
2035
  }
2029
- // 1. Resolve the single source database-types/ directory via the
2036
+ // 1. Resolve the single source database-type-configs/ directory via the
2030
2037
  // shared active-environment resolver (issue #1510). Honors
2031
- // --sync-dir / --app overrides and resolves the active env
2038
+ // --dir / --app overrides and resolves the active env
2032
2039
  // (--env → PRIMITIVE_ENV → defaultEnvironment → single-env) instead
2033
2040
  // of silently merging types across every synced env.
2034
2041
  const dbTypesSourceDir = resolveCodegenSourceDir({
2035
- subdir: "database-types",
2036
- options: { app: options.app, syncDir: options.syncDir },
2042
+ subdir: "database-type-configs",
2043
+ options: {
2044
+ app: options.app,
2045
+ syncDir: resolveSyncDirOverride(options, "databases codegen"),
2046
+ },
2037
2047
  });
2038
2048
  // 2. Collect the source .toml files (one per database type), filtered
2039
2049
  // to a single type when an argument is given.
@@ -2053,8 +2063,8 @@ database-type' and the 'database-types' group for inspection:
2053
2063
  }
2054
2064
  if (inputs.length === 0) {
2055
2065
  error(databaseType
2056
- ? `No database-types/${databaseType}.toml found under .primitive/sync/.`
2057
- : "No database-types/*.toml files found to generate from.");
2066
+ ? `No database-type-configs/${databaseType}.toml found under .primitive/sync/.`
2067
+ : "No database-type-configs/*.toml files found to generate from.");
2058
2068
  process.exit(1);
2059
2069
  }
2060
2070
  // 3. Resolve the output directory. Default: a `generated/` subdir of
@@ -2160,7 +2170,7 @@ async function exportSingleDatabase(client, appId, databaseId, outputDir, jsonOu
2160
2170
  const dbMeta = await client.getDatabase(appId, databaseId);
2161
2171
  // Warn about databaseType sync
2162
2172
  if (dbMeta.databaseType) {
2163
- warn(`This database uses type "${dbMeta.databaseType}". Make sure to \`primitive sync push\` the type config before importing into a new app.`);
2173
+ warn(`This database uses type "${dbMeta.databaseType}". Make sure to \`primitive config push\` the type config before importing into a new app.`);
2164
2174
  }
2165
2175
  // 2. Write metadata
2166
2176
  const metadata = {
@@ -2253,7 +2263,7 @@ async function importSingleDatabase(client, appId, dbDir, options) {
2253
2263
  }
2254
2264
  // Check if database type exists — warn if not
2255
2265
  if (metadata.databaseType) {
2256
- warn(`Database uses type "${metadata.databaseType}". Ensure the type config exists in the target app (use \`primitive sync push\`).`);
2266
+ warn(`Database uses type "${metadata.databaseType}". Ensure the type config exists in the target app (use \`primitive config push\`).`);
2257
2267
  }
2258
2268
  // Check if database exists — use the original ID for overwrite scenarios
2259
2269
  let targetDatabaseId = databaseId;