@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.
Files changed (104) hide show
  1. package/README.md +12 -10
  2. package/dist/agents/agent-loop.d.ts +55 -0
  3. package/dist/agents/agent-loop.d.ts.map +1 -1
  4. package/dist/agents/agent-loop.js +90 -1
  5. package/dist/agents/agent-loop.js.map +1 -1
  6. package/dist/agents/channels/inbound-pipeline.d.ts +22 -0
  7. package/dist/agents/channels/inbound-pipeline.d.ts.map +1 -1
  8. package/dist/agents/channels/inbound-pipeline.js +31 -1
  9. package/dist/agents/channels/inbound-pipeline.js.map +1 -1
  10. package/dist/agents/channels/media-capture.d.ts +69 -6
  11. package/dist/agents/channels/media-capture.d.ts.map +1 -1
  12. package/dist/agents/channels/media-capture.js +125 -8
  13. package/dist/agents/channels/media-capture.js.map +1 -1
  14. package/dist/agents/channels/telegram/media.d.ts.map +1 -1
  15. package/dist/agents/channels/telegram/media.js +16 -4
  16. package/dist/agents/channels/telegram/media.js.map +1 -1
  17. package/dist/agents/channels/whatsapp/media.d.ts +19 -0
  18. package/dist/agents/channels/whatsapp/media.d.ts.map +1 -1
  19. package/dist/agents/channels/whatsapp/media.js +37 -2
  20. package/dist/agents/channels/whatsapp/media.js.map +1 -1
  21. package/dist/agents/media-understanding/anthropic-adapter.d.ts +49 -0
  22. package/dist/agents/media-understanding/anthropic-adapter.d.ts.map +1 -0
  23. package/dist/agents/media-understanding/anthropic-adapter.js +162 -0
  24. package/dist/agents/media-understanding/anthropic-adapter.js.map +1 -0
  25. package/dist/agents/media-understanding/config.d.ts +57 -0
  26. package/dist/agents/media-understanding/config.d.ts.map +1 -0
  27. package/dist/agents/media-understanding/config.js +289 -0
  28. package/dist/agents/media-understanding/config.js.map +1 -0
  29. package/dist/agents/media-understanding/gemini-adapter.d.ts +57 -0
  30. package/dist/agents/media-understanding/gemini-adapter.d.ts.map +1 -0
  31. package/dist/agents/media-understanding/gemini-adapter.js +343 -0
  32. package/dist/agents/media-understanding/gemini-adapter.js.map +1 -0
  33. package/dist/agents/media-understanding/index.d.ts +58 -0
  34. package/dist/agents/media-understanding/index.d.ts.map +1 -0
  35. package/dist/agents/media-understanding/index.js +275 -0
  36. package/dist/agents/media-understanding/index.js.map +1 -0
  37. package/dist/agents/media-understanding/pi-adapter.d.ts +72 -0
  38. package/dist/agents/media-understanding/pi-adapter.d.ts.map +1 -0
  39. package/dist/agents/media-understanding/pi-adapter.js +160 -0
  40. package/dist/agents/media-understanding/pi-adapter.js.map +1 -0
  41. package/dist/agents/media-understanding/types.d.ts +189 -0
  42. package/dist/agents/media-understanding/types.d.ts.map +1 -0
  43. package/dist/agents/media-understanding/types.js +51 -0
  44. package/dist/agents/media-understanding/types.js.map +1 -0
  45. package/dist/agents/session-wiring.d.ts +11 -0
  46. package/dist/agents/session-wiring.d.ts.map +1 -1
  47. package/dist/agents/session-wiring.js +1 -0
  48. package/dist/agents/session-wiring.js.map +1 -1
  49. package/dist/agents/tools/analyze-media-tool.d.ts +263 -0
  50. package/dist/agents/tools/analyze-media-tool.d.ts.map +1 -0
  51. package/dist/agents/tools/analyze-media-tool.js +2321 -0
  52. package/dist/agents/tools/analyze-media-tool.js.map +1 -0
  53. package/dist/agents/tools/doc-shared.d.ts +187 -0
  54. package/dist/agents/tools/doc-shared.d.ts.map +1 -0
  55. package/dist/agents/tools/doc-shared.js +484 -0
  56. package/dist/agents/tools/doc-shared.js.map +1 -0
  57. package/dist/agents/tools/edit-document-tool.d.ts +133 -0
  58. package/dist/agents/tools/edit-document-tool.d.ts.map +1 -0
  59. package/dist/agents/tools/edit-document-tool.js +815 -0
  60. package/dist/agents/tools/edit-document-tool.js.map +1 -0
  61. package/dist/agents/tools/image-downscale.d.ts +93 -0
  62. package/dist/agents/tools/image-downscale.d.ts.map +1 -0
  63. package/dist/agents/tools/image-downscale.js +257 -0
  64. package/dist/agents/tools/image-downscale.js.map +1 -0
  65. package/dist/agents/tools/make-document-tool.d.ts +114 -0
  66. package/dist/agents/tools/make-document-tool.d.ts.map +1 -0
  67. package/dist/agents/tools/make-document-tool.js +542 -0
  68. package/dist/agents/tools/make-document-tool.js.map +1 -0
  69. package/dist/agents/tools/media-cache.d.ts +56 -0
  70. package/dist/agents/tools/media-cache.d.ts.map +1 -0
  71. package/dist/agents/tools/media-cache.js +133 -0
  72. package/dist/agents/tools/media-cache.js.map +1 -0
  73. package/dist/agents/tools/ooxml-images.d.ts +107 -0
  74. package/dist/agents/tools/ooxml-images.d.ts.map +1 -0
  75. package/dist/agents/tools/ooxml-images.js +308 -0
  76. package/dist/agents/tools/ooxml-images.js.map +1 -0
  77. package/dist/agents/tools/registry.d.ts +12 -0
  78. package/dist/agents/tools/registry.d.ts.map +1 -1
  79. package/dist/agents/tools/registry.js +47 -0
  80. package/dist/agents/tools/registry.js.map +1 -1
  81. package/dist/buildstamp.json +1 -1
  82. package/dist/cli/commands/doctor.d.ts.map +1 -1
  83. package/dist/cli/commands/doctor.js +41 -0
  84. package/dist/cli/commands/doctor.js.map +1 -1
  85. package/dist/cli/commands/update.d.ts +48 -11
  86. package/dist/cli/commands/update.d.ts.map +1 -1
  87. package/dist/cli/commands/update.js +133 -46
  88. package/dist/cli/commands/update.js.map +1 -1
  89. package/dist/cli/program/build-program.d.ts.map +1 -1
  90. package/dist/cli/program/build-program.js +11 -5
  91. package/dist/cli/program/build-program.js.map +1 -1
  92. package/dist/core/console-stream.d.ts.map +1 -1
  93. package/dist/core/console-stream.js +7 -5
  94. package/dist/core/console-stream.js.map +1 -1
  95. package/dist/core/server.js +6 -1
  96. package/dist/core/server.js.map +1 -1
  97. package/dist/system-prompt/assembler.d.ts.map +1 -1
  98. package/dist/system-prompt/assembler.js +25 -1
  99. package/dist/system-prompt/assembler.js.map +1 -1
  100. package/dist/system-prompt/guidance.d.ts +30 -0
  101. package/dist/system-prompt/guidance.d.ts.map +1 -1
  102. package/dist/system-prompt/guidance.js +50 -0
  103. package/dist/system-prompt/guidance.js.map +1 -1
  104. package/package.json +9 -1
