@canaryai/cli 0.2.1 → 0.2.3

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 (40) hide show
  1. package/dist/{chunk-TO66FC4R.js → chunk-JMI7WWPF.js} +2 -2
  2. package/dist/chunk-OE6O7H45.js +92 -0
  3. package/dist/chunk-OE6O7H45.js.map +1 -0
  4. package/dist/chunk-PLDDJCW6.js +49 -0
  5. package/dist/chunk-ZTWHPIXU.js +42798 -0
  6. package/dist/chunk-ZTWHPIXU.js.map +1 -0
  7. package/dist/debug-workflow-PMLMWKWI.js +241 -0
  8. package/dist/debug-workflow-PMLMWKWI.js.map +1 -0
  9. package/dist/dist-6NXLJYRZ.js +335 -0
  10. package/dist/dist-6NXLJYRZ.js.map +1 -0
  11. package/dist/{feature-flag-ZDLDYRSF.js → feature-flag-D3QTHGL6.js} +2 -2
  12. package/dist/index.js +41 -9
  13. package/dist/index.js.map +1 -1
  14. package/dist/issues-6MHRFKTU.js +362 -0
  15. package/dist/issues-6MHRFKTU.js.map +1 -0
  16. package/dist/{knobs-3MKMOXIV.js → knobs-ED6LXBVM.js} +2 -2
  17. package/dist/{local-browser-GG5GUXDS.js → local-browser-YSE3XCUW.js} +4 -3
  18. package/dist/{local-browser-GG5GUXDS.js.map → local-browser-YSE3XCUW.js.map} +1 -1
  19. package/dist/{mcp-AD67OLQM.js → mcp-LKHFYMA6.js} +4 -3
  20. package/dist/{mcp-AD67OLQM.js.map → mcp-LKHFYMA6.js.map} +1 -1
  21. package/dist/pdf-extract-YIDRKYUD.js +12 -0
  22. package/dist/pdf-extract-YIDRKYUD.js.map +1 -0
  23. package/dist/pdfjs-44AOKLEM.js +35242 -0
  24. package/dist/pdfjs-44AOKLEM.js.map +1 -0
  25. package/dist/{psql-IVAPNYZV.js → psql-U5LF6ELS.js} +2 -2
  26. package/dist/{redis-LWY7L6AS.js → redis-PBQZGU6T.js} +2 -2
  27. package/dist/{release-KQFCTAXA.js → release-QBSP474D.js} +2 -2
  28. package/dist/runner/preload.js +2 -2
  29. package/dist/test.js +2 -2
  30. package/package.json +2 -2
  31. package/dist/chunk-DGUM43GV.js +0 -11
  32. package/dist/chunk-UEOXNF5X.js +0 -371
  33. package/dist/chunk-UEOXNF5X.js.map +0 -1
  34. /package/dist/{chunk-TO66FC4R.js.map → chunk-JMI7WWPF.js.map} +0 -0
  35. /package/dist/{chunk-DGUM43GV.js.map → chunk-PLDDJCW6.js.map} +0 -0
  36. /package/dist/{feature-flag-ZDLDYRSF.js.map → feature-flag-D3QTHGL6.js.map} +0 -0
  37. /package/dist/{knobs-3MKMOXIV.js.map → knobs-ED6LXBVM.js.map} +0 -0
  38. /package/dist/{psql-IVAPNYZV.js.map → psql-U5LF6ELS.js.map} +0 -0
  39. /package/dist/{redis-LWY7L6AS.js.map → redis-PBQZGU6T.js.map} +0 -0
  40. /package/dist/{release-KQFCTAXA.js.map → release-QBSP474D.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  __require
3
- } from "./chunk-DGUM43GV.js";
3
+ } from "./chunk-PLDDJCW6.js";
4
4
 
5
5
  // src/runner/config.ts
6
6
  import path2 from "path";
@@ -1287,4 +1287,4 @@ export {
1287
1287
  wrapExpect,
1288
1288
  wrapPage
1289
1289
  };
