primitive-admin 1.1.0-alpha.62 → 1.1.0-alpha.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 +34 -27
- package/assets/skill/skills/primitive-platform/SKILL.md +34 -20
- package/dist/bin/primitive.js +10 -10
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/analytics.js +5 -15
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.js +40 -41
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +7 -7
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/collection-type-configs.js +7 -7
- package/dist/src/commands/collection-type-configs.js.map +1 -1
- package/dist/src/commands/collections.js +47 -8
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/config.d.ts +23 -12
- package/dist/src/commands/config.js +80 -45
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/cron-triggers.js +6 -6
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/database-type-configs.d.ts +2 -0
- package/dist/src/commands/database-type-configs.js +171 -0
- package/dist/src/commands/database-type-configs.js.map +1 -0
- package/dist/src/commands/database-types.js +6 -6
- package/dist/src/commands/database-types.js.map +1 -1
- package/dist/src/commands/databases.js +35 -25
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.js +138 -11
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.js +8 -8
- package/dist/src/commands/email-templates.js.map +1 -1
- package/dist/src/commands/group-type-configs.js +7 -7
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/init.js +1 -1
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +12 -197
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/metadata-category-configs.d.ts +12 -0
- package/dist/src/commands/metadata-category-configs.js +112 -0
- package/dist/src/commands/metadata-category-configs.js.map +1 -0
- package/dist/src/commands/metadata.js +4 -129
- package/dist/src/commands/metadata.js.map +1 -1
- package/dist/src/commands/prompts.js +19 -282
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.js +8 -8
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.js +16 -201
- package/dist/src/commands/scripts.js.map +1 -1
- package/dist/src/commands/sync-app-settings.d.ts +24 -19
- package/dist/src/commands/sync-app-settings.js +48 -52
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.d.ts +952 -61
- package/dist/src/commands/sync.js +3977 -849
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/vars.js +4 -4
- package/dist/src/commands/vars.js.map +1 -1
- package/dist/src/commands/webhooks.js +6 -6
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +22 -0
- package/dist/src/commands/workflows.js +135 -443
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +74 -37
- package/dist/src/lib/api-client.js +113 -59
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +6 -2
- package/dist/src/lib/codegen-shared/generatedFiles.js +9 -2
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +6 -6
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +8 -8
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
- package/dist/src/lib/config-object-descriptor.d.ts +24 -5
- package/dist/src/lib/config-object-descriptor.js +58 -10
- package/dist/src/lib/config-object-descriptor.js.map +1 -1
- package/dist/src/lib/config-payload.d.ts +1 -1
- package/dist/src/lib/config-payload.js +1 -1
- package/dist/src/lib/config-surface.d.ts +8 -8
- package/dist/src/lib/config-surface.js +10 -10
- package/dist/src/lib/config-surface.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.js +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +1 -1
- package/dist/src/lib/generated-allowlist.js +11 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +14 -14
- package/dist/src/lib/generated-config-surfaces.js +37 -35
- package/dist/src/lib/generated-config-surfaces.js.map +1 -1
- package/dist/src/lib/generated-template-lint.d.ts +16 -10
- package/dist/src/lib/generated-template-lint.js +59 -24
- package/dist/src/lib/generated-template-lint.js.map +1 -1
- package/dist/src/lib/google-client-secret-status.d.ts +1 -1
- package/dist/src/lib/google-client-secret-status.js +4 -4
- package/dist/src/lib/google-client-secret-status.js.map +1 -1
- package/dist/src/lib/migration-nag.d.ts +2 -2
- package/dist/src/lib/migration-nag.js +3 -3
- package/dist/src/lib/output.d.ts +1 -1
- package/dist/src/lib/output.js +1 -1
- package/dist/src/lib/platform-owned.d.ts +5 -5
- package/dist/src/lib/platform-owned.js +6 -6
- package/dist/src/lib/platform-owned.js.map +1 -1
- package/dist/src/lib/query-operators.d.ts +1 -1
- package/dist/src/lib/query-operators.js +1 -1
- package/dist/src/lib/signing-secret-status.d.ts +2 -2
- package/dist/src/lib/signing-secret-status.js +2 -2
- package/dist/src/lib/snapshots.d.ts +2 -2
- package/dist/src/lib/snapshots.js +2 -2
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +15 -2
- package/dist/src/lib/swift-codegen/dbGenerator.js +250 -18
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/swift-codegen/generator.d.ts +11 -2
- package/dist/src/lib/swift-codegen/generator.js +182 -6
- package/dist/src/lib/swift-codegen/generator.js.map +1 -1
- package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +7 -3
- package/dist/src/lib/swift-codegen/siblingSymbols.js +4 -1
- package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -1
- package/dist/src/lib/sync-dir-selector.d.ts +21 -0
- package/dist/src/lib/sync-dir-selector.js +30 -0
- package/dist/src/lib/sync-dir-selector.js.map +1 -0
- package/dist/src/lib/sync-paths.d.ts +39 -0
- package/dist/src/lib/sync-paths.js +70 -2
- package/dist/src/lib/sync-paths.js.map +1 -1
- package/dist/src/lib/sync-resource-types.d.ts +122 -31
- package/dist/src/lib/sync-resource-types.js +177 -42
- package/dist/src/lib/sync-resource-types.js.map +1 -1
- package/dist/src/lib/sync-selectors.d.ts +4 -4
- package/dist/src/lib/sync-selectors.js +4 -4
- package/dist/src/lib/toml-database-config.d.ts +4 -4
- package/dist/src/lib/toml-database-config.js +3 -3
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/toml-metadata-config.d.ts +4 -4
- package/dist/src/lib/toml-metadata-config.js +4 -4
- package/dist/src/lib/toml-native-form.d.ts +1 -1
- package/dist/src/lib/toml-native-form.js +1 -1
- package/dist/src/lib/toml-params-validator.d.ts +1 -1
- package/dist/src/lib/toml-params-validator.js +1 -1
- package/dist/src/lib/version-check.js +1 -1
- package/dist/src/lib/version-check.js.map +1 -1
- package/dist/src/lib/workflow-apply.d.ts +69 -10
- package/dist/src/lib/workflow-apply.js +99 -24
- package/dist/src/lib/workflow-apply.js.map +1 -1
- package/dist/src/lib/workflow-codegen/generator.js +4 -4
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +11 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js +5 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -1
- package/dist/src/lib/workflow-config-apply.d.ts +1 -1
- package/dist/src/lib/workflow-config-apply.js +1 -1
- package/dist/src/lib/workflow-config-sidecar.d.ts +1 -1
- package/dist/src/lib/workflow-config-sidecar.js +1 -1
- package/dist/src/lib/workflow-config-sidecar.js.map +1 -1
- package/dist/src/lib/workflow-defaults.d.ts +30 -0
- package/dist/src/lib/workflow-defaults.js +41 -0
- package/dist/src/lib/workflow-defaults.js.map +1 -0
- package/dist/src/lib/workflow-include-preserve.d.ts +6 -6
- package/dist/src/lib/workflow-include-preserve.js +4 -4
- package/dist/src/lib/workflow-payload.d.ts +26 -14
- package/dist/src/lib/workflow-payload.js +61 -45
- package/dist/src/lib/workflow-payload.js.map +1 -1
- package/dist/src/lib/workflow-toml-validator.d.ts +19 -16
- package/dist/src/lib/workflow-toml-validator.js +19 -16
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/types/index.d.ts +15 -0
- package/dist/src/validators.d.ts +7 -7
- package/dist/src/validators.js +6 -6
- package/package.json +1 -3
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ApiClient } from "../lib/api-client.js";
|
|
2
2
|
import { resolveAppId } from "../lib/config.js";
|
|
3
|
-
import { confirmPrompt } from "../lib/confirm-prompt.js";
|
|
4
3
|
import { parseDataOption } from "../lib/data-input.js";
|
|
5
4
|
import { success, error, info, keyValue, json, divider, } from "../lib/output.js";
|
|
6
5
|
/**
|
|
@@ -41,8 +40,10 @@ export function registerMetadataCommands(program) {
|
|
|
41
40
|
.command("metadata")
|
|
42
41
|
.description("Read and write typed resource metadata (values)")
|
|
43
42
|
.addHelpText("after", `
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
These commands read and write metadata VALUES. Category definitions (schemas
|
|
44
|
+
and read/write rules) are a separate plane: inspect them with
|
|
45
|
+
'primitive metadata-category-configs', author them in TOML and apply them with
|
|
46
|
+
'primitive config push'.
|
|
46
47
|
|
|
47
48
|
Examples:
|
|
48
49
|
$ primitive metadata get user 01HXY... profile
|
|
@@ -52,8 +53,6 @@ Examples:
|
|
|
52
53
|
$ primitive metadata get-batch --resource user:01HXY...:profile,settings --resource class:01HZQ...:roster
|
|
53
54
|
$ primitive metadata get-batch --requests '[{"resourceType":"user","resourceId":"01HXY...","categories":["profile"]}]'
|
|
54
55
|
$ primitive metadata resolve user billing stripeCustomerId cus_ABC
|
|
55
|
-
$ primitive metadata categories list
|
|
56
|
-
$ primitive metadata categories get user profile
|
|
57
56
|
`);
|
|
58
57
|
// ─── get ───
|
|
59
58
|
metadata
|
|
@@ -278,129 +277,5 @@ Example:
|
|
|
278
277
|
process.exit(1);
|
|
279
278
|
}
|
|
280
279
|
});
|
|
281
|
-
// ─── categories (read-only config inspection) ───
|
|
282
|
-
//
|
|
283
|
-
// Category definitions are authored declaratively via `primitive sync`; these
|
|
284
|
-
// read-only subcommands let a developer inspect the app's category configs
|
|
285
|
-
// (schemas + read/write rules) without leaving the CLI.
|
|
286
|
-
const categories = metadata
|
|
287
|
-
.command("categories")
|
|
288
|
-
.description("Inspect and delete metadata category definitions (schemas + read/write rules)")
|
|
289
|
-
.addHelpText("after", `
|
|
290
|
-
Category definitions are authored declaratively with 'primitive sync'; 'list'
|
|
291
|
-
and 'get' are read-only inspection. 'delete' removes a definition (admin-gated);
|
|
292
|
-
stored values for the category are NOT deleted — delete values first.
|
|
293
|
-
|
|
294
|
-
Examples:
|
|
295
|
-
$ primitive metadata categories list
|
|
296
|
-
$ primitive metadata categories get user profile
|
|
297
|
-
$ primitive metadata categories delete user profile
|
|
298
|
-
`);
|
|
299
|
-
categories
|
|
300
|
-
.command("list")
|
|
301
|
-
.description("List all metadata category definitions for the app")
|
|
302
|
-
.option("--app <app-id>", "App ID (uses current app if not specified)")
|
|
303
|
-
.option("--json", "Output as JSON")
|
|
304
|
-
.action(async (options) => {
|
|
305
|
-
const resolvedAppId = resolveAppId(undefined, options);
|
|
306
|
-
const client = new ApiClient();
|
|
307
|
-
try {
|
|
308
|
-
const configs = await client.listMetadataCategoryConfigs(resolvedAppId);
|
|
309
|
-
if (options.json) {
|
|
310
|
-
json(configs);
|
|
311
|
-
return;
|
|
312
|
-
}
|
|
313
|
-
if (!configs || configs.length === 0) {
|
|
314
|
-
info("No metadata category definitions.");
|
|
315
|
-
return;
|
|
316
|
-
}
|
|
317
|
-
for (const cfg of configs) {
|
|
318
|
-
divider();
|
|
319
|
-
keyValue("Resource Type", cfg.resourceType);
|
|
320
|
-
keyValue("Category", cfg.category);
|
|
321
|
-
keyValue("Schema Version", String(cfg.schemaVersion ?? "(none)"));
|
|
322
|
-
keyValue("Read Rule", cfg.readRule ?? "(none — default deny)");
|
|
323
|
-
keyValue("Write Rule", cfg.writeRule ?? "(none — default deny)");
|
|
324
|
-
if (cfg.description)
|
|
325
|
-
keyValue("Description", cfg.description);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
catch (err) {
|
|
329
|
-
error(err.message);
|
|
330
|
-
process.exit(1);
|
|
331
|
-
}
|
|
332
|
-
});
|
|
333
|
-
categories
|
|
334
|
-
.command("get")
|
|
335
|
-
.description("Show one metadata category definition")
|
|
336
|
-
.argument("<resource-type>", "Resource type (e.g. user, class)")
|
|
337
|
-
.argument("<category>", "Metadata category")
|
|
338
|
-
.option("--app <app-id>", "App ID (uses current app if not specified)")
|
|
339
|
-
.option("--json", "Output as JSON")
|
|
340
|
-
.action(async (resourceType, category, options) => {
|
|
341
|
-
const resolvedAppId = resolveAppId(undefined, options);
|
|
342
|
-
const client = new ApiClient();
|
|
343
|
-
try {
|
|
344
|
-
const cfg = await client.getMetadataCategoryConfig(resolvedAppId, resourceType, category);
|
|
345
|
-
if (options.json) {
|
|
346
|
-
json(cfg);
|
|
347
|
-
return;
|
|
348
|
-
}
|
|
349
|
-
keyValue("Resource Type", cfg.resourceType);
|
|
350
|
-
keyValue("Category", cfg.category);
|
|
351
|
-
keyValue("Schema Version", String(cfg.schemaVersion ?? "(none)"));
|
|
352
|
-
keyValue("Read Rule", cfg.readRule ?? "(none — default deny)");
|
|
353
|
-
keyValue("Write Rule", cfg.writeRule ?? "(none — default deny)");
|
|
354
|
-
if (cfg.description)
|
|
355
|
-
keyValue("Description", cfg.description);
|
|
356
|
-
keyValue("Schema", JSON.stringify(cfg.schema, null, 2));
|
|
357
|
-
}
|
|
358
|
-
catch (err) {
|
|
359
|
-
error(err.message);
|
|
360
|
-
process.exit(1);
|
|
361
|
-
}
|
|
362
|
-
});
|
|
363
|
-
categories
|
|
364
|
-
.command("delete")
|
|
365
|
-
.description("Delete a metadata category definition (admin-gated). The one configuration verb that survives the TOML-only rule (issue #2645): `sync push --prune` has no server delete surface for this type yet (#1426), so deleting the file cannot retire the category. Orphan semantics: stored values for the category are NOT deleted — delete them first if you need them gone, or they become unreachable.")
|
|
366
|
-
.argument("<resource-type>", "Resource type (e.g. user, class)")
|
|
367
|
-
.argument("<category>", "Metadata category")
|
|
368
|
-
.option("--app <app-id>", "App ID (uses current app if not specified)")
|
|
369
|
-
.option("-y, --yes", "Skip confirmation prompt")
|
|
370
|
-
.option("--json", "Output as JSON")
|
|
371
|
-
.action(async (resourceType, category, options) => {
|
|
372
|
-
const resolvedAppId = resolveAppId(undefined, options);
|
|
373
|
-
if (!options.yes) {
|
|
374
|
-
let confirm;
|
|
375
|
-
try {
|
|
376
|
-
confirm = await confirmPrompt(`Delete metadata category '${resourceType}/${category}'? This cannot be undone. ` +
|
|
377
|
-
"Stored values for this category are NOT deleted and become unreachable — delete them first if you need them gone.");
|
|
378
|
-
}
|
|
379
|
-
catch (err) {
|
|
380
|
-
error(err.message);
|
|
381
|
-
process.exit(1);
|
|
382
|
-
}
|
|
383
|
-
if (!confirm) {
|
|
384
|
-
info("Cancelled.");
|
|
385
|
-
return;
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
const client = new ApiClient();
|
|
389
|
-
try {
|
|
390
|
-
const result = await client.deleteMetadataCategoryConfig(resolvedAppId, resourceType, category);
|
|
391
|
-
if (options.json) {
|
|
392
|
-
json(result);
|
|
393
|
-
return;
|
|
394
|
-
}
|
|
395
|
-
success("Metadata category definition deleted.");
|
|
396
|
-
keyValue("Resource Type", result.resourceType);
|
|
397
|
-
keyValue("Category", result.category);
|
|
398
|
-
info("Stored values for this category (if any) were not deleted and are now unreachable — delete values before the category next time.");
|
|
399
|
-
}
|
|
400
|
-
catch (err) {
|
|
401
|
-
error(err.message);
|
|
402
|
-
process.exit(1);
|
|
403
|
-
}
|
|
404
|
-
});
|
|
405
280
|
}
|
|
406
281
|
//# sourceMappingURL=metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/commands/metadata.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/commands/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { basename } from "path";
|
|
3
|
-
import { lookup as mimeLookup } from "mime-types";
|
|
1
|
+
import { writeFileSync } from "fs";
|
|
4
2
|
import { ApiClient } from "../lib/api-client.js";
|
|
5
3
|
import { resolveAppId } from "../lib/config.js";
|
|
6
4
|
import chalk from "chalk";
|
|
@@ -33,19 +31,19 @@ export function registerPromptsCommands(program) {
|
|
|
33
31
|
.addHelpText("after", `
|
|
34
32
|
Examples:
|
|
35
33
|
$ primitive prompts list
|
|
36
|
-
$ primitive config
|
|
37
|
-
$ primitive
|
|
34
|
+
$ primitive config create prompt summarizer # scaffold prompts/summarizer.toml
|
|
35
|
+
$ primitive config push --only prompt/summarizer # apply it
|
|
38
36
|
$ primitive prompts execute 01HXY... --vars '{"text":"Hello world"}'
|
|
39
|
-
$ primitive prompts configs list summarizer
|
|
37
|
+
$ primitive prompts configs list summarizer # what the server runs
|
|
40
38
|
`);
|
|
41
|
-
// Server-side configuration is authored in TOML and applied with `
|
|
39
|
+
// Server-side configuration is authored in TOML and applied with `config push`
|
|
42
40
|
// (issue #2645) — this group no longer carries config-setting flags.
|
|
43
41
|
prompts.addHelpText("after", `
|
|
44
42
|
Configuration lives in prompts/<key>.toml:
|
|
45
|
-
$ primitive config fields prompt
|
|
46
|
-
$ primitive config
|
|
43
|
+
$ primitive config fields prompt # the file's keys, types and defaults
|
|
44
|
+
$ primitive config create prompt <key> # scaffold one locally
|
|
47
45
|
$ primitive config set prompt/<key> <path>=<value>
|
|
48
|
-
$ primitive
|
|
46
|
+
$ primitive config push --only prompt/<key>
|
|
49
47
|
`);
|
|
50
48
|
// List prompts
|
|
51
49
|
prompts
|
|
@@ -277,7 +275,7 @@ edit, retire (\`status = "archived"\`) or mark one live (\`active = true\`) in t
|
|
|
277
275
|
file, then apply it:
|
|
278
276
|
|
|
279
277
|
$ primitive config set prompt/<key> prompt.status=active
|
|
280
|
-
$ primitive
|
|
278
|
+
$ primitive config push --only prompt/<key>
|
|
281
279
|
|
|
282
280
|
Duplicating a config is copying its \`[[configs]]\` block and renaming it.
|
|
283
281
|
`);
|
|
@@ -370,11 +368,14 @@ Duplicating a config is copying its \`[[configs]]\` block and renaming it.
|
|
|
370
368
|
// ============================================
|
|
371
369
|
const tests = prompts
|
|
372
370
|
.command("tests")
|
|
373
|
-
.description("
|
|
371
|
+
.description("Run and inspect prompt test cases")
|
|
374
372
|
.addHelpText("after", `
|
|
373
|
+
Test cases are authored in TOML at prompts/<key>.tests/<name>.toml and applied
|
|
374
|
+
with \`primitive config push\` (issue #2769); \`config fields prompt\` lists the
|
|
375
|
+
fields. Deleting a case is removing its file and running \`config push --prune\`.
|
|
376
|
+
|
|
375
377
|
Examples:
|
|
376
378
|
$ primitive prompts tests list <prompt-id>
|
|
377
|
-
$ primitive prompts tests create <prompt-id> --name "Basic test" --vars '{"input":"hello"}'
|
|
378
379
|
$ primitive prompts tests run <prompt-id> <test-case-id>
|
|
379
380
|
$ primitive prompts tests run-all <prompt-id>
|
|
380
381
|
$ primitive prompts tests run-all <prompt-id> --test-cases 01ABC,01DEF,01GHI
|
|
@@ -411,79 +412,6 @@ Examples:
|
|
|
411
412
|
process.exit(1);
|
|
412
413
|
}
|
|
413
414
|
});
|
|
414
|
-
// Create test case
|
|
415
|
-
tests
|
|
416
|
-
.command("create")
|
|
417
|
-
.description("Create a test case for a prompt")
|
|
418
|
-
.argument("<prompt-id>", "Prompt ID")
|
|
419
|
-
.option("--app <app-id>", "App ID (uses current app if not specified)")
|
|
420
|
-
.option("--name <name>", "Test case name (required)")
|
|
421
|
-
.option("--vars <json>", "Input variables as JSON (required)")
|
|
422
|
-
.option("--pattern <regex>", "Expected output pattern (regex)")
|
|
423
|
-
.option("--contains <json>", "Expected strings to contain (JSON array)")
|
|
424
|
-
.option("--json-subset <json>", "Expected JSON subset to match")
|
|
425
|
-
.option("--config <config-id>", "Config ID to use for this test")
|
|
426
|
-
.option("--evaluator-prompt <prompt-id>", "Evaluator prompt ID")
|
|
427
|
-
.option("--evaluator-config <config-id>", "Evaluator config ID")
|
|
428
|
-
.option("--json", "Output as JSON")
|
|
429
|
-
.action(async (promptId, options) => {
|
|
430
|
-
const resolvedAppId = resolveAppId(undefined, options);
|
|
431
|
-
if (!options.name || !options.vars) {
|
|
432
|
-
error("Required: --name and --vars");
|
|
433
|
-
process.exit(1);
|
|
434
|
-
}
|
|
435
|
-
let inputVariables;
|
|
436
|
-
try {
|
|
437
|
-
inputVariables = JSON.parse(options.vars);
|
|
438
|
-
}
|
|
439
|
-
catch {
|
|
440
|
-
error("Invalid JSON in --vars");
|
|
441
|
-
process.exit(1);
|
|
442
|
-
}
|
|
443
|
-
let expectedOutputContains;
|
|
444
|
-
if (options.contains) {
|
|
445
|
-
try {
|
|
446
|
-
expectedOutputContains = JSON.parse(options.contains);
|
|
447
|
-
}
|
|
448
|
-
catch {
|
|
449
|
-
error("Invalid JSON in --contains");
|
|
450
|
-
process.exit(1);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
let expectedJsonSubset;
|
|
454
|
-
if (options.jsonSubset) {
|
|
455
|
-
try {
|
|
456
|
-
expectedJsonSubset = JSON.parse(options.jsonSubset);
|
|
457
|
-
}
|
|
458
|
-
catch {
|
|
459
|
-
error("Invalid JSON in --json-subset");
|
|
460
|
-
process.exit(1);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
const client = new ApiClient();
|
|
464
|
-
try {
|
|
465
|
-
const result = await client.createTestCase(resolvedAppId, "prompt", promptId, {
|
|
466
|
-
name: options.name,
|
|
467
|
-
inputVariables,
|
|
468
|
-
expectedOutputPattern: options.pattern,
|
|
469
|
-
expectedOutputContains,
|
|
470
|
-
expectedJsonSubset,
|
|
471
|
-
configId: options.config,
|
|
472
|
-
evaluatorPromptId: options.evaluatorPrompt,
|
|
473
|
-
evaluatorConfigId: options.evaluatorConfig,
|
|
474
|
-
});
|
|
475
|
-
if (options.json) {
|
|
476
|
-
json(result);
|
|
477
|
-
return;
|
|
478
|
-
}
|
|
479
|
-
success(`Test case created: ${result.name}`);
|
|
480
|
-
keyValue("Test Case ID", result.testCaseId);
|
|
481
|
-
}
|
|
482
|
-
catch (err) {
|
|
483
|
-
error(err.message);
|
|
484
|
-
process.exit(1);
|
|
485
|
-
}
|
|
486
|
-
});
|
|
487
415
|
// Get test case
|
|
488
416
|
tests
|
|
489
417
|
.command("get")
|
|
@@ -549,121 +477,6 @@ Examples:
|
|
|
549
477
|
process.exit(1);
|
|
550
478
|
}
|
|
551
479
|
});
|
|
552
|
-
// Update test case
|
|
553
|
-
tests
|
|
554
|
-
.command("update")
|
|
555
|
-
.description("Update a test case")
|
|
556
|
-
.argument("<prompt-id>", "Prompt ID")
|
|
557
|
-
.argument("<test-case-id>", "Test Case ID")
|
|
558
|
-
.option("--app <app-id>", "App ID (uses current app if not specified)")
|
|
559
|
-
.option("--name <name>", "Test case name")
|
|
560
|
-
.option("--vars <json>", "Input variables as JSON")
|
|
561
|
-
.option("--pattern <regex>", "Expected output pattern (regex)")
|
|
562
|
-
.option("--contains <json>", "Expected strings to contain (JSON array)")
|
|
563
|
-
.option("--json-subset <json>", "Expected JSON subset to match")
|
|
564
|
-
.option("--config <config-id>", "Config ID to use for this test")
|
|
565
|
-
.option("--clear-pattern", "Clear expected pattern")
|
|
566
|
-
.option("--clear-contains", "Clear expected contains")
|
|
567
|
-
.option("--clear-json-subset", "Clear expected JSON subset")
|
|
568
|
-
.option("--json", "Output as JSON")
|
|
569
|
-
.action(async (promptId, testCaseId, options) => {
|
|
570
|
-
const resolvedAppId = resolveAppId(undefined, options);
|
|
571
|
-
const payload = {};
|
|
572
|
-
if (options.name)
|
|
573
|
-
payload.name = options.name;
|
|
574
|
-
if (options.vars) {
|
|
575
|
-
try {
|
|
576
|
-
payload.inputVariables = JSON.parse(options.vars);
|
|
577
|
-
}
|
|
578
|
-
catch {
|
|
579
|
-
error("Invalid JSON in --vars");
|
|
580
|
-
process.exit(1);
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
if (options.clearPattern) {
|
|
584
|
-
payload.expectedOutputPattern = null;
|
|
585
|
-
}
|
|
586
|
-
else if (options.pattern) {
|
|
587
|
-
payload.expectedOutputPattern = options.pattern;
|
|
588
|
-
}
|
|
589
|
-
if (options.clearContains) {
|
|
590
|
-
payload.expectedOutputContains = null;
|
|
591
|
-
}
|
|
592
|
-
else if (options.contains) {
|
|
593
|
-
try {
|
|
594
|
-
payload.expectedOutputContains = JSON.parse(options.contains);
|
|
595
|
-
}
|
|
596
|
-
catch {
|
|
597
|
-
error("Invalid JSON in --contains");
|
|
598
|
-
process.exit(1);
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
if (options.clearJsonSubset) {
|
|
602
|
-
payload.expectedJsonSubset = null;
|
|
603
|
-
}
|
|
604
|
-
else if (options.jsonSubset) {
|
|
605
|
-
try {
|
|
606
|
-
payload.expectedJsonSubset = JSON.parse(options.jsonSubset);
|
|
607
|
-
}
|
|
608
|
-
catch {
|
|
609
|
-
error("Invalid JSON in --json-subset");
|
|
610
|
-
process.exit(1);
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
if (options.config)
|
|
614
|
-
payload.configId = options.config;
|
|
615
|
-
if (Object.keys(payload).length === 0) {
|
|
616
|
-
error("No update options specified.");
|
|
617
|
-
process.exit(1);
|
|
618
|
-
}
|
|
619
|
-
const client = new ApiClient();
|
|
620
|
-
try {
|
|
621
|
-
const result = await client.updateTestCase(resolvedAppId, "prompt", promptId, testCaseId, payload);
|
|
622
|
-
if (options.json) {
|
|
623
|
-
json(result);
|
|
624
|
-
return;
|
|
625
|
-
}
|
|
626
|
-
success("Test case updated.");
|
|
627
|
-
}
|
|
628
|
-
catch (err) {
|
|
629
|
-
error(err.message);
|
|
630
|
-
process.exit(1);
|
|
631
|
-
}
|
|
632
|
-
});
|
|
633
|
-
// Delete test case
|
|
634
|
-
tests
|
|
635
|
-
.command("delete")
|
|
636
|
-
.description("Delete a test case")
|
|
637
|
-
.argument("<prompt-id>", "Prompt ID")
|
|
638
|
-
.argument("<test-case-id>", "Test Case ID")
|
|
639
|
-
.option("--app <app-id>", "App ID (uses current app if not specified)")
|
|
640
|
-
.option("-y, --yes", "Skip confirmation prompt")
|
|
641
|
-
.action(async (promptId, testCaseId, options) => {
|
|
642
|
-
const resolvedAppId = resolveAppId(undefined, options);
|
|
643
|
-
if (!options.yes) {
|
|
644
|
-
let confirm;
|
|
645
|
-
try {
|
|
646
|
-
confirm = await confirmPrompt(`Are you sure you want to delete test case ${testCaseId}?`);
|
|
647
|
-
}
|
|
648
|
-
catch (err) {
|
|
649
|
-
error(err.message);
|
|
650
|
-
process.exit(1);
|
|
651
|
-
}
|
|
652
|
-
if (!confirm) {
|
|
653
|
-
info("Cancelled.");
|
|
654
|
-
return;
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
const client = new ApiClient();
|
|
658
|
-
try {
|
|
659
|
-
await client.deleteTestCase(resolvedAppId, "prompt", promptId, testCaseId);
|
|
660
|
-
success("Test case deleted.");
|
|
661
|
-
}
|
|
662
|
-
catch (err) {
|
|
663
|
-
error(err.message);
|
|
664
|
-
process.exit(1);
|
|
665
|
-
}
|
|
666
|
-
});
|
|
667
480
|
// Run a single test case
|
|
668
481
|
tests
|
|
669
482
|
.command("run")
|
|
@@ -1030,13 +843,15 @@ Examples:
|
|
|
1030
843
|
// ============================================
|
|
1031
844
|
const attachments = tests
|
|
1032
845
|
.command("attachments")
|
|
1033
|
-
.description("
|
|
846
|
+
.description("Inspect test case file attachments")
|
|
1034
847
|
.addHelpText("after", `
|
|
848
|
+
Attachments are authored as files in prompts/<key>.tests/<name>/ and applied
|
|
849
|
+
with \`primitive config push\` (#2769); removing one and running
|
|
850
|
+
\`config push --prune\` deletes it server-side. These verbs read server state.
|
|
851
|
+
|
|
1035
852
|
Examples:
|
|
1036
853
|
$ primitive prompts tests attachments list <prompt-id> <test-case-id>
|
|
1037
|
-
$ primitive prompts tests attachments upload <prompt-id> <test-case-id> ./document.pdf
|
|
1038
854
|
$ primitive prompts tests attachments download <prompt-id> <test-case-id> document.pdf
|
|
1039
|
-
$ primitive prompts tests attachments delete <prompt-id> <test-case-id> document.pdf
|
|
1040
855
|
`);
|
|
1041
856
|
// List attachments
|
|
1042
857
|
attachments
|
|
@@ -1074,49 +889,6 @@ Examples:
|
|
|
1074
889
|
process.exit(1);
|
|
1075
890
|
}
|
|
1076
891
|
});
|
|
1077
|
-
// Upload attachment
|
|
1078
|
-
attachments
|
|
1079
|
-
.command("upload")
|
|
1080
|
-
.description("Upload a file attachment to a test case")
|
|
1081
|
-
.argument("<prompt-id>", "Prompt ID")
|
|
1082
|
-
.argument("<test-case-id>", "Test Case ID")
|
|
1083
|
-
.argument("<file-path>", "Path to the file to upload")
|
|
1084
|
-
.option("--app <app-id>", "App ID (uses current app if not specified)")
|
|
1085
|
-
.option("--name <name>", "Override the filename")
|
|
1086
|
-
.option("--json", "Output as JSON")
|
|
1087
|
-
.action(async (promptId, testCaseId, filePath, options) => {
|
|
1088
|
-
const resolvedAppId = resolveAppId(undefined, options);
|
|
1089
|
-
const client = new ApiClient();
|
|
1090
|
-
try {
|
|
1091
|
-
// Check file exists and get stats
|
|
1092
|
-
const stats = statSync(filePath);
|
|
1093
|
-
if (!stats.isFile()) {
|
|
1094
|
-
error(`Not a file: ${filePath}`);
|
|
1095
|
-
process.exit(1);
|
|
1096
|
-
}
|
|
1097
|
-
// Check file size (10 MB limit)
|
|
1098
|
-
const TEN_MB = 10 * 1024 * 1024;
|
|
1099
|
-
if (stats.size > TEN_MB) {
|
|
1100
|
-
error(`File too large (max 10MB): ${formatFileSize(stats.size)}`);
|
|
1101
|
-
process.exit(1);
|
|
1102
|
-
}
|
|
1103
|
-
const filename = options.name || basename(filePath);
|
|
1104
|
-
const data = readFileSync(filePath);
|
|
1105
|
-
const contentType = mimeLookup(filePath) || "application/octet-stream";
|
|
1106
|
-
const result = await client.uploadTestCaseAttachment(resolvedAppId, "prompt", promptId, testCaseId, filename, data, contentType);
|
|
1107
|
-
if (options.json) {
|
|
1108
|
-
json(result);
|
|
1109
|
-
return;
|
|
1110
|
-
}
|
|
1111
|
-
success(`Uploaded: ${filename}`);
|
|
1112
|
-
keyValue("Size", formatFileSize(result.attachment.size));
|
|
1113
|
-
keyValue("Type", result.attachment.contentType);
|
|
1114
|
-
}
|
|
1115
|
-
catch (err) {
|
|
1116
|
-
error(err.message);
|
|
1117
|
-
process.exit(1);
|
|
1118
|
-
}
|
|
1119
|
-
});
|
|
1120
892
|
// Download attachment
|
|
1121
893
|
attachments
|
|
1122
894
|
.command("download")
|
|
@@ -1142,41 +914,6 @@ Examples:
|
|
|
1142
914
|
process.exit(1);
|
|
1143
915
|
}
|
|
1144
916
|
});
|
|
1145
|
-
// Delete attachment
|
|
1146
|
-
attachments
|
|
1147
|
-
.command("delete")
|
|
1148
|
-
.description("Delete a file attachment from a test case")
|
|
1149
|
-
.argument("<prompt-id>", "Prompt ID")
|
|
1150
|
-
.argument("<test-case-id>", "Test Case ID")
|
|
1151
|
-
.argument("<filename>", "Name of the file to delete")
|
|
1152
|
-
.option("--app <app-id>", "App ID (uses current app if not specified)")
|
|
1153
|
-
.option("-y, --yes", "Skip confirmation prompt")
|
|
1154
|
-
.action(async (promptId, testCaseId, filename, options) => {
|
|
1155
|
-
const resolvedAppId = resolveAppId(undefined, options);
|
|
1156
|
-
if (!options.yes) {
|
|
1157
|
-
let confirm;
|
|
1158
|
-
try {
|
|
1159
|
-
confirm = await confirmPrompt(`Are you sure you want to delete attachment "${filename}"?`);
|
|
1160
|
-
}
|
|
1161
|
-
catch (err) {
|
|
1162
|
-
error(err.message);
|
|
1163
|
-
process.exit(1);
|
|
1164
|
-
}
|
|
1165
|
-
if (!confirm) {
|
|
1166
|
-
info("Cancelled.");
|
|
1167
|
-
return;
|
|
1168
|
-
}
|
|
1169
|
-
}
|
|
1170
|
-
const client = new ApiClient();
|
|
1171
|
-
try {
|
|
1172
|
-
await client.deleteTestCaseAttachment(resolvedAppId, "prompt", promptId, testCaseId, filename);
|
|
1173
|
-
success(`Deleted: ${filename}`);
|
|
1174
|
-
}
|
|
1175
|
-
catch (err) {
|
|
1176
|
-
error(err.message);
|
|
1177
|
-
process.exit(1);
|
|
1178
|
-
}
|
|
1179
|
-
});
|
|
1180
917
|
}
|
|
1181
918
|
function formatFileSize(bytes) {
|
|
1182
919
|
if (bytes < 1024)
|