@spinabot/brigade 1.9.0 → 1.11.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 +12 -10
- package/dist/agents/agent-loop.d.ts +55 -0
- package/dist/agents/agent-loop.d.ts.map +1 -1
- package/dist/agents/agent-loop.js +90 -1
- package/dist/agents/agent-loop.js.map +1 -1
- package/dist/agents/channels/inbound-pipeline.d.ts +22 -0
- package/dist/agents/channels/inbound-pipeline.d.ts.map +1 -1
- package/dist/agents/channels/inbound-pipeline.js +31 -1
- package/dist/agents/channels/inbound-pipeline.js.map +1 -1
- package/dist/agents/channels/media-capture.d.ts +69 -6
- package/dist/agents/channels/media-capture.d.ts.map +1 -1
- package/dist/agents/channels/media-capture.js +125 -8
- package/dist/agents/channels/media-capture.js.map +1 -1
- package/dist/agents/channels/telegram/media.d.ts.map +1 -1
- package/dist/agents/channels/telegram/media.js +16 -4
- package/dist/agents/channels/telegram/media.js.map +1 -1
- package/dist/agents/channels/whatsapp/media.d.ts +19 -0
- package/dist/agents/channels/whatsapp/media.d.ts.map +1 -1
- package/dist/agents/channels/whatsapp/media.js +37 -2
- package/dist/agents/channels/whatsapp/media.js.map +1 -1
- package/dist/agents/media-understanding/anthropic-adapter.d.ts +49 -0
- package/dist/agents/media-understanding/anthropic-adapter.d.ts.map +1 -0
- package/dist/agents/media-understanding/anthropic-adapter.js +162 -0
- package/dist/agents/media-understanding/anthropic-adapter.js.map +1 -0
- package/dist/agents/media-understanding/config.d.ts +57 -0
- package/dist/agents/media-understanding/config.d.ts.map +1 -0
- package/dist/agents/media-understanding/config.js +289 -0
- package/dist/agents/media-understanding/config.js.map +1 -0
- package/dist/agents/media-understanding/gemini-adapter.d.ts +57 -0
- package/dist/agents/media-understanding/gemini-adapter.d.ts.map +1 -0
- package/dist/agents/media-understanding/gemini-adapter.js +343 -0
- package/dist/agents/media-understanding/gemini-adapter.js.map +1 -0
- package/dist/agents/media-understanding/index.d.ts +58 -0
- package/dist/agents/media-understanding/index.d.ts.map +1 -0
- package/dist/agents/media-understanding/index.js +275 -0
- package/dist/agents/media-understanding/index.js.map +1 -0
- package/dist/agents/media-understanding/pi-adapter.d.ts +72 -0
- package/dist/agents/media-understanding/pi-adapter.d.ts.map +1 -0
- package/dist/agents/media-understanding/pi-adapter.js +160 -0
- package/dist/agents/media-understanding/pi-adapter.js.map +1 -0
- package/dist/agents/media-understanding/types.d.ts +189 -0
- package/dist/agents/media-understanding/types.d.ts.map +1 -0
- package/dist/agents/media-understanding/types.js +51 -0
- package/dist/agents/media-understanding/types.js.map +1 -0
- package/dist/agents/session-wiring.d.ts +11 -0
- package/dist/agents/session-wiring.d.ts.map +1 -1
- package/dist/agents/session-wiring.js +1 -0
- package/dist/agents/session-wiring.js.map +1 -1
- package/dist/agents/tools/analyze-media-tool.d.ts +263 -0
- package/dist/agents/tools/analyze-media-tool.d.ts.map +1 -0
- package/dist/agents/tools/analyze-media-tool.js +2321 -0
- package/dist/agents/tools/analyze-media-tool.js.map +1 -0
- package/dist/agents/tools/doc-shared.d.ts +187 -0
- package/dist/agents/tools/doc-shared.d.ts.map +1 -0
- package/dist/agents/tools/doc-shared.js +484 -0
- package/dist/agents/tools/doc-shared.js.map +1 -0
- package/dist/agents/tools/edit-document-tool.d.ts +133 -0
- package/dist/agents/tools/edit-document-tool.d.ts.map +1 -0
- package/dist/agents/tools/edit-document-tool.js +815 -0
- package/dist/agents/tools/edit-document-tool.js.map +1 -0
- package/dist/agents/tools/image-downscale.d.ts +93 -0
- package/dist/agents/tools/image-downscale.d.ts.map +1 -0
- package/dist/agents/tools/image-downscale.js +257 -0
- package/dist/agents/tools/image-downscale.js.map +1 -0
- package/dist/agents/tools/make-document-tool.d.ts +114 -0
- package/dist/agents/tools/make-document-tool.d.ts.map +1 -0
- package/dist/agents/tools/make-document-tool.js +542 -0
- package/dist/agents/tools/make-document-tool.js.map +1 -0
- package/dist/agents/tools/media-cache.d.ts +56 -0
- package/dist/agents/tools/media-cache.d.ts.map +1 -0
- package/dist/agents/tools/media-cache.js +133 -0
- package/dist/agents/tools/media-cache.js.map +1 -0
- package/dist/agents/tools/ooxml-images.d.ts +107 -0
- package/dist/agents/tools/ooxml-images.d.ts.map +1 -0
- package/dist/agents/tools/ooxml-images.js +308 -0
- package/dist/agents/tools/ooxml-images.js.map +1 -0
- package/dist/agents/tools/registry.d.ts +12 -0
- package/dist/agents/tools/registry.d.ts.map +1 -1
- package/dist/agents/tools/registry.js +47 -0
- package/dist/agents/tools/registry.js.map +1 -1
- package/dist/buildstamp.json +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +41 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/update.d.ts +48 -11
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +133 -46
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/program/build-program.d.ts.map +1 -1
- package/dist/cli/program/build-program.js +11 -5
- package/dist/cli/program/build-program.js.map +1 -1
- package/dist/core/console-stream.d.ts.map +1 -1
- package/dist/core/console-stream.js +7 -5
- package/dist/core/console-stream.js.map +1 -1
- package/dist/core/server.js +6 -1
- package/dist/core/server.js.map +1 -1
- package/dist/system-prompt/assembler.d.ts.map +1 -1
- package/dist/system-prompt/assembler.js +25 -1
- package/dist/system-prompt/assembler.js.map +1 -1
- package/dist/system-prompt/guidance.d.ts +30 -0
- package/dist/system-prompt/guidance.d.ts.map +1 -1
- package/dist/system-prompt/guidance.js +50 -0
- package/dist/system-prompt/guidance.js.map +1 -1
- package/package.json +9 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-document-tool.js","sourceRoot":"","sources":["../../../src/agents/tools/edit-document-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image downscaling for `analyze_media` — keeps an oversize image a VALID,
|
|
3
|
+
* decodable image instead of byte-truncating it (which corrupts the stream and
|
|
4
|
+
* makes every vision model reject the payload).
|
|
5
|
+
*
|
|
6
|
+
* ─────────────────────────────────────────────────────────────────────────
|
|
7
|
+
* WHY (read before changing)
|
|
8
|
+
* ─────────────────────────────────────────────────────────────────────────
|
|
9
|
+
* The acquisition layer caps bytes by `buf.subarray(0, maxBytes)`. For a
|
|
10
|
+
* document that is a best-effort prefix; for an IMAGE it is fatal — a JPEG/PNG
|
|
11
|
+
* cut mid-stream has no end marker, so `jpeg-js` / the provider decoder throws
|
|
12
|
+
* "marker was not found" and the model sees nothing. The correct response to
|
|
13
|
+
* "this image is too big" is to RESIZE it (fit-inside, down a quality grid)
|
|
14
|
+
* until the ENCODED bytes fit the budget — the model still sees the whole
|
|
15
|
+
* picture, just at lower resolution.
|
|
16
|
+
*
|
|
17
|
+
* Pure-JS only: uses `jimp` (zero native bindings — preserves Brigade's
|
|
18
|
+
* no-native-dep streak; `sharp` would pull a platform binary). EXIF orientation
|
|
19
|
+
* is applied here too (jimp 1.x does not auto-rotate on decode), so a phone
|
|
20
|
+
* photo taken sideways is uprighted before the model reads it.
|
|
21
|
+
*
|
|
22
|
+
* The jimp import is LAZY (inside `downscaleImageToBudget`) so the cost stays
|
|
23
|
+
* off the cold-start path and only an actual oversize-image analysis pays it.
|
|
24
|
+
*/
|
|
25
|
+
/** Hard cap on either pixel dimension before we force a resize (very large
|
|
26
|
+
* images blow token budgets even when their byte size is modest, e.g. PNG
|
|
27
|
+
* screenshots). Fit-inside this box on the first downscale step. */
|
|
28
|
+
export declare const MAX_IMAGE_DIMENSION = 4096;
|
|
29
|
+
/** Result of a downscale attempt. */
|
|
30
|
+
export interface DownscaleResult {
|
|
31
|
+
/** The re-encoded image bytes (always a valid, decodable image). */
|
|
32
|
+
bytes: Buffer;
|
|
33
|
+
/** MIME of the returned bytes (we always re-encode to JPEG). */
|
|
34
|
+
mimeType: string;
|
|
35
|
+
/** Final pixel dimensions. */
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
/** True when the image was actually resized/re-encoded (vs returned as-is). */
|
|
39
|
+
resized: boolean;
|
|
40
|
+
/** True when EXIF orientation was applied. */
|
|
41
|
+
rotated: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* MIME types jimp 1.x can DECODE. HEIC/HEIF + SVG are not decodable without a
|
|
45
|
+
* native dep, so we never try to downscale them — they pass through untouched
|
|
46
|
+
* (the tool already warns HEIC may be rejected by the model).
|
|
47
|
+
*/
|
|
48
|
+
export declare function isDownscalableImageMime(mime: string | undefined): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Read the EXIF orientation tag (0x0112) from raw JPEG bytes. Returns 1..8 (the
|
|
51
|
+
* EXIF orientation value) or `undefined` when there is no Exif APP1 segment /
|
|
52
|
+
* orientation tag. A minimal, dependency-free TIFF/Exif walker — only enough to
|
|
53
|
+
* find the one tag we act on. Never throws (returns undefined on malformed
|
|
54
|
+
* input).
|
|
55
|
+
*/
|
|
56
|
+
export declare function readJpegOrientation(bytes: Buffer): number | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Downscale `bytes` (a decodable raster image) so the RE-ENCODED result fits
|
|
59
|
+
* `maxBytes`, applying EXIF orientation. Returns a valid image every time. When
|
|
60
|
+
* the source already fits the budget AND is within the dimension cap AND has no
|
|
61
|
+
* orientation to apply, the ORIGINAL bytes are returned unchanged (no needless
|
|
62
|
+
* re-encode). Throws when the bytes cannot be decoded (caller decides whether
|
|
63
|
+
* to fall back to pass-through).
|
|
64
|
+
*
|
|
65
|
+
* `loadImpl` is a test seam (defaults to the lazy jimp loader) so the grid
|
|
66
|
+
* logic can be exercised without bundling a real codec into the test.
|
|
67
|
+
*/
|
|
68
|
+
export declare function downscaleImageToBudget(bytes: Buffer, opts: {
|
|
69
|
+
maxBytes: number;
|
|
70
|
+
maxDimension?: number;
|
|
71
|
+
sourceMime?: string;
|
|
72
|
+
}, loadImpl?: LoadImage): Promise<DownscaleResult>;
|
|
73
|
+
/**
|
|
74
|
+
* Minimal image handle the downscaler drives. Backed by jimp in production; a
|
|
75
|
+
* stub in tests. `reset()` restores the original decoded pixels so each grid
|
|
76
|
+
* step shrinks from full resolution (jimp mutates in place).
|
|
77
|
+
*/
|
|
78
|
+
export interface LoadedImage {
|
|
79
|
+
width(): number;
|
|
80
|
+
height(): number;
|
|
81
|
+
scaleToFit(w: number, h: number): void;
|
|
82
|
+
rotate(deg: number): void;
|
|
83
|
+
flip(opts: {
|
|
84
|
+
horizontal?: boolean;
|
|
85
|
+
vertical?: boolean;
|
|
86
|
+
}): void;
|
|
87
|
+
/** Re-decode the original bytes so the next grid step starts from full res. */
|
|
88
|
+
reset(): Promise<void>;
|
|
89
|
+
/** Encode the current pixels to a JPEG buffer at `quality` (1..100). */
|
|
90
|
+
encodeJpeg(quality: number): Promise<Buffer>;
|
|
91
|
+
}
|
|
92
|
+
export type LoadImage = (bytes: Buffer) => Promise<LoadedImage>;
|
|
93
|
+
//# sourceMappingURL=image-downscale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-downscale.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/image-downscale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;oEAEoE;AACpE,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAkBxC,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC/B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAWzE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAgCrE;AAiED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC3C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EACtE,QAAQ,GAAE,SAA4B,GACpC,OAAO,CAAC,eAAe,CAAC,CAmD1B;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B,KAAK,IAAI,MAAM,CAAC;IAChB,MAAM,IAAI,MAAM,CAAC;IACjB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/D,+EAA+E;IAC/E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,wEAAwE;IACxE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image downscaling for `analyze_media` — keeps an oversize image a VALID,
|
|
3
|
+
* decodable image instead of byte-truncating it (which corrupts the stream and
|
|
4
|
+
* makes every vision model reject the payload).
|
|
5
|
+
*
|
|
6
|
+
* ─────────────────────────────────────────────────────────────────────────
|
|
7
|
+
* WHY (read before changing)
|
|
8
|
+
* ─────────────────────────────────────────────────────────────────────────
|
|
9
|
+
* The acquisition layer caps bytes by `buf.subarray(0, maxBytes)`. For a
|
|
10
|
+
* document that is a best-effort prefix; for an IMAGE it is fatal — a JPEG/PNG
|
|
11
|
+
* cut mid-stream has no end marker, so `jpeg-js` / the provider decoder throws
|
|
12
|
+
* "marker was not found" and the model sees nothing. The correct response to
|
|
13
|
+
* "this image is too big" is to RESIZE it (fit-inside, down a quality grid)
|
|
14
|
+
* until the ENCODED bytes fit the budget — the model still sees the whole
|
|
15
|
+
* picture, just at lower resolution.
|
|
16
|
+
*
|
|
17
|
+
* Pure-JS only: uses `jimp` (zero native bindings — preserves Brigade's
|
|
18
|
+
* no-native-dep streak; `sharp` would pull a platform binary). EXIF orientation
|
|
19
|
+
* is applied here too (jimp 1.x does not auto-rotate on decode), so a phone
|
|
20
|
+
* photo taken sideways is uprighted before the model reads it.
|
|
21
|
+
*
|
|
22
|
+
* The jimp import is LAZY (inside `downscaleImageToBudget`) so the cost stays
|
|
23
|
+
* off the cold-start path and only an actual oversize-image analysis pays it.
|
|
24
|
+
*/
|
|
25
|
+
/** Hard cap on either pixel dimension before we force a resize (very large
|
|
26
|
+
* images blow token budgets even when their byte size is modest, e.g. PNG
|
|
27
|
+
* screenshots). Fit-inside this box on the first downscale step. */
|
|
28
|
+
export const MAX_IMAGE_DIMENSION = 4096;
|
|
29
|
+
/**
|
|
30
|
+
* Descending (maxDimension, jpegQuality) grid tried in order until the encoded
|
|
31
|
+
* JPEG fits the byte budget. Starts gentle (large + high quality) and ends
|
|
32
|
+
* aggressive (small + low quality) so a barely-oversize image keeps most of its
|
|
33
|
+
* fidelity while a giant one still lands under the cap.
|
|
34
|
+
*/
|
|
35
|
+
const QUALITY_GRID = [
|
|
36
|
+
{ dim: 4096, quality: 82 },
|
|
37
|
+
{ dim: 3072, quality: 78 },
|
|
38
|
+
{ dim: 2048, quality: 72 },
|
|
39
|
+
{ dim: 1568, quality: 68 },
|
|
40
|
+
{ dim: 1024, quality: 60 },
|
|
41
|
+
{ dim: 768, quality: 55 },
|
|
42
|
+
{ dim: 512, quality: 45 },
|
|
43
|
+
];
|
|
44
|
+
/**
|
|
45
|
+
* MIME types jimp 1.x can DECODE. HEIC/HEIF + SVG are not decodable without a
|
|
46
|
+
* native dep, so we never try to downscale them — they pass through untouched
|
|
47
|
+
* (the tool already warns HEIC may be rejected by the model).
|
|
48
|
+
*/
|
|
49
|
+
export function isDownscalableImageMime(mime) {
|
|
50
|
+
if (!mime)
|
|
51
|
+
return false;
|
|
52
|
+
const m = mime.split(";")[0]?.trim().toLowerCase() ?? "";
|
|
53
|
+
return (m === "image/jpeg" ||
|
|
54
|
+
m === "image/png" ||
|
|
55
|
+
m === "image/bmp" ||
|
|
56
|
+
m === "image/gif" ||
|
|
57
|
+
m === "image/tiff" ||
|
|
58
|
+
m === "image/x-ms-bmp");
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Read the EXIF orientation tag (0x0112) from raw JPEG bytes. Returns 1..8 (the
|
|
62
|
+
* EXIF orientation value) or `undefined` when there is no Exif APP1 segment /
|
|
63
|
+
* orientation tag. A minimal, dependency-free TIFF/Exif walker — only enough to
|
|
64
|
+
* find the one tag we act on. Never throws (returns undefined on malformed
|
|
65
|
+
* input).
|
|
66
|
+
*/
|
|
67
|
+
export function readJpegOrientation(bytes) {
|
|
68
|
+
try {
|
|
69
|
+
// JPEG starts with SOI 0xFFD8.
|
|
70
|
+
if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8)
|
|
71
|
+
return undefined;
|
|
72
|
+
let offset = 2;
|
|
73
|
+
while (offset + 4 <= bytes.length) {
|
|
74
|
+
if (bytes[offset] !== 0xff) {
|
|
75
|
+
offset += 1;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const marker = bytes[offset + 1] ?? 0;
|
|
79
|
+
// APP1 (0xE1) carries Exif.
|
|
80
|
+
const segLen = bytes.readUInt16BE(offset + 2);
|
|
81
|
+
if (marker === 0xe1) {
|
|
82
|
+
const segStart = offset + 4;
|
|
83
|
+
// "Exif\0\0" header.
|
|
84
|
+
if (bytes.length >= segStart + 6 &&
|
|
85
|
+
bytes.toString("ascii", segStart, segStart + 4) === "Exif") {
|
|
86
|
+
return readOrientationFromTiff(bytes, segStart + 6);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// SOS (0xDA) = start of scan; no more metadata after this.
|
|
90
|
+
if (marker === 0xda || marker === 0xd9)
|
|
91
|
+
return undefined;
|
|
92
|
+
if (segLen < 2)
|
|
93
|
+
return undefined;
|
|
94
|
+
offset += 2 + segLen;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
/* malformed — no orientation */
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
/** Parse a TIFF header at `tiffStart` and return the orientation tag value. */
|
|
103
|
+
function readOrientationFromTiff(bytes, tiffStart) {
|
|
104
|
+
if (tiffStart + 8 > bytes.length)
|
|
105
|
+
return undefined;
|
|
106
|
+
const byteOrder = bytes.toString("ascii", tiffStart, tiffStart + 2);
|
|
107
|
+
const little = byteOrder === "II";
|
|
108
|
+
const big = byteOrder === "MM";
|
|
109
|
+
if (!little && !big)
|
|
110
|
+
return undefined;
|
|
111
|
+
const u16 = (o) => (little ? bytes.readUInt16LE(o) : bytes.readUInt16BE(o));
|
|
112
|
+
const u32 = (o) => (little ? bytes.readUInt32LE(o) : bytes.readUInt32BE(o));
|
|
113
|
+
const ifdOffset = u32(tiffStart + 4);
|
|
114
|
+
const ifd = tiffStart + ifdOffset;
|
|
115
|
+
if (ifd + 2 > bytes.length)
|
|
116
|
+
return undefined;
|
|
117
|
+
const count = u16(ifd);
|
|
118
|
+
for (let i = 0; i < count; i++) {
|
|
119
|
+
const entry = ifd + 2 + i * 12;
|
|
120
|
+
if (entry + 12 > bytes.length)
|
|
121
|
+
break;
|
|
122
|
+
const tag = u16(entry);
|
|
123
|
+
if (tag === 0x0112) {
|
|
124
|
+
// Orientation is a SHORT stored in the value field.
|
|
125
|
+
const value = u16(entry + 8);
|
|
126
|
+
return value >= 1 && value <= 8 ? value : undefined;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Apply an EXIF orientation (1..8) to a jimp image in place. Mirrors the EXIF
|
|
133
|
+
* spec's 8 orientations (rotations + mirror flips). Orientation 1 is a no-op.
|
|
134
|
+
*/
|
|
135
|
+
function applyOrientation(img, orientation) {
|
|
136
|
+
switch (orientation) {
|
|
137
|
+
case 2:
|
|
138
|
+
img.flip({ horizontal: true });
|
|
139
|
+
return true;
|
|
140
|
+
case 3:
|
|
141
|
+
img.rotate(180);
|
|
142
|
+
return true;
|
|
143
|
+
case 4:
|
|
144
|
+
img.flip({ vertical: true });
|
|
145
|
+
return true;
|
|
146
|
+
case 5:
|
|
147
|
+
img.rotate(90);
|
|
148
|
+
img.flip({ horizontal: true });
|
|
149
|
+
return true;
|
|
150
|
+
case 6:
|
|
151
|
+
img.rotate(90);
|
|
152
|
+
return true;
|
|
153
|
+
case 7:
|
|
154
|
+
img.rotate(270);
|
|
155
|
+
img.flip({ horizontal: true });
|
|
156
|
+
return true;
|
|
157
|
+
case 8:
|
|
158
|
+
img.rotate(270);
|
|
159
|
+
return true;
|
|
160
|
+
default:
|
|
161
|
+
return false; // 1 or unknown → no transform
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Downscale `bytes` (a decodable raster image) so the RE-ENCODED result fits
|
|
166
|
+
* `maxBytes`, applying EXIF orientation. Returns a valid image every time. When
|
|
167
|
+
* the source already fits the budget AND is within the dimension cap AND has no
|
|
168
|
+
* orientation to apply, the ORIGINAL bytes are returned unchanged (no needless
|
|
169
|
+
* re-encode). Throws when the bytes cannot be decoded (caller decides whether
|
|
170
|
+
* to fall back to pass-through).
|
|
171
|
+
*
|
|
172
|
+
* `loadImpl` is a test seam (defaults to the lazy jimp loader) so the grid
|
|
173
|
+
* logic can be exercised without bundling a real codec into the test.
|
|
174
|
+
*/
|
|
175
|
+
export async function downscaleImageToBudget(bytes, opts, loadImpl = defaultLoadImage) {
|
|
176
|
+
const maxDim = opts.maxDimension ?? MAX_IMAGE_DIMENSION;
|
|
177
|
+
const orientation = readJpegOrientation(bytes);
|
|
178
|
+
const img = await loadImpl(bytes);
|
|
179
|
+
let rotated = false;
|
|
180
|
+
if (orientation && orientation !== 1) {
|
|
181
|
+
rotated = applyOrientation(img, orientation);
|
|
182
|
+
}
|
|
183
|
+
const startW = img.width();
|
|
184
|
+
const startH = img.height();
|
|
185
|
+
const fitsBytes = bytes.length <= opts.maxBytes;
|
|
186
|
+
const fitsDims = startW <= maxDim && startH <= maxDim;
|
|
187
|
+
// Fast path: already small enough AND no transform was applied → return the
|
|
188
|
+
// original bytes (cheapest, lossless).
|
|
189
|
+
if (fitsBytes && fitsDims && !rotated) {
|
|
190
|
+
return {
|
|
191
|
+
bytes,
|
|
192
|
+
mimeType: opts.sourceMime?.split(";")[0]?.trim().toLowerCase() || "image/jpeg",
|
|
193
|
+
width: startW,
|
|
194
|
+
height: startH,
|
|
195
|
+
resized: false,
|
|
196
|
+
rotated: false,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
// Walk the grid: shrink to each step's box (never upscale) + encode JPEG, and
|
|
200
|
+
// stop at the first encode that fits the budget.
|
|
201
|
+
let best;
|
|
202
|
+
for (const step of QUALITY_GRID) {
|
|
203
|
+
const box = Math.min(step.dim, maxDim);
|
|
204
|
+
await img.reset();
|
|
205
|
+
if (orientation && orientation !== 1)
|
|
206
|
+
applyOrientation(img, orientation);
|
|
207
|
+
// Only shrink — fit-inside the box without enlarging a smaller source.
|
|
208
|
+
if (img.width() > box || img.height() > box) {
|
|
209
|
+
img.scaleToFit(box, box);
|
|
210
|
+
}
|
|
211
|
+
const buf = await img.encodeJpeg(step.quality);
|
|
212
|
+
best = { buf, w: img.width(), h: img.height() };
|
|
213
|
+
if (buf.length <= opts.maxBytes)
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
// Even the smallest grid step is the best we can do — return it (a valid,
|
|
217
|
+
// decodable image), preferring a slightly-over result over a corrupt one.
|
|
218
|
+
const out = best ?? { buf: bytes, w: startW, h: startH };
|
|
219
|
+
return {
|
|
220
|
+
bytes: out.buf,
|
|
221
|
+
mimeType: "image/jpeg",
|
|
222
|
+
width: out.w,
|
|
223
|
+
height: out.h,
|
|
224
|
+
resized: true,
|
|
225
|
+
rotated,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Default loader — lazily imports jimp and adapts its image to {@link LoadedImage}.
|
|
230
|
+
* jimp mutates in place, so `reset()` re-reads the ORIGINAL bytes into a fresh
|
|
231
|
+
* image to give each grid step a clean full-resolution starting point.
|
|
232
|
+
*/
|
|
233
|
+
const defaultLoadImage = async (bytes) => {
|
|
234
|
+
const { Jimp, JimpMime } = await import("jimp");
|
|
235
|
+
let current = await Jimp.read(bytes);
|
|
236
|
+
return {
|
|
237
|
+
width: () => current.bitmap.width,
|
|
238
|
+
height: () => current.bitmap.height,
|
|
239
|
+
scaleToFit: (w, h) => {
|
|
240
|
+
current.scaleToFit({ w, h });
|
|
241
|
+
},
|
|
242
|
+
rotate: (deg) => {
|
|
243
|
+
current.rotate(deg);
|
|
244
|
+
},
|
|
245
|
+
flip: (opts) => {
|
|
246
|
+
current.flip({ horizontal: Boolean(opts.horizontal), vertical: Boolean(opts.vertical) });
|
|
247
|
+
},
|
|
248
|
+
reset: async () => {
|
|
249
|
+
current = await Jimp.read(bytes);
|
|
250
|
+
},
|
|
251
|
+
encodeJpeg: async (quality) => {
|
|
252
|
+
const buf = await current.getBuffer(JimpMime.jpeg, { quality });
|
|
253
|
+
return Buffer.isBuffer(buf) ? buf : Buffer.from(buf);
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=image-downscale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-downscale.js","sourceRoot":"","sources":["../../../src/agents/tools/image-downscale.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `make_document` — CREATE a Word / Excel / PowerPoint / PDF file from
|
|
3
|
+
* structured content. The WRITE keystone of Brigade's "cowork assistant"
|
|
4
|
+
* surface; the create-side sibling of `analyze_media` (read) and the producer
|
|
5
|
+
* for `send_media` (deliver).
|
|
6
|
+
*
|
|
7
|
+
* ─────────────────────────────────────────────────────────────────────────
|
|
8
|
+
* WHY A NATIVE TOOL (read before changing)
|
|
9
|
+
* ─────────────────────────────────────────────────────────────────────────
|
|
10
|
+
* Brigade has NO code sandbox and is pure-JS by doctrine — there is no
|
|
11
|
+
* python / pandoc / libreoffice to shell out to. Hand-rolling a .docx in
|
|
12
|
+
* `bash` is impossible (OOXML is a zip of XML) and producing one any other way
|
|
13
|
+
* silently fails. So document creation is a first-class tool backed by pure-JS
|
|
14
|
+
* libraries with zero native build:
|
|
15
|
+
* - docx → `docx` (Document + Packer)
|
|
16
|
+
* - xlsx → `exceljs` (Workbook)
|
|
17
|
+
* - pptx → `pptxgenjs`
|
|
18
|
+
* - pdf → `@cantoo/pdf-lib` (maintained pdf-lib fork)
|
|
19
|
+
* Images embed via `jimp` (decode + fit + re-encode to a library-friendly
|
|
20
|
+
* raster) — see `doc-shared.ts`.
|
|
21
|
+
*
|
|
22
|
+
* SECURITY: the output path is resolved + scoped through the SAME guard as
|
|
23
|
+
* `analyze_media`'s local reads (`resolveOutputPath` → media-path denylist +
|
|
24
|
+
* allowed-root containment). Writing outside workspace / cwd / cache / temp is
|
|
25
|
+
* refused. Default output lands in the workspace. NOT owner-only — creating a
|
|
26
|
+
* file into the workspace is safe, and the path guard is the real boundary.
|
|
27
|
+
*
|
|
28
|
+
* DELIVERY: the tool writes the file + returns `{ok, path, format, bytes}`. The
|
|
29
|
+
* agent hands it to the user via `send_media({path})` on a channel (the doc MIME
|
|
30
|
+
* is already mapped there) or reports the workspace path on the TUI.
|
|
31
|
+
*/
|
|
32
|
+
import { Type } from "typebox";
|
|
33
|
+
import type { BrigadeTool } from "./types.js";
|
|
34
|
+
import { type DocFormat, type ImageLoader } from "./doc-shared.js";
|
|
35
|
+
declare const MakeDocumentParams: Type.TObject<{
|
|
36
|
+
format: Type.TUnion<[Type.TLiteral<"docx">, Type.TLiteral<"xlsx">, Type.TLiteral<"pptx">, Type.TLiteral<"pdf">]>;
|
|
37
|
+
outputPath: Type.TOptional<Type.TString>;
|
|
38
|
+
content: Type.TOptional<Type.TIntersect<[Type.TObject<{
|
|
39
|
+
title: Type.TOptional<Type.TString>;
|
|
40
|
+
sections: Type.TOptional<Type.TArray<Type.TObject<{
|
|
41
|
+
heading: Type.TOptional<Type.TString>;
|
|
42
|
+
level: Type.TOptional<Type.TInteger>;
|
|
43
|
+
paragraphs: Type.TOptional<Type.TArray<Type.TString>>;
|
|
44
|
+
bullets: Type.TOptional<Type.TArray<Type.TString>>;
|
|
45
|
+
table: Type.TOptional<Type.TObject<{
|
|
46
|
+
rows: Type.TArray<Type.TArray<Type.TString>>;
|
|
47
|
+
}>>;
|
|
48
|
+
image: Type.TOptional<Type.TObject<{
|
|
49
|
+
path: Type.TOptional<Type.TString>;
|
|
50
|
+
url: Type.TOptional<Type.TString>;
|
|
51
|
+
}>>;
|
|
52
|
+
}>>>;
|
|
53
|
+
pages: Type.TOptional<Type.TArray<Type.TObject<{
|
|
54
|
+
heading: Type.TOptional<Type.TString>;
|
|
55
|
+
paragraphs: Type.TOptional<Type.TArray<Type.TString>>;
|
|
56
|
+
image: Type.TOptional<Type.TObject<{
|
|
57
|
+
path: Type.TOptional<Type.TString>;
|
|
58
|
+
url: Type.TOptional<Type.TString>;
|
|
59
|
+
}>>;
|
|
60
|
+
}>>>;
|
|
61
|
+
sheets: Type.TOptional<Type.TArray<Type.TObject<{
|
|
62
|
+
name: Type.TOptional<Type.TString>;
|
|
63
|
+
header: Type.TOptional<Type.TArray<Type.TString>>;
|
|
64
|
+
rows: Type.TArray<Type.TArray<Type.TUnion<[Type.TString, Type.TNumber, Type.TObject<{
|
|
65
|
+
formula: Type.TString;
|
|
66
|
+
numFmt: Type.TOptional<Type.TString>;
|
|
67
|
+
}>]>>>;
|
|
68
|
+
numberFormats: Type.TOptional<Type.TArray<Type.TUnion<[Type.TString, Type.TNull]>>>;
|
|
69
|
+
}>>>;
|
|
70
|
+
slides: Type.TOptional<Type.TArray<Type.TObject<{
|
|
71
|
+
title: Type.TOptional<Type.TString>;
|
|
72
|
+
bullets: Type.TOptional<Type.TArray<Type.TString>>;
|
|
73
|
+
image: Type.TOptional<Type.TObject<{
|
|
74
|
+
path: Type.TOptional<Type.TString>;
|
|
75
|
+
url: Type.TOptional<Type.TString>;
|
|
76
|
+
}>>;
|
|
77
|
+
chart: Type.TOptional<Type.TObject<{
|
|
78
|
+
type: Type.TUnion<[Type.TLiteral<"bar">, Type.TLiteral<"line">, Type.TLiteral<"pie">]>;
|
|
79
|
+
title: Type.TOptional<Type.TString>;
|
|
80
|
+
categories: Type.TArray<Type.TString>;
|
|
81
|
+
series: Type.TArray<Type.TObject<{
|
|
82
|
+
name: Type.TOptional<Type.TString>;
|
|
83
|
+
values: Type.TArray<Type.TNumber>;
|
|
84
|
+
}>>;
|
|
85
|
+
}>>;
|
|
86
|
+
notes: Type.TOptional<Type.TString>;
|
|
87
|
+
}>>>;
|
|
88
|
+
}>]>>;
|
|
89
|
+
}>;
|
|
90
|
+
export interface MakeDocumentDetails {
|
|
91
|
+
ok: boolean;
|
|
92
|
+
path?: string;
|
|
93
|
+
format: DocFormat;
|
|
94
|
+
bytes?: number;
|
|
95
|
+
pages?: number;
|
|
96
|
+
sheets?: number;
|
|
97
|
+
slides?: number;
|
|
98
|
+
sections?: number;
|
|
99
|
+
warning?: string;
|
|
100
|
+
message?: string;
|
|
101
|
+
}
|
|
102
|
+
export interface MakeMakeDocumentToolOptions {
|
|
103
|
+
/** Workspace dir — the default output root + an allowed write root. */
|
|
104
|
+
workspaceDir?: string;
|
|
105
|
+
/** Process cwd — an allowed write root + relative-path base. */
|
|
106
|
+
cwd?: string;
|
|
107
|
+
/** Caller's agent id (currently informational; reserved for per-agent scoping). */
|
|
108
|
+
agentId?: string;
|
|
109
|
+
/** Test seam — replace the jimp image loader so embeds run without a codec. */
|
|
110
|
+
loadImage?: ImageLoader;
|
|
111
|
+
}
|
|
112
|
+
export declare function makeMakeDocumentTool(opts?: MakeMakeDocumentToolOptions): BrigadeTool<typeof MakeDocumentParams, MakeDocumentDetails>;
|
|
113
|
+
export {};
|
|
114
|
+
//# sourceMappingURL=make-document-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-document-tool.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/make-document-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,IAAI,EAAe,MAAM,SAAS,CAAC;AAG5C,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAUN,KAAK,SAAS,EACd,KAAK,WAAW,EAEhB,MAAM,iBAAiB,CAAC;AA0FzB,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBtB,CAAC;AAEH,MAAM,WAAW,mBAAmB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,WAAW,2BAA2B;IAC3C,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,WAAW,CAAC;CACxB;AAID,wBAAgB,oBAAoB,CACnC,IAAI,GAAE,2BAAgC,GACpC,WAAW,CAAC,OAAO,kBAAkB,EAAE,mBAAmB,CAAC,CAwE7D"}
|