@koda-sl/baker-cli 0.2.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 (58) hide show
  1. package/README.md +229 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +24 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/client.d.ts +10 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +119 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commands/images/delete.d.ts +19 -0
  11. package/dist/commands/images/delete.d.ts.map +1 -0
  12. package/dist/commands/images/delete.js +58 -0
  13. package/dist/commands/images/delete.js.map +1 -0
  14. package/dist/commands/images/get.d.ts +30 -0
  15. package/dist/commands/images/get.d.ts.map +1 -0
  16. package/dist/commands/images/get.js +42 -0
  17. package/dist/commands/images/get.js.map +1 -0
  18. package/dist/commands/images/index.d.ts +2 -0
  19. package/dist/commands/images/index.d.ts.map +1 -0
  20. package/dist/commands/images/index.js +27 -0
  21. package/dist/commands/images/index.js.map +1 -0
  22. package/dist/commands/images/list.d.ts +45 -0
  23. package/dist/commands/images/list.d.ts.map +1 -0
  24. package/dist/commands/images/list.js +71 -0
  25. package/dist/commands/images/list.js.map +1 -0
  26. package/dist/commands/images/search.d.ts +41 -0
  27. package/dist/commands/images/search.d.ts.map +1 -0
  28. package/dist/commands/images/search.js +59 -0
  29. package/dist/commands/images/search.js.map +1 -0
  30. package/dist/commands/images/upload.d.ts +24 -0
  31. package/dist/commands/images/upload.d.ts.map +1 -0
  32. package/dist/commands/images/upload.js +90 -0
  33. package/dist/commands/images/upload.js.map +1 -0
  34. package/dist/commands/schema.d.ts +8 -0
  35. package/dist/commands/schema.d.ts.map +1 -0
  36. package/dist/commands/schema.js +38 -0
  37. package/dist/commands/schema.js.map +1 -0
  38. package/dist/commands/status.d.ts +2 -0
  39. package/dist/commands/status.d.ts.map +1 -0
  40. package/dist/commands/status.js +36 -0
  41. package/dist/commands/status.js.map +1 -0
  42. package/dist/env.d.ts +7 -0
  43. package/dist/env.d.ts.map +1 -0
  44. package/dist/env.js +16 -0
  45. package/dist/env.js.map +1 -0
  46. package/dist/output.d.ts +37 -0
  47. package/dist/output.d.ts.map +1 -0
  48. package/dist/output.js +78 -0
  49. package/dist/output.js.map +1 -0
  50. package/dist/output.test.d.ts +2 -0
  51. package/dist/output.test.d.ts.map +1 -0
  52. package/dist/output.test.js +53 -0
  53. package/dist/output.test.js.map +1 -0
  54. package/dist/schemas.d.ts +17 -0
  55. package/dist/schemas.d.ts.map +1 -0
  56. package/dist/schemas.js +11 -0
  57. package/dist/schemas.js.map +1 -0
  58. package/package.json +38 -0