@@ -13,6 +13,24 @@ import type { WAMessage } from "@whiskeysockets/baileys";
13
13
  import type { InboundMediaAttachment } from "../../extensions/types.js";
14
14
  /** Drained by the gateway on shutdown. */
15
15
  export declare function awaitMediaMirrorFlush(): Promise<void>;
16
+ declare function extFromMime(mime: string | undefined): string;
17
+ /**
18
+ * Pull a clean lowercase extension (no dot, alphanumeric) from a real filename,
19
+ * or "" when the name has none / it isn't a sane extension. WhatsApp documents
20
+ * carry their original `fileName`, which is the AUTHORITATIVE source of the file
21
+ * type — `mimetype` defaults to `application/octet-stream`, so deriving the
22
+ * on-disk extension from the MIME alone saves a `report.csv` as `.octetstream`
23
+ * (and any unmapped type — .csv/.txt/.json/.odt/.epub/.rtf/.ipynb — as garbage),
24
+ * which then makes `analyze_media` fail to detect a perfectly readable file.
25
+ */
26
+ declare function extFromFileName(fileName: string | undefined): string;
27
+ /**
28
+ * Decide the on-disk file extension for a saved inbound attachment: prefer the
29
+ * real `fileName`'s extension (documents), fall back to the MIME map. Keeps the
30
+ * MIME-derived behaviour for media that carries no filename (image/video/audio
31
+ * — they never set `fileName`).
32
+ */
33
+ declare function savedExt(mime: string | undefined, fileName: string | undefined): string;
16
34
  /**
17
35
  * Cheap presence probe — does this normalized message carry any downloadable
18
36
  * media envelope? Walks the same MEDIA_FIELDS table as the downloader but
@@ -44,4 +62,5 @@ export interface DownloadInboundMediaArgs {
44
62
  * nothing to download (text-only message).
45
63
  */
