@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.
- package/README.md +229 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +24 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +10 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +119 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/images/delete.d.ts +19 -0
- package/dist/commands/images/delete.d.ts.map +1 -0
- package/dist/commands/images/delete.js +58 -0
- package/dist/commands/images/delete.js.map +1 -0
- package/dist/commands/images/get.d.ts +30 -0
- package/dist/commands/images/get.d.ts.map +1 -0
- package/dist/commands/images/get.js +42 -0
- package/dist/commands/images/get.js.map +1 -0
- package/dist/commands/images/index.d.ts +2 -0
- package/dist/commands/images/index.d.ts.map +1 -0
- package/dist/commands/images/index.js +27 -0
- package/dist/commands/images/index.js.map +1 -0
- package/dist/commands/images/list.d.ts +45 -0
- package/dist/commands/images/list.d.ts.map +1 -0
- package/dist/commands/images/list.js +71 -0
- package/dist/commands/images/list.js.map +1 -0
- package/dist/commands/images/search.d.ts +41 -0
- package/dist/commands/images/search.d.ts.map +1 -0
- package/dist/commands/images/search.js +59 -0
- package/dist/commands/images/search.js.map +1 -0
- package/dist/commands/images/upload.d.ts +24 -0
- package/dist/commands/images/upload.d.ts.map +1 -0
- package/dist/commands/images/upload.js +90 -0
- package/dist/commands/images/upload.js.map +1 -0
- package/dist/commands/schema.d.ts +8 -0
- package/dist/commands/schema.d.ts.map +1 -0
- package/dist/commands/schema.js +38 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +36 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/env.d.ts +7 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +16 -0
- package/dist/env.js.map +1 -0
- package/dist/output.d.ts +37 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +78 -0
- package/dist/output.js.map +1 -0
- package/dist/output.test.d.ts +2 -0
- package/dist/output.test.d.ts.map +1 -0
- package/dist/output.test.js +53 -0
- package/dist/output.test.js.map +1 -0
- package/dist/schemas.d.ts +17 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +11 -0
- package/dist/schemas.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/images/list.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsDtB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { ApiError, apiGet } from "../../client.js";
|
|
3
|
+
import { writeJson, writeOutput } from "../../output.js";
|
|
4
|
+
import { registerSchema } from "../../schemas.js";
|
|
5
|
+
registerSchema({
|
|
6
|
+
command: "images.list",
|
|
7
|
+
description: "List images with optional filters",
|
|
8
|
+
args: {
|
|
9
|
+
status: {
|
|
10
|
+
type: "string",
|
|
11
|
+
description: "Filter by status",
|
|
12
|
+
required: false,
|
|
13
|
+
enum: ["ready", "processing", "uploading", "error"],
|
|
14
|
+
},
|
|
15
|
+
tags: { type: "string", description: "Comma-separated tag names to filter by", required: false },
|
|
16
|
+
source: { type: "string", description: "Filter by source", required: false },
|
|
17
|
+
limit: { type: "number", description: "Maximum results to return", required: false, default: 50 },
|
|
18
|
+
cursor: { type: "string", description: "Pagination cursor from previous response", required: false },
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
export const listCommand = defineCommand({
|
|
22
|
+
meta: {
|
|
23
|
+
name: "list",
|
|
24
|
+
description: "List images with optional filters. Example: baker images list --status ready --tags logo --limit 10",
|
|
25
|
+
},
|
|
26
|
+
args: {
|
|
27
|
+
status: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Filter by status (ready|processing|uploading|error)",
|
|
30
|
+
required: false,
|
|
31
|
+
},
|
|
32
|
+
tags: { type: "string", description: "Comma-separated tag names", required: false },
|
|
33
|
+
source: { type: "string", description: "Filter by source", required: false },
|
|
34
|
+
limit: { type: "string", description: "Max results (default 50)", required: false },
|
|
35
|
+
cursor: { type: "string", description: "Pagination cursor", required: false },
|
|
36
|
+
output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
|
|
37
|
+
fields: { type: "string", description: "Comma-separated field names to include", required: false },
|
|
38
|
+
full: { type: "boolean", description: "Include full metadata", required: false, default: false },
|
|
39
|
+
},
|
|
40
|
+
run: async ({ args }) => {
|
|
41
|
+
try {
|
|
42
|
+
const params = {};
|
|
43
|
+
if (args.status) {
|
|
44
|
+
params.status = args.status;
|
|
45
|
+
}
|
|
46
|
+
if (args.tags) {
|
|
47
|
+
params.tags = args.tags;
|
|
48
|
+
}
|
|
49
|
+
if (args.source) {
|
|
50
|
+
params.source = args.source;
|
|
51
|
+
}
|
|
52
|
+
if (args.limit) {
|
|
53
|
+
params.limit = args.limit;
|
|
54
|
+
}
|
|
55
|
+
if (args.cursor) {
|
|
56
|
+
params.cursor = args.cursor;
|
|
57
|
+
}
|
|
58
|
+
const data = await apiGet("/api/images", params);
|
|
59
|
+
writeOutput({ ok: true, data }, args.output || "json", args.fields ? args.fields.split(",") : undefined, args.full);
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
if (err instanceof ApiError) {
|
|
63
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/images/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare const searchCommand: import("citty").CommandDef<{
|
|
2
|
+
readonly query: {
|
|
3
|
+
readonly type: "positional";
|
|
4
|
+
readonly description: "Search query text";
|
|
5
|
+
readonly required: false;
|
|
6
|
+
};
|
|
7
|
+
readonly limit: {
|
|
8
|
+
readonly type: "string";
|
|
9
|
+
readonly description: "Max results (default 20)";
|
|
10
|
+
readonly required: false;
|
|
11
|
+
};
|
|
12
|
+
readonly "min-score": {
|
|
13
|
+
readonly type: "string";
|
|
14
|
+
readonly description: "Minimum relevance score (0-1)";
|
|
15
|
+
readonly required: false;
|
|
16
|
+
};
|
|
17
|
+
readonly explain: {
|
|
18
|
+
readonly type: "boolean";
|
|
19
|
+
readonly description: "Include relevance explanation";
|
|
20
|
+
readonly required: false;
|
|
21
|
+
readonly default: false;
|
|
22
|
+
};
|
|
23
|
+
readonly output: {
|
|
24
|
+
readonly type: "string";
|
|
25
|
+
readonly description: "Output format: json|files|md";
|
|
26
|
+
readonly required: false;
|
|
27
|
+
readonly default: "json";
|
|
28
|
+
};
|
|
29
|
+
readonly fields: {
|
|
30
|
+
readonly type: "string";
|
|
31
|
+
readonly description: "Comma-separated field names to include";
|
|
32
|
+
readonly required: false;
|
|
33
|
+
};
|
|
34
|
+
readonly full: {
|
|
35
|
+
readonly type: "boolean";
|
|
36
|
+
readonly description: "Include full metadata";
|
|
37
|
+
readonly required: false;
|
|
38
|
+
readonly default: false;
|
|
39
|
+
};
|
|
40
|
+
}>;
|
|
41
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/images/search.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDxB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { ApiError, apiPost } from "../../client.js";
|
|
3
|
+
import { writeJson, writeOutput } from "../../output.js";
|
|
4
|
+
import { registerSchema } from "../../schemas.js";
|
|
5
|
+
registerSchema({
|
|
6
|
+
command: "images.search",
|
|
7
|
+
description: "Search images by text query",
|
|
8
|
+
args: {
|
|
9
|
+
query: { type: "string", description: "Search query text", required: true },
|
|
10
|
+
limit: { type: "number", description: "Maximum results to return", required: false, default: 20 },
|
|
11
|
+
"min-score": { type: "number", description: "Minimum relevance score (0-1)", required: false },
|
|
12
|
+
explain: { type: "boolean", description: "Include relevance explanation", required: false, default: false },
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
export const searchCommand = defineCommand({
|
|
16
|
+
meta: {
|
|
17
|
+
name: "search",
|
|
18
|
+
description: "Semantic search images by text query. Uses hybrid BM25 + vector + reranking. Example: baker images search 'hero banner' --limit 5",
|
|
19
|
+
},
|
|
20
|
+
args: {
|
|
21
|
+
query: { type: "positional", description: "Search query text", required: false },
|
|
22
|
+
limit: { type: "string", description: "Max results (default 20)", required: false },
|
|
23
|
+
"min-score": { type: "string", description: "Minimum relevance score (0-1)", required: false },
|
|
24
|
+
explain: { type: "boolean", description: "Include relevance explanation", required: false, default: false },
|
|
25
|
+
output: { type: "string", description: "Output format: json|files|md", required: false, default: "json" },
|
|
26
|
+
fields: { type: "string", description: "Comma-separated field names to include", required: false },
|
|
27
|
+
full: { type: "boolean", description: "Include full metadata", required: false, default: false },
|
|
28
|
+
},
|
|
29
|
+
run: async ({ args }) => {
|
|
30
|
+
try {
|
|
31
|
+
const query = args.query;
|
|
32
|
+
if (!query) {
|
|
33
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "Search query is required" } });
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
const body = { query };
|
|
37
|
+
if (args.limit) {
|
|
38
|
+
body.limit = Number(args.limit);
|
|
39
|
+
}
|
|
40
|
+
if (args["min-score"]) {
|
|
41
|
+
body.minScore = Number(args["min-score"]);
|
|
42
|
+
}
|
|
43
|
+
if (args.explain) {
|
|
44
|
+
body.explain = true;
|
|
45
|
+
}
|
|
46
|
+
const data = await apiPost("/api/images/search", body);
|
|
47
|
+
writeOutput({ ok: true, data }, args.output || "json", args.fields ? args.fields.split(",") : undefined, args.full);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (err instanceof ApiError) {
|
|
51
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/images/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const uploadCommand: import("citty").CommandDef<{
|
|
2
|
+
readonly file: {
|
|
3
|
+
readonly type: "positional";
|
|
4
|
+
readonly description: "Path to the image file";
|
|
5
|
+
readonly required: false;
|
|
6
|
+
};
|
|
7
|
+
readonly source: {
|
|
8
|
+
readonly type: "string";
|
|
9
|
+
readonly description: "Source identifier";
|
|
10
|
+
readonly required: false;
|
|
11
|
+
};
|
|
12
|
+
readonly "content-type": {
|
|
13
|
+
readonly type: "string";
|
|
14
|
+
readonly description: "MIME type (auto-detected if omitted)";
|
|
15
|
+
readonly required: false;
|
|
16
|
+
};
|
|
17
|
+
readonly "dry-run": {
|
|
18
|
+
readonly type: "boolean";
|
|
19
|
+
readonly description: "Preview without executing";
|
|
20
|
+
readonly required: false;
|
|
21
|
+
readonly default: false;
|
|
22
|
+
};
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/commands/images/upload.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;EAmDxB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { extname } from "node:path";
|
|
3
|
+
import { defineCommand } from "citty";
|
|
4
|
+
import { ApiError, apiPost } from "../../client.js";
|
|
5
|
+
import { writeJson } from "../../output.js";
|
|
6
|
+
import { registerSchema } from "../../schemas.js";
|
|
7
|
+
const MIME_MAP = {
|
|
8
|
+
".png": "image/png",
|
|
9
|
+
".jpg": "image/jpeg",
|
|
10
|
+
".jpeg": "image/jpeg",
|
|
11
|
+
".gif": "image/gif",
|
|
12
|
+
".webp": "image/webp",
|
|
13
|
+
".svg": "image/svg+xml",
|
|
14
|
+
".avif": "image/avif",
|
|
15
|
+
};
|
|
16
|
+
registerSchema({
|
|
17
|
+
command: "images.upload",
|
|
18
|
+
description: "Upload an image file to Baker",
|
|
19
|
+
args: {
|
|
20
|
+
file: { type: "string", description: "Path to the image file", required: true },
|
|
21
|
+
source: { type: "string", description: "Source identifier", required: false },
|
|
22
|
+
"content-type": {
|
|
23
|
+
type: "string",
|
|
24
|
+
description: "MIME type (auto-detected from extension if omitted)",
|
|
25
|
+
required: false,
|
|
26
|
+
},
|
|
27
|
+
"dry-run": {
|
|
28
|
+
type: "boolean",
|
|
29
|
+
description: "Preview the operation without executing",
|
|
30
|
+
required: false,
|
|
31
|
+
default: false,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
function detectContentType(filePath) {
|
|
36
|
+
const ext = extname(filePath).toLowerCase();
|
|
37
|
+
const mime = MIME_MAP[ext];
|
|
38
|
+
if (!mime) {
|
|
39
|
+
throw new ApiError("VALIDATION_ERROR", `Cannot detect content type for extension "${ext}". Use --content-type.`);
|
|
40
|
+
}
|
|
41
|
+
return mime;
|
|
42
|
+
}
|
|
43
|
+
export const uploadCommand = defineCommand({
|
|
44
|
+
meta: {
|
|
45
|
+
name: "upload",
|
|
46
|
+
description: "Upload an image file to Baker. Auto-detects content type from extension. Example: baker images upload ./logo.png --source uploaded",
|
|
47
|
+
},
|
|
48
|
+
args: {
|
|
49
|
+
file: { type: "positional", description: "Path to the image file", required: false },
|
|
50
|
+
source: { type: "string", description: "Source identifier", required: false },
|
|
51
|
+
"content-type": { type: "string", description: "MIME type (auto-detected if omitted)", required: false },
|
|
52
|
+
"dry-run": { type: "boolean", description: "Preview without executing", required: false, default: false },
|
|
53
|
+
},
|
|
54
|
+
run: async ({ args }) => {
|
|
55
|
+
try {
|
|
56
|
+
const filePath = args.file;
|
|
57
|
+
if (!filePath) {
|
|
58
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "File path is required" } });
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const contentType = args["content-type"] || detectContentType(filePath);
|
|
62
|
+
if (args["dry-run"]) {
|
|
63
|
+
writeJson({
|
|
64
|
+
ok: true,
|
|
65
|
+
dryRun: true,
|
|
66
|
+
operation: "images.upload",
|
|
67
|
+
params: { file: filePath, contentType, source: args.source ?? null },
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const fileBuffer = await readFile(filePath);
|
|
72
|
+
const base64 = fileBuffer.toString("base64");
|
|
73
|
+
const body = { base64, contentType };
|
|
74
|
+
if (args.source) {
|
|
75
|
+
body.source = args.source;
|
|
76
|
+
}
|
|
77
|
+
const data = await apiPost("/api/images/upload", body);
|
|
78
|
+
writeJson({ ok: true, data });
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
if (err instanceof ApiError) {
|
|
82
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/commands/images/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const schemaCommand: import("citty").CommandDef<{
|
|
2
|
+
readonly command: {
|
|
3
|
+
readonly type: "positional";
|
|
4
|
+
readonly description: "Command name (e.g. images.list). Omit to list all.";
|
|
5
|
+
readonly required: false;
|
|
6
|
+
};
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa;;;;;;EAqCxB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { writeJson } from "../output.js";
|
|
3
|
+
import { getSchema, listSchemas } from "../schemas.js";
|
|
4
|
+
export const schemaCommand = defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: "schema",
|
|
7
|
+
description: "Inspect command argument schemas (for AI agent introspection). Lists all commands if no argument given. Example: baker schema images.search",
|
|
8
|
+
},
|
|
9
|
+
args: {
|
|
10
|
+
command: {
|
|
11
|
+
type: "positional",
|
|
12
|
+
description: "Command name (e.g. images.list). Omit to list all.",
|
|
13
|
+
required: false,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
run: ({ args }) => {
|
|
17
|
+
const commandName = args.command;
|
|
18
|
+
if (!commandName) {
|
|
19
|
+
const schemas = listSchemas();
|
|
20
|
+
writeJson({ ok: true, data: { commands: schemas } });
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const schema = getSchema(commandName);
|
|
24
|
+
if (!schema) {
|
|
25
|
+
const available = listSchemas();
|
|
26
|
+
writeJson({
|
|
27
|
+
ok: false,
|
|
28
|
+
error: {
|
|
29
|
+
code: "NOT_FOUND",
|
|
30
|
+
message: `Schema "${commandName}" not found. Available: ${available.join(", ")}`,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
writeJson({ ok: true, data: schema });
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EACT,6IAA6I;KAChJ;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,oDAAoD;YACjE,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAChB,MAAM,WAAW,GAAG,IAAI,CAAC,OAA6B,CAAC;QAEvD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC;YAChC,SAAS,CAAC;gBACR,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,WAAW,WAAW,2BAA2B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACjF;aACF,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,aAAa,gCAuBxB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { ApiError, apiGet } from "../client.js";
|
|
3
|
+
import { getEnv } from "../env.js";
|
|
4
|
+
import { writeJson } from "../output.js";
|
|
5
|
+
import { registerSchema } from "../schemas.js";
|
|
6
|
+
registerSchema({
|
|
7
|
+
command: "status",
|
|
8
|
+
description: "Check API connectivity and authentication",
|
|
9
|
+
args: {},
|
|
10
|
+
});
|
|
11
|
+
export const statusCommand = defineCommand({
|
|
12
|
+
meta: { name: "status", description: "Check API key validity and connection health. Example: baker status" },
|
|
13
|
+
args: {},
|
|
14
|
+
run: async () => {
|
|
15
|
+
try {
|
|
16
|
+
await apiGet("/api/images", { limit: "0" });
|
|
17
|
+
const envelope = {
|
|
18
|
+
ok: true,
|
|
19
|
+
data: {
|
|
20
|
+
authenticated: true,
|
|
21
|
+
apiUrl: getEnv().BAKER_API_URL,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
writeJson(envelope);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
if (err instanceof ApiError) {
|
|
28
|
+
writeJson({ ok: false, error: { code: err.code, message: err.message } });
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
writeJson({ ok: false, error: { code: "INTERNAL_ERROR", message: "Unexpected error" } });
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAiB,SAAS,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,cAAc,CAAC;IACb,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,2CAA2C;IACxD,IAAI,EAAE,EAAE;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qEAAqE,EAAE;IAC5G,IAAI,EAAE,EAAE;IACR,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAsD;gBAClE,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE;oBACJ,aAAa,EAAE,IAAI;oBACnB,MAAM,EAAE,MAAM,EAAE,CAAC,aAAa;iBAC/B;aACF,CAAC;YACF,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtB,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"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAGA,KAAK,GAAG,GAAG;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAIF,wBAAgB,MAAM,IAAI,GAAG,CAW5B"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createEnv } from "@t3-oss/env-core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
let cached;
|
|
4
|
+
export function getEnv() {
|
|
5
|
+
if (!cached) {
|
|
6
|
+
cached = createEnv({
|
|
7
|
+
server: {
|
|
8
|
+
BAKER_API_KEY: z.string().startsWith("bk_", "API key must start with 'bk_'"),
|
|
9
|
+
BAKER_API_URL: z.string().url("BAKER_API_URL must be a valid URL"),
|
|
10
|
+
},
|
|
11
|
+
runtimeEnv: process.env,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return cached;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,IAAI,MAAuB,CAAC;AAE5B,MAAM,UAAU,MAAM;IACpB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,SAAS,CAAC;YACjB,MAAM,EAAE;gBACN,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,+BAA+B,CAAC;gBAC5E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,mCAAmC,CAAC;aACnE;YACD,UAAU,EAAE,OAAO,CAAC,GAAG;SACxB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/output.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export type OutputFormat = "json" | "files" | "md";
|
|
2
|
+
export interface SuccessEnvelope<T> {
|
|
3
|
+
ok: true;
|
|
4
|
+
data: T;
|
|
5
|
+
meta?: {
|
|
6
|
+
cursor?: string;
|
|
7
|
+
hasMore?: boolean;
|
|
8
|
+
count?: number;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface ErrorEnvelope {
|
|
12
|
+
ok: false;
|
|
13
|
+
error: {
|
|
14
|
+
code: string;
|
|
15
|
+
message: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface DryRunEnvelope {
|
|
19
|
+
ok: true;
|
|
20
|
+
dryRun: true;
|
|
21
|
+
operation: string;
|
|
22
|
+
params: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
export type Envelope<T> = SuccessEnvelope<T> | ErrorEnvelope | DryRunEnvelope;
|
|
25
|
+
interface ImageCompact {
|
|
26
|
+
_id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
imageUrl: string;
|
|
29
|
+
status: string;
|
|
30
|
+
tags: unknown[];
|
|
31
|
+
}
|
|
32
|
+
export declare function compactImage(image: Record<string, unknown>): ImageCompact;
|
|
33
|
+
export declare function applyFieldMask<T extends Record<string, unknown>>(data: T, fields: string[]): Partial<T>;
|
|
34
|
+
export declare function writeJson<T>(envelope: Envelope<T>): void;
|
|
35
|
+
export declare function writeOutput<T>(envelope: Envelope<T>, format: OutputFormat, fields?: string[], full?: boolean): void;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAEnD,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,cAAc,CAAC;AAE9E,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAQzE;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAQvG;AAMD,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAExD;AA2CD,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAuBnH"}
|
package/dist/output.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export function compactImage(image) {
|
|
2
|
+
return {
|
|
3
|
+
_id: String(image._id ?? ""),
|
|
4
|
+
name: String(image.name ?? ""),
|
|
5
|
+
imageUrl: String(image.imageUrl ?? ""),
|
|
6
|
+
status: String(image.status ?? ""),
|
|
7
|
+
tags: Array.isArray(image.tags) ? image.tags : [],
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function applyFieldMask(data, fields) {
|
|
11
|
+
const result = {};
|
|
12
|
+
for (const field of fields) {
|
|
13
|
+
if (field in data) {
|
|
14
|
+
result[field] = data[field];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
function write(text) {
|
|
20
|
+
process.stdout.write(text);
|
|
21
|
+
}
|
|
22
|
+
export function writeJson(envelope) {
|
|
23
|
+
write(`${JSON.stringify(envelope, null, 2)}\n`);
|
|
24
|
+
}
|
|
25
|
+
function writeFiles(data, fields) {
|
|
26
|
+
// Header line
|
|
27
|
+
write(`${fields.join("\t")}\n`);
|
|
28
|
+
for (const item of data) {
|
|
29
|
+
const values = fields.map((f) => String(item[f] ?? ""));
|
|
30
|
+
write(`${values.join("\t")}\n`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function writeMd(data, fields) {
|
|
34
|
+
// Header
|
|
35
|
+
write(`| ${fields.join(" | ")} |\n`);
|
|
36
|
+
// Separator
|
|
37
|
+
write(`| ${fields.map(() => "---").join(" | ")} |\n`);
|
|
38
|
+
// Rows
|
|
39
|
+
for (const item of data) {
|
|
40
|
+
const values = fields.map((f) => String(item[f] ?? ""));
|
|
41
|
+
write(`| ${values.join(" | ")} |\n`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function normalizeData(envelope, fields, full) {
|
|
45
|
+
const raw = Array.isArray(envelope.data) ? envelope.data : [envelope.data];
|
|
46
|
+
const items = raw.map((item) => {
|
|
47
|
+
const record = item;
|
|
48
|
+
if (full) {
|
|
49
|
+
return record;
|
|
50
|
+
}
|
|
51
|
+
return compactImage(record);
|
|
52
|
+
});
|
|
53
|
+
if (fields) {
|
|
54
|
+
return items.map((item) => applyFieldMask(item, fields));
|
|
55
|
+
}
|
|
56
|
+
return items;
|
|
57
|
+
}
|
|
58
|
+
export function writeOutput(envelope, format, fields, full) {
|
|
59
|
+
// Errors and dry runs always output JSON
|
|
60
|
+
if (!envelope.ok || "dryRun" in envelope) {
|
|
61
|
+
writeJson(envelope);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (format === "json") {
|
|
65
|
+
writeJson(envelope);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const items = normalizeData(envelope, fields, full ?? false);
|
|
69
|
+
const displayFields = fields ?? Object.keys(items[0] ?? {});
|
|
70
|
+
if (format === "files") {
|
|
71
|
+
writeFiles(items, displayFields);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (format === "md") {
|
|
75
|
+
writeMd(items, displayFields);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.test.d.ts","sourceRoot":"","sources":["../src/output.test.ts"],"names":[],"mappings":""}
|