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.
- package/dist/cli.js +11 -3
- package/dist/cli.js.map +1 -1
- package/dist/cognitive/journey-dialog.d.ts +3 -2
- package/dist/cognitive/journey-dialog.d.ts.map +1 -1
- package/dist/cognitive/journey-dialog.js +28 -4
- package/dist/cognitive/journey-dialog.js.map +1 -1
- package/dist/terminal-safe.d.ts +10 -1
- package/dist/terminal-safe.d.ts.map +1 -1
- package/dist/terminal-safe.js +95 -8
- package/dist/terminal-safe.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
13
|
-
* action with its target; a step whose reply could not be
|
|
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
|
|
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
|
|
13
|
-
* action with its target; a step whose reply could not be
|
|
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
|
|
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"}
|
package/dist/terminal-safe.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/terminal-safe.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
+
"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",
|