@far-world-labs/verblets 0.6.4 → 0.7.1

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/dist/index.js CHANGED
@@ -1,40 +1,40 @@
1
- import ne from "dotenv";
2
- import { i as re, n as $, c as L, g as X, a as oe, w as B, r as U, j as Y, b as ie, O as k, s as Q, d as ce, e as le, f as ue } from "./shared-CsrVgt_K.js";
3
- import { cR as At, N as Pt, K as Et, P as Rt, cg as Tt, aX as Dt, M as $t, cf as Lt, L as Ft, ci as Mt, cj as Nt, av as _t, c7 as Bt, cQ as Ut, cl as Ot, cm as zt, Q as jt, bn as qt, ck as Vt, bq as Wt, ch as Gt, cc as Ht, bH as Jt, bC as Kt, bD as Xt, cb as Yt, a6 as Qt, I as Zt, af as es, a5 as ts, bd as ss, y as as, aB as ns, aL as rs, bF as os, o as is, aU as cs, bE as ls, ac as us, G as ps, H as ds, aT as ms, bA as hs, a8 as gs, a9 as fs, cz as bs, c4 as ys, q as ws, h as Ss, aV as xs, c2 as vs, aW as Is, cA as Cs, bs as ks, cT as As, m as Ps, aY as Es, cB as Rs, c6 as Ts, J as Ds, R as $s, ag as Ls, be as Fs, z as Ms, aM as Ns, aN as _s, Y as Bs, p as Us, c5 as Os, W as zs, aa as js, ab as qs, aw as Vs, aZ as Ws, a$ as Gs, b1 as Hs, b2 as Js, bN as Ks, c0 as Xs, bO as Ys, b_ as Qs, bP as Zs, b$ as ea, bU as ta, bZ as sa, bY as aa, bT as na, bX as ra, bS as oa, c1 as ia, bV as ca, bW as la, bQ as ua, ad as pa, ai as da, ak as ma, al as ha, ah as ga, aj as fa, ae as ba, a3 as ya, a4 as wa, Z as Sa, bG as xa, am as va, cq as Ia, b3 as Ca, an as ka, b4 as Aa, ao as Pa, at as Ea, a_ as Ra, U as Ta, V as Da, ap as $a, aq as La, cS as Fa, bI as Ma, ar as Na, b5 as _a, cC as Ba, as as Ua, au as Oa, ax as za, bJ as ja, bK as qa, ay as Va, b6 as Wa, b7 as Ga, c8 as Ha, t as Ja, u as Ka, S as Xa, T as Ya, cD as Qa, c9 as Za, ca as en, cy as tn, bf as sn, bg as an, b8 as nn, bK as rn, cE as on, cK as cn, b9 as ln, F as un, cN as pn, cO as dn, cL as mn, ba as hn, c3 as gn, bc as fn, bb as bn, bi as yn, bk as wn, bl as Sn, bh as xn, bj as vn, cP as In, k as Cn, ce as kn, v as An, B as Pn, D as En, E as Rn, A as Tn, C as Dn, x as $n, bm as Ln, cM as Fn, bz as Mn, az as Nn, aE as _n, aG as Bn, aH as Un, aC as On, aD as zn, aF as jn, aA as qn, bL as Vn, bR as Wn, l as Gn, bM as Hn, cJ as Jn, b0 as Kn, bo as Xn, bB as Yn, aI as Qn, cF as Zn, bp as er, cs as tr, cr as sr, a7 as ar, aK as nr, br as rr, aJ as or, aP as ir, aR as cr, aS as lr, aO as ur, aQ as pr, $ as dr, a0 as mr, _ as hr, a2 as gr, cd as fr, bt as br, bu as yr, ct as wr, cv as Sr, cw as xr, cu as vr, cx as Ir, bv as Cr, bw as kr, cG as Ar, a1 as Pr, X as Er, cH as Rr, by as Tr, bx as Dr, cn as $r, co as Lr, cp as Fr, cI as Mr } from "./shared-CsrVgt_K.js";
4
- import * as j from "playwright-core";
5
- import I from "node:fs";
1
+ import pe from "dotenv";
2
+ import { i as de, n as B, c as z, g as se, E as q, a as me, O as L, r as W, j as O, b as he, w as V, D as P, d as C, e as R, s as ae, f as ge, h as fe, k as be, l as ye, p as we } from "./shared-CNTi6iN9.js";
3
+ import { cP as Mt, L as Nt, I as $t, M as Bt, b$ as zt, aL as Ot, bZ as Ut, aH as _t, K as jt, J as qt, cN as Vt, c6 as Wt, c1 as Gt, c2 as Ht, an as Jt, cM as Kt, c4 as Xt, c5 as Qt, Q as Yt, c7 as Zt, b1 as es, c3 as ts, b4 as ss, c0 as as, bT as rs, bl as ns, bg as os, bh as is, bS as cs, a4 as ls, a3 as us, bj as ps, u as ds, aE as ms, bi as hs, aa as gs, F as fs, H as bs, G as ys, bP as ws, aD as vs, be as xs, a6 as Ss, a7 as ks, cu as Cs, bM as Is, x as As, m as Es, bY as Ps, aF as Ts, bK as Rs, aG as Ds, cv as Ls, b6 as Fs, cR as Ms, t as Ns, aI as $s, cw as Bs, bO as zs, N as Os, W as Us, v as _s, bN as js, U as qs, a8 as Vs, a9 as Ws, ao as Gs, aJ as Hs, aM as Js, aO as Ks, br as Xs, bI as Qs, bs as Ys, bG as Zs, bt as ea, bw as ta, bx as sa, bH as aa, bA as ra, bF as na, bE as oa, cK as ia, bz as ca, bD as la, bJ as ua, bB as pa, bC as da, bu as ma, ad as ha, ac as ga, a1 as fa, a2 as ba, X as ya, bk as wa, ae as va, ab as xa, cl as Sa, aX as ka, aP as Ca, af as Ia, aQ as Aa, ce as Ea, ag as Pa, cf as Ta, al as Ra, aK as Da, S as La, T as Fa, ah as Ma, ai as Na, ch as $a, cQ as Ba, bm as za, aj as Oa, aR as Ua, cx as _a, ak as ja, am as qa, ap as Va, bn as Wa, bo as Ga, aq as Ha, cd as Ja, aB as Ka, aS as Xa, aT as Qa, bV as Ya, bQ as Za, aw as er, y as tr, z as sr, P as ar, R as rr, cy as nr, c9 as or, ca as ir, cc as cr, c8 as lr, cb as ur, bR as pr, ct as dr, aZ as mr, a_ as hr, aU as gr, bo as fr, cz as br, cF as yr, aV as wr, cI as vr, cJ as xr, cG as Sr, aW as kr, bL as Cr, cg as Ir, a$ as Ar, aY as Er, cO as Pr, cL as Tr, o as Rr, b_ as Dr, C as Lr, A as Fr, B as Mr, b0 as Nr, cH as $r, bd as Br, ar as zr, by as Or, au as Ur, at as _r, av as jr, ax as qr, as as Vr, bp as Wr, bv as Gr, q as Hr, bq as Jr, cE as Kr, aN as Xr, bX as Qr, b2 as Yr, bf as Zr, ay as en, cA as tn, b3 as sn, cn as an, cm as rn, a5 as nn, aC as on, az as cn, aA as ln, b5 as un, Z as pn, _ as dn, Y as mn, a0 as hn, bW as gn, bU as fn, b7 as bn, b8 as yn, co as wn, cq as vn, cr as xn, cp as Sn, cs as kn, b9 as Cn, ba as In, cB as An, $ as En, V as Pn, cC as Tn, bc as Rn, bb as Dn, ci as Ln, cj as Fn, ck as Mn, cD as Nn } from "./shared-CNTi6iN9.js";
4
+ import * as J from "playwright-core";
5
+ import k from "node:fs";
6
6
  import "node:path";
7
7
  import "glob";
