primitive-admin 1.0.0

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 (38) hide show
  1. package/README.md +495 -0
  2. package/dist/bin/primitive.js +72 -0
  3. package/dist/bin/primitive.js.map +1 -0
  4. package/dist/src/commands/admins.js +268 -0
  5. package/dist/src/commands/admins.js.map +1 -0
  6. package/dist/src/commands/analytics.js +195 -0
  7. package/dist/src/commands/analytics.js.map +1 -0
  8. package/dist/src/commands/apps.js +238 -0
  9. package/dist/src/commands/apps.js.map +1 -0
  10. package/dist/src/commands/auth.js +178 -0
  11. package/dist/src/commands/auth.js.map +1 -0
  12. package/dist/src/commands/catalog.js +460 -0
  13. package/dist/src/commands/catalog.js.map +1 -0
  14. package/dist/src/commands/integrations.js +438 -0
  15. package/dist/src/commands/integrations.js.map +1 -0
  16. package/dist/src/commands/prompts.js +999 -0
  17. package/dist/src/commands/prompts.js.map +1 -0
  18. package/dist/src/commands/sync.js +598 -0
  19. package/dist/src/commands/sync.js.map +1 -0
  20. package/dist/src/commands/users.js +293 -0
  21. package/dist/src/commands/users.js.map +1 -0
  22. package/dist/src/commands/waitlist.js +176 -0
  23. package/dist/src/commands/waitlist.js.map +1 -0
  24. package/dist/src/commands/workflows.js +876 -0
  25. package/dist/src/commands/workflows.js.map +1 -0
  26. package/dist/src/lib/api-client.js +522 -0
  27. package/dist/src/lib/api-client.js.map +1 -0
  28. package/dist/src/lib/auth-flow.js +306 -0
  29. package/dist/src/lib/auth-flow.js.map +1 -0
  30. package/dist/src/lib/config.js +90 -0
  31. package/dist/src/lib/config.js.map +1 -0
  32. package/dist/src/lib/fetch.js +43 -0
  33. package/dist/src/lib/fetch.js.map +1 -0
  34. package/dist/src/lib/output.js +143 -0
  35. package/dist/src/lib/output.js.map +1 -0
  36. package/dist/src/types/index.js +2 -0
  37. package/dist/src/types/index.js.map +1 -0
  38. package/package.json +47 -0
