primitive-admin 1.1.0 → 1.2.0-alpha.1

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 (71) hide show
  1. package/README.md +14 -13
  2. package/assets/skill/skills/primitive-platform/SKILL.md +6 -0
  3. package/dist/src/commands/collections.js +20 -17
  4. package/dist/src/commands/collections.js.map +1 -1
  5. package/dist/src/commands/connections.js +1 -5
  6. package/dist/src/commands/connections.js.map +1 -1
  7. package/dist/src/commands/database-types.js +13 -313
  8. package/dist/src/commands/database-types.js.map +1 -1
  9. package/dist/src/commands/databases.js +7 -128
  10. package/dist/src/commands/databases.js.map +1 -1
  11. package/dist/src/commands/groups.js +16 -0
  12. package/dist/src/commands/groups.js.map +1 -1
  13. package/dist/src/commands/llm.js +9 -6
  14. package/dist/src/commands/llm.js.map +1 -1
  15. package/dist/src/commands/sessions.js +3 -8
  16. package/dist/src/commands/sessions.js.map +1 -1
  17. package/dist/src/commands/settings.d.ts +18 -0
  18. package/dist/src/commands/settings.js +54 -0
  19. package/dist/src/commands/settings.js.map +1 -0
  20. package/dist/src/commands/sync.d.ts +77 -7
  21. package/dist/src/commands/sync.js +368 -198
  22. package/dist/src/commands/sync.js.map +1 -1
  23. package/dist/src/commands/tokens.js +1 -6
  24. package/dist/src/commands/tokens.js.map +1 -1
  25. package/dist/src/commands/workflows.js +3 -3
  26. package/dist/src/commands/workflows.js.map +1 -1
  27. package/dist/src/lib/api-client.d.ts +3 -70
  28. package/dist/src/lib/api-client.js +20 -106
  29. package/dist/src/lib/api-client.js.map +1 -1
  30. package/dist/src/lib/app-match-guard.d.ts +44 -0
  31. package/dist/src/lib/app-match-guard.js +72 -0
  32. package/dist/src/lib/app-match-guard.js.map +1 -0
  33. package/dist/src/lib/collection-export.d.ts +37 -9
  34. package/dist/src/lib/collection-export.js +48 -12
  35. package/dist/src/lib/collection-export.js.map +1 -1
  36. package/dist/src/lib/config-object-descriptor.js +2 -3
  37. package/dist/src/lib/config-object-descriptor.js.map +1 -1
  38. package/dist/src/lib/function-triggers.d.ts +66 -0
  39. package/dist/src/lib/function-triggers.js +285 -0
  40. package/dist/src/lib/function-triggers.js.map +1 -0
  41. package/dist/src/lib/generated-allowlist.js +0 -1
  42. package/dist/src/lib/generated-allowlist.js.map +1 -1
  43. package/dist/src/lib/generated-config-surfaces.d.ts +4 -2
  44. package/dist/src/lib/generated-config-surfaces.js +138 -68
  45. package/dist/src/lib/generated-config-surfaces.js.map +1 -1
  46. package/dist/src/lib/generated-sdk-types.d.ts +1 -1
  47. package/dist/src/lib/generated-sdk-types.js +1 -1
  48. package/dist/src/lib/generated-sdk-types.js.map +1 -1
  49. package/dist/src/lib/generated-workflow-model-fields.d.ts +20 -0
  50. package/dist/src/lib/generated-workflow-model-fields.js +53 -0
  51. package/dist/src/lib/generated-workflow-model-fields.js.map +1 -0
  52. package/dist/src/lib/google-client-secret-status.d.ts +35 -0
  53. package/dist/src/lib/google-client-secret-status.js +56 -0
  54. package/dist/src/lib/google-client-secret-status.js.map +1 -0
  55. package/dist/src/lib/log-inspection.d.ts +1 -6
  56. package/dist/src/lib/log-inspection.js +5 -7
  57. package/dist/src/lib/log-inspection.js.map +1 -1
  58. package/dist/src/lib/migration-nag.d.ts +2 -2
  59. package/dist/src/lib/migration-nag.js +4 -3
  60. package/dist/src/lib/migration-nag.js.map +1 -1
  61. package/dist/src/lib/paginate.d.ts +8 -24
  62. package/dist/src/lib/paginate.js +8 -21
  63. package/dist/src/lib/paginate.js.map +1 -1
  64. package/dist/src/lib/sync-dir-selector.d.ts +1 -1
  65. package/dist/src/lib/sync-dir-selector.js +1 -1
  66. package/dist/src/lib/toml-database-config.js +2 -2
  67. package/dist/src/lib/toml-database-config.js.map +1 -1
  68. package/dist/src/lib/workflow-field-descriptor.d.ts +91 -0
  69. package/dist/src/lib/workflow-field-descriptor.js +153 -0
  70. package/dist/src/lib/workflow-field-descriptor.js.map +1 -0
  71. package/package.json +2 -2