1290
- //# sourceMappingURL=chunk-TO66FC4R.js.map
1290
+ //# sourceMappingURL=chunk-JMI7WWPF.js.map
@@ -0,0 +1,92 @@
1
+ // ../browser-core/src/pdf-extract.ts
2
+ import * as fs from "fs/promises";
3
+
4
+ // ../browser-core/src/logger.ts
5
+ var consoleLogger = {
6
+ debug: (msg, data) => {
7
+ if (data) console.debug(msg, data);
8
+ else console.debug(msg);
9
+ },
10
+ info: (msg, data) => {
11
+ if (data) console.info(msg, data);
12
+ else console.info(msg);
13
+ },
14
+ warn: (msg, data) => {
15
+ if (data) console.warn(msg, data);
16
+ else console.warn(msg);
17
+ },
18
+ error: (msg, data) => {
19
+ if (data) console.error(msg, data);
20
+ else console.error(msg);
21
+ }
22
+ };
23
+
24
+ // ../browser-core/src/pdf-extract.ts
25
+ var _logger = consoleLogger;
26
+ function setPdfExtractLogger(l) {
27
+ _logger = l;
28
+ }
29
+ var MAX_FILE_SIZE_BYTES = 50 * 1024 * 1024;
30
+ var MAX_OUTPUT_CHARS = 1e5;
31
+ async function extractPdfTextFromBuffer(buffer) {
32
+ if (buffer.length > MAX_FILE_SIZE_BYTES) {
33
+ _logger.warn("[PdfExtract] PDF too large for text extraction", {
34
+ sizeBytes: buffer.length,
35
+ maxBytes: MAX_FILE_SIZE_BYTES
36
+ });
37
+ return {
38
+ text: `[PDF too large for text extraction: ${formatBytes(buffer.length)} exceeds ${formatBytes(MAX_FILE_SIZE_BYTES)} limit]`,
39
+ totalPages: 0
40
+ };
41
+ }
42
+ const { extractText } = await import("./dist-6NXLJYRZ.js");
43
+ const uint8 = new Uint8Array(buffer);
44
+ const result = await extractText(uint8, { mergePages: true });
45
+ let text = result.text ?? "";
46
+ const totalPages = result.totalPages ?? 0;
47
+ if (text.length > MAX_OUTPUT_CHARS) {
48
+ _logger.info("[PdfExtract] Truncating extracted text", {
49
+ originalLength: text.length,
50
+ truncatedTo: MAX_OUTPUT_CHARS,
51
+ totalPages
52
+ });
53
+ text = text.slice(0, MAX_OUTPUT_CHARS) + `
54
+
55
+ [Text truncated at ${MAX_OUTPUT_CHARS} characters]`;
56
+ }
57
+ _logger.info("[PdfExtract] Text extracted successfully", {
58
+ textLength: text.length,
59
+ totalPages,
60
+ sizeBytes: buffer.length
61
+ });
62
+ return { text, totalPages };
63
+ }
64
+ async function extractPdfText(filePath) {
65
+ const stat2 = await fs.stat(filePath);
66
+ if (stat2.size > MAX_FILE_SIZE_BYTES) {
67
+ _logger.warn("[PdfExtract] PDF file too large for text extraction", {
68
+ filePath,
69
+ sizeBytes: stat2.size,
70
+ maxBytes: MAX_FILE_SIZE_BYTES
71
+ });
72
+ return {
73
+ text: `[PDF too large for text extraction: ${formatBytes(stat2.size)} exceeds ${formatBytes(MAX_FILE_SIZE_BYTES)} limit]`,
74
+ totalPages: 0
75
+ };
76
+ }
77
+ const buffer = await fs.readFile(filePath);
78
+ return extractPdfTextFromBuffer(Buffer.from(buffer));
79
+ }
80
+ function formatBytes(bytes) {
81
+ if (bytes < 1024) return `${bytes}B`;
82
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;
83
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
84
+ }
85
+
86
+ export {
87
+ consoleLogger,
88
+ setPdfExtractLogger,
89
+ extractPdfTextFromBuffer,
90
+ extractPdfText
91
+ };
92
+ //# sourceMappingURL=chunk-OE6O7H45.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../browser-core/src/pdf-extract.ts","../../browser-core/src/logger.ts"],"sourcesContent":["/**\n * PDF text extraction utility.\n *\n * Uses `unpdf` to extract text content from PDF files and buffers.\n * Includes size guards to prevent excessive memory usage.\n *\n * @module pdf-extract\n */\n\nimport * as fs from 'fs/promises';\nimport { consoleLogger, type BrowserLogger } from './logger.js';\n\nlet _logger: BrowserLogger = consoleLogger;\n\nexport function setPdfExtractLogger(l: BrowserLogger): void {\n _logger = l;\n}\n\nconst MAX_FILE_SIZE_BYTES = 50 * 1024 * 1024; // 50MB\nconst MAX_OUTPUT_CHARS = 100_000;\n\n/**\n * Extract text content from a PDF buffer.\n * Returns the extracted text and total page count.\n */\nexport async function extractPdfTextFromBuffer(\n buffer: Buffer\n): Promise<{ text: string; totalPages: number }> {\n if (buffer.length > MAX_FILE_SIZE_BYTES) {\n _logger.warn('[PdfExtract] PDF too large for text extraction', {\n sizeBytes: buffer.length,\n maxBytes: MAX_FILE_SIZE_BYTES,\n });\n return {\n text: `[PDF too large for text extraction: ${formatBytes(buffer.length)} exceeds ${formatBytes(MAX_FILE_SIZE_BYTES)} limit]`,\n totalPages: 0,\n };\n }\n\n const { extractText } = await import('unpdf');\n const uint8 = new Uint8Array(buffer);\n const result = await extractText(uint8, { mergePages: true });\n\n let text = result.text ?? '';\n const totalPages = result.totalPages ?? 0;\n\n if (text.length > MAX_OUTPUT_CHARS) {\n _logger.info('[PdfExtract] Truncating extracted text', {\n originalLength: text.length,\n truncatedTo: MAX_OUTPUT_CHARS,\n totalPages,\n });\n text = text.slice(0, MAX_OUTPUT_CHARS) + `\\n\\n[Text truncated at ${MAX_OUTPUT_CHARS} characters]`;\n }\n\n _logger.info('[PdfExtract] Text extracted successfully', {\n textLength: text.length,\n totalPages,\n sizeBytes: buffer.length,\n });\n\n return { text, totalPages };\n}\n\n/**\n * Extract text content from a PDF file on disk.\n */\nexport async function extractPdfText(\n filePath: string\n): Promise<{ text: string; totalPages: number }> {\n const stat = await fs.stat(filePath);\n\n if (stat.size > MAX_FILE_SIZE_BYTES) {\n _logger.warn('[PdfExtract] PDF file too large for text extraction', {\n filePath,\n sizeBytes: stat.size,\n maxBytes: MAX_FILE_SIZE_BYTES,\n });\n return {\n text: `[PDF too large for text extraction: ${formatBytes(stat.size)} exceeds ${formatBytes(MAX_FILE_SIZE_BYTES)} limit]`,\n totalPages: 0,\n };\n }\n\n const buffer = await fs.readFile(filePath);\n return extractPdfTextFromBuffer(Buffer.from(buffer));\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n","/**\n * Browser Logger Interface\n *\n * Abstracts logging so browser-core works in any environment:\n * - Cloud (apps/api): Wraps pino logger\n * - CLI (canary-cli): Uses console logger\n *\n * @module logger\n */\n\nexport interface BrowserLogger {\n debug(msg: string, data?: Record<string, unknown>): void;\n info(msg: string, data?: Record<string, unknown>): void;\n warn(msg: string, data?: Record<string, unknown>): void;\n error(msg: string, data?: Record<string, unknown>): void;\n}\n\n/**\n * Default console-based logger. Works everywhere without dependencies.\n */\nexport const consoleLogger: BrowserLogger = {\n debug: (msg, data) => {\n if (data) console.debug(msg, data);\n else console.debug(msg);\n },\n info: (msg, data) => {\n if (data) console.info(msg, data);\n else console.info(msg);\n },\n warn: (msg, data) => {\n if (data) console.warn(msg, data);\n else console.warn(msg);\n },\n error: (msg, data) => {\n if (data) console.error(msg, data);\n else console.error(msg);\n },\n};\n"],"mappings":";AASA,YAAY,QAAQ;;;ACWb,IAAM,gBAA+B;AAAA,EAC1C,OAAO,CAAC,KAAK,SAAS;AACpB,QAAI,KAAM,SAAQ,MAAM,KAAK,IAAI;AAAA,QAC5B,SAAQ,MAAM,GAAG;AAAA,EACxB;AAAA,EACA,MAAM,CAAC,KAAK,SAAS;AACnB,QAAI,KAAM,SAAQ,KAAK,KAAK,IAAI;AAAA,QAC3B,SAAQ,KAAK,GAAG;AAAA,EACvB;AAAA,EACA,MAAM,CAAC,KAAK,SAAS;AACnB,QAAI,KAAM,SAAQ,KAAK,KAAK,IAAI;AAAA,QAC3B,SAAQ,KAAK,GAAG;AAAA,EACvB;AAAA,EACA,OAAO,CAAC,KAAK,SAAS;AACpB,QAAI,KAAM,SAAQ,MAAM,KAAK,IAAI;AAAA,QAC5B,SAAQ,MAAM,GAAG;AAAA,EACxB;AACF;;;ADzBA,IAAI,UAAyB;AAEtB,SAAS,oBAAoB,GAAwB;AAC1D,YAAU;AACZ;AAEA,IAAM,sBAAsB,KAAK,OAAO;AACxC,IAAM,mBAAmB;AAMzB,eAAsB,yBACpB,QAC+C;AAC/C,MAAI,OAAO,SAAS,qBAAqB;AACvC,YAAQ,KAAK,kDAAkD;AAAA,MAC7D,WAAW,OAAO;AAAA,MAClB,UAAU;AAAA,IACZ,CAAC;AACD,WAAO;AAAA,MACL,MAAM,uCAAuC,YAAY,OAAO,MAAM,CAAC,YAAY,YAAY,mBAAmB,CAAC;AAAA,MACnH,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,oBAAO;AAC5C,QAAM,QAAQ,IAAI,WAAW,MAAM;AACnC,QAAM,SAAS,MAAM,YAAY,OAAO,EAAE,YAAY,KAAK,CAAC;AAE5D,MAAI,OAAO,OAAO,QAAQ;AAC1B,QAAM,aAAa,OAAO,cAAc;AAExC,MAAI,KAAK,SAAS,kBAAkB;AAClC,YAAQ,KAAK,0CAA0C;AAAA,MACrD,gBAAgB,KAAK;AAAA,MACrB,aAAa;AAAA,MACb;AAAA,IACF,CAAC;AACD,WAAO,KAAK,MAAM,GAAG,gBAAgB,IAAI;AAAA;AAAA,qBAA0B,gBAAgB;AAAA,EACrF;AAEA,UAAQ,KAAK,4CAA4C;AAAA,IACvD,YAAY,KAAK;AAAA,IACjB;AAAA,IACA,WAAW,OAAO;AAAA,EACpB,CAAC;AAED,SAAO,EAAE,MAAM,WAAW;AAC5B;AAKA,eAAsB,eACpB,UAC+C;AAC/C,QAAMA,QAAO,MAAS,QAAK,QAAQ;AAEnC,MAAIA,MAAK,OAAO,qBAAqB;AACnC,YAAQ,KAAK,uDAAuD;AAAA,MAClE;AAAA,MACA,WAAWA,MAAK;AAAA,MAChB,UAAU;AAAA,IACZ,CAAC;AACD,WAAO;AAAA,MACL,MAAM,uCAAuC,YAAYA,MAAK,IAAI,CAAC,YAAY,YAAY,mBAAmB,CAAC;AAAA,MAC/G,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,SAAS,MAAS,YAAS,QAAQ;AACzC,SAAO,yBAAyB,OAAO,KAAK,MAAM,CAAC;AACrD;AAEA,SAAS,YAAY,OAAuB;AAC1C,MAAI,QAAQ,KAAM,QAAO,GAAG,KAAK;AACjC,MAAI,QAAQ,OAAO,KAAM,QAAO,IAAI,QAAQ,MAAM,QAAQ,CAAC,CAAC;AAC5D,SAAO,IAAI,SAAS,OAAO,OAAO,QAAQ,CAAC,CAAC;AAC9C;","names":["stat"]}
@@ -0,0 +1,49 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
8
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
9
+ }) : x)(function(x) {
10
+ if (typeof require !== "undefined") return require.apply(this, arguments);
11
+ throw Error('Dynamic require of "' + x + '" is not supported');
12
+ });
13
+ var __esm = (fn, res) => function __init() {
14
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
15
+ };
16
+ var __commonJS = (cb, mod) => function __require2() {
17
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, { get: all[name], enumerable: true });
22
+ };
23
+ var __copyProps = (to, from, except, desc) => {
24
+ if (from && typeof from === "object" || typeof from === "function") {
25
+ for (let key of __getOwnPropNames(from))
26
+ if (!__hasOwnProp.call(to, key) && key !== except)
27
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
28
+ }
29
+ return to;
30
+ };
31
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
32
+ // If the importer is in node compatibility mode or this is not an ESM
33
+ // file that has been converted to a CommonJS file using a Babel-
34
+ // compatible transform (i.e. "__esModule" has not been set), then set
35
+ // "default" to the CommonJS "module.exports" for node compatibility.
36
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
37
+ mod
38
+ ));
39
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
40
+
41
+ export {
42
+ __require,
43
+ __esm,
44
+ __commonJS,
45
+ __export,
46
+ __toESM,
47
+ __toCommonJS
48
+ };
49
+ //# sourceMappingURL=chunk-PLDDJCW6.js.map