@@ -0,0 +1,460 @@
1
+ import { readFileSync } from "fs";
2
+ import * as TOML from "@iarna/toml";
3
+ import { ApiClient } from "../lib/api-client.js";
4
+ import { success, error, info, keyValue, formatTable, formatId, formatStatus, json, divider, } from "../lib/output.js";
5
+ export function registerCatalogCommands(program) {
6
+ const catalog = program
7
+ .command("catalog")
8
+ .description("Manage global prompt and integration catalog (super-admin only)")
9
+ .addHelpText("after", `
10
+ Examples:
11
+ $ primitive catalog prompts list
12
+ $ primitive catalog prompts create --from-file template.toml
13
+ $ primitive catalog integrations list
14
+ `);
15
+ // Prompts catalog
16
+ const prompts = catalog.command("prompts").description("Manage prompt catalog");
17
+ // List catalog prompts
18
+ prompts
19
+ .command("list")
20
+ .description("List prompt catalog items")
21
+ .option("--status <status>", "Filter by status: draft, active, deprecated")
22
+ .option("--json", "Output as JSON")
23
+ .action(async (options) => {
24
+ const client = new ApiClient();
25
+ try {
26
+ const { items } = await client.listPromptCatalog({
27
+ status: options.status,
28
+ });
29
+ if (options.json) {
30
+ json(items);
31
+ return;
32
+ }
33
+ if (!items || items.length === 0) {
34
+ info("No catalog prompts found.");
35
+ return;
36
+ }
37
+ console.log(formatTable(items, [
38
+ { header: "ID", key: "catalogId", format: formatId },
39
+ { header: "KEY", key: "catalogKey" },
40
+ { header: "NAME", key: "displayName" },
41
+ { header: "CATEGORY", key: "category" },
42
+ { header: "STATUS", key: "status", format: formatStatus },
43
+ ]));
44
+ }
45
+ catch (err) {
46
+ error(err.message);
47
+ process.exit(1);
48
+ }
49
+ });
50
+ // Create catalog prompt
51
+ prompts
52
+ .command("create")
53
+ .description("Create a catalog prompt")
54
+ .option("--from-file <path>", "Load from TOML file")
55
+ .option("--key <key>", "Catalog key")
56
+ .option("--name <name>", "Display name")
57
+ .option("--description <desc>", "Description")
58
+ .option("--category <cat>", "Category")
59
+ .option("--provider <provider>", "LLM provider: openrouter, gemini", "openrouter")
60
+ .option("--model <model>", "Model name")
61
+ .option("--system-prompt <prompt>", "System prompt")
62
+ .option("--user-template <template>", "User prompt template")
63
+ .option("--json", "Output as JSON")
64
+ .action(async (options) => {
65
+ const client = new ApiClient();
66
+ let payload;
67
+ if (options.fromFile) {
68
+ try {
69
+ const content = readFileSync(options.fromFile, "utf-8");
70
+ const tomlData = TOML.parse(content);
71
+ payload = {
72
+ catalogKey: tomlData.catalogKey || tomlData.key,
73
+ displayName: tomlData.displayName || tomlData.name,
74
+ description: tomlData.description,
75
+ category: tomlData.category,
76
+ provider: tomlData.provider || "openrouter",
77
+ model: tomlData.model,
78
+ systemPrompt: tomlData.systemPrompt,
79
+ userPromptTemplate: tomlData.userPromptTemplate,
80
+ temperature: tomlData.temperature,
81
+ topP: tomlData.topP,
82
+ maxTokens: tomlData.maxTokens,
83
+ inputSchema: tomlData.inputSchema,
84
+ outputSchema: tomlData.outputSchema,
85
+ };
86
+ }
87
+ catch (err) {
88
+ error(`Failed to read TOML file: ${err.message}`);
89
+ process.exit(1);
90
+ }
91
+ }
92
+ else {
93
+ if (!options.key || !options.name || !options.model || !options.userTemplate) {
94
+ error("Required: --key, --name, --model, --user-template (or use --from-file)");
95
+ process.exit(1);
96
+ }
97
+ payload = {
98
+ catalogKey: options.key,
99
+ displayName: options.name,
100
+ description: options.description,
101
+ category: options.category,
102
+ provider: options.provider,
103
+ model: options.model,
104
+ systemPrompt: options.systemPrompt,
105
+ userPromptTemplate: options.userTemplate,
106
+ };
107
+ }
108
+ try {
109
+ const result = await client.createPromptCatalogItem(payload);
110
+ if (options.json) {
111
+ json(result);
112
+ return;
113
+ }
114
+ success(`Catalog prompt created: ${result.displayName}`);
115
+ keyValue("Catalog ID", result.catalogId);
116
+ keyValue("Key", result.catalogKey);
117
+ }
118
+ catch (err) {
119
+ error(err.message);
120
+ process.exit(1);
121
+ }
122
+ });
123
+ // Get catalog prompt
124
+ prompts
125
+ .command("get")
126
+ .description("Get catalog prompt details")
127
+ .argument("<catalog-id>", "Catalog ID")
128
+ .option("--json", "Output as JSON")
129
+ .action(async (catalogId, options) => {
130
+ const client = new ApiClient();
131
+ try {
132
+ const result = await client.getPromptCatalogItem(catalogId);
133
+ if (options.json) {
134
+ json(result);
135
+ return;
136
+ }
137
+ keyValue("Catalog ID", result.catalogId);
138
+ keyValue("Key", result.catalogKey);
139
+ keyValue("Name", result.displayName);
140
+ keyValue("Description", result.description);
141
+ keyValue("Category", result.category);
142
+ keyValue("Status", formatStatus(result.status));
143
+ keyValue("Provider", result.provider);
144
+ keyValue("Model", result.model);
145
+ if (result.systemPrompt) {
146
+ divider();
147
+ info("System Prompt:");
148
+ console.log(result.systemPrompt);
149
+ }
150
+ divider();
151
+ info("User Prompt Template:");
152
+ console.log(result.userPromptTemplate);
153
+ }
154
+ catch (err) {
155
+ error(err.message);
156
+ process.exit(1);
157
+ }
158
+ });
159
+ // Update catalog prompt
160
+ prompts
161
+ .command("update")
162
+ .description("Update a catalog prompt")
163
+ .argument("<catalog-id>", "Catalog ID")
164
+ .option("--name <name>", "Display name")
165
+ .option("--description <desc>", "Description")
166
+ .option("--category <cat>", "Category")
167
+ .option("--status <status>", "Status: draft, active, deprecated")
168
+ .option("--provider <provider>", "LLM provider")
169
+ .option("--model <model>", "Model name")
170
+ .option("--system-prompt <prompt>", "System prompt")
171
+ .option("--user-template <template>", "User prompt template")
172
+ .option("--json", "Output as JSON")
173
+ .action(async (catalogId, options) => {
174
+ const payload = {};
175
+ if (options.name)
176
+ payload.displayName = options.name;
177
+ if (options.description)
178
+ payload.description = options.description;
179
+ if (options.category)
180
+ payload.category = options.category;
181
+ if (options.status)
182
+ payload.status = options.status;
183
+ if (options.provider)
184
+ payload.provider = options.provider;
185
+ if (options.model)
186
+ payload.model = options.model;
187
+ if (options.systemPrompt)
188
+ payload.systemPrompt = options.systemPrompt;
189
+ if (options.userTemplate)
190
+ payload.userPromptTemplate = options.userTemplate;
191
+ if (Object.keys(payload).length === 0) {
192
+ error("No update options specified.");
193
+ process.exit(1);
194
+ }
195
+ const client = new ApiClient();
196
+ try {
197
+ const result = await client.updatePromptCatalogItem(catalogId, payload);
198
+ if (options.json) {
199
+ json(result);
200
+ return;
201
+ }
202
+ success("Catalog prompt updated.");
203
+ }
204
+ catch (err) {
205
+ error(err.message);
206
+ process.exit(1);
207
+ }
208
+ });
209
+ // Delete catalog prompt
210
+ prompts
211
+ .command("delete")
212
+ .description("Delete a catalog prompt")
213
+ .argument("<catalog-id>", "Catalog ID")
214
+ .option("-y, --yes", "Skip confirmation prompt")
215
+ .action(async (catalogId, options) => {
216
+ if (!options.yes) {
217
+ const inquirer = await import("inquirer");
218
+ const { confirm } = await inquirer.default.prompt([
219
+ {
220
+ type: "confirm",
221
+ name: "confirm",
222
+ message: `Delete catalog prompt ${catalogId}?`,
223
+ default: false,
224
+ },
225
+ ]);
226
+ if (!confirm) {
227
+ info("Cancelled.");
228
+ return;
229
+ }
230
+ }
231
+ const client = new ApiClient();
232
+ try {
233
+ await client.deletePromptCatalogItem(catalogId);
234
+ success(`Catalog prompt ${catalogId} deleted.`);
235
+ }
236
+ catch (err) {
237
+ error(err.message);
238
+ process.exit(1);
239
+ }
240
+ });
241
+ // Integrations catalog
242
+ const integrations = catalog.command("integrations").description("Manage integration catalog");
243
+ // List catalog integrations
244
+ integrations
245
+ .command("list")
246
+ .description("List integration catalog items")
247
+ .option("--status <status>", "Filter by status: draft, active, deprecated")
248
+ .option("--json", "Output as JSON")
249
+ .action(async (options) => {
250
+ const client = new ApiClient();
251
+ try {
252
+ const { items } = await client.listIntegrationCatalog({
253
+ status: options.status,
254
+ });
255
+ if (options.json) {
256
+ json(items);
257
+ return;
258
+ }
259
+ if (!items || items.length === 0) {
260
+ info("No catalog integrations found.");
261
+ return;
262
+ }
263
+ console.log(formatTable(items, [
264
+ { header: "ID", key: "catalogId", format: formatId },
265
+ { header: "KEY", key: "catalogKey" },
266
+ { header: "NAME", key: "displayName" },
267
+ { header: "CATEGORY", key: "category" },
268
+ { header: "STATUS", key: "status", format: formatStatus },
269
+ ]));
270
+ }
271
+ catch (err) {
272
+ error(err.message);
273
+ process.exit(1);
274
+ }
275
+ });
276
+ // Create catalog integration
277
+ integrations
278
+ .command("create")
279
+ .description("Create a catalog integration")
280
+ .option("--from-file <path>", "Load from TOML file")
281
+ .option("--key <key>", "Catalog key")
282
+ .option("--name <name>", "Display name")
283
+ .option("--description <desc>", "Description")
284
+ .option("--category <cat>", "Category")
285
+ .option("--request-config <json>", "Request config as JSON")
286
+ .option("--doc-url <url>", "Documentation URL")
287
+ .option("--logo-url <url>", "Logo URL")
288
+ .option("--json", "Output as JSON")
289
+ .action(async (options) => {
290
+ const client = new ApiClient();
291
+ let payload;
292
+ if (options.fromFile) {
293
+ try {
294
+ const content = readFileSync(options.fromFile, "utf-8");
295
+ const tomlData = TOML.parse(content);
296
+ payload = {
297
+ catalogKey: tomlData.catalogKey || tomlData.key,
298
+ displayName: tomlData.displayName || tomlData.name,
299
+ description: tomlData.description,
300
+ category: tomlData.category,
301
+ requestConfig: typeof tomlData.requestConfig === "string"
302
+ ? tomlData.requestConfig
303
+ : JSON.stringify(tomlData.requestConfig),
304
+ docUrl: tomlData.docUrl,
305
+ logoUrl: tomlData.logoUrl,
306
+ };
307
+ }
308
+ catch (err) {
309
+ error(`Failed to read TOML file: ${err.message}`);
310
+ process.exit(1);
311
+ }
312
+ }
313
+ else {
314
+ if (!options.key || !options.name || !options.requestConfig) {
315
+ error("Required: --key, --name, --request-config (or use --from-file)");
316
+ process.exit(1);
317
+ }
318
+ payload = {
319
+ catalogKey: options.key,
320
+ displayName: options.name,
321
+ description: options.description,
322
+ category: options.category,
323
+ requestConfig: options.requestConfig,
324
+ docUrl: options.docUrl,
325
+ logoUrl: options.logoUrl,
326
+ };
327
+ }
328
+ try {
329
+ const result = await client.createIntegrationCatalogItem(payload);
330
+ if (options.json) {
331
+ json(result);
332
+ return;
333
+ }
334
+ success(`Catalog integration created: ${result.displayName}`);
335
+ keyValue("Catalog ID", result.catalogId);
336
+ keyValue("Key", result.catalogKey);
337
+ }
338
+ catch (err) {
339
+ error(err.message);
340
+ process.exit(1);
341
+ }
342
+ });
343
+ // Get catalog integration
344
+ integrations
345
+ .command("get")
346
+ .description("Get catalog integration details")
347
+ .argument("<catalog-id>", "Catalog ID")
348
+ .option("--json", "Output as JSON")
349
+ .action(async (catalogId, options) => {
350
+ const client = new ApiClient();
351
+ try {
352
+ const result = await client.getIntegrationCatalogItem(catalogId);
353
+ if (options.json) {
354
+ json(result);
355
+ return;
356
+ }
357
+ keyValue("Catalog ID", result.catalogId);
358
+ keyValue("Key", result.catalogKey);
359
+ keyValue("Name", result.displayName);
360
+ keyValue("Description", result.description);
361
+ keyValue("Category", result.category);
362
+ keyValue("Status", formatStatus(result.status));
363
+ keyValue("Doc URL", result.docUrl);
364
+ keyValue("Logo URL", result.logoUrl);
365
+ divider();
366
+ info("Request Config:");
367
+ try {
368
+ const config = JSON.parse(result.requestConfig);
369
+ console.log(JSON.stringify(config, null, 2));
370
+ }
371
+ catch {
372
+ console.log(result.requestConfig);
373
+ }
374
+ }
375
+ catch (err) {
376
+ error(err.message);
377
+ process.exit(1);
378
+ }
379
+ });
380
+ // Update catalog integration
381
+ integrations
382
+ .command("update")
383
+ .description("Update a catalog integration")
384
+ .argument("<catalog-id>", "Catalog ID")
385
+ .option("--name <name>", "Display name")
386
+ .option("--description <desc>", "Description")
387
+ .option("--category <cat>", "Category")
388
+ .option("--status <status>", "Status: draft, active, deprecated")
389
+ .option("--request-config <json>", "Request config as JSON")
390
+ .option("--doc-url <url>", "Documentation URL")
391
+ .option("--logo-url <url>", "Logo URL")
392
+ .option("--json", "Output as JSON")
393
+ .action(async (catalogId, options) => {
394
+ const payload = {};
395
+ if (options.name)
396
+ payload.displayName = options.name;
397
+ if (options.description)
398
+ payload.description = options.description;
399
+ if (options.category)
400
+ payload.category = options.category;
401
+ if (options.status)
402
+ payload.status = options.status;
403
+ if (options.requestConfig)
404
+ payload.requestConfig = options.requestConfig;
405
+ if (options.docUrl)
406
+ payload.docUrl = options.docUrl;
407
+ if (options.logoUrl)
408
+ payload.logoUrl = options.logoUrl;
409
+ if (Object.keys(payload).length === 0) {
410
+ error("No update options specified.");
411
+ process.exit(1);
412
+ }
413
+ const client = new ApiClient();
414
+ try {
415
+ const result = await client.updateIntegrationCatalogItem(catalogId, payload);
416
+ if (options.json) {
417
+ json(result);
418
+ return;
419
+ }
420
+ success("Catalog integration updated.");
421
+ }
422
+ catch (err) {
423
+ error(err.message);
424
+ process.exit(1);
425
+ }
426
+ });
427
+ // Delete catalog integration
428
+ integrations
429
+ .command("delete")
430
+ .description("Delete a catalog integration")
431
+ .argument("<catalog-id>", "Catalog ID")
432
+ .option("-y, --yes", "Skip confirmation prompt")
433
+ .action(async (catalogId, options) => {
434
+ if (!options.yes) {
435
+ const inquirer = await import("inquirer");
436
+ const { confirm } = await inquirer.default.prompt([
437
+ {
438
+ type: "confirm",
439
+ name: "confirm",
440
+ message: `Delete catalog integration ${catalogId}?`,
441
+ default: false,
442
+ },
443
+ ]);
444
+ if (!confirm) {
445
+ info("Cancelled.");
446
+ return;
447
+ }
448
+ }
449
+ const client = new ApiClient();
450
+ try {
451
+ await client.deleteIntegrationCatalogItem(catalogId);
452
+ success(`Catalog integration ${catalogId} deleted.`);
453
+ }
454
+ catch (err) {
455
+ error(err.message);
456
+ process.exit(1);
457
+ }
458
+ });
459
+ }
460
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/commands/catalog.ts"],"names":[],"mappings":"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"}