@chanl-ai/cli 2.0.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.
- package/bin/chanl.js +10 -0
- package/dist/__tests__/cli.test.d.ts +2 -0
- package/dist/__tests__/cli.test.js +2313 -0
- package/dist/__tests__/cli.test.js.map +1 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.js +72 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/agents.d.ts +8 -0
- package/dist/commands/agents.js +671 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/auth.d.ts +16 -0
- package/dist/commands/auth.js +294 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/call.d.ts +8 -0
- package/dist/commands/call.js +166 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/calls.d.ts +8 -0
- package/dist/commands/calls.js +719 -0
- package/dist/commands/calls.js.map +1 -0
- package/dist/commands/chat.d.ts +8 -0
- package/dist/commands/chat.js +203 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.js +231 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/health.d.ts +8 -0
- package/dist/commands/health.js +55 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/index.d.ts +18 -0
- package/dist/commands/index.js +39 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/knowledge.d.ts +8 -0
- package/dist/commands/knowledge.js +539 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/mcp.d.ts +8 -0
- package/dist/commands/mcp.js +589 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/memory.d.ts +8 -0
- package/dist/commands/memory.js +408 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/personas.d.ts +8 -0
- package/dist/commands/personas.js +356 -0
- package/dist/commands/personas.js.map +1 -0
- package/dist/commands/prompts.d.ts +8 -0
- package/dist/commands/prompts.js +295 -0
- package/dist/commands/prompts.js.map +1 -0
- package/dist/commands/scenarios.d.ts +8 -0
- package/dist/commands/scenarios.js +591 -0
- package/dist/commands/scenarios.js.map +1 -0
- package/dist/commands/scorecards.d.ts +8 -0
- package/dist/commands/scorecards.js +570 -0
- package/dist/commands/scorecards.js.map +1 -0
- package/dist/commands/tools.d.ts +8 -0
- package/dist/commands/tools.js +632 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/toolsets.d.ts +8 -0
- package/dist/commands/toolsets.js +464 -0
- package/dist/commands/toolsets.js.map +1 -0
- package/dist/commands/workspaces.d.ts +8 -0
- package/dist/commands/workspaces.js +170 -0
- package/dist/commands/workspaces.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/config-store.d.ts +117 -0
- package/dist/utils/config-store.js +191 -0
- package/dist/utils/config-store.js.map +1 -0
- package/dist/utils/interactive.d.ts +41 -0
- package/dist/utils/interactive.js +83 -0
- package/dist/utils/interactive.js.map +1 -0
- package/dist/utils/output.d.ts +100 -0
- package/dist/utils/output.js +221 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/sdk-factory.d.ts +15 -0
- package/dist/utils/sdk-factory.js +34 -0
- package/dist/utils/sdk-factory.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import ora from "ora";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { readFileSync } from "fs";
|
|
5
|
+
import { createSdk } from "../utils/sdk-factory.js";
|
|
6
|
+
import {
|
|
7
|
+
printError,
|
|
8
|
+
printSuccess,
|
|
9
|
+
printInfo,
|
|
10
|
+
printBlank,
|
|
11
|
+
printSimpleTable,
|
|
12
|
+
printLabel,
|
|
13
|
+
isJsonOutput,
|
|
14
|
+
printJson,
|
|
15
|
+
formatDate
|
|
16
|
+
} from "../utils/output.js";
|
|
17
|
+
function createPromptsCommand() {
|
|
18
|
+
const prompts = new Command("prompts").description("Manage prompt templates").addHelpText(
|
|
19
|
+
"after",
|
|
20
|
+
`
|
|
21
|
+
What are Prompts?
|
|
22
|
+
Prompts are reusable templates for AI agent instructions. They support
|
|
23
|
+
variables, versioning, and categories for organizing across use cases.
|
|
24
|
+
|
|
25
|
+
Quick Start:
|
|
26
|
+
$ chanl prompts list # List all prompts
|
|
27
|
+
$ chanl prompts get <id> # View prompt details
|
|
28
|
+
$ chanl prompts create -f prompt.json # Create from JSON file
|
|
29
|
+
$ chanl prompts update <id> -f data.json # Update a prompt
|
|
30
|
+
$ chanl prompts delete <id> # Delete a prompt`
|
|
31
|
+
);
|
|
32
|
+
prompts.command("list").description("List all prompts").option("-c, --category <category>", "Filter by category (support, sales, onboarding, general)").option("-s, --status <status>", "Filter by status (active, draft, archived)").option("--search <query>", "Search by name or content").option("-l, --limit <number>", "Number of items per page", "20").option("--page <number>", "Page number", "1").addHelpText(
|
|
33
|
+
"after",
|
|
34
|
+
`
|
|
35
|
+
Examples:
|
|
36
|
+
$ chanl prompts list # List all prompts
|
|
37
|
+
$ chanl prompts list --category support # Filter by category
|
|
38
|
+
$ chanl prompts list --status active # Only active prompts
|
|
39
|
+
$ chanl prompts list --json # Output as JSON`
|
|
40
|
+
).action(handlePromptsList);
|
|
41
|
+
prompts.command("get <id>").description("Get prompt details").addHelpText(
|
|
42
|
+
"after",
|
|
43
|
+
`
|
|
44
|
+
Examples:
|
|
45
|
+
$ chanl prompts get abc123 # Get prompt details
|
|
46
|
+
$ chanl prompts get abc123 --json # Output as JSON`
|
|
47
|
+
).action(handlePromptsGet);
|
|
48
|
+
prompts.command("create").description("Create a new prompt").option("-f, --file <path>", "Path to JSON file with prompt data").addHelpText(
|
|
49
|
+
"after",
|
|
50
|
+
`
|
|
51
|
+
Examples:
|
|
52
|
+
$ chanl prompts create -f prompt.json # Create from file
|
|
53
|
+
|
|
54
|
+
JSON file format:
|
|
55
|
+
{
|
|
56
|
+
"name": "Support Greeting",
|
|
57
|
+
"content": "Hello! How can I help you today?",
|
|
58
|
+
"category": "support",
|
|
59
|
+
"status": "active",
|
|
60
|
+
"tags": ["greeting", "support"]
|
|
61
|
+
}`
|
|
62
|
+
).action(handlePromptsCreate);
|
|
63
|
+
prompts.command("update <id>").description("Update an existing prompt").option("-f, --file <path>", "Path to JSON file with update data").addHelpText(
|
|
64
|
+
"after",
|
|
65
|
+
`
|
|
66
|
+
Examples:
|
|
67
|
+
$ chanl prompts update abc123 -f updates.json`
|
|
68
|
+
).action(handlePromptsUpdate);
|
|
69
|
+
prompts.command("delete <id>").description("Delete a prompt").option("-y, --yes", "Skip confirmation prompt").addHelpText(
|
|
70
|
+
"after",
|
|
71
|
+
`
|
|
72
|
+
Examples:
|
|
73
|
+
$ chanl prompts delete abc123
|
|
74
|
+
$ chanl prompts delete abc123 --yes # Skip confirmation`
|
|
75
|
+
).action(handlePromptsDelete);
|
|
76
|
+
return prompts;
|
|
77
|
+
}
|
|
78
|
+
function formatStatus(status) {
|
|
79
|
+
switch (status) {
|
|
80
|
+
case "active":
|
|
81
|
+
return chalk.green("active");
|
|
82
|
+
case "draft":
|
|
83
|
+
return chalk.yellow("draft");
|
|
84
|
+
case "archived":
|
|
85
|
+
return chalk.gray("archived");
|
|
86
|
+
default:
|
|
87
|
+
return chalk.gray(status || "unknown");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function handlePromptsList(options) {
|
|
91
|
+
const sdk = createSdk();
|
|
92
|
+
if (!sdk) return;
|
|
93
|
+
const spinner = ora("Fetching prompts...").start();
|
|
94
|
+
try {
|
|
95
|
+
const response = await sdk.prompts.list({
|
|
96
|
+
category: options.category,
|
|
97
|
+
status: options.status,
|
|
98
|
+
search: options.search,
|
|
99
|
+
limit: parseInt(options.limit, 10),
|
|
100
|
+
page: parseInt(options.page, 10)
|
|
101
|
+
});
|
|
102
|
+
spinner.stop();
|
|
103
|
+
if (!response.success || !response.data) {
|
|
104
|
+
printError("Failed to fetch prompts", response.message);
|
|
105
|
+
process.exitCode = 1;
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const prompts = Array.isArray(response.data) ? response.data : [];
|
|
109
|
+
if (isJsonOutput()) {
|
|
110
|
+
printJson(prompts);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (prompts.length === 0) {
|
|
114
|
+
printInfo("No prompts found");
|
|
115
|
+
printInfo("Use 'chanl prompts create -f prompt.json' to create a prompt");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
printBlank();
|
|
119
|
+
printSimpleTable(
|
|
120
|
+
["ID", "Name", "Category", "Status", "Version", "Updated"],
|
|
121
|
+
prompts.map((p) => [
|
|
122
|
+
p.id.slice(-12),
|
|
123
|
+
(p.name || "Untitled").slice(0, 30),
|
|
124
|
+
p.category || "-",
|
|
125
|
+
formatStatus(p.status),
|
|
126
|
+
String(p.version || "-"),
|
|
127
|
+
formatDate(p.updatedAt || p.createdAt)
|
|
128
|
+
])
|
|
129
|
+
);
|
|
130
|
+
printBlank();
|
|
131
|
+
printInfo(`Total: ${prompts.length} prompts`);
|
|
132
|
+
} catch (error) {
|
|
133
|
+
spinner.fail("Failed to fetch prompts");
|
|
134
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
135
|
+
printError("Error", message);
|
|
136
|
+
process.exitCode = 1;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async function handlePromptsGet(id) {
|
|
140
|
+
const sdk = createSdk();
|
|
141
|
+
if (!sdk) return;
|
|
142
|
+
const spinner = ora("Fetching prompt...").start();
|
|
143
|
+
try {
|
|
144
|
+
const response = await sdk.prompts.get(id);
|
|
145
|
+
spinner.stop();
|
|
146
|
+
if (!response.success || !response.data) {
|
|
147
|
+
printError("Failed to fetch prompt", response.message);
|
|
148
|
+
process.exitCode = 1;
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const prompt = response.data;
|
|
152
|
+
if (isJsonOutput()) {
|
|
153
|
+
printJson(prompt);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
printBlank();
|
|
157
|
+
console.log(chalk.bold("Prompt Details:"));
|
|
158
|
+
printLabel("ID", prompt.id);
|
|
159
|
+
printLabel("Name", prompt.name);
|
|
160
|
+
if (prompt.description) printLabel("Description", prompt.description);
|
|
161
|
+
if (prompt.category) printLabel("Category", prompt.category);
|
|
162
|
+
printLabel("Status", formatStatus(prompt.status));
|
|
163
|
+
if (prompt.version) printLabel("Version", prompt.version.toString());
|
|
164
|
+
if (prompt.tags && prompt.tags.length > 0) {
|
|
165
|
+
printLabel("Tags", prompt.tags.join(", "));
|
|
166
|
+
}
|
|
167
|
+
if (prompt.createdAt) printLabel("Created", formatDate(prompt.createdAt));
|
|
168
|
+
if (prompt.updatedAt) printLabel("Updated", formatDate(prompt.updatedAt));
|
|
169
|
+
if (prompt.content) {
|
|
170
|
+
printBlank();
|
|
171
|
+
console.log(chalk.bold("Content:"));
|
|
172
|
+
console.log(chalk.dim(prompt.content.slice(0, 500) + (prompt.content.length > 500 ? "..." : "")));
|
|
173
|
+
}
|
|
174
|
+
printBlank();
|
|
175
|
+
} catch (error) {
|
|
176
|
+
spinner.fail("Failed to fetch prompt");
|
|
177
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
178
|
+
printError("Error", message);
|
|
179
|
+
process.exitCode = 1;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async function handlePromptsCreate(options) {
|
|
183
|
+
if (!options.file) {
|
|
184
|
+
printError("Missing required option", "Use '-f <file>' to specify prompt data");
|
|
185
|
+
process.exitCode = 1;
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const sdk = createSdk();
|
|
189
|
+
if (!sdk) return;
|
|
190
|
+
let promptData;
|
|
191
|
+
try {
|
|
192
|
+
const content = readFileSync(options.file, "utf-8");
|
|
193
|
+
promptData = JSON.parse(content);
|
|
194
|
+
} catch (error) {
|
|
195
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
196
|
+
printError("Failed to read file", message);
|
|
197
|
+
process.exitCode = 1;
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const spinner = ora("Creating prompt...").start();
|
|
201
|
+
try {
|
|
202
|
+
const response = await sdk.prompts.create(promptData);
|
|
203
|
+
spinner.stop();
|
|
204
|
+
if (!response.success || !response.data) {
|
|
205
|
+
printError("Failed to create prompt", response.message);
|
|
206
|
+
process.exitCode = 1;
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (isJsonOutput()) {
|
|
210
|
+
printJson(response.data);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const prompt = response.data;
|
|
214
|
+
printSuccess(`Prompt created: ${prompt.name}`);
|
|
215
|
+
printLabel("ID", prompt.id);
|
|
216
|
+
if (prompt.category) printLabel("Category", prompt.category);
|
|
217
|
+
} catch (error) {
|
|
218
|
+
spinner.fail("Failed to create prompt");
|
|
219
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
220
|
+
printError("Error", message);
|
|
221
|
+
process.exitCode = 1;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async function handlePromptsUpdate(id, options) {
|
|
225
|
+
if (!options.file) {
|
|
226
|
+
printError("Missing required option", "Use '-f <file>' to specify update data");
|
|
227
|
+
process.exitCode = 1;
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const sdk = createSdk();
|
|
231
|
+
if (!sdk) return;
|
|
232
|
+
let updateData;
|
|
233
|
+
try {
|
|
234
|
+
const content = readFileSync(options.file, "utf-8");
|
|
235
|
+
updateData = JSON.parse(content);
|
|
236
|
+
} catch (error) {
|
|
237
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
238
|
+
printError("Failed to read file", message);
|
|
239
|
+
process.exitCode = 1;
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const spinner = ora("Updating prompt...").start();
|
|
243
|
+
try {
|
|
244
|
+
const response = await sdk.prompts.update(id, updateData);
|
|
245
|
+
spinner.stop();
|
|
246
|
+
if (!response.success || !response.data) {
|
|
247
|
+
printError("Failed to update prompt", response.message);
|
|
248
|
+
process.exitCode = 1;
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (isJsonOutput()) {
|
|
252
|
+
printJson(response.data);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const prompt = response.data;
|
|
256
|
+
printSuccess(`Prompt updated: ${prompt.name}`);
|
|
257
|
+
} catch (error) {
|
|
258
|
+
spinner.fail("Failed to update prompt");
|
|
259
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
260
|
+
printError("Error", message);
|
|
261
|
+
process.exitCode = 1;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
async function handlePromptsDelete(id, options) {
|
|
265
|
+
const sdk = createSdk();
|
|
266
|
+
if (!sdk) return;
|
|
267
|
+
if (!options.yes) {
|
|
268
|
+
printInfo(`About to delete prompt: ${id}`);
|
|
269
|
+
printInfo("Use '--yes' flag to skip this confirmation");
|
|
270
|
+
}
|
|
271
|
+
const spinner = ora("Deleting prompt...").start();
|
|
272
|
+
try {
|
|
273
|
+
const response = await sdk.prompts.delete(id);
|
|
274
|
+
spinner.stop();
|
|
275
|
+
if (!response.success) {
|
|
276
|
+
printError("Failed to delete prompt", response.message);
|
|
277
|
+
process.exitCode = 1;
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
if (isJsonOutput()) {
|
|
281
|
+
printJson({ success: true, deleted: id });
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
printSuccess(`Prompt deleted: ${id}`);
|
|
285
|
+
} catch (error) {
|
|
286
|
+
spinner.fail("Failed to delete prompt");
|
|
287
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
288
|
+
printError("Error", message);
|
|
289
|
+
process.exitCode = 1;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
export {
|
|
293
|
+
createPromptsCommand
|
|
294
|
+
};
|
|
295
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/commands/prompts.ts"],"sourcesContent":["import { Command } from 'commander';\nimport ora from 'ora';\nimport chalk from 'chalk';\nimport { readFileSync } from 'fs';\nimport { createSdk } from '../utils/sdk-factory.js';\nimport {\n printError,\n printSuccess,\n printInfo,\n printBlank,\n printSimpleTable,\n printLabel,\n isJsonOutput,\n printJson,\n formatDate,\n} from '../utils/output.js';\n\n/**\n * Create the prompts command group\n */\nexport function createPromptsCommand(): Command {\n const prompts = new Command('prompts')\n .description('Manage prompt templates')\n .addHelpText(\n 'after',\n `\nWhat are Prompts?\n Prompts are reusable templates for AI agent instructions. They support\n variables, versioning, and categories for organizing across use cases.\n\nQuick Start:\n $ chanl prompts list # List all prompts\n $ chanl prompts get <id> # View prompt details\n $ chanl prompts create -f prompt.json # Create from JSON file\n $ chanl prompts update <id> -f data.json # Update a prompt\n $ chanl prompts delete <id> # Delete a prompt`\n );\n\n // prompts list\n prompts\n .command('list')\n .description('List all prompts')\n .option('-c, --category <category>', 'Filter by category (support, sales, onboarding, general)')\n .option('-s, --status <status>', 'Filter by status (active, draft, archived)')\n .option('--search <query>', 'Search by name or content')\n .option('-l, --limit <number>', 'Number of items per page', '20')\n .option('--page <number>', 'Page number', '1')\n .addHelpText(\n 'after',\n `\nExamples:\n $ chanl prompts list # List all prompts\n $ chanl prompts list --category support # Filter by category\n $ chanl prompts list --status active # Only active prompts\n $ chanl prompts list --json # Output as JSON`\n )\n .action(handlePromptsList);\n\n // prompts get <id>\n prompts\n .command('get <id>')\n .description('Get prompt details')\n .addHelpText(\n 'after',\n `\nExamples:\n $ chanl prompts get abc123 # Get prompt details\n $ chanl prompts get abc123 --json # Output as JSON`\n )\n .action(handlePromptsGet);\n\n // prompts create\n prompts\n .command('create')\n .description('Create a new prompt')\n .option('-f, --file <path>', 'Path to JSON file with prompt data')\n .addHelpText(\n 'after',\n `\nExamples:\n $ chanl prompts create -f prompt.json # Create from file\n\nJSON file format:\n {\n \"name\": \"Support Greeting\",\n \"content\": \"Hello! How can I help you today?\",\n \"category\": \"support\",\n \"status\": \"active\",\n \"tags\": [\"greeting\", \"support\"]\n }`\n )\n .action(handlePromptsCreate);\n\n // prompts update <id>\n prompts\n .command('update <id>')\n .description('Update an existing prompt')\n .option('-f, --file <path>', 'Path to JSON file with update data')\n .addHelpText(\n 'after',\n `\nExamples:\n $ chanl prompts update abc123 -f updates.json`\n )\n .action(handlePromptsUpdate);\n\n // prompts delete <id>\n prompts\n .command('delete <id>')\n .description('Delete a prompt')\n .option('-y, --yes', 'Skip confirmation prompt')\n .addHelpText(\n 'after',\n `\nExamples:\n $ chanl prompts delete abc123\n $ chanl prompts delete abc123 --yes # Skip confirmation`\n )\n .action(handlePromptsDelete);\n\n return prompts;\n}\n\n/**\n * Format prompt status with color\n */\nfunction formatStatus(status?: string): string {\n switch (status) {\n case 'active':\n return chalk.green('active');\n case 'draft':\n return chalk.yellow('draft');\n case 'archived':\n return chalk.gray('archived');\n default:\n return chalk.gray(status || 'unknown');\n }\n}\n\n/**\n * Handle prompts list command\n */\nasync function handlePromptsList(options: {\n category?: string;\n status?: string;\n search?: string;\n limit: string;\n page: string;\n}): Promise<void> {\n const sdk = createSdk();\n if (!sdk) return;\n\n const spinner = ora('Fetching prompts...').start();\n\n try {\n const response = await sdk.prompts.list({\n category: options.category as any,\n status: options.status as any,\n search: options.search,\n limit: parseInt(options.limit, 10),\n page: parseInt(options.page, 10),\n });\n\n spinner.stop();\n\n if (!response.success || !response.data) {\n printError('Failed to fetch prompts', response.message);\n process.exitCode = 1;\n return;\n }\n\n const prompts = Array.isArray(response.data) ? response.data : [];\n\n if (isJsonOutput()) {\n printJson(prompts);\n return;\n }\n\n if (prompts.length === 0) {\n printInfo('No prompts found');\n printInfo(\"Use 'chanl prompts create -f prompt.json' to create a prompt\");\n return;\n }\n\n printBlank();\n printSimpleTable(\n ['ID', 'Name', 'Category', 'Status', 'Version', 'Updated'],\n prompts.map((p: any) => [\n p.id.slice(-12),\n (p.name || 'Untitled').slice(0, 30),\n p.category || '-',\n formatStatus(p.status),\n String(p.version || '-'),\n formatDate(p.updatedAt || p.createdAt),\n ])\n );\n\n printBlank();\n printInfo(`Total: ${prompts.length} prompts`);\n } catch (error) {\n spinner.fail('Failed to fetch prompts');\n const message = error instanceof Error ? error.message : 'Unknown error';\n printError('Error', message);\n process.exitCode = 1;\n }\n}\n\n/**\n * Handle prompts get command\n */\nasync function handlePromptsGet(id: string): Promise<void> {\n const sdk = createSdk();\n if (!sdk) return;\n\n const spinner = ora('Fetching prompt...').start();\n\n try {\n const response = await sdk.prompts.get(id);\n\n spinner.stop();\n\n if (!response.success || !response.data) {\n printError('Failed to fetch prompt', response.message);\n process.exitCode = 1;\n return;\n }\n\n const prompt = response.data;\n\n if (isJsonOutput()) {\n printJson(prompt);\n return;\n }\n\n printBlank();\n console.log(chalk.bold('Prompt Details:'));\n printLabel('ID', prompt.id);\n printLabel('Name', prompt.name);\n if (prompt.description) printLabel('Description', prompt.description);\n if (prompt.category) printLabel('Category', prompt.category);\n printLabel('Status', formatStatus(prompt.status));\n if (prompt.version) printLabel('Version', prompt.version.toString());\n if (prompt.tags && prompt.tags.length > 0) {\n printLabel('Tags', prompt.tags.join(', '));\n }\n if (prompt.createdAt) printLabel('Created', formatDate(prompt.createdAt));\n if (prompt.updatedAt) printLabel('Updated', formatDate(prompt.updatedAt));\n\n if (prompt.content) {\n printBlank();\n console.log(chalk.bold('Content:'));\n console.log(chalk.dim(prompt.content.slice(0, 500) + (prompt.content.length > 500 ? '...' : '')));\n }\n\n printBlank();\n } catch (error) {\n spinner.fail('Failed to fetch prompt');\n const message = error instanceof Error ? error.message : 'Unknown error';\n printError('Error', message);\n process.exitCode = 1;\n }\n}\n\n/**\n * Handle prompts create command\n */\nasync function handlePromptsCreate(options: {\n file?: string;\n}): Promise<void> {\n if (!options.file) {\n printError('Missing required option', \"Use '-f <file>' to specify prompt data\");\n process.exitCode = 1;\n return;\n }\n\n const sdk = createSdk();\n if (!sdk) return;\n\n // Read and parse the file\n let promptData: any;\n try {\n const content = readFileSync(options.file, 'utf-8');\n promptData = JSON.parse(content);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n printError('Failed to read file', message);\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora('Creating prompt...').start();\n\n try {\n const response = await sdk.prompts.create(promptData);\n\n spinner.stop();\n\n if (!response.success || !response.data) {\n printError('Failed to create prompt', response.message);\n process.exitCode = 1;\n return;\n }\n\n if (isJsonOutput()) {\n printJson(response.data);\n return;\n }\n\n const prompt = response.data;\n printSuccess(`Prompt created: ${prompt.name}`);\n printLabel('ID', prompt.id);\n if (prompt.category) printLabel('Category', prompt.category);\n } catch (error) {\n spinner.fail('Failed to create prompt');\n const message = error instanceof Error ? error.message : 'Unknown error';\n printError('Error', message);\n process.exitCode = 1;\n }\n}\n\n/**\n * Handle prompts update command\n */\nasync function handlePromptsUpdate(\n id: string,\n options: { file?: string }\n): Promise<void> {\n if (!options.file) {\n printError('Missing required option', \"Use '-f <file>' to specify update data\");\n process.exitCode = 1;\n return;\n }\n\n const sdk = createSdk();\n if (!sdk) return;\n\n // Read and parse the file\n let updateData: any;\n try {\n const content = readFileSync(options.file, 'utf-8');\n updateData = JSON.parse(content);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n printError('Failed to read file', message);\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora('Updating prompt...').start();\n\n try {\n const response = await sdk.prompts.update(id, updateData);\n\n spinner.stop();\n\n if (!response.success || !response.data) {\n printError('Failed to update prompt', response.message);\n process.exitCode = 1;\n return;\n }\n\n if (isJsonOutput()) {\n printJson(response.data);\n return;\n }\n\n const prompt = response.data;\n printSuccess(`Prompt updated: ${prompt.name}`);\n } catch (error) {\n spinner.fail('Failed to update prompt');\n const message = error instanceof Error ? error.message : 'Unknown error';\n printError('Error', message);\n process.exitCode = 1;\n }\n}\n\n/**\n * Handle prompts delete command\n */\nasync function handlePromptsDelete(\n id: string,\n options: { yes?: boolean }\n): Promise<void> {\n const sdk = createSdk();\n if (!sdk) return;\n\n if (!options.yes) {\n printInfo(`About to delete prompt: ${id}`);\n printInfo(\"Use '--yes' flag to skip this confirmation\");\n }\n\n const spinner = ora('Deleting prompt...').start();\n\n try {\n const response = await sdk.prompts.delete(id);\n\n spinner.stop();\n\n if (!response.success) {\n printError('Failed to delete prompt', response.message);\n process.exitCode = 1;\n return;\n }\n\n if (isJsonOutput()) {\n printJson({ success: true, deleted: id });\n return;\n }\n\n printSuccess(`Prompt deleted: ${id}`);\n } catch (error) {\n spinner.fail('Failed to delete prompt');\n const message = error instanceof Error ? error.message : 'Unknown error';\n printError('Error', message);\n process.exitCode = 1;\n }\n}\n"],"mappings":"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","names":[]}
|