package/README.md ADDED
@@ -0,0 +1,229 @@
1
+ # @koda-sl/baker-cli
2
+
3
+ AI-agent-first CLI for interacting with Baker. Designed for programmatic use by AI agents with structured JSON output, schema introspection, and input hardening.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @koda-sl/baker-cli
9
+ # or
10
+ pnpm add @koda-sl/baker-cli
11
+ ```
12
+
13
+ ## Authentication
14
+
15
+ Set two environment variables:
16
+
17
+ ```bash
18
+ export BAKER_API_KEY="bk_your_api_key_here"
19
+ export BAKER_API_URL="https://your-baker-instance.convex.site"
20
+ ```
21
+
22
+ - `BAKER_API_KEY` must start with `bk_`
23
+ - `BAKER_API_URL` is your Convex site URL
24
+
25
+ ## Output Format
26
+
27
+ All commands return a JSON envelope:
28
+
29
+ ```json
30
+ // Success
31
+ { "ok": true, "data": { ... } }
32
+
33
+ // Error
34
+ { "ok": false, "error": { "code": "NOT_FOUND", "message": "Image not found" } }
35
+
36
+ // Dry-run
37
+ { "ok": true, "dryRun": true, "operation": "images.delete", "params": { "id": "abc123" } }
38
+ ```
39
+
40
+ Use `--output` to change format:
41
+
42
+ | Format | Description | Best for |
43
+ |---------|------------------------------------|-----------------|
44
+ | `json` | Structured JSON envelope (default) | AI agents |
45
+ | `files` | Tab-separated, one row per result | Piping / shell |
46
+ | `md` | Markdown table | Human reading |
47
+
48
+ ## Commands
49
+
50
+ ### `baker status`
51
+
52
+ Check API key validity and connection health.
53
+
54
+ ```bash
55
+ baker status
56
+ # { "ok": true, "data": { "authenticated": true, "apiUrl": "https://..." } }
57
+ ```
58
+
59
+ ### `baker images list`
60
+
61
+ List images with optional filters.
62
+
63
+ ```bash
64
+ # List all ready images
65
+ baker images list --status ready
66
+
67
+ # Filter by tags and limit results
68
+ baker images list --tags logo,illustration --limit 10
69
+
70
+ # Compact tab-separated output
71
+ baker images list --output files
72
+
73
+ # Only return specific fields
74
+ baker images list --fields _id,name,status
75
+
76
+ # Include full metadata (dimensions, colors, etc.)
77
+ baker images list --full
78
+
79
+ # Paginate through results
80
+ baker images list --limit 20 --cursor <cursor_from_previous_response>
81
+ ```
82
+
83
+ **Flags:**
84
+
85
+ | Flag | Description |
86
+ |------------|----------------------------------------------------|
87
+ | `--status` | Filter: `ready`, `processing`, `uploading`, `error`|
88
+ | `--tags` | Comma-separated tag names |
89
+ | `--source` | Filter by source |
90
+ | `--limit` | Max results (default 50) |
91
+ | `--cursor` | Pagination cursor from previous response |
92
+ | `--output` | Output format: `json` \| `files` \| `md` |
93
+ | `--fields` | Comma-separated field names to include |
94
+ | `--full` | Include full metadata |
95
+
96
+ ### `baker images get <id>`
97
+
98
+ Get a single image by ID.
99
+
100
+ ```bash
101
+ baker images get j571abc123def
102
+
103
+ # With full metadata
104
+ baker images get j571abc123def --full
105
+
106
+ # Alternative flag syntax
107
+ baker images get --image-id j571abc123def
108
+ ```
109
+
110
+ ### `baker images search <query>`
111
+
112
+ Semantic search using hybrid BM25 + vector + reranking.
113
+
114
+ ```bash
115
+ # Basic search
116
+ baker images search "hero banner"
117
+
118
+ # Limit results and set minimum relevance
119
+ baker images search "team photo" --limit 5 --min-score 0.3
120
+
121
+ # Include scoring explanation (BM25, vector, rerank scores)
122
+ baker images search "logo" --explain
123
+
124
+ # Full metadata with markdown output
125
+ baker images search "product shot" --full --output md
126
+ ```
127
+
128
+ **Flags:**
129
+
130
+ | Flag | Description |
131
+ |---------------|------------------------------------------|
132
+ | `--limit` | Max results (default 20) |
133
+ | `--min-score` | Minimum relevance score, 0-1 |
134
+ | `--explain` | Include per-result scoring breakdown |
135
+ | `--output` | Output format: `json` \| `files` \| `md` |
136
+ | `--fields` | Comma-separated field names to include |
137
+ | `--full` | Include full metadata |
138
+
139
+ ### `baker images upload <file>`
140
+
141
+ Upload an image file. Content type is auto-detected from the file extension.
142
+
143
+ ```bash
144
+ # Upload with auto-detected content type
145
+ baker images upload ./logo.png
146
+
147
+ # Specify source
148
+ baker images upload ./banner.jpg --source uploaded
149
+
150
+ # Override content type
151
+ baker images upload ./image.bin --content-type image/webp
152
+
153
+ # Preview what would happen without uploading
154
+ baker images upload ./logo.png --dry-run
155
+ ```
156
+
157
+ **Flags:**
158
+
159
+ | Flag | Description |
160
+ |------------------|------------------------------------------------|
161
+ | `--source` | Source identifier |
162
+ | `--content-type` | MIME type (auto-detected from extension) |
163
+ | `--dry-run` | Preview the operation without executing |
164
+
165
+ Supported extensions: `.png`, `.jpg`, `.jpeg`, `.gif`, `.webp`, `.svg`, `.avif`
166
+
167
+ ### `baker images delete <id>`
168
+
169
+ Delete an image by ID.
170
+
171
+ ```bash
172
+ # Preview deletion
173
+ baker images delete j571abc123def --dry-run
174
+ # { "ok": true, "dryRun": true, "operation": "images.delete", "params": { "id": "j571abc123def" } }
175
+
176
+ # Execute deletion
177
+ baker images delete j571abc123def
178
+ ```
179
+
180
+ **Flags:**
181
+
182
+ | Flag | Description |
183
+ |-------------|------------------------------------------|
184
+ | `--dry-run` | Preview the operation without executing |
185
+
186
+ ### `baker schema [command]`
187
+
188
+ Inspect command argument schemas for AI agent introspection.
189
+
190
+ ```bash
191
+ # List all available commands
192
+ baker schema
193
+ # { "ok": true, "data": { "commands": ["images.list", "images.get", ...] } }
194
+
195
+ # Get schema for a specific command
196
+ baker schema images.search
197
+ # { "ok": true, "data": { "command": "images.search", "args": { ... } } }
198
+ ```
199
+
200
+ ## Compact vs Full Output
201
+
202
+ By default, image responses include only essential fields to minimize token usage:
203
+
204
+ | Mode | Fields |
205
+ |-----------|-------------------------------------------|
206
+ | Default | `_id`, `name`, `imageUrl`, `status`, `tags` |
207
+ | `--full` | All fields: dimensions, colors, palette, source, timestamps |
208
+
209
+ ## Error Codes
210
+
211
+ | Code | Description |
212
+ |--------------------|--------------------------------------|
213
+ | `UNAUTHORIZED` | Invalid or missing API key |
214
+ | `NOT_FOUND` | Resource not found |
215
+ | `VALIDATION_ERROR` | Invalid input (bad ID, missing args) |
216
+ | `RATE_LIMITED` | Too many requests |
217
+ | `NETWORK_ERROR` | Connection failed |
218
+ | `INTERNAL_ERROR` | Unexpected server error |
219
+
220
+ ## For AI Agents
221
+
222
+ This CLI is designed for AI agent consumption. Key patterns:
223
+
224
+ 1. **Start with `baker schema`** to discover available commands and their arguments
225
+ 2. **Use `--dry-run`** on mutations to preview before executing
226
+ 3. **Use `--fields`** to request only the data you need (context window discipline)
227
+ 4. **Parse the JSON envelope** — check `ok` field before accessing `data`
228
+ 5. **Use `--output files`** for compact, pipe-friendly output
229
+ 6. **Check `baker status`** first to verify connectivity
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+ import { defineCommand, runMain } from "citty";
3
+ import { imagesCommand } from "./commands/images/index.js";
4
+ import { schemaCommand } from "./commands/schema.js";
5
+ import { statusCommand } from "./commands/status.js";
6
+ const main = defineCommand({
7
+ meta: {
8
+ name: "baker",
9
+ version: "0.1.0",
10
+ description: `AI-agent-first CLI for Baker.
11
+
12
+ Auth: Set BAKER_API_KEY (starts with bk_) and BAKER_API_URL environment variables.
13
+ Output: All commands return JSON envelopes: { ok: true, data: ... } or { ok: false, error: { code, message } }.
14
+ Formats: Use --output json|files|md to control output format. Default: json.
15
+ Introspection: Run 'baker schema <command>' to inspect argument schemas.`,
16
+ },
17
+ subCommands: {
18
+ images: imagesCommand,
19
+ schema: schemaCommand,
20
+ status: statusCommand,
21
+ },
22
+ });
23
+ runMain(main);
24
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE;;;;;yEAKwD;KACtE;IACD,WAAW,EAAE;QACX,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;KACtB;CACF,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ type ErrorCode = "UNAUTHORIZED" | "NOT_FOUND" | "VALIDATION_ERROR" | "RATE_LIMITED" | "INTERNAL_ERROR" | "NETWORK_ERROR";
2
+ export declare class ApiError extends Error {
3
+ code: ErrorCode;
4
+ constructor(code: ErrorCode, message: string);
5
+ }
6
+ export declare function validateConvexId(id: string): void;
7
+ export declare function apiGet<T>(path: string, params?: Record<string, string>): Promise<T>;
8
+ export declare function apiPost<T>(path: string, body: unknown): Promise<T>;
9
+ export {};
10
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GACV,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,eAAe,CAAC;AAEpB,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,SAAS,CAAC;gBAEJ,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;CAK7C;AAqBD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAIjD;AAkDD,wBAAsB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAwBzF;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAkBxE"}
package/dist/client.js ADDED
@@ -0,0 +1,119 @@
1
+ import { getEnv } from "./env.js";
2
+ export class ApiError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(message);
6
+ this.name = "ApiError";
7
+ this.code = code;
8
+ }
9
+ }
10
+ const CONVEX_ID_RE = /^[a-zA-Z0-9_]+$/;
11
+ function hasControlCharacters(value) {
12
+ for (let i = 0; i < value.length; i++) {
13
+ const code = value.charCodeAt(i);
14
+ // Allow tab (9), newline (10), carriage return (13)
15
+ if (code < 32 && code !== 9 && code !== 10 && code !== 13) {
16
+ return true;
17
+ }
18
+ }
19
+ return false;
20
+ }
21
+ function validateStringValue(value) {
22
+ if (hasControlCharacters(value)) {
23
+ throw new ApiError("VALIDATION_ERROR", "String value contains invalid control characters");
24
+ }
25
+ }
26
+ export function validateConvexId(id) {
27
+ if (!CONVEX_ID_RE.test(id)) {
28
+ throw new ApiError("VALIDATION_ERROR", `Invalid ID format: "${id}". Expected alphanumeric string.`);
29
+ }
30
+ }
31
+ function sanitizeParams(params) {
32
+ const sanitized = {};
33
+ for (const [key, value] of Object.entries(params)) {
34
+ validateStringValue(value);
35
+ sanitized[key] = value;
36
+ }
37
+ return sanitized;
38
+ }
39
+ function mapHttpError(status) {
40
+ if (status === 401 || status === 403) {
41
+ return "UNAUTHORIZED";
42
+ }
43
+ if (status === 404) {
44
+ return "NOT_FOUND";
45
+ }
46
+ if (status === 422 || status === 400) {
47
+ return "VALIDATION_ERROR";
48
+ }
49
+ if (status === 429) {
50
+ return "RATE_LIMITED";
51
+ }
52
+ return "INTERNAL_ERROR";
53
+ }
54
+ async function handleResponse(response) {
55
+ const body = await response.text();
56
+ if (!response.ok) {
57
+ let message = `HTTP ${response.status}: ${response.statusText}`;
58
+ try {
59
+ const parsed = JSON.parse(body);
60
+ if (parsed.error?.message) {
61
+ message = parsed.error.message;
62
+ }
63
+ }
64
+ catch {
65
+ // Use default message
66
+ }
67
+ throw new ApiError(mapHttpError(response.status), message);
68
+ }
69
+ try {
70
+ return JSON.parse(body);
71
+ }
72
+ catch {
73
+ throw new ApiError("INTERNAL_ERROR", "Failed to parse API response as JSON");
74
+ }
75
+ }
76
+ export async function apiGet(path, params) {
77
+ const env = getEnv();
78
+ const url = new URL(path, env.BAKER_API_URL);
79
+ if (params) {
80
+ const clean = sanitizeParams(params);
81
+ for (const [key, value] of Object.entries(clean)) {
82
+ url.searchParams.set(key, value);
83
+ }
84
+ }
85
+ let response;
86
+ try {
87
+ response = await fetch(url.toString(), {
88
+ method: "GET",
89
+ headers: {
90
+ Authorization: `Bearer ${env.BAKER_API_KEY}`,
91
+ Accept: "application/json",
92
+ },
93
+ });
94
+ }
95
+ catch (err) {
96
+ throw new ApiError("NETWORK_ERROR", `Request failed: ${err instanceof Error ? err.message : "Unknown error"}`);
97
+ }
98
+ return handleResponse(response);
99
+ }
100
+ export async function apiPost(path, body) {
101
+ const env = getEnv();
102
+ let response;
103
+ try {
104
+ response = await fetch(new URL(path, env.BAKER_API_URL).toString(), {
105
+ method: "POST",
106
+ headers: {
107
+ Authorization: `Bearer ${env.BAKER_API_KEY}`,
108
+ "Content-Type": "application/json",
109
+ Accept: "application/json",
110
+ },
111
+ body: JSON.stringify(body),
112
+ });
113
+ }
114
+ catch (err) {
115
+ throw new ApiError("NETWORK_ERROR", `Request failed: ${err instanceof Error ? err.message : "Unknown error"}`);
116
+ }
117
+ return handleResponse(response);
118
+ }
119
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare const deleteCommand: import("citty").CommandDef<{
2
+ readonly id: {
3
+ readonly type: "positional";
4
+ readonly description: "Image ID";
5
+ readonly required: false;
6
+ };
7
+ readonly "image-id": {
8
+ readonly type: "string";
9
+ readonly description: "Image ID (alternative to positional)";
10
+ readonly required: false;
11
+ };
12
+ readonly "dry-run": {
13
+ readonly type: "boolean";
14
+ readonly description: "Preview without executing";
15
+ readonly required: false;
16
+ readonly default: false;
17
+ };
18
+ }>;
19
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/images/delete.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;EAyCxB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { defineCommand } from "citty";
2
+ import { ApiError, apiPost, validateConvexId } from "../../client.js";
3
+ import { writeJson } from "../../output.js";
4
+ import { registerSchema } from "../../schemas.js";
5
+ registerSchema({
6
+ command: "images.delete",
7
+ description: "Delete an image by ID",
8
+ args: {
9
+ id: { type: "string", description: "Image ID", required: true },
10
+ "dry-run": {
11
+ type: "boolean",
12
+ description: "Preview the operation without executing",
13
+ required: false,
14
+ default: false,
15
+ },
16
+ },
17
+ });
18
+ export const deleteCommand = defineCommand({
19
+ meta: {
20
+ name: "delete",
21
+ description: "Delete an image by ID. Use --dry-run to preview. Example: baker images delete j571abc123 --dry-run",
22
+ },
23
+ args: {
24
+ id: { type: "positional", description: "Image ID", required: false },
25
+ "image-id": { type: "string", description: "Image ID (alternative to positional)", required: false },
26
+ "dry-run": { type: "boolean", description: "Preview without executing", required: false, default: false },
27
+ },
28
+ run: async ({ args }) => {
29
+ try {
30
+ const id = args.id || args["image-id"];
31
+ if (!id) {
32
+ writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "Image ID is required" } });
33
+ process.exit(1);
34
+ }
35
+ validateConvexId(id);
36
+ if (args["dry-run"]) {
37
+ writeJson({
38
+ ok: true,
39
+ dryRun: true,
40
+ operation: "images.delete",
41
+ params: { id },
42
+ });
43
+ return;
44
+ }
45
+ const data = await apiPost("/api/images/delete", { id });
46
+ writeJson({ ok: true, data });
47
+ }
48
+ catch (err) {
49
+ if (err instanceof ApiError) {
50
+ writeJson({ ok: false, error: { code: err.code, message: err.message } });
51
+ process.exit(1);
52
+ }
53
+ writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
54
+ process.exit(1);
55
+ }
56
+ },
57
+ });
58
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/images/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAc,CAAC;IACb,OAAO,EAAE,eAAe;IACxB,WAAW,EAAE,uBAAuB;IACpC,IAAI,EAAE;QACJ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/D,SAAS,EAAE;YACT,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yCAAyC;YACtD,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;SACf;KACF;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oGAAoG;KAClH;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;QACpE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE,QAAQ,EAAE,KAAK,EAAE;QACpG,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,2BAA2B,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;KAC1G;IACD,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,GAAI,IAAI,CAAC,EAAyB,IAAK,IAAI,CAAC,UAAU,CAAwB,CAAC;YACvF,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,CAAC,CAAC;gBAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAErB,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpB,SAAS,CAAC;oBACR,EAAE,EAAE,IAAI;oBACR,MAAM,EAAE,IAAI;oBACZ,SAAS,EAAE,eAAe;oBAC1B,MAAM,EAAE,EAAE,EAAE,EAAE;iBACf,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAU,oBAAoB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAClE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBAC5B,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;YACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ export declare const getCommand: import("citty").CommandDef<{
2
+ readonly id: {
3
+ readonly type: "positional";
4
+ readonly description: "Image ID";
5
+ readonly required: false;
6
+ };
7
+ readonly "image-id": {
8
+ readonly type: "string";
9
+ readonly description: "Image ID (alternative to positional)";
10
+ readonly required: false;
11
+ };
12
+ readonly output: {
13
+ readonly type: "string";
14
+ readonly description: "Output format: json|files|md";
15
+ readonly required: false;
16
+ readonly default: "json";
17
+ };
18
+ readonly fields: {
19
+ readonly type: "string";
20
+ readonly description: "Comma-separated field names to include";
21
+ readonly required: false;
22
+ };
23
+ readonly full: {
24
+ readonly type: "boolean";
25
+ readonly description: "Include full metadata";
26
+ readonly required: false;
27
+ readonly default: false;
28
+ };
29
+ }>;
30
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/images/get.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCrB,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { defineCommand } from "citty";
2
+ import { ApiError, apiGet, validateConvexId } from "../../client.js";
3
+ import { writeJson, writeOutput } from "../../output.js";
4
+ import { registerSchema } from "../../schemas.js";
5
+ registerSchema({
6
+ command: "images.get",
7
+ description: "Get a single image by ID",
8
+ args: {
9
+ id: { type: "string", description: "Image ID", required: true },
10
+ },
11
+ });
12
+ export const getCommand = defineCommand({
13
+ meta: { name: "get", description: "Get a single image by ID. Example: baker images get j571abc123" },
14
+ args: {
15
+ id: { type: "positional", description: "Image ID", required: false },
16
+ "image-id": { type: "string", description: "Image ID (alternative to positional)", required: false },
17
+ output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
18
+ fields: { type: "string", description: "Comma-separated field names to include", required: false },
19
+ full: { type: "boolean", description: "Include full metadata", required: false, default: false },
20
+ },
21
+ run: async ({ args }) => {
22
+ try {
23
+ const id = args.id || args["image-id"];
24
+ if (!id) {
25
+ writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "Image ID is required" } });
26
+ process.exit(1);
27
+ }
28
+ validateConvexId(id);
29
+ const data = await apiGet("/api/images/get", { id });
30
+ writeOutput({ ok: true, data }, args.output || "json", args.fields ? args.fields.split(",") : undefined, args.full);
31
+ }
32
+ catch (err) {
33
+ if (err instanceof ApiError) {
34
+ writeJson({ ok: false, error: { code: err.code, message: err.message } });
35
+ process.exit(1);
36
+ }
37
+ writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
38
+ process.exit(1);
39
+ }
40
+ },
41
+ });
42
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/images/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAqB,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAc,CAAC;IACb,OAAO,EAAE,YAAY;IACrB,WAAW,EAAE,0BAA0B;IACvC,IAAI,EAAE;QACJ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;KAChE;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;IACtC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,gEAAgE,EAAE;IACpG,IAAI,EAAE;QACJ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;QACpE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE,QAAQ,EAAE,KAAK,EAAE;QACpG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;QACzG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE,QAAQ,EAAE,KAAK,EAAE;QAClG,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uBAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;KACjG;IACD,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,GAAI,IAAI,CAAC,EAAyB,IAAK,IAAI,CAAC,UAAU,CAAwB,CAAC;YACvF,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,CAAC,CAAC;gBAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAU,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9D,WAAW,CACT,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EACjB,IAAI,CAAC,MAAuB,IAAI,MAAM,EACvC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAChD,IAAI,CAAC,IAAe,CACrB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBAC5B,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;YACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const imagesCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/images/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa,qDAmBxB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { defineCommand } from "citty";
2
+ import { deleteCommand } from "./delete.js";
3
+ import { getCommand } from "./get.js";
4
+ import { listCommand } from "./list.js";
5
+ import { searchCommand } from "./search.js";
6
+ import { uploadCommand } from "./upload.js";
7
+ export const imagesCommand = defineCommand({
8
+ meta: {
9
+ name: "images",
10
+ description: `Manage images in Baker. Subcommands: list, get, search, upload, delete.
11
+
12
+ Examples:
13
+ baker images list --status ready
14
+ baker images search "hero banner" --limit 5
15
+ baker images get <image-id>
16
+ baker images upload ./logo.png --source uploaded
17
+ baker images delete <image-id> --dry-run`,
18
+ },
19
+ subCommands: {
20
+ list: listCommand,
21
+ get: getCommand,
22
+ search: searchCommand,
23
+ upload: uploadCommand,
24
+ delete: deleteCommand,
25
+ },
26
+ });
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/images/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE;;;;;;;2CAO0B;KACxC;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;KACtB;CACF,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ export declare const listCommand: import("citty").CommandDef<{
2
+ readonly status: {
3
+ readonly type: "string";
4
+ readonly description: "Filter by status (ready|processing|uploading|error)";
5
+ readonly required: false;
6
+ };
7
+ readonly tags: {
8
+ readonly type: "string";
9
+ readonly description: "Comma-separated tag names";
10
+ readonly required: false;
11
+ };
12
+ readonly source: {
13
+ readonly type: "string";
14
+ readonly description: "Filter by source";
15
+ readonly required: false;
16
+ };
17
+ readonly limit: {
18
+ readonly type: "string";
19
+ readonly description: "Max results (default 50)";
20
+ readonly required: false;
21
+ };
22
+ readonly cursor: {
23
+ readonly type: "string";
24
+ readonly description: "Pagination cursor";
25
+ readonly required: false;
26
+ };
27
+ readonly output: {
28
+ readonly type: "string";
29
+ readonly description: "Output format: json|files|md";
30
+ readonly required: false;
31
+ readonly default: "json";
32
+ };
33
+ readonly fields: {
34
+ readonly type: "string";
35
+ readonly description: "Comma-separated field names to include";
36
+ readonly required: false;
37
+ };
38
+ readonly full: {
39
+ readonly type: "boolean";
40
+ readonly description: "Include full metadata";
41
+ readonly required: false;
42
+ readonly default: false;
43
+ };
44
+ }>;
45
+ //# sourceMappingURL=list.d.ts.map