46
64
  export declare function downloadInboundMedia(args: DownloadInboundMediaArgs): Promise<InboundMediaAttachment[]>;
65
+ export { extFromMime, extFromFileName, savedExt };
47
66
  //# sourceMappingURL=media.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/whatsapp/media.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAyCxE,0CAA0C;AAC1C,wBAAgB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD;AA4ED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAQtE;AAED,MAAM,WAAW,wBAAwB;IACxC,uEAAuE;IACvE,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,oBAAoB,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClH,2EAA2E;IAC3E,UAAU,EAAE,SAAS,CAAC;IACtB,oEAAoE;IACpE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC3D;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAqD5G"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/whatsapp/media.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAyCxE,0CAA0C;AAC1C,wBAAgB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD;AAaD,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAarD;AAED;;;;;;;;GAQG;AACH,iBAAS,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAO7D;AAED;;;;;GAKG;AACH,iBAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEhF;AAkDD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAQtE;AAED,MAAM,WAAW,wBAAwB;IACxC,uEAAuE;IACvE,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,oBAAoB,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClH,2EAA2E;IAC3E,UAAU,EAAE,SAAS,CAAC;IACtB,oEAAoE;IACpE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC3D;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAyD5G;AAID,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC"}
@@ -71,6 +71,34 @@ function extFromMime(mime) {
71
71
  };
72
72
  return known[right] ?? (right.replace(/[^\w]+/g, "") || "bin");
73
73
  }
74
+ /**
75
+ * Pull a clean lowercase extension (no dot, alphanumeric) from a real filename,
76
+ * or "" when the name has none / it isn't a sane extension. WhatsApp documents
77
+ * carry their original `fileName`, which is the AUTHORITATIVE source of the file
78
+ * type — `mimetype` defaults to `application/octet-stream`, so deriving the
79
+ * on-disk extension from the MIME alone saves a `report.csv` as `.octetstream`
80
+ * (and any unmapped type — .csv/.txt/.json/.odt/.epub/.rtf/.ipynb — as garbage),
81
+ * which then makes `analyze_media` fail to detect a perfectly readable file.
82
+ */
83
+ function extFromFileName(fileName) {
84
+ const name = (fileName ?? "").trim();
85
+ if (!name)
86
+ return "";
87
+ const dot = name.lastIndexOf(".");
88
+ if (dot < 0 || dot === name.length - 1)
89
+ return "";
90
+ const ext = name.slice(dot + 1).toLowerCase().replace(/[^a-z0-9]/g, "");
91
+ return /^[a-z0-9]{1,12}$/.test(ext) ? ext : "";
92
+ }
93
+ /**
94
+ * Decide the on-disk file extension for a saved inbound attachment: prefer the
95
+ * real `fileName`'s extension (documents), fall back to the MIME map. Keeps the
96
+ * MIME-derived behaviour for media that carries no filename (image/video/audio
97
+ * — they never set `fileName`).
98
+ */
99
+ function savedExt(mime, fileName) {
100
+ return extFromFileName(fileName) || extFromMime(mime);
101
+ }
74
102
  /** The Baileys message envelopes Brigade extracts inbound media from. */
