cbrowser 20.1.3 → 20.2.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.
@@ -9,8 +9,9 @@
9
9
  * phase) and took no action, so a run of unreadable replies looked like a
10
10
  * persona that only ever evaluated.
11
11
  *
12
- * Each step now prints its phase and mood, the persona's monologue, and the
13
- * action with its target; a step whose reply could not be read says so.
12
+ * Each step now prints its phase and mood, the page it is on, the persona's
13
+ * monologue, and the action with its target; a step whose reply could not be
14
+ * read says so.
14
15
  */
15
16
  import type { CognitiveStep } from "./index.js";
16
17
  import type { CognitiveJourneyResult } from "../types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"journey-dialog.d.ts","sourceRoot":"","sources":["../../src/cognitive/journey-dialog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQ1D,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CAe/D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,cAAc,GAAG,mBAAmB,GAAG,WAAW,GAAG,WAAW,CAAC,GACrG,MAAM,CAIR"}
1
+ {"version":3,"file":"journey-dialog.d.ts","sourceRoot":"","sources":["../../src/cognitive/journey-dialog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AA8B1D,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CAe/D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,cAAc,GAAG,mBAAmB,GAAG,WAAW,GAAG,WAAW,CAAC,GACrG,MAAM,CAIR"}
@@ -9,21 +9,45 @@
9
9
  * phase) and took no action, so a run of unreadable replies looked like a
10
10
  * persona that only ever evaluated.
11
11
  *
12
- * Each step now prints its phase and mood, the persona's monologue, and the
13
- * action with its target; a step whose reply could not be read says so.
12
+ * Each step now prints its phase and mood, the page it is on, the persona's
13
+ * monologue, and the action with its target; a step whose reply could not be
14
+ * read says so.
14
15
  */
15
16
  /** Where an action string ("click:#pricing", "fill:#email:me@x") says to act, minus its value. */
16
17
  function actionVerb(action) {
17
18
  const verb = action.split(":")[0]?.trim();
18
19
  return verb || action;
19
20
  }
21
+ /**
22
+ * The page a step is on: the full URL alone at the end of its line, with
23
+ * nothing touching it, so a terminal can open it (Alexa, 2026-10-23: "i want
24
+ * the link clickable from cli"). The CLI's output guard also makes it an OSC 8
25
+ * hyperlink on a terminal. The query string is dropped and the anchor kept
26
+ * (Alexa, 2026-10-23: "make the url strip variables but not anchors"): a
27
+ * tracking parameter such as _gl made one line hundreds of characters long.
28
+ * Whitespace inside a URL is percent-encoded so the link is not cut; a string
29
+ * that does not parse as a URL prints as it is.
30
+ */
31
+ function pageLine(url) {
32
+ const raw = url?.trim();
33
+ if (!raw)
34
+ return [];
35
+ let href = raw;
36
+ try {
37
+ const parsed = new URL(raw);
38
+ parsed.search = "";
39
+ href = parsed.href;
40
+ }
41
+ catch { /* not a URL: shown as given */ }
42
+ return [` 🔗 ${href.replace(/\s/g, (c) => encodeURIComponent(c))}`];
43
+ }
20
44
  /** The lines that describe one journey step, without trailing newlines. */