@@ -1,7 +1,6 @@
1
1
  import { ApiClient } from "../lib/api-client.js";
2
2
  import { getCurrentAppId } from "../lib/config.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";
3
+ import { error, info, result as printResult, formatTable, formatId, formatDate, json, } from "../lib/output.js";
5
4
  function resolveAppId(appId, options) {
6
5
  const resolved = appId || options.app || getCurrentAppId();
7
6
  if (!resolved) {
@@ -18,11 +17,19 @@ export function registerDatabaseTypesCommands(program) {
18
17
  Examples:
19
18
  $ primitive database-types list
20
19
  $ primitive database-types get <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>
20
+ $ primitive config create database-type <database-type> # scaffold database-types/<type>.toml
21
+ $ primitive config push --only database-type/<database-type>
24
22
  $ primitive database-types operations list <database-type>
25
- $ primitive database-types operations create <database-type> <name> --type query --model Task --access true --definition '{"filter":{}}'
23
+ # Operations are [[operations]] entries in database-types/<type>.toml.
24
+ `);
25
+ // Server-side configuration is authored in TOML and applied with `config 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 create database-type <key> # scaffold one locally
31
+ $ primitive config set database-type/<key> <path>=<value>
32
+ $ primitive config push --only database-type/<key>
26
33
  `);
27
34
  // List type configs
28
35
  dbTypes
@@ -85,162 +92,10 @@ Examples:
85
92
  process.exit(1);
86
93
  }
87
94
  });
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>", "CEL expression gating who can update the database's CEL context")
96
- .option("--metadata-access <cel>", "Legacy alias for --cel-context-access")
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>", "CEL expression gating CEL context updates (use 'none' to clear)")
145
- .option("--metadata-access <cel>", "Legacy alias for --cel-context-access (use 'none' to clear)")
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
- });
239
95
  // ---- Operations subcommand group ----
240
96
  const operations = dbTypes
241
97
  .command("operations")
242
98
  .description("Manage operations (queries and mutations) for a database type");
243
- // List operations
244
99
  operations
245
100
  .command("list")
246
101
  .description("List operations for a database type")
@@ -312,160 +167,5 @@ Examples:
312
167
  process.exit(1);
313
168
  }
314
169
  });
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
- });
470
170
  }
471
171
  //# 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":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,KAAK,EACL,IAAI,EAEJ,MAAM,IAAI,WAAW,EACrB,WAAW,EACX,QAAQ,EACR,UAAU,EACV,IAAI,GACL,MAAM,kBAAkB,CAAC;AAG1B,SAAS,YAAY,CAAC,KAAyB,EAAE,OAAY;IAC3D,MAAM,QAAQ,GAAG,KAAK,IAAI,OAAO,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,KAAK,CAAC,oFAAoF,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,oDAAoD,CAAC;SACjE,WAAW,CAAC,OAAO,EAAE;;;;;;;;CAQzB,CAAC,CAAC;IAED,+EAA+E;IAC/E,qEAAqE;IACrE,OAAO,CAAC,WAAW,CACjB,OAAO,EACP;;;;;;CAMH,CACE,CAAC;IAGF,oBAAoB;IACpB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,UAAU,EAAE,4CAA4C,CAAC;SAClE,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC/B,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAEjD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,CAAC;gBACX,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,IAAI,EAAE;gBAChB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE;gBACvC,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;gBACtF,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;gBAC5E,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE;aAC9D,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,kBAAkB;IAClB,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,yCAAyC,CAAC;SACtD,QAAQ,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SACjD,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAE/E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YAED,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAClD,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;YACpD,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACvD,WAAW,CAAC,oBAAoB,EAAE,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC;YAChE,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACrD,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,wCAAwC;IACxC,MAAM,UAAU,GAAG,OAAO;SACvB,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,+DAA+D,CAAC,CAAC;IAEhF,UAAU;SACP,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qCAAqC,CAAC;SAClD,QAAQ,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SACjD,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YACpF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAEjD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,CAAC;gBACX,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CACT,WAAW,CAAC,IAAI,EAAE;gBAChB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;gBAC/B,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;gBAC/B,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE;gBACrC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAM,EAAE,EAAE;wBACpD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC1B,OAAO,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpD,CAAC,EAAC;gBACF,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE;aAC9D,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,gBAAgB;IAChB,UAAU;SACP,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,uBAAuB,CAAC;SACpC,QAAQ,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SACjD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SACpC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC5C,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;YAExF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,CAAC;gBACb,OAAO;YACT,CAAC;YAED,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACrD,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -10,9 +10,6 @@ import { generateDbTypes, } from "../lib/db-codegen/dbGenerator.js";
10
10
  import { generateDbSwiftTypes } from "../lib/swift-codegen/dbGenerator.js";
11
11
  import { success, error, info, warn, keyValue, result as printResult, formatTable, formatId, formatDate, json, } from "../lib/output.js";
12
12
  import { confirmPrompt } from "../lib/confirm-prompt.js";
13
- import { deprecateCommandGroup, warnDeprecated, } from "../lib/deprecation.js";
14
- /** Successor for the deprecated database CEL context commands and flags. */
15
- const CEL_CONTEXT_SUCCESSOR = "resource metadata categories (`primitive metadata get|set database <database-id> <category>`; define categories with `primitive config push`)";
16
13
  import { parseFilterOptions } from "../lib/record-filter.js";
17
14
  import { parseDataOption } from "../lib/data-input.js";
18
15
  import { ulid } from "ulid";
@@ -283,33 +280,14 @@ database-type-config' and the 'database-type-configs' group for inspection:
283
280
  .argument("<title>", "Database title")
284
281
  .option("--app <app-id>", "App ID")
285
282
  .requiredOption("--type <database-type>", "Database type (required)")
286
- .option("--cel-context <json>", "[deprecated] Initial CEL context as JSON (read from rules as database.celContext.*). Prefer --initial-metadata (resource metadata categories, separate readRule/writeRule).")
287
- .option("--metadata <json>", "[deprecated] Initial CEL context as JSON (legacy alias for --cel-context); prefer --initial-metadata")
288
- .option("--initial-metadata <json>", "Create-time resource metadata as JSON, keyed by category name (issue #1420). The recommended replacement for --cel-context: read from rules as md.self.<category>.<key>.")
283
+ .option("--initial-metadata <json>", "Create-time resource metadata as JSON, keyed by category name, e.g. '{\"settings\":{\"teamId\":\"t1\"}}'; rules read it as md.self.<category>.<key>")
289
284
  .option("--json", "Output as JSON")
290
285
  .action(async (title, options) => {
291
286
  const resolvedAppId = resolveAppId(undefined, options);
292
287
  const client = new ApiClient();
293
288
  try {
294
289
  const params = { title, databaseType: options.type };
295
- // `--cel-context` is the new user-facing name; `--metadata` remains
296
- // supported for backwards compatibility. When both are provided,
297
- // --cel-context wins.
298
- if (options.celContext !== undefined || options.metadata !== undefined) {
299
- warnDeprecated(`primitive databases create ${options.celContext !== undefined ? "--cel-context" : "--metadata"}`, "--initial-metadata (resource metadata categories)", 1815);
300
- }
301
- const contextSource = options.celContext ?? options.metadata;
302
- if (contextSource) {
303
- try {
304
- params.metadata = JSON.parse(contextSource);
305
- }
306
- catch {
307
- error(`Invalid ${options.celContext ? "--cel-context" : "--metadata"} JSON.`);
308
- process.exit(1);
309
- }
310
- }
311
- // `--initial-metadata` is a separate concept: create-time per-category
312
- // ResourceMetadata rows (issue #1420), not the database CEL context.
290
+ // Create-time per-category ResourceMetadata rows (issue #1420).
313
291
  if (options.initialMetadata) {
314
292
  try {
315
293
  params.initialMetadata = JSON.parse(options.initialMetadata);
@@ -537,25 +515,6 @@ database-type-config' and the 'database-type-configs' group for inspection:
537
515
  .option("--app <app-id>", "App ID")
538
516
  .option("-y, --yes", "Skip confirmation prompt")
539
517
  .action(removeManagerAction);
540
- // Grant permission (deprecated alias for add-manager)
541
- permissions
542
- .command("grant")
543
- .description("(deprecated: use add-manager) Grant a user permission on a database")
544
- .argument("<database-id>", "Database ID")
545
- .requiredOption("--user-id <user-id>", "User ID to grant permission to")
546
- .option("--permission <permission>", "Permission level (ignored, always 'manager')")
547
- .option("--app <app-id>", "App ID")
548
- .option("--json", "Output as JSON")
549
- .action(addManagerAction);
550
- // Revoke permission (deprecated alias for remove-manager)
551
- permissions
552
- .command("revoke")
553
- .description("(deprecated: use remove-manager) Revoke a user's permission on a database")
554
- .argument("<database-id>", "Database ID")
555
- .argument("<user-id>", "User ID to revoke")
556
- .option("--app <app-id>", "App ID")
557
- .option("-y, --yes", "Skip confirmation prompt")
558
- .action(removeManagerAction);
559
518
  // ---- Records subcommand group ----
560
519
  const records = databases
561
520
  .command("records")
@@ -1223,88 +1182,6 @@ database-type-config' and the 'database-type-configs' group for inspection:
1223
1182
  process.exit(1);
1224
1183
  }
1225
1184
  });
1226
- // ---- CEL context subcommand group ----
1227
- // `cel-context` is the user-facing name for the dict that feeds CEL
1228
- // access rules and filter placeholders. `metadata` is kept as a hidden
1229
- // alias for backwards compatibility with existing scripts.
1230
- const registerCelContextGroup = (name, hidden) => {
1231
- const group = databases
1232
- .command(name, { hidden })
1233
- .description(hidden
1234
- ? "(deprecated: use resource metadata categories, `primitive metadata`) Manage database CEL context (alias of 'cel-context')"
1235
- : "(deprecated: use resource metadata categories, `primitive metadata`) Manage database CEL context (the dict referenced by access rules and filters)");
1236
- // CEL context is deprecated in favour of resource metadata categories
1237
- // (#1420, #1815), which carry separate read and write rules.
1238
- deprecateCommandGroup(group, CEL_CONTEXT_SUCCESSOR, { issue: 1815 });
1239
- group
1240
- .command("get")
1241
- .description("Read database CEL context")
1242
- .argument("<database-id>", "Database ID")
1243
- .option("--app <app-id>", "App ID")
1244
- .option("--json", "Output as JSON")
1245
- .action(async (databaseId, options) => {
1246
- const resolvedAppId = resolveAppId(undefined, options);
1247
- const client = new ApiClient();
1248
- try {
1249
- const result = await client.getDatabaseCelContext(resolvedAppId, databaseId);
1250
- if (options.json) {
1251
- json(result);
1252
- return;
1253
- }
1254
- printResult("Database ID", result.databaseId);
1255
- const ctx = result.celContext ?? result.metadata;
1256
- if (ctx && Object.keys(ctx).length > 0) {
1257
- printResult("CEL Context", JSON.stringify(ctx, null, 2));
1258
- }
1259
- else {
1260
- info("No CEL context set.");
1261
- }
1262
- }
1263
- catch (err) {
1264
- error(err.message);
1265
- process.exit(1);
1266
- }
1267
- });
1268
- group
1269
- .command("update")
1270
- .description("Update database CEL context (merge with existing)")
1271
- .argument("<database-id>", "Database ID")
1272
- .requiredOption("--data <json>", "CEL context fields as JSON (merged with existing)")
1273
- .option("--app <app-id>", "App ID")
1274
- .option("--json", "Output as JSON")
1275
- .action(async (databaseId, options) => {
1276
- const resolvedAppId = resolveAppId(undefined, options);
1277
- const client = new ApiClient();
1278
- let data;
1279
- try {
1280
- data = JSON.parse(options.data);
1281
- }
1282
- catch {
1283
- error("Invalid --data JSON.");
1284
- process.exit(1);
1285
- return;
1286
- }
1287
- try {
1288
- const result = await client.updateDatabaseCelContext(resolvedAppId, databaseId, data);
1289
- if (options.json) {
1290
- json(result);
1291
- return;
1292
- }
1293
- success("CEL context updated.");
1294
- const ctx = result.celContext ?? result.metadata;
1295
- if (ctx) {
1296
- keyValue("CEL Context", JSON.stringify(ctx));
1297
- }
1298
- }
1299
- catch (err) {
1300
- error(err.message);
1301
- process.exit(1);
1302
- }
1303
- });
1304
- };
1305
- registerCelContextGroup("cel-context", false);
1306
- // Hidden legacy alias — `primitive databases metadata get/update` still works.
1307
- registerCelContextGroup("metadata", true);
1308
1185
  // ---- Operations subcommand group ----
1309
1186
  const operations = databases
1310
1187
  .command("operations")
@@ -2176,7 +2053,6 @@ async function exportSingleDatabase(client, appId, databaseId, outputDir, jsonOu
2176
2053
  databaseId: dbMeta.databaseId || databaseId,
2177
2054
  title: dbMeta.title,
2178
2055
  databaseType: dbMeta.databaseType || null,
2179
- metadata: dbMeta.metadata || null,
2180
2056
  };
2181
2057
  writeFileSync(path.join(dbDir, "metadata.json"), JSON.stringify(metadata, null, 2));
2182
2058
  // 3. Export records: list models, then query each.
@@ -2288,8 +2164,11 @@ async function importSingleDatabase(client, appId, dbDir, options) {
2288
2164
  if (metadata.databaseType) {
2289
2165
  createData.databaseType = metadata.databaseType;
2290
2166
  }
2291
- if (metadata.metadata) {
2292
- createData.metadata = metadata.metadata;
2167
+ // Exports written before #3991 carry the retired database CEL context
2168
+ // dict; the server refuses it on create, so it is not imported.
2169
+ if (metadata.metadata && Object.keys(metadata.metadata).length > 0) {
2170
+ warn(`${databaseId}: not importing its database CEL context (retired in #3991); ` +
2171
+ "move those values into a resource metadata category.");
2293
2172
  }
2294
2173
  const created = await client.createDatabase(appId, createData);
2295
2174
  targetDatabaseId = created.databaseId || created.id || databaseId;