75
103
  const MEDIA_FIELDS = [
76
104
  {
@@ -142,6 +170,7 @@ export async function downloadInboundMedia(args) {
142
170
  const mime = spec.mimeFromMessage?.(env);
143
171
  if (!mime)
144
172
  continue; // e.g. an audio envelope that's not actually a voice note
173
+ const fileName = spec.fileNameFromMessage?.(env);
145
174
  try {
146
175
  const bytes = await args.downloadMediaMessage(args.rawMessage, "buffer", {});
147
176
  if (!bytes || bytes.length === 0)
@@ -163,7 +192,10 @@ export async function downloadInboundMedia(args) {
163
192
  const dir = path.join(baseDir, "media", dayBucket());
164
193
  mkdirSync(dir, { recursive: true });
165
194
  const suffix = MEDIA_FIELDS.length > 1 ? `-${index}` : "";
166
- const filePath = path.join(dir, `${args.msgId}${suffix}.${extFromMime(mime)}`);
195
+ // Prefer the document's real filename extension (its `mimetype` is often
196
+ // the generic application/octet-stream) so the saved file is detectable by
197
+ // analyze_media; fall back to the MIME map for filename-less media.
198
+ const filePath = path.join(dir, `${args.msgId}${suffix}.${savedExt(mime, fileName)}`);
167
199
  writeFileSync(filePath, bytes, { mode: 0o600 });
168
200
  enqueueMediaMirror({
169
201
  messageId: args.msgId,
@@ -176,7 +208,7 @@ export async function downloadInboundMedia(args) {
176
208
  kind: spec.kind,
177
209
  path: filePath,
178
210
  mimeType: mime,
179
- fileName: spec.fileNameFromMessage?.(env),
211
+ fileName,
180
212
  caption: spec.captionFromMessage?.(env),
181
213
  });
182
214
  }
@@ -189,4 +221,7 @@ export async function downloadInboundMedia(args) {
189
221
  }
190
222
  return out;
191
223
  }
224
+ // Exported for tests — the filename/MIME → extension resolution that keeps an
225
+ // inbound document detectable by analyze_media.
226
+ export { extFromMime, extFromFileName, savedExt };
192
227
  //# sourceMappingURL=media.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../../src/agents/channels/whatsapp/media.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../../src/agents/channels/whatsapp/media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Anthropic media-understanding adapter — talks to the Messages API at
3
+ * `api.anthropic.com/v1/messages` directly.
4
+ *
5
+ * Two paths:
6
+ * • native / scanned PDF → a `document` content block
7
+ * `{ type:"document", source:{ type:"base64", media_type:"application/pdf",
8
+ * data } }` + the prompt. Anthropic ingests the PDF natively: it reads the
9
+ * text layer AND runs OCR over scanned pages, and it sees the page layout —
10
+ * so a scanned, no-text-layer PDF that `unpdf` can't read works here.
11
+ * • image → an `image` content block + the prompt.
12
+ *
13
+ * Auth follows Brigade's existing validator (`providers/validate-key.ts`):
14
+ * a normal console key (`sk-ant-api…`) uses `x-api-key`; an OAuth /
15
+ * setup-token (`sk-ant-oat…`) uses `Authorization: Bearer` + the OAuth beta
16
+ * gate. Both send `anthropic-version`. Every call takes an injectable
17
+ * `fetchFn` so the adapter is exercised with zero real network.
18
+ */
19
+ import { type MediaUnderstandingKind, type RunMediaUnderstandingResult } from "./types.js";
20
+ /** Canonical Anthropic API base. */
21
+ export declare const DEFAULT_ANTHROPIC_BASE_URL = "https://api.anthropic.com/v1";
22
+ /** Default model — a current Claude model that reads images + documents. */
23
+ export declare const DEFAULT_ANTHROPIC_MODEL = "claude-sonnet-4-5";
24
+ export interface AnthropicAdapterParams {
25
+ kind: MediaUnderstandingKind;
26
+ bytes: Buffer;
27
+ mimeType: string;
28
+ apiKey: string;
29
+ prompt?: string;
30
+ model?: string;
31
+ /** Max output tokens (clamped); default {@link DEFAULT_MAX_TOKENS}. */
32
+ maxTokens?: number;
33
+ baseUrl?: string;
34
+ fetchFn?: typeof fetch;
35
+ signal?: AbortSignal;
36
+ }
37
+ /** Build the auth headers, branching on key shape (OAuth token vs console key). */
38
+ declare function buildAuthHeaders(apiKey: string): Record<string, string>;
39
+ /** Build the media content block for the request, per kind. */
40
+ declare function buildMediaBlock(params: AnthropicAdapterParams): Record<string, unknown>;
41
+ /** Extract the concatenated text from a Messages API response. */
42
+ declare function extractMessageText(payload: unknown): string;
43
+ /**
44
+ * Run an Anthropic media-understanding request. PDFs go as a `document` block
45
+ * (native + OCR), images as an `image` block. Returns the model's text answer.
46
+ */
47
+ export declare function runAnthropic(params: AnthropicAdapterParams): Promise<RunMediaUnderstandingResult>;
48
+ export { extractMessageText, buildAuthHeaders, buildMediaBlock };
49
+ //# sourceMappingURL=anthropic-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-adapter.d.ts","sourceRoot":"","sources":["../../../src/agents/media-understanding/anthropic-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAEN,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,MAAM,YAAY,CAAC;AAEpB,oCAAoC;AACpC,eAAO,MAAM,0BAA0B,iCAAiC,CAAC;AAMzE,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAoB3D,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAmBD,mFAAmF;AACnF,iBAAS,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAahE;AAED,+DAA+D;AAC/D,iBAAS,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAahF;AAED,kEAAkE;AAClE,iBAAS,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CASpD;AAYD;;;GAGG;AACH,wBAAsB,YAAY,CACjC,MAAM,EAAE,sBAAsB,GAC5B,OAAO,CAAC,2BAA2B,CAAC,CAoDtC;AAGD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Anthropic media-understanding adapter — talks to the Messages API at
3
+ * `api.anthropic.com/v1/messages` directly.
4
+ *
5
+ * Two paths:
6
+ * • native / scanned PDF → a `document` content block
7
+ * `{ type:"document", source:{ type:"base64", media_type:"application/pdf",
8
+ * data } }` + the prompt. Anthropic ingests the PDF natively: it reads the
9
+ * text layer AND runs OCR over scanned pages, and it sees the page layout —
10
+ * so a scanned, no-text-layer PDF that `unpdf` can't read works here.
11
+ * • image → an `image` content block + the prompt.
12
+ *
13
+ * Auth follows Brigade's existing validator (`providers/validate-key.ts`):
14
+ * a normal console key (`sk-ant-api…`) uses `x-api-key`; an OAuth /
15
+ * setup-token (`sk-ant-oat…`) uses `Authorization: Bearer` + the OAuth beta
16
+ * gate. Both send `anthropic-version`. Every call takes an injectable
17
+ * `fetchFn` so the adapter is exercised with zero real network.
18
+ */
19
+ import { MediaUnderstandingProviderError, } from "./types.js";
20
+ /** Canonical Anthropic API base. */
21
+ export const DEFAULT_ANTHROPIC_BASE_URL = "https://api.anthropic.com/v1";
22
+ /** Anthropic API version header — matches the rest of the Brigade tree. */
23
+ const ANTHROPIC_VERSION = "2023-06-01";
24
+ /** OAuth beta gate used when authenticating with an `sk-ant-oat…` token. */
25
+ const ANTHROPIC_OAUTH_BETA = "oauth-2025-04-20";
26
+ /** Default model — a current Claude model that reads images + documents. */
27
+ export const DEFAULT_ANTHROPIC_MODEL = "claude-sonnet-4-5";
28
+ /** Default max tokens for the description response. Bounded — this is a summary, not a doc. */
29
+ const DEFAULT_MAX_TOKENS = 4096;
30
+ /** Hard ceiling on `maxTokens` so a caller can't request an unbounded answer. */
31
+ const MAX_TOKENS_CEILING = 32_000;
32
+ /** Clamp a caller `maxTokens` to a sane window; default when unset/invalid. */
33
+ function resolveMaxTokens(maxTokens) {
34
+ if (typeof maxTokens !== "number" || !Number.isFinite(maxTokens))
35
+ return DEFAULT_MAX_TOKENS;
36
+ return Math.max(256, Math.min(MAX_TOKENS_CEILING, Math.floor(maxTokens)));
37
+ }
38
+ const GENERATE_TIMEOUT_MS = 180_000;
39
+ const DEFAULT_PROMPTS = {
40
+ pdf: "Read this document and summarize its contents, preserving key facts, figures, tables, and structure.",
41
+ image: "Describe this image in detail.",
42
+ };
43
+ function resolveModel(model) {
44
+ return model?.trim() || DEFAULT_ANTHROPIC_MODEL;
45
+ }
46
+ function resolvePrompt(kind, prompt) {
47
+ const trimmed = prompt?.trim();
48
+ if (trimmed)
49
+ return trimmed;
50
+ return DEFAULT_PROMPTS[kind] ?? "Describe the attached media in detail.";
51
+ }
52
+ /** Compose the caller signal with a per-request timeout. */
53
+ function withTimeout(signal, ms) {
54
+ const timeoutSignal = AbortSignal.timeout(ms);
55
+ if (!signal)
56
+ return timeoutSignal;
57
+ return AbortSignal.any([signal, timeoutSignal]);
58
+ }
59
+ /** Build the auth headers, branching on key shape (OAuth token vs console key). */
60
+ function buildAuthHeaders(apiKey) {
61
+ const isOAuth = apiKey.includes("sk-ant-oat");
62
+ if (isOAuth) {
63
+ return {
64
+ authorization: `Bearer ${apiKey}`,
65
+ "anthropic-version": ANTHROPIC_VERSION,
66
+ "anthropic-beta": ANTHROPIC_OAUTH_BETA,
67
+ };
68
+ }
69
+ return {
70
+ "x-api-key": apiKey,
71
+ "anthropic-version": ANTHROPIC_VERSION,
72
+ };
73
+ }
74
+ /** Build the media content block for the request, per kind. */
75
+ function buildMediaBlock(params) {
76
+ const data = params.bytes.toString("base64");
77
+ if (params.kind === "pdf") {
78
+ return {
79
+ type: "document",
80
+ source: { type: "base64", media_type: "application/pdf", data },
81
+ };
82
+ }
83
+ // image
84
+ return {
85
+ type: "image",
86
+ source: { type: "base64", media_type: params.mimeType, data },
87
+ };
88
+ }
89
+ /** Extract the concatenated text from a Messages API response. */
90
+ function extractMessageText(payload) {
91
+ const content = payload?.content;
92
+ if (!Array.isArray(content))
93
+ return "";
94
+ return content
95
+ .filter((b) => b?.type === "text" && typeof b.text === "string")
96
+ .map((b) => (b.text ?? "").trim())
97
+ .filter(Boolean)
98
+ .join("\n")
99
+ .trim();
100
+ }
101
+ async function readErrorMessage(res) {
102
+ try {
103
+ const body = (await res.json());
104
+ if (body?.error?.message)
105
+ return body.error.message;
106
+ }
107
+ catch {
108
+ /* fall through */
109
+ }
110
+ return `HTTP ${res.status}`;
111
+ }
112
+ /**
113
+ * Run an Anthropic media-understanding request. PDFs go as a `document` block
114
+ * (native + OCR), images as an `image` block. Returns the model's text answer.
115
+ */
116
+ export async function runAnthropic(params) {
117
+ if (!params.apiKey) {
118
+ throw new MediaUnderstandingProviderError("anthropic", "No Anthropic API key configured.");
119
+ }
120
+ if (params.kind !== "pdf" && params.kind !== "image") {
121
+ throw new MediaUnderstandingProviderError("anthropic", `Anthropic media understanding supports image + pdf only (got ${params.kind}).`);
122
+ }
123
+ const fetchFn = params.fetchFn ?? fetch;
124
+ const baseUrl = (params.baseUrl ?? DEFAULT_ANTHROPIC_BASE_URL).replace(/\/+$/, "");
125
+ const model = resolveModel(params.model);
126
+ const prompt = resolvePrompt(params.kind, params.prompt);
127
+ const url = `${baseUrl}/messages`;
128
+ const body = {
129
+ model,
130
+ max_tokens: resolveMaxTokens(params.maxTokens),
131
+ messages: [
132
+ {
133
+ role: "user",
134
+ content: [buildMediaBlock(params), { type: "text", text: prompt }],
135
+ },
136
+ ],
137
+ };
138
+ let res;
139
+ try {
140
+ res = await fetchFn(url, {
141
+ method: "POST",
142
+ headers: { ...buildAuthHeaders(params.apiKey), "content-type": "application/json" },
143
+ body: JSON.stringify(body),
144
+ signal: withTimeout(params.signal, GENERATE_TIMEOUT_MS),
145
+ });
146
+ }
147
+ catch (err) {
148
+ throw new MediaUnderstandingProviderError("anthropic", `Anthropic request failed: ${err instanceof Error ? err.message : String(err)}`);
149
+ }
150
+ if (!res.ok) {
151
+ throw new MediaUnderstandingProviderError("anthropic", `Anthropic error: ${await readErrorMessage(res)}`, res.status);
152
+ }
153
+ const payload = await res.json().catch(() => ({}));
154
+ const text = extractMessageText(payload);
155
+ if (!text) {
156
+ throw new MediaUnderstandingProviderError("anthropic", "Anthropic returned no text for the media.");
157
+ }
158
+ return { text, provider: "anthropic", model };
159
+ }
160
+ // Exported for tests.
161
+ export { extractMessageText, buildAuthHeaders, buildMediaBlock };
162
+ //# sourceMappingURL=anthropic-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-adapter.js","sourceRoot":"","sources":["../../../src/agents/media-understanding/anthropic-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Build a `MediaUnderstandingConfig` from Brigade's existing credential store
3
+ * + main config — so the subsystem resolves keys the SAME way the agent kernel
4
+ * does, and never invents its own auth path.
5
+ *
6
+ * Key resolution reuses `readBrigadeCredentials(agentId)` (the mode-aware
7
+ * choke point over `auth-profiles.json` / the Convex sealed cache that
8
+ * onboarding writes), then falls back to the provider's env var. For Anthropic
9
+ * we accept a literal `api_key` credential; an `oauth` credential (subscription
10
+ * login) is passed through as its access token so direct REST calls still
11
+ * authenticate (Anthropic's `sk-ant-oat…` Bearer path).
12
+ *
13
+ * Per-kind model/provider defaults are read from
14
+ * `cfg.tools.mediaUnderstanding` when present.
15
+ */
16
+ import type { MediaUnderstandingConfig } from "./types.js";
17
+ /**
18
+ * Resolve a provider's key for media understanding. Order:
19
+ * 1. Brigade credential store (`readBrigadeCredentials`) — api_key.key, or
20
+ * an oauth credential's access token (so subscription login works).
21
+ * 2. The provider's env var(s) — explicit overrides above, else the catalog's
22
+ * `envVar` + `envVarFallbacks` for that provider.
23
+ * Returns "" when nothing resolves (keyless local providers also return "").
24
+ */
25
+ export declare function resolveMediaProviderKey(provider: string, agentId?: string): string;
26
+ /**
27
+ * Providers (catalog ids) that currently have a usable credential for the Pi
28
+ * path, MOST-PREFERRED first. A keyless local provider (Ollama) qualifies when
29
+ * its server is configured (we treat it as always-eligible — the real call
30
+ * surfaces an unreachable error). `google`/`anthropic` are excluded (the
31
+ * bespoke adapters own them); the Pi path is the catch-all for the rest.
32
+ */
33
+ export declare function listKeyedPiProviders(agentId?: string): string[];
34
+ /**
35
+ * Build the `MediaUnderstandingConfig` the subsystem consumes, wired to
36
+ * Brigade's real credential store + config. `agentId` selects which agent's
37
+ * auth profiles back the key (defaults to `main`, with the main-agent fallback
38
+ * `readBrigadeCredentials` already applies for org agents).
39
+ *
40
+ * Wires the Pi path (`resolveModel` + `listKeyedProviders`) so image/audio
41
+ * understanding works for EVERY configured provider (OpenAI / OpenRouter / Groq
42
+ * / xAI / Mistral / Ollama / …), not just google + anthropic. `piComplete` is
43
+ * left at the subsystem default (the real `completeSimple` wrapper).
44
+ */
45
+ export declare function buildMediaUnderstandingConfig(agentId?: string): MediaUnderstandingConfig;
46
+ /**
47
+ * Quick capability probe for doctor/status: which providers have a key, and
48
+ * therefore which kinds can be understood via a provider. Pure read — no calls.
49
+ */
50
+ export declare function probeMediaUnderstanding(agentId?: string): {
51
+ google: boolean;
52
+ anthropic: boolean;
53
+ video: boolean;
54
+ pdf: boolean;
55
+ image: boolean;
56
+ };
57
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/agents/media-understanding/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,KAAK,EACX,wBAAwB,EAIxB,MAAM,YAAY,CAAC;AA6BpB;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAyB,GAChC,MAAM,CAyBR;AAeD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,EAAE,CAoBjF;AAkJD;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAC5C,OAAO,GAAE,MAAyB,GAChC,wBAAwB,CAS1B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,MAAyB,GAAG;IAC5E,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CACf,CAeA"}