21
45
  export function formatJourneyStep(step) {
22
46
  if (step.replyReadable === false) {
23
47
  const why = step.replyProblem ? ` (${step.replyProblem})` : "";
24
- return [` Step ${step.step}: the model's reply could not be read${why}, so this step took no action`];
48
+ return [` Step ${step.step}: the model's reply could not be read${why}, so this step took no action`, ...pageLine(step.url)];
25
49
  }
26
- const lines = [` Step ${step.step} · ${step.phase} · ${step.state.currentMood}`];
50
+ const lines = [` Step ${step.step} · ${step.phase} · ${step.state.currentMood}`, ...pageLine(step.url)];
27
51
  const monologue = step.monologue.trim();
28
52
  if (monologue)
29
53
  lines.push(` 💭 "${monologue}"`);
@@ -1 +1 @@
1
- {"version":3,"file":"journey-dialog.js","sourceRoot":"","sources":["../../src/cognitive/journey-dialog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,kGAAkG;AAClG,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1C,OAAO,IAAI,IAAI,MAAM,CAAC;AACxB,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,wCAAwC,GAAG,+BAA+B,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACnF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,SAAS,GAAG,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC/F,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAsG;IAEtG,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO,sBAAsB,MAAM,CAAC,SAAS,WAAW,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACjH,IAAI,MAAM,CAAC,iBAAiB;QAAE,OAAO,gBAAgB,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAChF,OAAO,uDAAuD,MAAM,CAAC,SAAS,oCAAoC,CAAC;AACrH,CAAC"}
1
+ {"version":3,"file":"journey-dialog.js","sourceRoot":"","sources":["../../src/cognitive/journey-dialog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,kGAAkG;AAClG,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1C,OAAO,IAAI,IAAI,MAAM,CAAC;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,QAAQ,CAAC,GAAuB;IACvC,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;IAC3C,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,wCAAwC,GAAG,+BAA+B,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjI,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1G,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,SAAS,GAAG,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC/F,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAsG;IAEtG,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO,sBAAsB,MAAM,CAAC,SAAS,WAAW,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACjH,IAAI,MAAM,CAAC,iBAAiB;QAAE,OAAO,gBAAgB,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAChF,OAAO,uDAAuD,MAAM,CAAC,SAAS,oCAAoC,CAAC;AACrH,CAAC"}
@@ -1,4 +1,13 @@
1
- export declare function terminalSafe(text: string): string;
1
+ export declare function terminalSafe(text: string, links?: boolean): string;
2
+ /**
3
+ * Every http(s) URL in already-escaped text as an OSC 8 link to itself. Sentence
4
+ * punctuation after a URL stays outside it, and so does a ")" the URL did not open.
5
+ */
6
+ export declare function linkUrls(text: string): string;
7
+ export declare function setTerminalHyperlinks(on: {
8
+ stdout: boolean;
9
+ stderr: boolean;
10
+ }): void;
2
11
  /**
3
12
  * Route console output through terminalSafe. Under Bun, console.log writes to the
4
13
  * file descriptor directly and never reaches process.stdout.write, so the stream
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-safe.d.ts","sourceRoot":"","sources":["../src/terminal-safe.ts"],"names":[],"mappings":"AA0BA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAKnC;AAED,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAIpE"}
1
+ {"version":3,"file":"terminal-safe.d.ts","sourceRoot":"","sources":["../src/terminal-safe.ts"],"names":[],"mappings":"AAkCA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,MAAM,CAOhE;AAmDD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa7C;AAKD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAGpF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAMnC;AAED,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAKpE"}
@@ -8,9 +8,17 @@
8
8
  * that reorder what is displayed (push review of 0ee2c27, 2026-10-12).
9
9
  *
10
10
  * terminalSafe() turns every such character into a visible escape. The CLI writes
11
- * no colours or control sequences of its own; the one intended control is the
11
+ * no colours or control sequences of its own; the intended controls are the
12
12
  * carriage return that starts a progress line, which is kept when it is the first
13
- * character of a write.
13
+ * character of a write, and the hyperlinks below.
14
+ *
15
+ * Hyperlinks (OSC 8), on a terminal only: every http(s) URL in a write becomes a
16
+ * link whose target is exactly the text shown, so text from a page cannot make a
17
+ * link that reads one way and goes another. That is what a terminal's own URL
18
+ * detection does, but the link survives a wrapped line and a closing bracket
19
+ * (Alexa, 2026-10-23: "i want the link clickable from cli"). Links are added after
20
+ * escaping, so a URL holds no control character and the only escapes in the
21
+ * output are the two OSC 8 markers around it.
14
22
  */
15
23
  import { format } from "node:util";
16
24
  // C0 controls except tab and newline, DEL, C1 controls, and the bidi embedding,
@@ -20,10 +28,87 @@ const UNSAFE = /[\u0000-\u0008\u000b-\u001f\u007f-\u009f\u202A-\u202E\u2066-\u20
20
28
  const visible = (c) => c === "\u001b" ? "\\x1b"
21
29
  : c === "\r" ? "\\r"
22
30
  : `\\u${c.charCodeAt(0).toString(16).padStart(4, "0")}`;
23
- export function terminalSafe(text) {
24
- if (text.startsWith("\r"))
25
- return "\r" + text.slice(1).replace(UNSAFE, visible);
26
- return text.replace(UNSAFE, visible);
31
+ export function terminalSafe(text, links = false) {
32
+ const lead = text.startsWith("\r") ? "\r" : "";
33
+ return lead + splitOwnLinks(lead ? text.slice(1) : text).map((part) => {
34
+ if (part.link !== undefined)
35
+ return links ? `${OSC8(part.link)}${part.link}${OSC8("")}` : part.link;
36
+ const safe = part.text.replace(UNSAFE, visible);
37
+ return links ? linkUrls(safe) : safe;
38
+ }).join("");
39
+ }
40
+ // A URL runs until whitespace, a quote, an angle or square bracket, a brace, a
41
+ // backslash (which starts an escape written above) or an invisible format character.
42
+ const URL_TOKEN = /https?:\/\/[^\s"'<>`{}|\\^[\]\u200b-\u200f\u2028\u2029\ufeff]+/g;
43
+ const OSC8 = (target) => `\u001b]8;;${target}\u001b\\`;
44
+ const ESC = String.fromCharCode(27);
45
+ const ST = `${ESC}\\`;
46
+ const LINK_OPEN = `${ESC}]8;;`;
47
+ const LINK_TARGET = new RegExp(`^(?:${URL_TOKEN.source})$`);
48
+ /**
49
+ * Text split into plain runs and the links linkUrls writes: an OSC 8 link whose
50
+ * target is a URL with no control character or space and whose text is that
51
+ * same URL. Under Node, console.log reaches process.stdout.write, so one line
52
+ * passes guardConsole and then guardTerminalOutput, and in 20.2.0 the second
53
+ * pass escaped the first one's links: a journey printed "\x1b]8;;" before every
54
+ * URL (2026-10-23). Kept whole, a link passes any number of guards unchanged.
55
+ * Any other escape, a link that reads one way and goes another included, is
56
+ * still escaped.
57
+ */
58
+ function splitOwnLinks(text) {
59
+ const parts = [];
60
+ const close = OSC8("");
61
+ let plainFrom = 0;
62
+ let at = text.indexOf(LINK_OPEN);
63
+ while (at !== -1) {
64
+ const targetEnd = text.indexOf(ST, at + LINK_OPEN.length);
65
+ if (targetEnd === -1)
66
+ break;
67
+ const target = text.slice(at + LINK_OPEN.length, targetEnd);
68
+ const textEnd = targetEnd + ST.length + target.length;
69
+ const ours = LINK_TARGET.test(target) && target.search(UNSAFE) === -1
70
+ && text.slice(targetEnd + ST.length, textEnd) === target && text.startsWith(close, textEnd);
71
+ if (ours) {
72
+ if (at > plainFrom)
73
+ parts.push({ text: text.slice(plainFrom, at) });
74
+ parts.push({ link: target });
75
+ plainFrom = textEnd + close.length;
76
+ at = text.indexOf(LINK_OPEN, plainFrom);
77
+ }
78
+ else {
79
+ at = text.indexOf(LINK_OPEN, at + LINK_OPEN.length);
80
+ }
81
+ }
82
+ if (plainFrom < text.length || parts.length === 0)
83
+ parts.push({ text: text.slice(plainFrom) });
84
+ return parts;
85
+ }
86
+ const count = (s, c) => s.split(c).length - 1;
87
+ /**
88
+ * Every http(s) URL in already-escaped text as an OSC 8 link to itself. Sentence
89
+ * punctuation after a URL stays outside it, and so does a ")" the URL did not open.
90
+ */
91
+ export function linkUrls(text) {
92
+ return text.replace(URL_TOKEN, (match) => {
93
+ let url = match;
94
+ let tail = "";
95
+ while (/[.,;:!?)]$/.test(url)) {
96
+ const last = url[url.length - 1];
97
+ if (last === ")" && count(url, "(") >= count(url, ")"))
98
+ break;
99
+ tail = last + tail;
100
+ url = url.slice(0, -1);
101
+ }
102
+ if (!/^https?:\/\/[^/?#]/.test(url))
103
+ return match;
104
+ return `${OSC8(url)}${url}${OSC8("")}${tail}`;
105
+ });
106
+ }
107
+ /** Which streams get hyperlinks. Off until the CLI decides each is a terminal. */
108
+ const linkStreams = { stdout: false, stderr: false };
109
+ export function setTerminalHyperlinks(on) {
110
+ linkStreams.stdout = on.stdout;
111
+ linkStreams.stderr = on.stderr;
27
112
  }
28
113
  /**
29
114
  * Route console output through terminalSafe. Under Bun, console.log writes to the
@@ -35,12 +120,14 @@ export function terminalSafe(text) {
35
120
  export function guardConsole() {
36
121
  for (const method of ["log", "info", "warn", "error", "debug"]) {
37
122
  const original = console[method].bind(console);
38
- console[method] = (...args) => original(terminalSafe(format(...args)));
123
+ const stream = method === "warn" || method === "error" ? "stderr" : "stdout";
124
+ console[method] = (...args) => original(terminalSafe(format(...args), linkStreams[stream]));
39
125
  }
40
126
  }
41
127
  /** Route every string written to a stream through terminalSafe. Buffers pass as they are. */
42
128
  export function guardTerminalOutput(stream) {
43
129
  const write = stream.write.bind(stream);
44
- stream.write = ((chunk, ...rest) => write(typeof chunk === "string" ? terminalSafe(chunk) : chunk, ...rest));
130
+ const name = stream.fd === 2 ? "stderr" : "stdout";
131
+ stream.write = ((chunk, ...rest) => write(typeof chunk === "string" ? terminalSafe(chunk, linkStreams[name]) : chunk, ...rest));
45
132
  }
46
133
  //# sourceMappingURL=terminal-safe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-safe.js","sourceRoot":"","sources":["../src/terminal-safe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,gFAAgF;AAChF,gFAAgF;AAChF,4CAA4C;AAC5C,MAAM,MAAM,GAAG,sEAAsE,CAAC;AAEtF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CACpC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO;IACtB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK;QAClB,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAE9D,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY;IAC1B,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAoC,CAAC;IAC3E,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAc,EAAE,GAAG,IAAe,EAAE,EAAE,CACrD,KAAK,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAwB,CAAC;AACpG,CAAC"}
1
+ {"version":3,"file":"terminal-safe.js","sourceRoot":"","sources":["../src/terminal-safe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,gFAAgF;AAChF,gFAAgF;AAChF,4CAA4C;AAC5C,MAAM,MAAM,GAAG,sEAAsE,CAAC;AAEtF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CACpC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO;IACtB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK;QAClB,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAE9D,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAK,GAAG,KAAK;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,OAAO,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACpE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACpG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,+EAA+E;AAC/E,qFAAqF;AACrF,MAAM,SAAS,GAAG,iEAAiE,CAAC;AACpF,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,aAAa,MAAM,UAAU,CAAC;AAE/D,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACpC,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;AACtB,MAAM,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;AAC/B,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;AAI5D;;;;;;;;;GASG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,MAAM;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,SAAS,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACtD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;eAChE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9F,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,EAAE,GAAG,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7B,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;YACnC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QACvC,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;gBAAE,MAAM;YAC9D,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;YACnB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAClD,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAErD,MAAM,UAAU,qBAAqB,CAAC,EAAwC;IAC5E,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;IAC/B,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY;IAC1B,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7E,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzG,CAAC;AACH,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAoC,CAAC;IAC3E,MAAM,IAAI,GAAI,MAA0B,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAc,EAAE,GAAG,IAAe,EAAE,EAAE,CACrD,KAAK,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAwB,CAAC;AACvH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cbrowser",
3
- "version": "20.1.3",
3
+ "version": "20.2.1",
4
4
  "type": "module",
5
5
  "description": "Cognitive browser automation that thinks like your users—and helps AI agents navigate too. Simulate real user cognition with abandonment detection, constitutional safety, chaos engineering, and UX friction discovery. Sites that pass CBrowser's cognitive tests are easier for both humans and AI agents to navigate.",
6
6
  "main": "dist/index.js",