8
- import pe from "node:fs/promises";
9
- const N = 60, de = (t) => ({
10
- low: { width: 300, quality: N, format: "jpeg" },
11
- med: { width: 100, quality: N, format: "jpeg" },
12
- high: { width: 50, quality: N, format: "jpeg" }
13
- })[t], O = (t) => () => {
8
+ import ve from "node:fs/promises";
9
+ const U = 60, xe = (t) => ({
10
+ low: { width: 300, quality: U, format: "jpeg" },
11
+ med: { width: 100, quality: U, format: "jpeg" },
12
+ high: { width: 50, quality: U, format: "jpeg" }
13
+ })[t], G = (t) => () => {
14
14
  throw new Error(`${t} is not available in browser environment`);
15
- }, ft = O("resizeImage"), bt = O("tileImages"), yt = O("imageToBase64"), wt = () => {
15
+ }, Et = G("resizeImage"), Pt = G("tileImages"), Tt = G("imageToBase64"), Rt = () => {
16
16
  throw new Error("webScrape is not available in browser environment");
17
- }, me = async (t, a) => (await t.evaluate(() => {
17
+ }, Se = async (t, a) => (await t.evaluate(() => {
18
18
  const s = /* @__PURE__ */ new Set();
19
- return [...document.querySelectorAll("a[href]")].map((n) => {
20
- const o = n.href;
21
- if (s.has(o)) return;
22
- s.add(o);
23
- const i = n.getBoundingClientRect();
19
+ return [...document.querySelectorAll("a[href]")].map((r) => {
20
+ const i = r.href;
21
+ if (s.has(i)) return;
22
+ s.add(i);
23
+ const o = r.getBoundingClientRect();
24
24
  return {
25
- href: o,
26
- text: n.textContent?.trim()?.slice(0, 120) || "",
27
- ariaLabel: n.getAttribute("aria-label") || "",
28
- rel: n.getAttribute("rel") || "",
29
- target: n.getAttribute("target") || "",
30
- isVisible: i.width > 0 && i.height > 0,
31
- classes: n.className?.slice?.(0, 120) || "",
25
+ href: i,
26
+ text: r.textContent?.trim()?.slice(0, 120) || "",
27
+ ariaLabel: r.getAttribute("aria-label") || "",
28
+ rel: r.getAttribute("rel") || "",
29
+ target: r.getAttribute("target") || "",
30
+ isVisible: o.width > 0 && o.height > 0,
31
+ classes: r.className?.slice?.(0, 120) || "",
32
32
  dataAttrs: Object.fromEntries(
33
- [...n.attributes].filter((r) => r.name.startsWith("data-")).map((r) => [r.name, r.value?.slice(0, 80)])
33
+ [...r.attributes].filter((n) => n.name.startsWith("data-")).map((n) => [n.name, n.value?.slice(0, 80)])
34
34
  ),
35
- inNav: !!n.closest('nav, [role="navigation"], header'),
36
- inFooter: !!n.closest("footer"),
37
- inMain: !!n.closest('main, [role="main"], #main, .main-content')
35
+ inNav: !!r.closest('nav, [role="navigation"], header'),
36
+ inFooter: !!r.closest("footer"),
37
+ inMain: !!r.closest('main, [role="main"], #main, .main-content')
38
38
  };
39
39
  }).filter(Boolean);
40
40
  })).map((s) => ({
@@ -42,7 +42,7 @@ const N = 60, de = (t) => ({
42
42
  isExternal: !s.href.startsWith(a),
43
43
  isSameDomain: s.href.startsWith(a),
44
44
  isAnchor: s.href.includes("#") && new URL(s.href).pathname === new URL(t.url()).pathname
45
- })), he = (t) => t.evaluate(
45
+ })), ke = (t) => t.evaluate(
46
46
  () => [...document.querySelectorAll("form")].map((a) => ({
47
47
  action: a.action || "",
48
48
  method: (a.method || "GET").toUpperCase(),
@@ -67,7 +67,7 @@ const N = 60, de = (t) => ({
67
67
  })) : void 0
68
68
  }))
69
69
  }))
70
- ), ge = (t) => t.evaluate(() => {
70
+ ), Ce = (t) => t.evaluate(() => {
71
71
  const a = [
72
72
  ...document.querySelectorAll(
73
73
  'button, [role="button"], input[type="button"], input[type="submit"]'
@@ -75,25 +75,25 @@ const N = 60, de = (t) => ({
75
75
  ], e = [
76
76
  ...document.querySelectorAll("[onclick], [data-action], [data-toggle], [data-target]")
77
77
  ];
78
- return [.../* @__PURE__ */ new Set([...a, ...e])].map((n) => {
79
- const o = n.getBoundingClientRect();
78
+ return [.../* @__PURE__ */ new Set([...a, ...e])].map((r) => {
79
+ const i = r.getBoundingClientRect();
80
80
  return {
81
- tag: n.tagName.toLowerCase(),
82
- type: n.type || "",
83
- text: n.textContent?.trim()?.slice(0, 80) || "",
84
- id: n.id || "",
85
- classes: (typeof n.className == "string" ? n.className : n.className?.baseVal || "").slice(0, 120),
86
- ariaLabel: n.getAttribute("aria-label") || "",
87
- isVisible: o.width > 0 && o.height > 0,
88
- disabled: n.disabled || n.getAttribute("aria-disabled") === "true",
89
- hasOnclick: !!n.getAttribute("onclick"),
90
- onclick: n.getAttribute("onclick")?.slice(0, 120) || "",
81
+ tag: r.tagName.toLowerCase(),
82
+ type: r.type || "",
83
+ text: r.textContent?.trim()?.slice(0, 80) || "",
84
+ id: r.id || "",
85
+ classes: (typeof r.className == "string" ? r.className : r.className?.baseVal || "").slice(0, 120),
86
+ ariaLabel: r.getAttribute("aria-label") || "",
87
+ isVisible: i.width > 0 && i.height > 0,
88
+ disabled: r.disabled || r.getAttribute("aria-disabled") === "true",
89
+ hasOnclick: !!r.getAttribute("onclick"),
90
+ onclick: r.getAttribute("onclick")?.slice(0, 120) || "",
91
91
  dataAttrs: Object.fromEntries(
92
- [...n.attributes].filter((i) => i.name.startsWith("data-")).map((i) => [i.name, i.value?.slice(0, 80)])
92
+ [...r.attributes].filter((o) => o.name.startsWith("data-")).map((o) => [o.name, o.value?.slice(0, 80)])
93
93
  )
94
94
  };
95
95
  });
96
- }), fe = (t) => t.evaluate(() => [...document.querySelectorAll("script")].map((e) => ({
96
+ }), Ie = (t) => t.evaluate(() => [...document.querySelectorAll("script")].map((e) => ({
97
97
  src: e.src || "",
98
98
  type: e.type || "",
99
99
  isModule: e.type === "module",
@@ -101,7 +101,7 @@ const N = 60, de = (t) => ({
101
101
  size: e.textContent?.length || 0,
102
102
  // First 200 chars of inline scripts to identify patterns
103
103
  preview: e.src ? "" : e.textContent?.trim()?.slice(0, 200)
104
- }))), be = (t) => t.evaluate(() => {
104
+ }))), Ae = (t) => t.evaluate(() => {
105
105
  const a = (e) => document.querySelector(`meta[name="${e}"], meta[property="${e}"]`)?.content || "";
106
106
  return {
107
107
  title: document.title || "",
@@ -128,7 +128,7 @@ const N = 60, de = (t) => ({
128
128
  content: e.content?.slice(0, 120)
129
129
  }))
130
130
  };
131
- }), ye = (t) => t.evaluate(() => {
131
+ }), Ee = (t) => t.evaluate(() => {
132
132
  const a = [...document.querySelectorAll("h1, h2, h3, h4, h5, h6")].slice(0, 30).map((l) => ({
133
133
  level: parseInt(l.tagName[1], 10),
134
134
  text: l.textContent?.trim()?.slice(0, 100)
@@ -143,18 +143,18 @@ const N = 60, de = (t) => ({
143
143
  classes: (typeof l.className == "string" ? l.className : l.className?.baseVal || "").slice(0, 80)
144
144
  })), s = /* @__PURE__ */ new Set();
145
145
  document.querySelectorAll("*").forEach((l) => {
146
- [...l.attributes].filter((d) => d.name.startsWith("data-")).forEach((d) => s.add(d.name));
146
+ [...l.attributes].filter((p) => p.name.startsWith("data-")).forEach((p) => s.add(p.name));
147
147
  });
148
- const n = [...document.querySelectorAll('link[rel="stylesheet"]')].map((l) => l.href), o = /* @__PURE__ */ new Set(), i = (l) => {
149
- const d = l.className;
150
- return typeof d == "string" ? d : d?.baseVal || "";
148
+ const r = [...document.querySelectorAll('link[rel="stylesheet"]')].map((l) => l.href), i = /* @__PURE__ */ new Set(), o = (l) => {
149
+ const p = l.className;
150
+ return typeof p == "string" ? p : p?.baseVal || "";
151
151
  };
152
152
  document.querySelectorAll("[class]").forEach((l) => {
153
- i(l).split(/\s+/).slice(0, 5).forEach((d) => {
154
- d && o.add(d);
153
+ o(l).split(/\s+/).slice(0, 5).forEach((p) => {
154
+ p && i.add(p);
155
155
  });
156
156
  });
157
- const r = [...o].slice(0, 200), c = {}, u = [
157
+ const n = [...i].slice(0, 200), c = {}, u = [
158
158
  "jQuery",
159
159
  "$",
160
160
  "React",
@@ -182,12 +182,12 @@ const N = 60, de = (t) => ({
182
182
  for (const l of u)
183
183
  try {
184
184
  if (window[l] !== void 0) {
185
- const d = window[l];
186
- c[l] = typeof d == "function" ? d.fn?.jquery || d.version || "present" : typeof d == "object" ? "present" : String(d).slice(0, 40);
185
+ const p = window[l];
186
+ c[l] = typeof p == "function" ? p.fn?.jquery || p.version || "present" : typeof p == "object" ? "present" : String(p).slice(0, 40);
187
187
  }
188
188
  } catch {
189
189
  }
190
- const m = /* @__PURE__ */ new Set(), h = [
190
+ const d = /* @__PURE__ */ new Set(), m = [
191
191
  "onclick",
192
192
  "onsubmit",
193
193
  "onchange",
@@ -198,109 +198,118 @@ const N = 60, de = (t) => ({
198
198
  "onkeyup",
199
199
  "onkeydown"
200
200
  ];
201
- for (const l of h)
202
- document.querySelectorAll(`[${l}]`).length > 0 && m.add(l);
201
+ for (const l of m)
202
+ document.querySelectorAll(`[${l}]`).length > 0 && d.add(l);
203
203
  return {
204
204
  headings: a,
205
205
  landmarks: e,
206
- dataAttributes: [...s].sort().slice(0, 100),
207
- stylesheets: n.slice(0, 20),
208
- sampleClasses: r,
206
+ dataAttributes: Array.from(s).toSorted().slice(0, 100),
207
+ stylesheets: r.slice(0, 20),
208
+ sampleClasses: n,
209
209
  globals: c,
210
- inlineHandlers: [...m],
210
+ inlineHandlers: [...d],
211
211
  iframeCount: document.querySelectorAll("iframe").length,
212
212
  shadowRootCount: [...document.querySelectorAll("*")].filter((l) => l.shadowRoot).length
213
213
  };
214
- }), we = async (t) => {
215
- const a = t.url(), e = new URL(a).origin, [s, n, o, i, r, c] = await Promise.all([
216
- me(t, e),
217
- he(t),
218
- ge(t),
219
- fe(t),
220
- be(t),
221
- ye(t)
214
+ }), Pe = async (t) => {
215
+ const a = t.url(), e = new URL(a).origin, [s, r, i, o, n, c] = await Promise.all([
216
+ Se(t, e),
217
+ ke(t),
218
+ Ce(t),
219
+ Ie(t),
220
+ Ae(t),
221
+ Ee(t)
222
222
  ]);
223
- return { url: a, links: s, forms: n, buttons: o, scripts: i, meta: r, structure: c };
224
- }, E = (t) => {
223
+ return { url: a, links: s, forms: r, buttons: i, scripts: o, meta: n, structure: c };
224
+ }, _ = (t) => {
225
225
  const a = new URL(t);
226
226
  a.hash = "";
227
- const e = [...a.searchParams.entries()].sort(([n], [o]) => n.localeCompare(o));
227
+ const e = Array.from(a.searchParams.entries()).toSorted(([r], [i]) => r.localeCompare(i));
228
228
  a.search = new URLSearchParams(e).toString();
229
229
  const s = a.toString();
230
230
  return s.endsWith("/") && a.pathname !== "/" ? s.slice(0, -1) : s;
231
- }, Se = (t, a = 2) => `/${new URL(t).pathname.split("/").filter(Boolean).slice(0, a).join("/")}`, xe = (t, a = {}) => {
232
- const e = new URL(t).origin, s = a.sameDomain !== !1, n = a.maxDepth ?? 10, o = [], i = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Set(), u = E(t);
233
- return o.push({ url: t, normalized: u, depth: 0, source: "(start)" }), c.add(u), {
234
- addLinks: (b, p, y) => {
235
- let f = 0;
236
- for (const S of b) {
237
- const x = S.href || S, w = E(x);
238
- if (c.has(w)) continue;
239
- if (c.add(w), s && !x.startsWith(e)) {
240
- r.set(w, "external");
231
+ }, Te = (t, a = 2) => `/${new URL(t).pathname.split("/").filter(Boolean).slice(0, a).join("/")}`, Re = (t, a = {}) => {
232
+ const e = new URL(t).origin, s = a.sameDomain !== !1, r = a.maxDepth ?? 10, i = [], o = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Set(), u = _(t);
233
+ return i.push({ url: t, normalized: u, depth: 0, source: "(start)" }), c.add(u), {
234
+ addLinks: (b, w, h) => {
235
+ let y = 0;
236
+ for (const f of b) {
237
+ const v = f.href || f, x = _(v);
238
+ if (c.has(x)) continue;
239
+ if (c.add(x), s && !v.startsWith(e)) {
240
+ n.set(x, "external");
241
241
  continue;
242
242
  }
243
- if (p + 1 > n) {
244
- r.set(w, "max-depth");
243
+ if (w + 1 > r) {
244
+ n.set(x, "max-depth");
245
245
  continue;
246
246
  }
247
- const M = new URL(x).pathname;
248
- if (/\.(png|jpg|jpeg|gif|svg|ico|css|js|woff2?|ttf|eot|pdf|zip|mp[34])$/i.test(M)) {
249
- r.set(w, "resource");
247
+ const E = new URL(v).pathname;
248
+ if (/\.(png|jpg|jpeg|gif|svg|ico|css|js|woff2?|ttf|eot|pdf|zip|mp[34])$/i.test(E)) {
249
+ n.set(x, "resource");
250
250
  continue;
251
251
  }
252
- if (/^(mailto|tel|javascript):/i.test(x)) {
253
- r.set(w, "scheme");
252
+ if (/^(mailto|tel|javascript):/i.test(v)) {
253
+ n.set(x, "scheme");
254
254
  continue;
255
255
  }
256
- o.push({ url: x, normalized: w, depth: p + 1, source: y }), f++;
256
+ i.push({ url: v, normalized: x, depth: w + 1, source: h }), y++;
257
257
  }
258
- return f;
258
+ return y;
259
259
  },
260
260
  next: () => {
261
- const b = o.shift();
262
- return b && i.set(b.normalized, {
261
+ const b = i.shift();
262
+ return b && o.set(b.normalized, {
263
263
  url: b.url,
264
264
  depth: b.depth,
265
265
  source: b.source
266
266
  }), b;
267
267
  },
268
- skip: (b, p) => {
269
- for (const x of b) {
270
- const w = E(x);
271
- r.set(w, p);
268
+ skip: (b, w) => {
269
+ const h = /* @__PURE__ */ new Set();
270
+ for (const v of b) {
271
+ const x = _(v);
272
+ n.set(x, w), h.add(x);
272
273
  }
273
- const y = new Set(b.map(E)), f = o.length, S = o.filter((x) => !y.has(x.normalized));
274
- return o.length = 0, o.push(...S), f - S.length;
274
+ const y = i.length, f = i.filter((v) => !h.has(v.normalized));
275
+ return i.splice(0, i.length, ...f), y - f.length;
275
276
  },
276
277
  pendingByPrefix: (b = 2) => {
277
- const p = /* @__PURE__ */ new Map();
278
- for (const y of o) {
279
- const f = Se(y.url, b), S = p.get(f) || [];
280
- S.push(y), p.set(f, S);
278
+ const w = /* @__PURE__ */ new Map();
279
+ for (const h of i) {
280
+ const y = Te(h.url, b), f = w.get(y) || [];
281
+ f.push(h), w.set(y, f);
281
282
  }
282
- return p;
283
+ return w;
283
284
  },
284
- size: () => o.length,
285
- visitedCount: () => i.size,
286
- isEmpty: () => o.length === 0,
285
+ size: () => i.length,
286
+ visitedCount: () => o.size,
287
+ isEmpty: () => i.length === 0,
287
288
  summary: () => ({
288
- pending: o.length,
289
- visited: i.size,
290
- skipped: r.size,
289
+ pending: i.length,
290
+ visited: o.size,
291
+ skipped: n.size,
291
292
  seen: c.size
292
293
  }),
293
- visitedUrls: () => [...i.entries()].map(([b, p]) => ({
294
+ visitedUrls: () => [...o.entries()].map(([b, w]) => ({
294
295
  normalized: b,
295
- ...p
296
+ ...w
296
297
  })),
297
- skippedUrls: () => [...r.entries()].map(([b, p]) => ({
298
+ skippedUrls: () => [...n.entries()].map(([b, w]) => ({
298
299
  url: b,
299
- reason: p
300
+ reason: w
300
301
  })),
301
302
  origin: e
302
303
  };
303
- }, Z = {
304
+ }, I = Object.freeze({
305
+ tick: "cooldown:tick",
306
+ visitError: "cooldown:visitError",
307
+ blockCheckError: "cooldown:blockCheckError",
308
+ exhausted: "cooldown:exhausted",
309
+ start: "cooldown:start",
310
+ retry: "cooldown:retry",
311
+ heartbeat: "heartbeat"
312
+ }), re = {
304
313
  baseDelay: 5e3,
305
314
  // 5s initial wait
306
315
  maxDelay: 3e5,
@@ -311,90 +320,101 @@ const N = 60, de = (t) => ({
311
320
  // up to 6 retries (~5m20s total at 2x backoff from 5s)
312
321
  jitter: 0.2
313
322
  // ±20% randomization to avoid thundering herd
314
- }, ve = async (t) => {
323
+ }, De = async (t) => {
315
324
  const a = t.url(), e = await t.evaluate(() => document.body?.innerText?.slice(0, 500)).catch(() => "");
316
325
  if (e.includes("Access Denied")) return "access-denied";
317
326
  if (e.includes("Rate limit") || e.includes("Too many requests")) return "rate-limit";
318
327
  if (e.includes("Please verify you are a human")) return "captcha";
319
328
  if (e.includes("Checking your browser")) return "challenge";
320
329
  if (a.includes("errors.edgesuite.net")) return "akamai-block";
321
- }, Ie = (t, a) => {
330
+ }, Le = (t, a) => {
322
331
  const e = t * a;
323
332
  return t + (Math.random() * 2 - 1) * e;
324
- }, Ce = (t, a) => {
333
+ }, Fe = (t, a) => {
325
334
  const e = a.baseDelay * Math.pow(a.backoffFactor, t), s = Math.min(e, a.maxDelay);
326
- return Math.round(Ie(s, a.jitter));
327
- }, ke = async (t, a, e, s) => {
328
- const n = Date.now(), o = n + t;
329
- let i = 0;
330
- for (; i < t; ) {
331
- const r = t - i, c = Math.min(e, r);
332
- await new Promise((u) => setTimeout(u, c)), i = Date.now() - n, a.emit({
333
- event: "cooldown:tick",
334
- elapsedMs: i,
335
- remainingMs: Math.max(0, o - Date.now()),
335
+ return Math.round(Le(s, a.jitter));
336
+ }, Me = async (t, a, e, s) => {
337
+ const r = Date.now(), i = r + t;
338
+ let o = 0;
339
+ for (; o < t; ) {
340
+ const n = t - o, c = Math.min(e, n);
341
+ await new Promise((u) => setTimeout(u, c)), o = Date.now() - r, a.emit({
342
+ event: I.tick,
343
+ elapsedMs: o,
344
+ remainingMs: Math.max(0, i - Date.now()),
336
345
  totalMs: t,
337
346
  ...s
338
347
  });
339
348
  }
340
- }, Ae = async (t, a, e, s, n, o, i) => {
341
- const r = { ...Z, ...n };
349
+ }, Ne = async (t, a, e, s, r, i, o) => {
350
+ const n = { ...re, ...r };
342
351
  let c = 0;
343
- for (let u = 0; u <= r.maxRetries; u++) {
344
- const m = await t(a, e), h = await o(a);
345
- if (!h)
346
- return { pageData: m, retries: u, totalCooldownMs: c };
347
- if (u >= r.maxRetries)
352
+ for (let u = 0; u <= n.maxRetries; u++) {
353
+ let d;
354
+ try {
355
+ d = await t(a, e);
356
+ } catch (p) {
357
+ throw s.emit({ event: I.visitError, url: e, attempt: u, error: p.message }), p;
358
+ }
359
+ let m;
360
+ try {
361
+ m = await i(a);
362
+ } catch (p) {
363
+ throw s.emit({ event: I.blockCheckError, url: e, attempt: u, error: p.message }), p;
364
+ }
365
+ if (!m)
366
+ return { pageData: d, retries: u, totalCooldownMs: c };
367
+ if (u >= n.maxRetries)
348
368
  return s.emit({
349
- event: "cooldown:exhausted",
369
+ event: I.exhausted,
350
370
  url: e,
351
- reason: h,
371
+ reason: m,
352
372
  attempts: u + 1,
353
373
  totalCooldownMs: c
354
- }), { pageData: m, retries: u, totalCooldownMs: c, blocked: h };
355
- const l = Ce(u, r);
374
+ }), { pageData: d, retries: u, totalCooldownMs: c, blocked: m };
375
+ const l = Fe(u, n);
356
376
  c += l, s.emit({
357
- event: "cooldown:start",
377
+ event: I.start,
358
378
  url: e,
359
- reason: h,
379
+ reason: m,
360
380
  attempt: u + 1,
361
- maxRetries: r.maxRetries,
381
+ maxRetries: n.maxRetries,
362
382
  delayMs: l,
363
383
  totalCooldownMs: c
364
- }), await ke(l, s, i, {
384
+ }), await Me(l, s, o, {
365
385
  url: e,
366
- reason: h,
386
+ reason: m,
367
387
  attempt: u + 1
368
388
  }), s.emit({
369
- event: "cooldown:retry",
389
+ event: I.retry,
370
390
  url: e,
371
391
  attempt: u + 1
372
392
  });
373
393
  }
374
- }, Pe = (t, a, e) => {
394
+ }, $e = (t, a, e) => {
375
395
  const s = setInterval(() => {
376
396
  t.emit({
377
- event: "heartbeat",
397
+ event: I.heartbeat,
378
398
  ...e()
379
399
  });
380
400
  }, a);
381
401
  return {
382
402
  stop: () => clearInterval(s)
383
403
  };
384
- }, q = "site-crawl", Ee = "Browser support is disabled. Call init({ browser: true }) to enable.", Re = (t, a) => {
385
- const e = a.summary(), s = t.map((n) => `${new URL(n.url).pathname} — ${n.meta.title || "(no title)"} [${n.links.length} links, ${n.forms.length} forms, ${n.buttons.length} buttons]`);
404
+ }, K = "site-crawl", Be = "Browser support is disabled. Call init({ browser: true }) to enable.", ze = (t, a) => {
405
+ const e = a.summary(), s = t.map((r) => `${new URL(r.url).pathname} — ${r.meta.title || "(no title)"} [${r.links.length} links, ${r.forms.length} forms, ${r.buttons.length} buttons]`);
386
406
  return [
387
407
  `Crawled ${e.visited} pages, ${e.pending} pending, ${e.skipped} skipped.`,
388
408
  "",
389
409
  "Pages visited:",
390
- ...s.map((n) => ` ${n}`)
410
+ ...s.map((r) => ` ${r}`)
391
411
  ].join(`
392
412
  `);
393
- }, Te = (t, a, e) => {
413
+ }, Oe = (t, a, e) => {
394
414
  const s = [];
395
- for (const [n, o] of t) {
396
- const i = o.slice(0, 5).map((c) => ` ${c.url}`), r = o.length > 5 ? ` ... and ${o.length - 5} more` : "";
397
- s.push(` ${n} (${o.length} URLs):`), s.push(...i), r && s.push(r);
415
+ for (const [r, i] of t) {
416
+ const o = i.slice(0, 5).map((c) => ` ${c.url}`), n = i.length > 5 ? ` ... and ${i.length - 5} more` : "";
417
+ s.push(` ${r} (${i.length} URLs):`), s.push(...o), n && s.push(n);
398
418
  }
399
419
  return [
400
420
  "You are a site crawler deciding which URL branches to explore next.",
@@ -412,7 +432,7 @@ const N = 60, de = (t) => ({
412
432
  "Skip groups that are clearly non-functional (help/support, legal, marketing pages)."
413
433
  ].join(`
414
434
  `);
415
- }, De = Y("crawl_gate", {
435
+ }, Ue = O("crawl_gate", {
416
436
  type: "object",
417
437
  properties: {
418
438
  decisions: {
@@ -439,199 +459,201 @@ const N = 60, de = (t) => ({
439
459
  },
440
460
  required: ["decisions"],
441
461
  additionalProperties: !1
442
- }), $e = async (t, a, e, s) => {
443
- const n = t.pendingByPrefix(2);
444
- if (n.size === 0) return { explore: [], skip: [], decisions: [] };
445
- const o = Re(a, t), i = Te(n, o, e), c = (await U(i, {
462
+ }), _e = async (t, a, e, s) => {
463
+ const r = t.pendingByPrefix(2);
464
+ if (r.size === 0) return { explore: [], skip: [], decisions: [] };
465
+ const i = ze(a, t), o = Oe(r, i, e), c = (await W(o, {
446
466
  ...s,
447
- response_format: De,
467
+ responseFormat: Ue,
448
468
  temperature: 0.2
449
- }))?.decisions || [], u = [], m = [];
450
- for (const h of c) {
451
- const l = n.get(h.prefix);
469
+ }))?.decisions || [], u = [], d = [];
470
+ for (const m of c) {
471
+ const l = r.get(m.prefix);
452
472
  if (l)
453
- if (h.action === "skip")
454
- m.push(...l.map((d) => d.url));
473
+ if (m.action === "skip")
474
+ d.push(...l.map((p) => p.url));
455
475
  else {
456
- const d = Math.min(h.maxFromGroup || 3, 5, l.length);
457
- u.push(...l.slice(0, d).map((g) => g.url)), l.length > d && m.push(...l.slice(d).map((g) => g.url));
476
+ const p = Math.min(m.maxFromGroup || 3, 5, l.length);
477
+ u.push(...l.slice(0, p).map((g) => g.url)), l.length > p && d.push(...l.slice(p).map((g) => g.url));
458
478
  }
459
479
  }
460
- for (const [h, l] of n)
461
- c.some((g) => g.prefix === h) || (u.push(l[0].url), l.length > 1 && m.push(...l.slice(1).map((g) => g.url)));
462
- return { explore: u, skip: m, decisions: c };
463
- }, Le = async (t, a, e, s, n, o) => {
480
+ for (const [m, l] of r)
481
+ c.some((g) => g.prefix === m) || (u.push(l[0].url), l.length > 1 && d.push(...l.slice(1).map((g) => g.url)));
482
+ return { explore: u, skip: d, decisions: c };
483
+ }, je = async (t, a, e, s, r, i) => {
464
484
  await t.goto(a, { waitUntil: "domcontentloaded", timeout: 3e4 }), await t.waitForTimeout(1500);
465
- const i = await we(t);
466
- if (n.screenshots) {
485
+ const o = await Pe(t);
486
+ if (r.screenshots) {
467
487
  const c = `${s.dir}/crawl-${Date.now()}.png`;
468
- if (await t.screenshot({ path: c, fullPage: !1 }), s.track(c), n.imageShrink) {
469
- const u = await ie(c, {
470
- ...n.imageShrink,
488
+ if (await t.screenshot({ path: c, fullPage: !1 }), s.track(c), r.imageShrink) {
489
+ const u = await he(c, {
490
+ ...r.imageShrink,
471
491
  outputDir: s.dir
472
492
  });
473
- s.track(u.path), i.screenshot = u.path;
493
+ s.track(u.path), o.screenshot = u.path;
474
494
  } else
475
- i.screenshot = c;
495
+ o.screenshot = c;
476
496
  }
477
- const r = e.responses();
478
- return i.apis = r.filter((c) => {
497
+ const n = e.responses();
498
+ return o.apis = n.filter((c) => {
479
499
  const u = c.url();
480
500
  return u.includes("/api/") || u.includes("/v1/") || u.includes("/v2/") || u.includes("/graphql");
481
501
  }).map((c) => ({
482
502
  url: c.url(),
483
503
  status: c.status(),
484
504
  method: c.request().method()
485
- })), e.clear(), i;
486
- }, Fe = (t) => {
505
+ })), e.clear(), o;
506
+ }, qe = (t) => {
487
507
  const a = {};
488
508
  for (const e of t) {
489
- const s = e.links.filter((n) => n.isSameDomain && !n.isAnchor).map((n) => n.href);
509
+ const s = e.links.filter((r) => r.isSameDomain && !r.isAnchor).map((r) => r.href);
490
510
  a[e.url] = [...new Set(s)];
491
511
  }
492
512
  return a;
493
- }, Me = (t) => {
513
+ }, Ve = (t) => {
494
514
  const a = /* @__PURE__ */ new Map();
495
515
  for (const e of t)
496
516
  for (const s of e.apis || []) {
497
- const n = `${s.method} ${new URL(s.url).pathname}`;
498
- a.has(n) ? a.get(n).seenOn.push(e.url) : a.set(n, { ...s, seenOn: [e.url] });
517
+ const r = `${s.method} ${new URL(s.url).pathname}`;
518
+ a.has(r) ? a.get(r).seenOn.push(e.url) : a.set(r, { ...s, seenOn: [e.url] });
499
519
  }
500
520
  return [...a.values()];
501
- }, St = async (t, a = {}) => {
502
- if (!re()) throw new Error(Ee);
503
- const e = $(q, a), s = L(q, e.onProgress, e);
521
+ }, We = async (t, a = {}) => {
522
+ if (!de()) throw new Error(Be);
523
+ const e = B(K, a), s = z(K, e.onProgress, e);
504
524
  s.start();
505
- const n = await X(e, {
525
+ const r = await se(e, {
506
526
  maxPages: 20,
507
527
  maxDepth: 5,
508
528
  sameDomain: !0,
509
529
  gateInterval: 5,
510
530
  headless: !0,
511
531
  screenshots: !1,
512
- errorPosture: "resilient",
513
- imageShrink: B(de),
532
+ errorPosture: q.resilient,
533
+ imageShrink: V(xe),
514
534
  heartbeatInterval: 1e3
515
- }), o = { ...Z, ...e.cooldown }, i = e.isBlocked || ve, r = xe(t, {
516
- sameDomain: n.sameDomain,
517
- maxDepth: n.maxDepth
518
- }), c = await oe("site-crawl", e.outputDir), m = await (e.browserEngine ? j[e.browserEngine] : j.chromium).launch({
519
- headless: n.headless,
535
+ }), i = { ...re, ...e.cooldown }, o = e.isBlocked || De, n = Re(t, {
536
+ sameDomain: r.sameDomain,
537
+ maxDepth: r.maxDepth
538
+ }), c = await me("site-crawl", e.outputDir), d = await (e.browserEngine ? J[e.browserEngine] : J.chromium).launch({
539
+ headless: r.headless,
520
540
  ...e.launchOptions
521
541
  });
522
- s.emit({ event: "browser", headless: n.headless });
542
+ s.emit({ event: "browser", headless: r.headless });
523
543
  try {
524
- const h = await m.newContext(e.contextOptions);
544
+ const m = await d.newContext(e.contextOptions);
525
545
  if (e.setup) {
526
- const p = await h.newPage();
527
- await e.setup(p), await p.close(), s.emit({ event: "setup" });
546
+ const h = await m.newPage();
547
+ await e.setup(h), await h.close(), s.emit({ event: "setup" });
528
548
  }
529
- const l = await h.newPage(), d = (() => {
530
- const p = [];
531
- return l.on("response", (y) => p.push(y)), {
532
- responses: () => [...p],
549
+ const l = await m.newPage(), p = (() => {
550
+ const h = [];
551
+ return l.on("response", (y) => h.push(y)), {
552
+ responses: () => [...h],
533
553
  clear: () => {
534
- p.length = 0;
554
+ h.length = 0;
535
555
  }
536
556
  };
537
557
  })(), g = [];
538
- let v = 0, C = t;
539
- const P = Pe(s, n.heartbeatInterval, () => ({
558
+ let S = 0, A = t;
559
+ const T = $e(s, r.heartbeatInterval, () => ({
540
560
  pagesVisited: g.length,
541
- maxPages: n.maxPages,
542
- pending: r.size(),
543
- currentUrl: C,
544
- ...r.summary()
545
- }));
561
+ maxPages: r.maxPages,
562
+ pending: n.size(),
563
+ currentUrl: A,
564
+ ...n.summary()
565
+ })), F = s.batch(r.maxPages);
546
566
  try {
547
- for (; !r.isEmpty() && g.length < n.maxPages; ) {
548
- if (g.length > 0 && g.length % n.gateInterval === 0 && r.size() > 0) {
549
- const y = n.maxPages - g.length;
550
- s.emit({ event: "gate:start", pending: r.size(), budget: y });
551
- const f = await $e(r, g, y, e);
552
- v++, f.skip.length > 0 && r.skip(f.skip, "llm-gate"), s.emit({
567
+ for (; !n.isEmpty() && g.length < r.maxPages; ) {
568
+ if (g.length > 0 && g.length % r.gateInterval === 0 && n.size() > 0) {
569
+ const y = r.maxPages - g.length;
570
+ s.emit({ event: "gate:start", pending: n.size(), budget: y });
571
+ const f = await _e(n, g, y, e);
572
+ S++, f.skip.length > 0 && n.skip(f.skip, "llm-gate"), s.emit({
553
573
  event: "gate:complete",
554
574
  explored: f.explore.length,
555
575
  skipped: f.skip.length,
556
576
  decisions: f.decisions.length
557
577
  });
558
578
  }
559
- const p = r.next();
560
- if (!p) break;
561
- C = p.url, s.emit({
579
+ const h = n.next();
580
+ if (!h) break;
581
+ A = h.url, s.emit({
562
582
  event: "page:start",
563
- url: p.url,
564
- depth: p.depth,
583
+ url: h.url,
584
+ depth: h.depth,
565
585
  pageNumber: g.length + 1,
566
- maxPages: n.maxPages
586
+ maxPages: r.maxPages
567
587
  });
568
588
  try {
569
- const y = (w, M) => Le(w, M, d, c, n, s), { pageData: f, blocked: S } = await Ae(
589
+ const y = (E, ue) => je(E, ue, p, c, r, s), { pageData: f, blocked: v } = await Ne(
570
590
  y,
571
591
  l,
572
- p.url,
592
+ h.url,
573
593
  s,
574
- o,
575
594
  i,
576
- n.heartbeatInterval
595
+ o,
596
+ r.heartbeatInterval
577
597
  );
578
- f.depth = p.depth, f.source = p.source, S && (f.blocked = S), g.push(f);
579
- const x = S ? 0 : r.addLinks(
580
- f.links.filter((w) => w.isSameDomain && !w.isAnchor),
581
- p.depth,
582
- p.url
598
+ f.depth = h.depth, f.source = h.source, v && (f.blocked = v), g.push(f);
599
+ const x = v ? 0 : n.addLinks(
600
+ f.links.filter((E) => E.isSameDomain && !E.isAnchor),
601
+ h.depth,
602
+ h.url
583
603
  );
584
604
  s.emit({
585
605
  event: "page:complete",
586
- url: p.url,
606
+ url: h.url,
587
607
  links: f.links.length,
588
608
  forms: f.forms.length,
589
609
  newUrls: x,
590
- pending: r.size(),
591
- blocked: S
592
- });
610
+ pending: n.size(),
611
+ blocked: v
612
+ }), F(1);
593
613
  } catch (y) {
594
- if (s.emit({ event: "page:error", url: p.url, error: y.message }), n.errorPosture === "strict") throw y;
614
+ if (s.emit({ event: "page:error", url: h.url, error: y.message }), r.errorPosture === q.strict) throw y;
595
615
  }
596
616
  }
597
617
  } finally {
598
- P.stop();
618
+ T.stop();
599
619
  }
600
620
  if (await l.close(), e.teardown) {
601
621
  try {
602
- const p = await h.newPage();
603
- await e.teardown(p), await p.close();
622
+ const h = await m.newPage();
623
+ await e.teardown(h), await h.close();
604
624
  } catch {
605
625
  }
606
626
  s.emit({ event: "teardown" });
607
627
  }
608
- await h.close();
609
- const z = Fe(g), F = Me(g), b = {
628
+ await m.close();
629
+ const H = qe(g), b = Ve(g), w = {
610
630
  pages: g,
611
- graph: z,
612
- apis: F,
613
- frontier: r.summary(),
614
- skipped: r.skippedUrls(),
615
- gateCallCount: v,
631
+ graph: H,
632
+ apis: b,
633
+ frontier: n.summary(),
634
+ skipped: n.skippedUrls(),
635
+ gateCallCount: S,
616
636
  cleanup: () => c.cleanup()
617
637
  };
618
638
  return s.complete({
619
- outcome: "success",
639
+ outcome: L.success,
620
640
  pagesVisited: g.length,
621
- apisFound: F.length,
622
- gateCallCount: v,
623
- ...r.summary()
624
- }), b;
625
- } catch (h) {
626
- throw s.error(h, { pagesVisited: 0 }), h;
641
+ apisFound: b.length,
642
+ gateCallCount: S,
643
+ ...n.summary()
644
+ }), w;
645
+ } catch (m) {
646
+ throw s.error(m, { pagesVisited: 0 }), m;
627
647
  } finally {
628
- await m.close();
648
+ await d.close();
629
649
  }
630
- }, ee = 1, R = 20, T = 5, Ne = 0.5, _e = 5, V = 8e3, _ = 5, D = {
650
+ };
651
+ We.knownTexts = [];
652
+ const ne = 1, M = 20, N = 5, Ge = 0.5, He = 5, X = 8e3, j = 5, $ = {
631
653
  INDIVIDUAL: "individual",
632
654
  BULK: "bulk"
633
- }, Be = (t) => t === void 0 ? R : typeof t == "number" ? t : { small: 10, med: R, large: 40 }[t] ?? R, Ue = (t) => t === void 0 ? T : typeof t == "number" ? t : { low: 2, med: T, high: 10 }[t] ?? T;
634
- function Oe(t, a) {
655
+ }, Je = (t) => t === void 0 ? M : typeof t == "number" ? t : { small: 10, med: M, large: 40 }[t] ?? M, Ke = (t) => t === void 0 ? N : typeof t == "number" ? t : { low: 2, med: N, high: 10 }[t] ?? N;
656
+ function Xe(t, a) {
635
657
  const e = [];
636
658
  for (let s = 0; s < t.length; s += a)
637
659
  e.push({
@@ -641,127 +663,115 @@ function Oe(t, a) {
641
663
  });
642
664
  return e;
643
665
  }
644
- function W(t, a, e, s, n, o) {
666
+ function Q(t, a, e, s, r, i) {
645
667
  return {
646
668
  chunkIndex: t.index,
647
669
  totalChunks: a,
648
670
  itemsInChunk: t.items.length,
649
671
  totalItems: e,
650
672
  status: s,
651
- bulkSize: n.bulkSize,
652
- maxConcurrency: n.maxConcurrency,
653
- processingMode: o,
673
+ bulkSize: r.bulkSize,
674
+ maxConcurrency: r.maxConcurrency,
675
+ processingMode: i,
654
676
  parallelMode: !0
655
677
  };
656
678
  }
657
- async function ze(t, a, e, s, n, o = {}) {
679
+ async function Qe(t, a, e, s, r, i = {}) {
658
680
  try {
659
- const i = e.map((m) => ae(m(t))).filter(Boolean).join(`
681
+ const o = e.map((d) => ce(d(t))).filter(Boolean).join(`
660
682
 
661
- `), r = [a, i].filter(Boolean).join(`
683
+ `), n = [a, o].filter(Boolean).join(`
662
684
 
663
- `), c = Qe(r, t, s, n === "files"), u = await U(c, {
664
- ...o,
665
- response_format: {
666
- type: "json_schema",
667
- json_schema: {
668
- name: "arch_result",
669
- schema: Ke
670
- }
671
- }
685
+ `), c = ct(n, t, s, r === "files"), u = await W(c, {
686
+ ...i,
687
+ responseFormat: O("arch_result", nt)
672
688
  });
673
689
  return { item: t, ...u, error: void 0 };
674
- } catch (i) {
675
- return { item: t, passed: !1, reason: `Analysis failed: ${i.message}`, error: i };
690
+ } catch (o) {
691
+ return { item: t, passed: !1, reason: `Analysis failed: ${o.message}`, error: o };
676
692
  }
677
693
  }
678
- function je(t, a, e, s) {
679
- const n = [], o = [];
680
- let i = s;
681
- for (const r of t)
682
- if (n.push(r), r.passed || (i++, o.push(r.error || new Error(r.reason))), !a && i >= e)
694
+ function Ye(t, a, e, s) {
695
+ const r = [], i = [];
696
+ let o = s;
697
+ for (const n of t)
698
+ if (r.push(n), n.passed || (o++, i.push(n.error || new Error(n.reason))), !a && o >= e)
683
699
  break;
684
700
  return {
685
- results: n,
686
- errors: o,
687
- failures: i,
688
- shouldStop: !a && i >= e
701
+ results: r,
702
+ errors: i,
703
+ failures: o,
704
+ shouldStop: !a && o >= e
689
705
  };
690
706
  }
691
- function A(t, a, e, s) {
707
+ function D(t, a, e, s) {
692
708
  t && t(a, e, s);
693
709
  }
694
- async function te(t, a, e, s, n, o = {}) {
695
- A(s, t, void 0, {
696
- ...n,
697
- status: k.start
710
+ async function oe(t, a, e, s, r, i = {}) {
711
+ D(s, t, void 0, {
712
+ ...r,
713
+ status: R.start
698
714
  });
699
715
  try {
700
- const i = Ze(a, t, e), r = {
701
- ...o,
702
- responseFormat: {
703
- type: "json_schema",
704
- json_schema: {
705
- name: "arch_bulk_result",
706
- schema: Xe
707
- }
708
- },
709
- onProgress: Q(o.onProgress, "reduce")
710
- }, c = await ce(t, i, r), u = c.results || c;
711
- let m = [];
712
- Array.isArray(u) ? m = u : m = t.map((d) => ({
713
- path: d,
716
+ const o = lt(a, t, e), n = {
717
+ ...i,
718
+ responseFormat: O("arch_bulk_result", ot),
719
+ onProgress: ae(s, "reduce")
720
+ }, c = await ge(t, o, n), u = c.results || c;
721
+ let d = [];
722
+ Array.isArray(u) ? d = u : d = t.map((p) => ({
723
+ path: p,
714
724
  passed: !1,
715
725
  reason: "Invalid response format"
716
726
  }));
717
- const h = m.filter((d) => !d.passed).length, l = m.length - h;
718
- return A(
727
+ const m = d.filter((p) => !p.passed).length, l = d.length - m;
728
+ return D(
719
729
  s,
720
730
  t,
721
- h > 0 ? new Error(`${h} items failed`) : void 0,
731
+ m > 0 ? new Error(`${m} items failed`) : void 0,
722
732
  {
723
- ...n,
724
- status: k.complete,
733
+ ...r,
734
+ status: R.complete,
725
735
  passed: l,
726
- failed: h
736
+ failed: m
727
737
  }
728
- ), m;
729
- } catch (i) {
730
- const r = t.map((c) => ({
738
+ ), d;
739
+ } catch (o) {
740
+ const n = t.map((c) => ({
731
741
  path: c,
732
742
  passed: !1,
733
- reason: `Processing error: ${i.message}`
743
+ reason: `Processing error: ${o.message}`
734
744
  }));
735
- return A(s, t, i, {
736
- ...n,
737
- status: k.error
738
- }), r;
745
+ return D(s, t, o, {
746
+ ...r,
747
+ status: R.error
748
+ }), n;
739
749
  }
740
750
  }
741
- function qe(t, a) {
742
- const e = a.filter((r) => r.passed).length, s = a.length - e, n = s === 0, o = a.length < t.length, i = a.filter((r) => !r.passed);
751
+ function Ze(t, a) {
752
+ const e = a.filter((n) => n.passed).length, s = a.length - e, r = s === 0, i = a.length < t.length, o = a.filter((n) => !n.passed);
743
753
  return {
744
754
  passed: e,
745
755
  failed: s,
746
- allPassed: n,
747
- stoppedEarly: o,
748
- failures: i,
756
+ allPassed: r,
757
+ stoppedEarly: i,
758
+ failures: o,
749
759
  total: t.length,
750
760
  processed: a.length
751
761
  };
752
762
  }
753
- function Ve(t, a, e) {
763
+ function et(t, a, e) {
754
764
  if (t.allPassed)
755
765
  return `All ${t.processed}/${t.total} items satisfy: ${a}`;
756
- const s = t.failures.slice(0, _).map((o) => ` • ${o.item}: ${o.reason || "Failed"}`).join(`
757
- `), n = t.failures.length > _ ? `
758
- ... and ${t.failures.length - _} more failures` : "";
759
- return `${t.failed}/${t.processed} items failed: ${a}${t.stoppedEarly && e !== ee ? ` (stopped after ${e} failures)` : ""}
766
+ const s = t.failures.slice(0, j).map((i) => ` • ${i.item}: ${i.reason || "Failed"}`).join(`
767
+ `), r = t.failures.length > j ? `
768
+ ... and ${t.failures.length - j} more failures` : "";
769
+ return `${t.failed}/${t.processed} items failed: ${a}${t.stoppedEarly && e !== ne ? ` (stopped after ${e} failures)` : ""}
760
770
 
761
771
  Failures:
762
- ${s}${n}`;
772
+ ${s}${r}`;
763
773
  }
764
- function We(t, a) {
774
+ function tt(t, a) {
765
775
  return {
766
776
  passed: t.allPassed,
767
777
  message: a,
@@ -774,24 +784,24 @@ function We(t, a) {
774
784
  }
775
785
  };
776
786
  }
777
- function Ge(t, a, e, s) {
778
- const n = a || e.length > 0 || s <= _e;
787
+ function st(t, a, e, s) {
788
+ const r = a || e.length > 0 || s <= He;
779
789
  return {
780
- mode: n ? D.INDIVIDUAL : D.BULK,
781
- batchSize: n ? t.maxConcurrency : t.bulkSize,
782
- processor: n ? (o, i, r) => se(o, i, r) : (o, i, r) => te(
783
- o.items,
784
- i,
785
- r.description,
786
- r.onProgress,
787
- r.metadata
790
+ mode: r ? $.INDIVIDUAL : $.BULK,
791
+ batchSize: r ? t.maxConcurrency : t.bulkSize,
792
+ processor: r ? (i, o, n) => ie(i, o, n) : (i, o, n) => oe(
793
+ i.items,
794
+ o,
795
+ n.description,
796
+ n.onProgress,
797
+ n.metadata
788
798
  )
789
799
  };
790
800
  }
791
- async function se(t, a, e) {
801
+ function ie(t, a, e) {
792
802
  const s = t.items.map(
793
- (n) => ze(
794
- n,
803
+ (r) => Qe(
804
+ r,
795
805
  a,
796
806
  e.itemContextFns,
797
807
  e.description,
@@ -799,11 +809,11 @@ async function se(t, a, e) {
799
809
  e.runConfig
800
810
  )
801
811
  );
802
- return await Promise.all(s);
812
+ return Promise.all(s);
803
813
  }
804
- function He(t, a, e) {
805
- if (a === D.INDIVIDUAL) {
806
- const { results: s, errors: n, failures: o, shouldStop: i } = je(
814
+ function at(t, a, e) {
815
+ if (a === $.INDIVIDUAL) {
816
+ const { results: s, errors: r, failures: i, shouldStop: o } = Ye(
807
817
  t,
808
818
  e.isCoverageTest,
809
819
  e.maxFailures,
@@ -811,19 +821,19 @@ function He(t, a, e) {
811
821
  );
812
822
  return {
813
823
  results: s,
814
- errors: n,
815
- failures: o,
816
- shouldStop: i,
824
+ errors: r,
825
+ failures: i,
826
+ shouldStop: o,
817
827
  progressData: {
818
- passed: s.filter((r) => r.passed).length,
819
- failed: n.length
828
+ passed: s.filter((n) => n.passed).length,
829
+ failed: r.length
820
830
  }
821
831
  };
822
832
  } else {
823
- const s = t.map((n) => ({
824
- item: n.path,
825
- passed: n.passed,
826
- reason: n.reason
833
+ const s = t.map((r) => ({
834
+ item: r.path,
835
+ passed: r.passed,
836
+ reason: r.reason
827
837
  }));
828
838
  return {
829
839
  results: s,
@@ -831,72 +841,72 @@ function He(t, a, e) {
831
841
  failures: e.currentFailures || 0,
832
842
  shouldStop: !1,
833
843
  progressData: {
834
- passed: s.filter((n) => n.passed).length,
835
- failed: s.filter((n) => !n.passed).length
844
+ passed: s.filter((r) => r.passed).length,
845
+ failed: s.filter((r) => !r.passed).length
836
846
  }
837
847
  };
838
848
  }
839
849
  }
840
- async function Je(t, a, e, s) {
841
- const n = Oe(t, e.batchSize), o = [];
842
- let i = 0;
843
- for (const r of n) {
844
- if (!s.isCoverageTest && i >= s.maxFailures)
850
+ async function rt(t, a, e, s) {
851
+ const r = Xe(t, e.batchSize), i = [];
852
+ let o = 0;
853
+ for (const n of r) {
854
+ if (!s.isCoverageTest && o >= s.maxFailures)
845
855
  break;
846
- const c = W(
847
- r,
848
- n.length,
856
+ const c = Q(
857
+ n,
858
+ r.length,
849
859
  t.length,
850
- k.start,
860
+ R.start,
851
861
  s,
852
862
  e.mode
853
863
  );
854
- A(s.onChunkProcessed, r.items, void 0, c);
864
+ D(s.onChunkProcessed, n.items, void 0, c);
855
865
  let u;
856
- e.mode === D.INDIVIDUAL ? u = await se(r, a, {
866
+ e.mode === $.INDIVIDUAL ? u = await ie(n, a, {
857
867
  itemContextFns: s.itemContextFns,
858
868
  description: s.description,
859
869
  targetType: s.targetType
860
- }) : u = await te(
861
- r.items,
870
+ }) : u = await oe(
871
+ n.items,
862
872
  a,
863
873
  s.description,
864
874
  s.onChunkProcessed,
865
875
  c,
866
876
  s.runConfig
867
877
  );
868
- const m = He(u, e.mode, {
878
+ const d = at(u, e.mode, {
869
879
  ...s,
870
- currentFailures: i
880
+ currentFailures: o
871
881
  });
872
- if (o.push(...m.results), i = m.failures, A(
882
+ if (i.push(...d.results), o = d.failures, D(
873
883
  s.onChunkProcessed,
874
- r.items,
875
- m.errors.length > 0 ? m.errors[0] : void 0,
884
+ n.items,
885
+ d.errors.length > 0 ? d.errors[0] : void 0,
876
886
  {
877
- ...W(
878
- r,
879
- n.length,
887
+ ...Q(
888
+ n,
889
+ r.length,
880
890
  t.length,
881
- k.complete,
891
+ R.complete,
882
892
  s,
883
893
  e.mode
884
894
  ),
885
- ...m.progressData
895
+ ...d.progressData
886
896
  }
887
- ), m.shouldStop)
897
+ ), d.shouldStop)
888
898
  break;
889
899
  }
890
- return o;
900
+ return i;
891
901
  }
892
- const Ke = {
902
+ const nt = {
893
903
  type: "object",
894
904
  properties: {
895
905
  passed: { type: "boolean" },
896
906
  reason: { type: "string" }
897
907
  },
898
908
  required: ["passed", "reason"]
899
- }, Xe = {
909
+ }, ot = {
900
910
  type: "object",
901
911
  properties: {
902
912
  results: {
@@ -914,61 +924,60 @@ const Ke = {
914
924
  },
915
925
  required: ["results"]
916
926
  };
917
- function ae(t) {
927
+ function ce(t) {
918
928
  switch (t.type) {
919
929
  case "file":
920
- return I.existsSync(t.filePath) ? `<${t.name}>
921
- ${I.readFileSync(t.filePath, "utf8")}
922
- </${t.name}>` : "";
930
+ return k.existsSync(t.filePath) ? C(k.readFileSync(t.filePath, "utf8"), { tag: t.name }) : "";
923
931
  case "json": {
924
- if (!I.existsSync(t.filePath)) return "";
925
- const a = JSON.parse(I.readFileSync(t.filePath, "utf8"));
926
- return `<${t.name}>
927
- ${JSON.stringify(a, void 0, 2)}
928
- </${t.name}>`;
932
+ if (!k.existsSync(t.filePath)) return "";
933
+ const a = JSON.parse(k.readFileSync(t.filePath, "utf8"));
934
+ return C(JSON.stringify(a, void 0, 2), { tag: t.name });
929
935
  }
930
936
  case "data": {
931
937
  const a = typeof t.data == "string" ? t.data : JSON.stringify(t.data, void 0, 2);
932
- return `<${t.name}>
933
- ${a}
934
- </${t.name}>`;
938
+ return C(a, { tag: t.name });
935
939
  }
936
940
  default:
937
941
  return "";
938
942
  }
939
943
  }
940
- function Ye(t) {
941
- if (!I.existsSync(t)) return "Item does not exist";
942
- if (I.statSync(t).isDirectory())
943
- return I.readdirSync(t).join(", ");
944
+ function it(t) {
945
+ if (!k.existsSync(t)) return "Item does not exist";
946
+ if (k.statSync(t).isDirectory())
947
+ return k.readdirSync(t).join(", ");
944
948
  {
945
- const e = I.readFileSync(t, "utf8");
946
- return e.length > V ? `${e.substring(0, V)}
949
+ const e = k.readFileSync(t, "utf8");
950
+ return e.length > X ? `${e.substring(0, X)}
947
951
  ... (truncated)` : e;
948
952
  }
949
953
  }
950
- function Qe(t, a, e, s) {
951
- const n = Ye(a);
952
- return `${t}
953
- Analyze this ${s ? "file" : "directory"}: ${a}
954
-
955
- Content:
956
- ${n}
957
-
958
- Does it satisfy: "${e}"?
954
+ function ct(t, a, e, s) {
955
+ const r = it(a);
956
+ return [
957
+ t,
958
+ `Analyze this ${s ? "file" : "directory"}: ${a}`,
959
+ C(r, { tag: "content" }),
960
+ C(e, { tag: "description" }),
961
+ 'Return JSON with "passed" (boolean) and "reason" (string).'
962
+ ].filter(Boolean).join(`
959
963
 
960
- Return JSON with "passed" (boolean) and "reason" (string).`;
964
+ `);
961
965
  }
962
- function Ze(t, a, e) {
963
- return `${t}
964
- Analyze each item and determine if it satisfies: "${e}"
965
- Items: ${a.join(", ")}
966
+ function lt(t, a, e) {
967
+ return [
968
+ t,
969
+ "Analyze each item and determine if it satisfies the given description.",
970
+ C(e, { tag: "description" }),
971
+ C(a.join(`
972
+ `), { tag: "items" }),
973
+ 'Return JSON with "results" array containing objects with "path", "passed" (boolean), and "reason" (string).'
974
+ ].filter(Boolean).join(`
966
975
 
967
- Return JSON with "results" array containing objects with "path", "passed" (boolean), and "reason" (string).`;
976
+ `);
968
977
  }
969
- class et {
978
+ class ut {
970
979
  constructor(a, e = {}) {
971
- this.target = a, this.options = e, this.contexts = [], this.itemContextFns = [], this.maxFailures = e.maxFailures || ee, this.bulkSize = e.bulkSize || R, this.maxConcurrency = e.maxConcurrency || T, this.onChunkProcessed = void 0, this.description = void 0, this.threshold = void 0, this.isCoverageTest = !1;
980
+ this.target = a, this.options = e, this.contexts = [], this.itemContextFns = [], this.maxFailures = e.maxFailures || ne, this.bulkSize = e.bulkSize || M, this.maxConcurrency = e.maxConcurrency || N, this.onChunkProcessed = void 0, this.description = void 0, this.threshold = void 0, this.isCoverageTest = !1;
972
981
  }
973
982
  withContext(a) {
974
983
  return this.contexts.push(a), this;
@@ -981,30 +990,30 @@ class et {
981
990
  return this.description = a, this;
982
991
  }
983
992
  // Set up for a coverage test
984
- coverage(a = Ne) {
993
+ coverage(a = Ge) {
985
994
  return this.threshold = a, this.isCoverageTest = !0, this;
986
995
  }
987
996
  // Start processing - this is the fluent terminator
988
997
  async start() {
989
- const a = $("ai-arch-expect", this.options), e = L("ai-arch-expect", a.onProgress, a);
990
- e.start();
998
+ const a = B("ai-arch-expect", this.options), e = z("ai-arch-expect", a.onProgress, a);
999
+ e.start(), e.emit({ event: P.input, value: this.description });
991
1000
  try {
992
1001
  if (!this.description)
993
1002
  throw new Error("Must call satisfies() before start()");
994
- const s = await this.target.resolve(), n = this.contexts.map(ae).filter(Boolean).join(`
1003
+ const s = await this.target.resolve(), r = this.contexts.map(ce).filter(Boolean).join(`
995
1004
 
996
- `), o = Ge(
1005
+ `), i = st(
997
1006
  this,
998
1007
  this.onChunkProcessed,
999
1008
  this.itemContextFns,
1000
1009
  s.length
1001
- ), { bulkSize: i, maxConcurrency: r, maxFailures: c } = await X(a, {
1002
- bulkSize: B(Be),
1003
- maxConcurrency: B(Ue),
1010
+ ), { bulkSize: o, maxConcurrency: n, maxFailures: c } = await se(a, {
1011
+ bulkSize: V(Je),
1012
+ maxConcurrency: V(Ke),
1004
1013
  maxFailures: this.maxFailures
1005
1014
  }), u = {
1006
- bulkSize: i,
1007
- maxConcurrency: r,
1015
+ bulkSize: o,
1016
+ maxConcurrency: n,
1008
1017
  description: this.description,
1009
1018
  onChunkProcessed: this.onChunkProcessed,
1010
1019
  itemContextFns: this.itemContextFns,
@@ -1012,33 +1021,39 @@ class et {
1012
1021
  maxFailures: c,
1013
1022
  isCoverageTest: this.isCoverageTest,
1014
1023
  runConfig: a
1015
- }, m = e.batch(s.length), h = await Je(s, n, o, u);
1016
- if (m(h.length), this.isCoverageTest) {
1017
- const d = h.filter((P) => P.passed).length, g = s.length > 0 ? d / s.length : 0, v = g >= this.threshold, C = `Coverage: ${d}/${s.length} (${(g * 100).toFixed(1)}%) - ${v ? "meets" : "below"} ${(this.threshold * 100).toFixed(1)}% threshold`;
1018
- if (!v)
1019
- throw new Error(C);
1020
- return e.complete({ outcome: "success", coverage: g, total: s.length }), { passed: v, coverage: g, message: C };
1024
+ }, d = e.batch(s.length), m = await rt(s, r, i, u);
1025
+ if (d(m.length), this.isCoverageTest) {
1026
+ const p = m.filter((F) => F.passed).length, g = s.length > 0 ? p / s.length : 0, S = g >= this.threshold, A = `Coverage: ${p}/${s.length} (${(g * 100).toFixed(1)}%) - ${S ? "meets" : "below"} ${(this.threshold * 100).toFixed(1)}% threshold`;
1027
+ if (!S)
1028
+ throw new Error(A);
1029
+ const T = { passed: S, coverage: g, message: A };
1030
+ return e.emit({ event: P.output, value: T }), e.complete({ outcome: L.success, coverage: g, total: s.length }), T;
1021
1031
  }
1022
- const l = this.summarize(s, h);
1023
- return e.complete({ outcome: "success", total: s.length, passed: l.details.passed }), l;
1032
+ const l = this.summarize(s, m);
1033
+ return e.emit({ event: P.output, value: l }), e.complete({
1034
+ outcome: L.success,
1035
+ total: s.length,
1036
+ passed: l.details.passed
1037
+ }), l;
1024
1038
  } catch (s) {
1025
1039
  throw e.error(s), s;
1026
1040
  }
1027
1041
  }
1028
1042
  summarize(a, e) {
1029
- const s = qe(a, e), n = Ve(s, this.description, this.maxFailures);
1043
+ const s = Ze(a, e), r = et(s, this.description, this.maxFailures);
1030
1044
  if (!s.allPassed)
1031
- throw new Error(n);
1032
- return We(s, n);
1045
+ throw new Error(r);
1046
+ return tt(s, r);
1033
1047
  }
1034
1048
  }
1035
- function xt(t, a = {}) {
1036
- return new et(t, a);
1049
+ function pt(t, a = {}) {
1050
+ return new ut(t, a);
1037
1051
  }
1038
- function vt() {
1052
+ pt.knownTexts = [];
1053
+ function Dt() {
1039
1054
  return console.warn("scanJS is not available in browser environment"), Promise.resolve({});
1040
1055
  }
1041
- const G = {
1056
+ const Y = {
1042
1057
  name: "test_analysis_result",
1043
1058
  schema: {
1044
1059
  type: "object",
@@ -1059,14 +1074,19 @@ const G = {
1059
1074
  required: ["hasIssues", "issues"],
1060
1075
  additionalProperties: !1
1061
1076
  }
1062
- }, H = "test";
1063
- async function tt(t, a, e = {}) {
1064
- const s = $(H, e), n = L(H, s.onProgress, s);
1065
- n.start();
1077
+ }, Z = "test";
1078
+ async function le(t, a, e) {
1079
+ [a, e] = fe(a, e);
1080
+ const { text: s, context: r } = be(a, []), i = B(Z, e), o = z(Z, i.onProgress, i);
1081
+ o.start();
1066
1082
  try {
1067
- const o = await pe.readFile(t, "utf-8"), i = `Analyze this code and ${a}:
1083
+ const n = await ve.readFile(t, "utf-8");
1084
+ o.emit({ event: P.phase, phase: "file-read", path: t });
1085
+ const c = r ? `
1086
+
1087
+ ${r}` : "", u = `Analyze this code and ${s}:
1068
1088
 
1069
- ${le(o, { tag: "code-to-analyze" })}
1089
+ ${C(n, { tag: "code-to-analyze" })}
1070
1090
 
1071
1091
  Return a JSON object with:
1072
1092
  - "hasIssues": boolean indicating if any issues were found
@@ -1077,302 +1097,314 @@ GUIDELINES:
1077
1097
  - Provide specific line numbers or code references when possible
1078
1098
  - Suggest concrete fixes for each issue identified
1079
1099
  - Be concise but clear in your feedback
1080
- - If no issues are found, return {"hasIssues": false, "issues": []}`, r = await ue(
1081
- () => U(i, {
1082
- ...s,
1083
- response_format: Y(G.name, G.schema)
1100
+ - If no issues are found, return {"hasIssues": false, "issues": []}${c}`;
1101
+ o.emit({ event: P.phase, phase: "analyzing" });
1102
+ const d = await ye(
1103
+ () => W(u, {
1104
+ ...i,
1105
+ responseFormat: O(Y.name, Y.schema)
1084
1106
  }),
1085
1107
  {
1086
1108
  label: "test chain",
1087
- config: s
1109
+ config: i
1088
1110
  }
1089
- ), c = r.hasIssues ? r.issues : [];
1090
- return n.complete({ outcome: "success" }), c;
1091
- } catch (o) {
1092
- throw n.error(o), o;
1111
+ ), m = d.hasIssues ? d.issues : [];
1112
+ return o.emit({
1113
+ event: P.phase,
1114
+ phase: "analysis-complete",
1115
+ issueCount: m.length
1116
+ }), o.complete({ outcome: L.success }), m;
1117
+ } catch (n) {
1118
+ throw o.error(n), n;
1093
1119
  }
1094
1120
  }
1095
- const J = "test-advice", st = "Run the code with 5 boundary value test cases and report any that fail", at = "Identify 5 passing scenarios and significant boundary conditions in this code. Provide minimal input examples for each scenario to demonstrate correctness.", nt = "Identify 5 failing scenarios and significant boundary conditions in this code. Provide minimal input examples for each scenario to demonstrate the failure. Assume DBC, and don't complain when types are specified in jsDoc.", rt = "Identify 5 defects in this code. Provide minimal input examples to demonstrate each defect.", ot = "Suggest 5 best practices improvements for this code.", it = 'Suggest 5 "clean code" improvements for this code.', ct = "Identify 5 specific issues related to code quality, readability, and maintainability.", lt = "Suggest 5 refactors that would most improve the composibility of this code.", K = [
1096
- st,
1097
- at,
1098
- nt,
1099
- rt,
1100
- ot,
1101
- it,
1102
- ct,
1103
- lt
1121
+ le.knownTexts = [];
1122
+ const ee = "test-advice", dt = "Run the code with 5 boundary value test cases and report any that fail", mt = "Identify 5 passing scenarios and significant boundary conditions in this code. Provide minimal input examples for each scenario to demonstrate correctness.", ht = "Identify 5 failing scenarios and significant boundary conditions in this code. Provide minimal input examples for each scenario to demonstrate the failure. Assume DBC, and don't complain when types are specified in jsDoc.", gt = "Identify 5 defects in this code. Provide minimal input examples to demonstrate each defect.", ft = "Suggest 5 best practices improvements for this code.", bt = 'Suggest 5 "clean code" improvements for this code.', yt = "Identify 5 specific issues related to code quality, readability, and maintainability.", wt = "Suggest 5 refactors that would most improve the composibility of this code.", te = [
1123
+ dt,
1124
+ mt,
1125
+ ht,
1126
+ gt,
1127
+ ft,
1128
+ bt,
1129
+ yt,
1130
+ wt
1104
1131
  ];
1105
- async function It(t, a = {}) {
1106
- const e = $(J, a), s = L(J, e.onProgress, e);
1132
+ async function vt(t, a = {}) {
1133
+ const e = B(ee, a), s = z(ee, e.onProgress, e);
1107
1134
  s.start();
1108
1135
  try {
1109
- const n = s.batch(K.length), o = [];
1110
- for (const i of K) {
1111
- const r = await tt(t, i, {
1112
- ...e,
1113
- onProgress: Q(e.onProgress, "test-advice:test")
1114
- });
1115
- o.push(...r), n(1);
1116
- }
1117
- return s.complete({ outcome: "success", totalIssues: o.length }), o;
1118
- } catch (n) {
1119
- throw s.error(n), n;
1136
+ const r = s.batch(te.length), o = (await we(
1137
+ te,
1138
+ async (n) => {
1139
+ const c = await le(t, n, {
1140
+ ...e,
1141
+ onProgress: ae(e.onProgress, "test-advice:test")
1142
+ });
1143
+ return r(1), c;
1144
+ },
1145
+ {
1146
+ maxParallel: 3,
1147
+ errorPosture: q.resilient,
1148
+ abortSignal: e.abortSignal,
1149
+ label: "test-advice:instructions"
1150
+ }
1151
+ )).filter(Array.isArray).flat();
1152
+ return s.complete({ outcome: L.success, totalIssues: o.length }), o;
1153
+ } catch (r) {
1154
+ throw s.error(r), r;
1120
1155
  }
1121
1156
  }
1122
- ne.config();
1157
+ vt.knownTexts = [];
1158
+ pe.config();
1123
1159
  export {
1124
- At as CAPABILITY_KEYS,
1125
- Pt as COMPLIANCE,
1126
- Et as CONTEXT_KINDS,
1127
- Rt as COST_POSTURE,
1128
- Tt as ChainEvent,
1129
- Dt as Conversation,
1130
- $t as DOMAIN,
1131
- Lt as DomainEvent,
1132
- Ft as ENVIRONMENT,
1133
- Mt as Kind,
1134
- Nt as Level,
1135
- _t as ListStyle,
1136
- Bt as MODEL_KEYS,
1137
- Ut as ModelService,
1138
- Ot as ModelSource,
1139
- k as OpEvent,
1140
- zt as OptionSource,
1141
- jt as QUALITY_INTENT,
1142
- qt as SocraticMethod,
1143
- Vt as StatusCode,
1144
- Wt as SummaryMap,
1145
- Gt as TelemetryEvent,
1146
- Ht as TimedAbortController,
1147
- xt as aiArchExpect,
1148
- Jt as aiExpect,
1149
- Kt as analyzeImage,
1150
- Xt as analyzeImageMapDetail,
1151
- Yt as anySignal,
1152
- Qt as applyAllTargetingRules,
1153
- Zt as applyCalibrate,
1154
- es as applyEntities,
1155
- ts as applyFirstTargetingRule,
1156
- ss as applyRelations,
1157
- as as applyScale,
1158
- ns as applyScore,
1159
- rs as applyTags,
1160
- os as auto,
1161
- is as bool,
1162
- cs as buildSeedGenerationPrompt,
1163
- ls as buildVisionPrompt,
1164
- us as calculateStatistics,
1165
- ps as calibrate,
1166
- ds as calibrateSpec,
1167
- ms as categorySamples,
1168
- hs as causalFramePrompt,
1169
- gs as centralTendency,
1170
- fs as centralTendencyLines,
1171
- bs as chunk,
1172
- ys as chunkSentences,
1173
- ws as classify,
1174
- Ss as cleanupPaths,
1175
- xs as collectTerms,
1176
- vs as combinations,
1177
- Is as commonalities,
1178
- Cs as compact,
1179
- ks as computeTagStatistics,
1180
- As as config,
1181
- Ps as constants,
1182
- Es as conversationTurnReduce,
1183
- Rs as cosineSimilarity,
1184
- Ts as createBatches,
1185
- Ds as createCalibratedClassifier,
1186
- $s as createContextBuilder,
1187
- Ls as createEntityExtractor,
1188
- L as createProgressEmitter,
1189
- Fs as createRelationExtractor,
1190
- Ms as createScale,
1191
- Ns as createTagExtractor,
1192
- _s as createTagger,
1193
- oe as createTempDir,
1194
- Bs as createTraceCollector,
1195
- Us as date,
1196
- Os as debug,
1197
- U as default,
1198
- zs as descriptorToSchema,
1199
- js as detectPatterns,
1200
- qs as detectThreshold,
1201
- Vs as determineStyle,
1202
- Ws as disambiguate,
1203
- Gs as dismantle,
1204
- Hs as dismantleFactory,
1205
- Js as documentShrink,
1206
- Ks as embed,
1207
- Xs as embedAssembleSpan,
1160
+ Mt as CAPABILITY_KEYS,
1161
+ Nt as COMPLIANCE,
1162
+ $t as CONTEXT_KINDS,
1163
+ Bt as COST_POSTURE,
1164
+ zt as ChainEvent,
1165
+ Ot as ChainTree,
1166
+ Ut as ContextBudget,
1167
+ _t as Conversation,
1168
+ jt as DOMAIN,
1169
+ P as DomainEvent,
1170
+ qt as ENVIRONMENT,
1171
+ Vt as EmbeddingService,
1172
+ Wt as ErrorCategory,
1173
+ Gt as Kind,
1174
+ Ht as Level,
1175
+ Jt as ListStyle,
1176
+ Kt as ModelService,
1177
+ Xt as ModelSource,
1178
+ R as OpEvent,
1179
+ Qt as OptionSource,
1180
+ Yt as QUALITY_INTENT,
1181
+ Zt as RetryMode,
1182
+ es as SocraticMethod,
1183
+ ts as StatusCode,
1184
+ ss as SummaryMap,
1185
+ as as TelemetryEvent,
1186
+ rs as TimedAbortController,
1187
+ pt as aiArchExpect,
1188
+ ns as aiExpect,
1189
+ os as analyzeImage,
1190
+ is as analyzeImageMapDetail,
1191
+ cs as anySignal,
1192
+ ls as applyAllTargetingRules,
1193
+ us as applyFirstTargetingRule,
1194
+ ps as auto,
1195
+ ds as bool,
1196
+ ms as buildSeedGenerationPrompt,
1197
+ hs as buildVisionPrompt,
1198
+ gs as calculateStatistics,
1199
+ fs as calibrate,
1200
+ bs as calibrateInstructions,
1201
+ ys as calibrateSpec,
1202
+ ws as callAgent,
1203
+ vs as categorySamples,
1204
+ xs as causalFramePrompt,
1205
+ Ss as centralTendency,
1206
+ ks as centralTendencyLines,
1207
+ Cs as chunk,
1208
+ Is as chunkSentences,
1209
+ As as classify,
1210
+ Es as cleanupPaths,
1211
+ Ps as collectEventsWith,
1212
+ Ts as collectTerms,
1213
+ Rs as combinations,
1214
+ Ds as commonalities,
1215
+ Ls as compact,
1216
+ Fs as computeTagStatistics,
1217
+ Ms as config,
1218
+ Ns as constants,
1219
+ $s as conversationTurnReduce,
1220
+ Bs as cosineSimilarity,
1221
+ zs as createBatches,
1222
+ Os as createContextBuilder,
1223
+ z as createProgressEmitter,
1224
+ me as createTempDir,
1225
+ Us as createTraceCollector,
1226
+ _s as date,
1227
+ js as debug,
1228
+ W as default,
1229
+ qs as descriptorToSchema,
1230
+ Vs as detectPatterns,
1231
+ Ws as detectThreshold,
1232
+ Gs as determineStyle,
1233
+ Hs as disambiguate,
1234
+ Js as dismantle,
1235
+ Ks as documentShrink,
1236
+ Xs as embed,
1237
+ Qs as embedAssembleSpan,
1208
1238
  Ys as embedBatch,
1209
- Qs as embedBuildIndex,
1210
- Zs as embedChunked,
1211
- ea as embedMergeRanges,
1212
- ta as embedMultiQuery,
1213
- sa as embedNeighborChunks,
1214
- aa as embedNormalizeText,
1215
- na as embedRewriteQuery,
1216
- ra as embedRewriteToOutputDoc,
1217
- oa as embedScore,
1218
- ia as embedStandaloneSpan,
1219
- ca as embedStepBack,
1220
- la as embedSubquestions,
1221
- ua as embedWarmup,
1222
- pa as entities,
1223
- da as entitiesFilterInstructions,
1224
- ma as entitiesFindInstructions,
1225
- ha as entitiesGroupInstructions,
1226
- ga as entitiesMapInstructions,
1227
- fa as entitiesReduceInstructions,
1228
- ba as entitySpec,
1229
- ya as evaluateTargetingClause,
1230
- wa as evaluateTargetingRule,
1231
- Sa as eventToTrace,
1232
- xa as expect,
1239
+ Zs as embedBuildIndex,
1240
+ ea as embedChunked,
1241
+ ta as embedImage,
1242
+ sa as embedImageBatch,
1243
+ aa as embedMergeRanges,
1244
+ ra as embedMultiQuery,
1245
+ na as embedNeighborChunks,
1246
+ oa as embedNormalizeText,
1247
+ ia as embedObject,
1248
+ ca as embedRewriteQuery,
1249
+ la as embedRewriteToOutputDoc,
1250
+ ua as embedStandaloneSpan,
1251
+ pa as embedStepBack,
1252
+ da as embedSubquestions,
1253
+ ma as embedWarmup,
1254
+ ha as entityInstructions,
1255
+ ga as entitySpec,
1256
+ fa as evaluateTargetingClause,
1257
+ ba as evaluateTargetingRule,
1258
+ ya as eventToTrace,
1259
+ wa as expect,
1233
1260
  va as extractBlocks,
1234
- ge as extractButtons,
1235
- he as extractForms,
1236
- Ia as extractJson,
1237
- me as extractLinks,
1238
- be as extractMeta,
1239
- we as extractPage,
1240
- fe as extractScripts,
1241
- ye as extractStructure,
1261
+ Ce as extractButtons,
1262
+ xa as extractEntities,
1263
+ ke as extractForms,
1264
+ Sa as extractJson,
1265
+ Se as extractLinks,
1266
+ Ae as extractMeta,
1267
+ Pe as extractPage,
1268
+ ka as extractRelations,
1269
+ Ie as extractScripts,
1270
+ Ee as extractStructure,
1242
1271
  Ca as fillMissing,
1243
- ka as filter,
1272
+ Ia as filter,
1244
1273
  Aa as filterAmbiguous,
1274
+ Ea as filterEach,
1245
1275
  Pa as find,
1246
- Ea as generateList,
1247
- Ra as getMeanings,
1248
- Ta as getOption,
1249
- Da as getOptionDetail,
1250
- X as getOptions,
1251
- $a as glossary,
1252
- La as group,
1253
- yt as imageToBase64,
1254
- Fa as init,
1255
- Ma as intent,
1256
- Na as intersections,
1257
- _a as join,
1258
- Y as jsonSchema,
1259
- Ba as last,
1260
- Ua as list,
1261
- Oa as listBatch,
1262
- za as listExpand,
1263
- U as llm,
1264
- ja as llmLogger,
1265
- qa as makePrompt,
1266
- Va as map,
1267
- de as mapImageShrink,
1268
- Wa as name,
1269
- Ga as nameSimilarTo,
1270
- $ as nameStep,
1271
- Ha as normalizeLlm,
1272
- Ja as number,
1273
- Ka as numberWithUnits,
1274
- Xa as observeApplication,
1275
- Ya as observeProviders,
1276
- Qa as omit,
1277
- Za as parallel,
1278
- en as parallelMap,
1279
- tn as parseLLMList,
1280
- sn as parseRDFLiteral,
1281
- an as parseRelations,
1282
- nn as people,
1283
- rn as phailForge,
1284
- on as pick,
1285
- cn as pipe,
1286
- ln as popReference,
1287
- un as probeScan,
1288
- pn as promptCache,
1289
- dn as promptPiece,
1290
- mn as prompts,
1291
- hn as questions,
1292
- gn as rangeCombinations,
1293
- ce as reduce,
1294
- fn as relationSpec,
1295
- bn as relations,
1296
- yn as relationsFilterInstructions,
1297
- wn as relationsFindInstructions,
1298
- Sn as relationsGroupInstructions,
1299
- xn as relationsMapInstructions,
1300
- vn as relationsReduceInstructions,
1301
- ft as resizeImage,
1302
- In as resolveModel,
1303
- Cn as resolveOutputDir,
1304
- ue as retry,
1305
- kn as ringBuffer,
1306
- An as scale,
1307
- Pn as scaleFilterInstructions,
1308
- En as scaleFindInstructions,
1309
- Rn as scaleGroupInstructions,
1310
- Tn as scaleMapInstructions,
1311
- Dn as scaleReduceInstructions,
1312
- $n as scaleSpec,
1313
- vt as scanJS,
1314
- Ln as schemaOrg,
1315
- Fn as schemas,
1316
- Mn as scientificFramingPrompt,
1317
- Q as scopePhase,
1318
- Nn as score,
1319
- _n as scoreFilterInstructions,
1320
- Bn as scoreFindInstructions,
1321
- Un as scoreGroupInstructions,
1322
- On as scoreItem,
1323
- zn as scoreMapInstructions,
1324
- jn as scoreReduceInstructions,
1325
- qn as scoreSpec,
1326
- Vn as sentiment,
1327
- Wn as setEmbedEnabled,
1328
- Gn as setImageProcessingEnabled,
1329
- Hn as setInterval,
1330
- Jn as shuffle,
1331
- Kn as simplifyTree,
1332
- St as siteCrawl,
1333
- Xn as socratic,
1334
- Yn as softCoverPrompt,
1335
- Qn as sort,
1336
- Zn as sortBy,
1337
- er as split,
1338
- tr as stripNumeric,
1339
- sr as stripResponse,
1340
- ar as suggestTargetingRules,
1341
- nr as tagSpec,
1342
- rr as tagVocabulary,
1343
- or as tags,
1344
- ir as tagsFilterInstructions,
1345
- cr as tagsFindInstructions,
1346
- lr as tagsGroupInstructions,
1347
- ur as tagsMapInstructions,
1348
- pr as tagsReduceInstructions,
1349
- dr as targetingClause,
1350
- mr as targetingRule,
1351
- hr as targetingRuleOps,
1352
- gr as targetingRuleSchema,
1353
- fr as templateReplace,
1354
- tt as test,
1355
- It as testAdvice,
1356
- br as themes,
1357
- bt as tileImages,
1358
- yr as timeline,
1359
- wr as toBool,
1360
- Sr as toDate,
1361
- xr as toEnum,
1362
- vr as toNumber,
1363
- Ir as toNumberWithUnits,
1364
- Cr as toObject,
1365
- kr as truncate,
1366
- Ar as unionBy,
1367
- Pr as validateTargetingRules,
1368
- Er as valueArbitrate,
1369
- Rr as vectorSearch,
1370
- Tr as veiledVariantStrategies,
1371
- Dr as veiledVariants,
1372
- $r as version,
1373
- wt as webScrape,
1374
- Lr as windowFor,
1375
- Fr as withInactivityTimeout,
1376
- B as withPolicy,
1377
- Mr as zipWith
1276
+ Ta as findEach,
1277
+ Ra as generateList,
1278
+ Da as getMeanings,
1279
+ La as getOption,
1280
+ Fa as getOptionDetail,
1281
+ se as getOptions,
1282
+ Ma as glossary,
1283
+ Na as group,
1284
+ $a as groupEach,
1285
+ Tt as imageToBase64,
1286
+ Ba as init,
1287
+ za as intent,
1288
+ Oa as intersections,
1289
+ Ua as join,
1290
+ O as jsonSchema,
1291
+ _a as last,
1292
+ ja as list,
1293
+ qa as listBatch,
1294
+ Va as listExpand,
1295
+ W as llm,
1296
+ Wa as llmLogger,
1297
+ Ga as makePrompt,
1298
+ Ha as map,
1299
+ Ja as mapEach,
1300
+ xe as mapImageShrink,
1301
+ Ka as mapTags,
1302
+ Xa as name,
1303
+ Qa as nameSimilarTo,
1304
+ B as nameStep,
1305
+ Ya as normalizeInstruction,
1306
+ Za as normalizeLlm,
1307
+ er as normalizeRubric,
1308
+ tr as number,
1309
+ sr as numberWithUnits,
1310
+ ar as observeApplication,
1311
+ rr as observeProviders,
1312
+ nr as omit,
1313
+ or as pFilter,
1314
+ ir as pFind,
1315
+ cr as pGroup,
1316
+ lr as pMap,
1317
+ ur as pReduce,
1318
+ we as parallel,
1319
+ pr as parallelMap,
1320
+ dr as parseLLMList,
1321
+ mr as parseRDFLiteral,
1322
+ hr as parseRelations,
1323
+ gr as people,
1324
+ fr as phailForge,
1325
+ br as pick,
1326
+ yr as pipe,
1327
+ wr as popReference,
1328
+ vr as promptCache,
1329
+ xr as promptPiece,
1330
+ Sr as prompts,
1331
+ kr as questions,
1332
+ Cr as rangeCombinations,
1333
+ ge as reduce,
1334
+ Ir as reduceEach,
1335
+ Ar as relationInstructions,
1336
+ Er as relationSpec,
1337
+ Et as resizeImage,
1338
+ fe as resolveArgs,
1339
+ Pr as resolveEmbedding,
1340
+ Tr as resolveModel,
1341
+ Rr as resolveOutputDir,
1342
+ be as resolveTexts,
1343
+ ye as retry,
1344
+ Dr as ringBuffer,
1345
+ Lr as scaleInstructions,
1346
+ Fr as scaleItem,
1347
+ Mr as scaleSpec,
1348
+ Dt as scanJS,
1349
+ Nr as schemaOrg,
1350
+ $r as schemas,
1351
+ Br as scientificFramingPrompt,
1352
+ ae as scopePhase,
1353
+ zr as score,
1354
+ Or as scoreChunksByProbes,
1355
+ Ur as scoreInstructions,
1356
+ _r as scoreItem,
1357
+ jr as scoreMatrix,
1358
+ qr as scoreMatrixInstructions,
1359
+ Vr as scoreSpec,
1360
+ Wr as sentiment,
1361
+ Gr as setEmbedEnabled,
1362
+ Hr as setImageProcessingEnabled,
1363
+ Jr as setInterval,
1364
+ Kr as shuffle,
1365
+ Xr as simplifyTree,
1366
+ We as siteCrawl,
1367
+ Qr as slot,
1368
+ Yr as socratic,
1369
+ Zr as softCoverPrompt,
1370
+ en as sort,
1371
+ tn as sortBy,
1372
+ sn as split,
1373
+ an as stripNumeric,
1374
+ rn as stripResponse,
1375
+ nn as suggestTargetingRules,
1376
+ on as tagInstructions,
1377
+ cn as tagItem,
1378
+ ln as tagSpec,
1379
+ un as tagVocabulary,
1380
+ pn as targetingClause,
1381
+ dn as targetingRule,
1382
+ mn as targetingRuleOps,
1383
+ hn as targetingRuleSchema,
1384
+ gn as templateBuilder,
1385
+ fn as templateReplace,
1386
+ le as test,
1387
+ vt as testAdvice,
1388
+ bn as themes,
1389
+ Pt as tileImages,
1390
+ yn as timeline,
1391
+ wn as toBool,
1392
+ vn as toDate,
1393
+ xn as toEnum,
1394
+ Sn as toNumber,
1395
+ kn as toNumberWithUnits,
1396
+ Cn as toObject,
1397
+ In as truncate,
1398
+ An as unionBy,
1399
+ En as validateTargetingRules,
1400
+ Pn as valueArbitrate,
1401
+ Tn as vectorSearch,
1402
+ Rn as veiledVariantStrategies,
1403
+ Dn as veiledVariants,
1404
+ Ln as version,
1405
+ Rt as webScrape,
1406
+ Fn as windowFor,
1407
+ Mn as withInactivityTimeout,
1408
+ V as withPolicy,
1409
+ Nn as zipWith
1378
1410
  };