@koda-sl/baker-cli 0.34.3 → 0.36.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 +145 -0
- package/dist/cli.js +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/actions/index.d.ts.map +1 -1
- package/dist/commands/actions/index.js +4 -1
- package/dist/commands/actions/index.js.map +1 -1
- package/dist/commands/actions/status.d.ts +8 -0
- package/dist/commands/actions/status.d.ts.map +1 -0
- package/dist/commands/actions/status.js +38 -0
- package/dist/commands/actions/status.js.map +1 -0
- package/dist/commands/images/crop.d.ts +33 -0
- package/dist/commands/images/crop.d.ts.map +1 -0
- package/dist/commands/images/crop.js +90 -0
- package/dist/commands/images/crop.js.map +1 -0
- package/dist/commands/images/dimensions.d.ts +8 -0
- package/dist/commands/images/dimensions.d.ts.map +1 -0
- package/dist/commands/images/dimensions.js +56 -0
- package/dist/commands/images/dimensions.js.map +1 -0
- package/dist/commands/images/index.d.ts.map +1 -1
- package/dist/commands/images/index.js +20 -2
- package/dist/commands/images/index.js.map +1 -1
- package/dist/commands/images/normalize.d.ts +54 -0
- package/dist/commands/images/normalize.d.ts.map +1 -0
- package/dist/commands/images/normalize.js +252 -0
- package/dist/commands/images/normalize.js.map +1 -0
- package/dist/commands/images/upscale.d.ts +13 -0
- package/dist/commands/images/upscale.d.ts.map +1 -0
- package/dist/commands/images/upscale.js +73 -0
- package/dist/commands/images/upscale.js.map +1 -0
- package/dist/lib/image/color-changer.d.ts +16 -0
- package/dist/lib/image/color-changer.d.ts.map +1 -0
- package/dist/lib/image/color-changer.js +366 -0
- package/dist/lib/image/color-changer.js.map +1 -0
- package/dist/lib/image/color-changer.test.d.ts +2 -0
- package/dist/lib/image/color-changer.test.d.ts.map +1 -0
- package/dist/lib/image/color-changer.test.js +131 -0
- package/dist/lib/image/color-changer.test.js.map +1 -0
- package/dist/lib/image/crop-sprite.d.ts +9 -0
- package/dist/lib/image/crop-sprite.d.ts.map +1 -0
- package/dist/lib/image/crop-sprite.js +13 -0
- package/dist/lib/image/crop-sprite.js.map +1 -0
- package/dist/lib/image/dimensions.d.ts +9 -0
- package/dist/lib/image/dimensions.d.ts.map +1 -0
- package/dist/lib/image/dimensions.js +13 -0
- package/dist/lib/image/dimensions.js.map +1 -0
- package/dist/lib/image/image-processor.d.ts +26 -0
- package/dist/lib/image/image-processor.d.ts.map +1 -0
- package/dist/lib/image/image-processor.js +185 -0
- package/dist/lib/image/image-processor.js.map +1 -0
- package/dist/lib/image/io.d.ts +29 -0
- package/dist/lib/image/io.d.ts.map +1 -0
- package/dist/lib/image/io.js +90 -0
- package/dist/lib/image/io.js.map +1 -0
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -1595,6 +1595,10 @@ Each external source is its own subcommand. Pick the verb that matches the sourc
|
|
|
1595
1595
|
| `baker images get <id>` | Single record | n/a |
|
|
1596
1596
|
| `baker images upload <file\|url>` | Upload a local file OR remote URL to the library | always on |
|
|
1597
1597
|
| `baker images delete <id>` | Delete a record | n/a |
|
|
1598
|
+
| `baker images normalize <files>` | Local recolor + bg removal + trim + resize | n/a (operates on disk, no upload) |
|
|
1599
|
+
| `baker images upscale <imageId>` | Real-ESRGAN super-resolution via backend ($0.05/image, cost-tracked) | n/a (operates on library image) |
|
|
1600
|
+
| `baker images crop <file>` | Coordinate-based rectangular extract — local file or URL | n/a |
|
|
1601
|
+
| `baker images dimensions <file\|url>` | Read width / height / aspect / format without decoding | n/a |
|
|
1598
1602
|
|
|
1599
1603
|
**Auto-ingest** runs the full `processImage` pipeline (Gemini describe + Voyage multimodal embed + OpenRouter text embed) on every hit. Override with `--auto-ingest N` (turn on) or `--no-auto-ingest` (turn off where default is on). After auto-ingest the next `baker images library` query for the same concept hits the local row.
|
|
1600
1604
|
|
|
@@ -1975,6 +1979,125 @@ baker images delete j571abc123def --dry-run
|
|
|
1975
1979
|
baker images delete j571abc123def
|
|
1976
1980
|
```
|
|
1977
1981
|
|
|
1982
|
+
### `baker images normalize <files> [options]`
|
|
1983
|
+
|
|
1984
|
+
Local-file image normalization for logos and brand assets. Declarative — describe the desired final state via flags and the pipeline runs the needed stages in order. Operates on files in the sandbox; pair with `baker images upload` to ship results to the library. For super-resolution, upload first then use `baker images upscale <imageId>` (runs on the Convex backend, cost-tracked).
|
|
1985
|
+
|
|
1986
|
+
```bash
|
|
1987
|
+
# Recolor a logo row to white, height-normalize for a "trusted by" strip
|
|
1988
|
+
baker images normalize "logos/*.png" --color '#FFFFFF' --height 200
|
|
1989
|
+
|
|
1990
|
+
# Strip background only, in-place
|
|
1991
|
+
baker images normalize logo.png --remove-bg --shrink-to-content
|
|
1992
|
+
|
|
1993
|
+
# Uniform 200x200 grid tiles, contain by default
|
|
1994
|
+
baker images normalize "a.png,b.png,c.png" --size 200x200 --output ./out
|
|
1995
|
+
|
|
1996
|
+
# Resolve the pipeline without writing files
|
|
1997
|
+
baker images normalize "logos/*.png" --color '#000' --height 100 --dry-run
|
|
1998
|
+
```
|
|
1999
|
+
|
|
2000
|
+
Inputs accept a single path, a quoted glob, or a comma-separated list. Writes in-place by default; `--output` accepts a file (single input) or a directory (multiple inputs).
|
|
2001
|
+
|
|
2002
|
+
Pipeline stages, each opt-in via flag presence and idempotent on already-correct input:
|
|
2003
|
+
|
|
2004
|
+
1. Rasterize SVG (only when raster ops are requested — pure resize keeps SVG)
|
|
2005
|
+
2. `--remove-bg` → two-pass background removal with gradient/solid branching (skipped when the source is already transparent)
|
|
2006
|
+
3. `--color <hex>` → alpha-preserving recolor that maps every foreground pixel to the target color while varying alpha to preserve the original tonal variation
|
|
2007
|
+
4. `--shrink-to-content` → trim transparent borders
|
|
2008
|
+
5. Resize:
|
|
2009
|
+
- `--height N` / `--width N` → preserve aspect ratio (e.g. logo row)
|
|
2010
|
+
- `--size WxH [--fit contain|cover]` → fit into a box (`contain` letterboxes to transparent, `cover` crops)
|
|
2011
|
+
|
|
2012
|
+
Success response includes the resolved `stages` array per file so the agent can verify its declaration took effect:
|
|
2013
|
+
|
|
2014
|
+
```json
|
|
2015
|
+
{
|
|
2016
|
+
"ok": true,
|
|
2017
|
+
"data": {
|
|
2018
|
+
"processed": [{
|
|
2019
|
+
"input": "logo.svg",
|
|
2020
|
+
"output": "logo.png",
|
|
2021
|
+
"format": "png",
|
|
2022
|
+
"width": 264,
|
|
2023
|
+
"height": 200,
|
|
2024
|
+
"sizeBytes": 11510,
|
|
2025
|
+
"stages": ["rasterize-svg", "recolor", "trim", "resize"]
|
|
2026
|
+
}]
|
|
2027
|
+
}
|
|
2028
|
+
}
|
|
2029
|
+
```
|
|
2030
|
+
|
|
2031
|
+
Validation errors return `VALIDATION_ERROR`:
|
|
2032
|
+
|
|
2033
|
+
- `--height`/`--width` together with `--size` (mutually exclusive)
|
|
2034
|
+
- `--fit` without `--size`
|
|
2035
|
+
- Malformed `--color` (must be `#RGB` or `#RRGGBB`)
|
|
2036
|
+
- Empty file pattern or no matches
|
|
2037
|
+
|
|
2038
|
+
### `baker images upscale <imageId>`
|
|
2039
|
+
|
|
2040
|
+
Super-resolution via the Convex backend (Replicate, cost-tracked at $0.05/image). Operates on a library image by ID — upload the file first via `baker images upload`, then upscale.
|
|
2041
|
+
|
|
2042
|
+
Waits for completion by default (polls every 1.5s, up to 2 min). Use `--max-wait 0` for fire-and-forget.
|
|
2043
|
+
|
|
2044
|
+
```bash
|
|
2045
|
+
baker images normalize logo.png --color '#FFFFFF' --remove-bg --height 100
|
|
2046
|
+
baker images upload logo.png --source uploaded
|
|
2047
|
+
# returns imageId — pass it to upscale
|
|
2048
|
+
baker images upscale j571abc123def
|
|
2049
|
+
baker images upscale j571abc123def --max-wait 0 # fire-and-forget
|
|
2050
|
+
```
|
|
2051
|
+
|
|
2052
|
+
Response on success:
|
|
2053
|
+
|
|
2054
|
+
```json
|
|
2055
|
+
{
|
|
2056
|
+
"ok": true,
|
|
2057
|
+
"data": {
|
|
2058
|
+
"imageId": "j571abc123def",
|
|
2059
|
+
"status": "completed",
|
|
2060
|
+
"image": { "_id": "...", "upscaledStorageKey": "...", "width": 400, "height": 400, ... }
|
|
2061
|
+
}
|
|
2062
|
+
}
|
|
2063
|
+
```
|
|
2064
|
+
|
|
2065
|
+
Errors: `BAD_REQUEST` (not ready / not raster), `CONFLICT` (already upscaled / already processing), `TIMEOUT` (not complete within `--max-wait`).
|
|
2066
|
+
|
|
2067
|
+
### `baker images crop <file> --x N --y N --width N --height N`
|
|
2068
|
+
|
|
2069
|
+
Coordinate-based rectangular extract. Local file or remote URL. Writes a PNG.
|
|
2070
|
+
|
|
2071
|
+
```bash
|
|
2072
|
+
baker images crop sprite.png --x 0 --y 0 --width 64 --height 64 --output icon.png
|
|
2073
|
+
baker images crop https://example.com/sheet.png --x 128 --y 0 --width 128 --height 128 --output tile.png
|
|
2074
|
+
```
|
|
2075
|
+
|
|
2076
|
+
### `baker images dimensions <file-or-url>`
|
|
2077
|
+
|
|
2078
|
+
Width, height, aspect ratio, and format — read from the image header without full decode.
|
|
2079
|
+
|
|
2080
|
+
```bash
|
|
2081
|
+
baker images dimensions ./logo.png
|
|
2082
|
+
baker images dimensions https://acme.com/hero.png
|
|
2083
|
+
```
|
|
2084
|
+
|
|
2085
|
+
Response:
|
|
2086
|
+
|
|
2087
|
+
```json
|
|
2088
|
+
{
|
|
2089
|
+
"ok": true,
|
|
2090
|
+
"data": {
|
|
2091
|
+
"target": "./logo.png",
|
|
2092
|
+
"source": "file",
|
|
2093
|
+
"width": 553,
|
|
2094
|
+
"height": 419,
|
|
2095
|
+
"aspectRatio": 1.3198,
|
|
2096
|
+
"format": "png"
|
|
2097
|
+
}
|
|
2098
|
+
}
|
|
2099
|
+
```
|
|
2100
|
+
|
|
1978
2101
|
### `baker videos search <query>`
|
|
1979
2102
|
|
|
1980
2103
|
Semantic search videos.
|
|
@@ -2069,6 +2192,7 @@ baker actions list # default: bucketed (claimable, myCla
|
|
|
2069
2192
|
baker actions list --bucketed=false --status pending --tag copy
|
|
2070
2193
|
|
|
2071
2194
|
baker actions get <action-id>
|
|
2195
|
+
baker actions status temp_hero jx123 # batch resolve real IDs and temp_* refs
|
|
2072
2196
|
|
|
2073
2197
|
baker actions claim <action-id> # live — returns action details + skill-loading hints
|
|
2074
2198
|
baker actions release <action-id>
|
|
@@ -2090,6 +2214,27 @@ baker actions tag add <action-id-or-tempId> --slug copy
|
|
|
2090
2214
|
baker actions tag remove <action-id> --slug copy
|
|
2091
2215
|
```
|
|
2092
2216
|
|
|
2217
|
+
`baker actions status <ref...>` reads live Work Action status without requiring `BAKER_CHAT_ID`. It sends all refs in one request to `/api/actions/status` and preserves the backend JSON envelope:
|
|
2218
|
+
|
|
2219
|
+
```json
|
|
2220
|
+
{
|
|
2221
|
+
"ok": true,
|
|
2222
|
+
"data": [
|
|
2223
|
+
{
|
|
2224
|
+
"ref": "temp_hero",
|
|
2225
|
+
"actionId": "jx123",
|
|
2226
|
+
"status": "completed",
|
|
2227
|
+
"name": "Build hero section"
|
|
2228
|
+
},
|
|
2229
|
+
{
|
|
2230
|
+
"ref": "temp_old",
|
|
2231
|
+
"status": "not_found",
|
|
2232
|
+
"hint": "Temp ref was not published, was discarded before publish, or belongs to another company."
|
|
2233
|
+
}
|
|
2234
|
+
]
|
|
2235
|
+
}
|
|
2236
|
+
```
|
|
2237
|
+
|
|
2093
2238
|
Permissions enforced server-side:
|
|
2094
2239
|
|
|
2095
2240
|
- Only `claim`/`release` mutate live state.
|
package/dist/cli.js
CHANGED
|
@@ -13,7 +13,7 @@ import { videosCommand } from "./commands/videos/index.js";
|
|
|
13
13
|
const main = defineCommand({
|
|
14
14
|
meta: {
|
|
15
15
|
name: "baker",
|
|
16
|
-
version: "0.
|
|
16
|
+
version: "0.36.0",
|
|
17
17
|
description: `AI-agent CLI for finding and managing images, videos, testimonials, action items, scheduled actions, and ad platform data in Baker.
|
|
18
18
|
|
|
19
19
|
Auth: Set BAKER_API_KEY (starts with bk_) and BAKER_API_URL environment variables.
|
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type ErrorCode = "UNAUTHORIZED" | "NOT_FOUND" | "VALIDATION_ERROR" | "RATE_LIMITED" | "INTERNAL_ERROR" | "NETWORK_ERROR" | "TIMEOUT";
|
|
1
|
+
type ErrorCode = "UNAUTHORIZED" | "NOT_FOUND" | "VALIDATION_ERROR" | "RATE_LIMITED" | "INTERNAL_ERROR" | "NETWORK_ERROR" | "TIMEOUT" | "IMAGE_PROCESSING_ERROR";
|
|
2
2
|
export declare class ApiError extends Error {
|
|
3
3
|
code: ErrorCode;
|
|
4
4
|
constructor(code: ErrorCode, message: string);
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AA6BA,KAAK,SAAS,GACV,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AA6BA,KAAK,SAAS,GACV,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,SAAS,GACT,wBAAwB,CAAC;AAE7B,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;AAsDD,wBAAsB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4BzF;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAuBvG"}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,KAAK,UAAU,uBAAuB,CAAC,GAAW,EAAE,IAAiB;IACnE,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC;QACnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAExC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,IAAI,sBAAsB,EAAE,CAAC;YACjE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC;QAExF,IAAI,WAAW,GAAG,MAAM,GAAG,iBAAiB,EAAE,CAAC;YAC7C,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,WAAW,IAAI,MAAM,CAAC;QACtB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/actions/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/actions/index.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,cAAc,qDA+BzB,CAAC"}
|
|
@@ -7,18 +7,20 @@ import { getCommand } from "./get.js";
|
|
|
7
7
|
import { linkCommand } from "./link.js";
|
|
8
8
|
import { listCommand } from "./list.js";
|
|
9
9
|
import { releaseCommand } from "./release.js";
|
|
10
|
+
import { statusCommand } from "./status.js";
|
|
10
11
|
import { tagCommand } from "./tag/index.js";
|
|
11
12
|
import { unlinkCommand } from "./unlink.js";
|
|
12
13
|
import { updateCommand } from "./update.js";
|
|
13
14
|
export const actionsCommand = defineCommand({
|
|
14
15
|
meta: {
|
|
15
16
|
name: "actions",
|
|
16
|
-
description: `Manage action items for the current chat. Subcommands: list, get, claim, release, create, update, complete, discard, link, unlink, tag.
|
|
17
|
+
description: `Manage action items for the current chat. Subcommands: list, get, status, claim, release, create, update, complete, discard, link, unlink, tag.
|
|
17
18
|
|
|
18
19
|
Lifecycle: claim an action before working on it. Stage create/complete/discard via this CLI; they apply when the chat is published. Release if you decide not to work on it after all.
|
|
19
20
|
|
|
20
21
|
Examples:
|
|
21
22
|
baker actions list # bucketed view: claimable, myClaims, blocked, claimedByOthers
|
|
23
|
+
baker actions status temp_hero jx123 # batch resolve real IDs and temp_* refs
|
|
22
24
|
baker actions claim <id>
|
|
23
25
|
baker actions create --name "Build hero" --description "..." --tag copy
|
|
24
26
|
baker actions complete <id>
|
|
@@ -29,6 +31,7 @@ Examples:
|
|
|
29
31
|
subCommands: {
|
|
30
32
|
list: listCommand,
|
|
31
33
|
get: getCommand,
|
|
34
|
+
status: statusCommand,
|
|
32
35
|
claim: claimCommand,
|
|
33
36
|
release: releaseCommand,
|
|
34
37
|
create: createCommand,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IAC1C,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IAC1C,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE;;;;;;;;;;;;oDAYmC;KACjD;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,cAAc;QACvB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,aAAa;QACrB,GAAG,EAAE,UAAU;KAChB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/actions/status.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,aAAa;;;;;;EAwBxB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { apiPost } from "../../client.js";
|
|
3
|
+
import { writeJson } from "../../output.js";
|
|
4
|
+
import { registerSchema } from "../../schemas.js";
|
|
5
|
+
import { failApi, failValidation } from "./shared.js";
|
|
6
|
+
registerSchema({
|
|
7
|
+
command: "actions.status",
|
|
8
|
+
description: "Resolve one or more Work Action refs by real action ID or temp_* ref in a single batch call.",
|
|
9
|
+
args: {
|
|
10
|
+
refs: { type: "string", description: "One or more action refs: real action IDs or temp_* refs", required: true },
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
export const statusCommand = defineCommand({
|
|
14
|
+
meta: {
|
|
15
|
+
name: "status",
|
|
16
|
+
description: "Resolve Work Action refs by real ID or temp_* ref. Example: baker actions status temp_hero jx123",
|
|
17
|
+
},
|
|
18
|
+
args: {
|
|
19
|
+
ref: { type: "positional", description: "Action ID or temp_* ref; accepts multiple refs", required: false },
|
|
20
|
+
},
|
|
21
|
+
run: async ({ args }) => {
|
|
22
|
+
try {
|
|
23
|
+
const refs = [args.ref, ...(Array.isArray(args._) ? args._ : [])]
|
|
24
|
+
.filter((ref) => typeof ref === "string")
|
|
25
|
+
.map((ref) => ref.trim())
|
|
26
|
+
.filter(Boolean);
|
|
27
|
+
if (refs.length === 0) {
|
|
28
|
+
failValidation("At least one action ref is required.");
|
|
29
|
+
}
|
|
30
|
+
const response = await apiPost("/api/actions/status", { refs });
|
|
31
|
+
writeJson(response);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
failApi(err);
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/actions/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEtD,cAAc,CAAC;IACb,OAAO,EAAE,gBAAgB;IACzB,WAAW,EAAE,8FAA8F;IAC3G,IAAI,EAAE;QACJ,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE,QAAQ,EAAE,IAAI,EAAE;KACjH;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kGAAkG;KAChH;IACD,IAAI,EAAE;QACJ,GAAG,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,gDAAgD,EAAE,QAAQ,EAAE,KAAK,EAAE;KAC5G;IACD,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC9D,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;iBACvD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;iBACxB,MAAM,CAAC,OAAO,CAAC,CAAC;YACnB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,cAAc,CAAC,sCAAsC,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAA8B,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7F,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const cropCommand: import("citty").CommandDef<{
|
|
2
|
+
readonly file: {
|
|
3
|
+
readonly type: "positional";
|
|
4
|
+
readonly description: "Local file path or remote http(s) URL";
|
|
5
|
+
readonly required: false;
|
|
6
|
+
};
|
|
7
|
+
readonly x: {
|
|
8
|
+
readonly type: "string";
|
|
9
|
+
readonly description: "Left coordinate (px)";
|
|
10
|
+
readonly required: false;
|
|
11
|
+
};
|
|
12
|
+
readonly y: {
|
|
13
|
+
readonly type: "string";
|
|
14
|
+
readonly description: "Top coordinate (px)";
|
|
15
|
+
readonly required: false;
|
|
16
|
+
};
|
|
17
|
+
readonly width: {
|
|
18
|
+
readonly type: "string";
|
|
19
|
+
readonly description: "Region width (px)";
|
|
20
|
+
readonly required: false;
|
|
21
|
+
};
|
|
22
|
+
readonly height: {
|
|
23
|
+
readonly type: "string";
|
|
24
|
+
readonly description: "Region height (px)";
|
|
25
|
+
readonly required: false;
|
|
26
|
+
};
|
|
27
|
+
readonly output: {
|
|
28
|
+
readonly type: "string";
|
|
29
|
+
readonly description: "Output path";
|
|
30
|
+
readonly required: false;
|
|
31
|
+
};
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=crop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crop.d.ts","sourceRoot":"","sources":["../../../src/commands/images/crop.ts"],"names":[],"mappings":"AA+DA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCtB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { cropSprite } from "../../lib/image/crop-sprite.js";
|
|
3
|
+
import { atomicWrite, isRemoteUrl, readImageBuffer, resolveOutputPath } from "../../lib/image/io.js";
|
|
4
|
+
import { writeJson } from "../../output.js";
|
|
5
|
+
import { registerSchema } from "../../schemas.js";
|
|
6
|
+
registerSchema({
|
|
7
|
+
command: "images.crop",
|
|
8
|
+
description: "Crop a rectangular region from a local image or remote URL. Coordinate-based extract.",
|
|
9
|
+
args: {
|
|
10
|
+
file: { type: "string", description: "Local file path or remote http(s) URL", required: true },
|
|
11
|
+
x: { type: "number", description: "Left coordinate (px)", required: true },
|
|
12
|
+
y: { type: "number", description: "Top coordinate (px)", required: true },
|
|
13
|
+
width: { type: "number", description: "Region width (px)", required: true },
|
|
14
|
+
height: { type: "number", description: "Region height (px)", required: true },
|
|
15
|
+
output: {
|
|
16
|
+
type: "string",
|
|
17
|
+
description: "Output path. Default: in-place for local files, ./crop.png for URLs.",
|
|
18
|
+
required: false,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
class ValidationError extends Error {
|
|
23
|
+
constructor(message) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = "ValidationError";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function parseRegion(args) {
|
|
29
|
+
const result = { x: 0, y: 0, width: 0, height: 0 };
|
|
30
|
+
for (const key of ["x", "y", "width", "height"]) {
|
|
31
|
+
const raw = args[key];
|
|
32
|
+
const n = typeof raw === "number" ? raw : raw !== undefined && raw !== "" ? Number(raw) : Number.NaN;
|
|
33
|
+
if (!Number.isFinite(n) || n < 0) {
|
|
34
|
+
throw new ValidationError(`--${key} must be a non-negative number`);
|
|
35
|
+
}
|
|
36
|
+
result[key] = n;
|
|
37
|
+
}
|
|
38
|
+
if (result.width === 0 || result.height === 0) {
|
|
39
|
+
throw new ValidationError("--width and --height must be > 0");
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
function emitError(err) {
|
|
44
|
+
if (err instanceof ValidationError) {
|
|
45
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: err.message } });
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const message = err instanceof Error ? err.message : "Unexpected error";
|
|
49
|
+
writeJson({ ok: false, error: { code: "IMAGE_PROCESSING_ERROR", message } });
|
|
50
|
+
}
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
export const cropCommand = defineCommand({
|
|
54
|
+
meta: {
|
|
55
|
+
name: "crop",
|
|
56
|
+
description: "Crop a rectangular region from an image.\n\nExample: baker images crop sprite.png --x 0 --y 0 --width 64 --height 64 --output icon.png",
|
|
57
|
+
},
|
|
58
|
+
args: {
|
|
59
|
+
file: { type: "positional", description: "Local file path or remote http(s) URL", required: false },
|
|
60
|
+
x: { type: "string", description: "Left coordinate (px)", required: false },
|
|
61
|
+
y: { type: "string", description: "Top coordinate (px)", required: false },
|
|
62
|
+
width: { type: "string", description: "Region width (px)", required: false },
|
|
63
|
+
height: { type: "string", description: "Region height (px)", required: false },
|
|
64
|
+
output: { type: "string", description: "Output path", required: false },
|
|
65
|
+
},
|
|
66
|
+
run: async ({ args }) => {
|
|
67
|
+
try {
|
|
68
|
+
const file = args.file;
|
|
69
|
+
if (!file) {
|
|
70
|
+
throw new ValidationError("file argument is required");
|
|
71
|
+
}
|
|
72
|
+
const region = parseRegion(args);
|
|
73
|
+
const outputArg = typeof args.output === "string" && args.output.length > 0 ? args.output : undefined;
|
|
74
|
+
const inputBuffer = await readImageBuffer(file);
|
|
75
|
+
const output = await cropSprite(inputBuffer, region);
|
|
76
|
+
const outputPath = isRemoteUrl(file)
|
|
77
|
+
? (outputArg ?? "./crop.png")
|
|
78
|
+
: await resolveOutputPath(file, outputArg, { multipleInputs: false, newExtension: ".png" });
|
|
79
|
+
await atomicWrite(outputPath, output);
|
|
80
|
+
writeJson({
|
|
81
|
+
ok: true,
|
|
82
|
+
data: { input: file, output: outputPath, sizeBytes: output.length, region },
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
emitError(err);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=crop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crop.js","sourceRoot":"","sources":["../../../src/commands/images/crop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const dimensionsCommand: import("citty").CommandDef<{
|
|
2
|
+
readonly target: {
|
|
3
|
+
readonly type: "positional";
|
|
4
|
+
readonly description: "Local file path or remote http(s) URL";
|
|
5
|
+
readonly required: false;
|
|
6
|
+
};
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=dimensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dimensions.d.ts","sourceRoot":"","sources":["../../../src/commands/images/dimensions.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,iBAAiB;;;;;;EA2C5B,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { getDimensionsFromBuffer } from "../../lib/image/dimensions.js";
|
|
3
|
+
import { isRemoteUrl, readImageBuffer } from "../../lib/image/io.js";
|
|
4
|
+
import { writeJson } from "../../output.js";
|
|
5
|
+
import { registerSchema } from "../../schemas.js";
|
|
6
|
+
registerSchema({
|
|
7
|
+
command: "images.dimensions",
|
|
8
|
+
description: "Return width, height, aspect ratio, and format for a local file or remote URL.",
|
|
9
|
+
args: {
|
|
10
|
+
target: { type: "string", description: "Local file path or remote http(s) URL", required: true },
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
export const dimensionsCommand = defineCommand({
|
|
14
|
+
meta: {
|
|
15
|
+
name: "dimensions",
|
|
16
|
+
description: "Read image dimensions without decoding the full file.\n\nExample: baker images dimensions ./logo.png\nExample: baker images dimensions https://acme.com/hero.png",
|
|
17
|
+
},
|
|
18
|
+
args: {
|
|
19
|
+
target: { type: "positional", description: "Local file path or remote http(s) URL", required: false },
|
|
20
|
+
},
|
|
21
|
+
run: async ({ args }) => {
|
|
22
|
+
try {
|
|
23
|
+
const target = args.target;
|
|
24
|
+
if (!target) {
|
|
25
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message: "target argument is required" } });
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const buffer = await readImageBuffer(target);
|
|
29
|
+
const dims = getDimensionsFromBuffer(buffer);
|
|
30
|
+
if (!dims) {
|
|
31
|
+
writeJson({
|
|
32
|
+
ok: false,
|
|
33
|
+
error: { code: "IMAGE_PROCESSING_ERROR", message: `Could not extract dimensions from ${target}` },
|
|
34
|
+
});
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
writeJson({
|
|
38
|
+
ok: true,
|
|
39
|
+
data: {
|
|
40
|
+
target,
|
|
41
|
+
source: isRemoteUrl(target) ? "url" : "file",
|
|
42
|
+
width: dims.width,
|
|
43
|
+
height: dims.height,
|
|
44
|
+
aspectRatio: Math.round(dims.aspectRatio * 10000) / 10000,
|
|
45
|
+
format: dims.format,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
const message = err instanceof Error ? err.message : "Unexpected error";
|
|
51
|
+
writeJson({ ok: false, error: { code: "IMAGE_PROCESSING_ERROR", message } });
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=dimensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dimensions.js","sourceRoot":"","sources":["../../../src/commands/images/dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAc,CAAC;IACb,OAAO,EAAE,mBAAmB;IAC5B,WAAW,EAAE,gFAAgF;IAC7F,IAAI,EAAE;QACJ,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE,QAAQ,EAAE,IAAI,EAAE;KACjG;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;IAC7C,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,kKAAkK;KACrK;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,uCAAuC,EAAE,QAAQ,EAAE,KAAK,EAAE;KACtG;IACD,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;YACjD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,6BAA6B,EAAE,EAAE,CAAC,CAAC;gBACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,SAAS,CAAC;oBACR,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,qCAAqC,MAAM,EAAE,EAAE;iBAClG,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,SAAS,CAAC;gBACR,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE;oBACJ,MAAM;oBACN,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;oBAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,KAAK;oBACzD,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC;YACxE,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/images/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/images/index.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,aAAa,qDA0DxB,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { defineCommand } from "citty";
|
|
2
|
+
import { cropCommand } from "./crop.js";
|
|
2
3
|
import { deleteCommand } from "./delete.js";
|
|
4
|
+
import { dimensionsCommand } from "./dimensions.js";
|
|
3
5
|
import { extractCommand } from "./extract.js";
|
|
4
6
|
import { findCommand } from "./find.js";
|
|
5
7
|
import { getCommand } from "./get.js";
|
|
@@ -9,16 +11,18 @@ import { iconCommand } from "./icon.js";
|
|
|
9
11
|
import { ingestCommand } from "./ingest.js";
|
|
10
12
|
import { libraryCommand } from "./library.js";
|
|
11
13
|
import { logoCommand } from "./logo.js";
|
|
14
|
+
import { normalizeCommand } from "./normalize.js";
|
|
12
15
|
import { screenshotCommand } from "./screenshot.js";
|
|
13
16
|
import { searchCommand } from "./search.js";
|
|
14
17
|
import { stickerCommand } from "./sticker.js";
|
|
15
18
|
import { stockCommand } from "./stock.js";
|
|
16
19
|
import { uploadCommand } from "./upload.js";
|
|
20
|
+
import { upscaleCommand } from "./upscale.js";
|
|
17
21
|
import { useCommand } from "./use.js";
|
|
18
22
|
export const imagesCommand = defineCommand({
|
|
19
23
|
meta: {
|
|
20
24
|
name: "images",
|
|
21
|
-
description: `Find and
|
|
25
|
+
description: `Find, source, and normalize images. Subcommands route by provider so cost + license are explicit.
|
|
22
26
|
|
|
23
27
|
Library + search:
|
|
24
28
|
baker images library <q> Search the company library (replaces search)
|
|
@@ -39,7 +43,17 @@ Ingest + management:
|
|
|
39
43
|
baker images use <url> Ingest and wait for ready
|
|
40
44
|
baker images upload ./file Upload local file
|
|
41
45
|
baker images get <id> Get a single record
|
|
42
|
-
baker images delete <id> Delete a record
|
|
46
|
+
baker images delete <id> Delete a record
|
|
47
|
+
|
|
48
|
+
Local transforms (operate on files in the sandbox, before upload):
|
|
49
|
+
baker images normalize <files> [--color …] [--remove-bg] [--height N | --width N | --size WxH]
|
|
50
|
+
Declarative recolor + bg removal + trim + resize
|
|
51
|
+
baker images crop <file> --x N --y N --width N --height N
|
|
52
|
+
Coordinate-based rectangular extract
|
|
53
|
+
baker images dimensions <file-or-url> Width / height / aspect / format without decoding the full image
|
|
54
|
+
|
|
55
|
+
Paid transforms (run on the Convex backend, cost-tracked):
|
|
56
|
+
baker images upscale <imageId> Real-ESRGAN super-resolution ($0.05/image, waits for completion)`,
|
|
43
57
|
},
|
|
44
58
|
subCommands: {
|
|
45
59
|
get: getCommand,
|
|
@@ -58,6 +72,10 @@ Ingest + management:
|
|
|
58
72
|
search: searchCommand,
|
|
59
73
|
upload: uploadCommand,
|
|
60
74
|
delete: deleteCommand,
|
|
75
|
+
normalize: normalizeCommand,
|
|
76
|
+
crop: cropCommand,
|
|
77
|
+
dimensions: dimensionsCommand,
|
|
78
|
+
upscale: upscaleCommand,
|
|
61
79
|
},
|
|
62
80
|
});
|
|
63
81
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +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,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE
|
|
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,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wHA+BuG;KACrH;IACD,WAAW,EAAE;QACX,GAAG,EAAE,UAAU;QACf,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,UAAU;QACf,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,cAAc;QACvB,UAAU,EAAE,iBAAiB;QAC7B,MAAM,EAAE,aAAa;QACrB,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,gBAAgB;QAC3B,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,cAAc;KACxB;CACF,CAAC,CAAC"}
|