cbrowser 20.1.3 → 20.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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;AAoB1D,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,33 @@
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. Whitespace inside a URL is percent-encoded so the
26
+ * link is not cut.
27
+ */
28
+ function pageLine(url) {
29
+ const href = url?.trim().replace(/\s/g, (c) => encodeURIComponent(c));
30
+ return href ? [` 🔗 ${href}`] : [];
31
+ }
20
32
  /** The lines that describe one journey step, without trailing newlines. */
21
33
  export function formatJourneyStep(step) {
22
34
  if (step.replyReadable === false) {
23
35
  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`];
36
+ return [` Step ${step.step}: the model's reply could not be read${why}, so this step took no action`, ...pageLine(step.url)];
25
37
  }
26
- const lines = [` Step ${step.step} · ${step.phase} · ${step.state.currentMood}`];
38
+ const lines = [` Step ${step.step} · ${step.phase} · ${step.state.currentMood}`, ...pageLine(step.url)];
27
39
  const monologue = step.monologue.trim();
28
40
  if (monologue)
29
41
  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;;;;;;GAMG;AACH,SAAS,QAAQ,CAAC,GAAuB;IACvC,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvC,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,CAKhE;AASD;;;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,42 @@ 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 safe = text.startsWith("\r")
33
+ ? "\r" + text.slice(1).replace(UNSAFE, visible)
34
+ : text.replace(UNSAFE, visible);
35
+ return links ? linkUrls(safe) : safe;
36
+ }
37
+ // A URL runs until whitespace, a quote, an angle or square bracket, a brace, a
38
+ // backslash (which starts an escape written above) or an invisible format character.
39
+ const URL_TOKEN = /https?:\/\/[^\s"'<>`{}|\\^[\]\u200b-\u200f\u2028\u2029\ufeff]+/g;
40
+ const OSC8 = (target) => `\u001b]8;;${target}\u001b\\`;
41
+ const count = (s, c) => s.split(c).length - 1;
42
+ /**
43
+ * Every http(s) URL in already-escaped text as an OSC 8 link to itself. Sentence
44
+ * punctuation after a URL stays outside it, and so does a ")" the URL did not open.
45
+ */
46
+ export function linkUrls(text) {
47
+ return text.replace(URL_TOKEN, (match) => {
48
+ let url = match;
49
+ let tail = "";
50
+ while (/[.,;:!?)]$/.test(url)) {
51
+ const last = url[url.length - 1];
52
+ if (last === ")" && count(url, "(") >= count(url, ")"))
53
+ break;
54
+ tail = last + tail;
55
+ url = url.slice(0, -1);
56
+ }
57
+ if (!/^https?:\/\/[^/?#]/.test(url))
58
+ return match;
59
+ return `${OSC8(url)}${url}${OSC8("")}${tail}`;
60
+ });
61
+ }
62
+ /** Which streams get hyperlinks. Off until the CLI decides each is a terminal. */
63
+ const linkStreams = { stdout: false, stderr: false };
64
+ export function setTerminalHyperlinks(on) {
65
+ linkStreams.stdout = on.stdout;
66
+ linkStreams.stderr = on.stderr;
27
67
  }
28
68
  /**
29
69
  * Route console output through terminalSafe. Under Bun, console.log writes to the
@@ -35,12 +75,14 @@ export function terminalSafe(text) {
35
75
  export function guardConsole() {
36
76
  for (const method of ["log", "info", "warn", "error", "debug"]) {
37
77
  const original = console[method].bind(console);
38
- console[method] = (...args) => original(terminalSafe(format(...args)));
78
+ const stream = method === "warn" || method === "error" ? "stderr" : "stdout";
79
+ console[method] = (...args) => original(terminalSafe(format(...args), linkStreams[stream]));
39
80
  }
40
81
  }
41
82
  /** Route every string written to a stream through terminalSafe. Buffers pass as they are. */
42
83
  export function guardTerminalOutput(stream) {
43
84
  const write = stream.write.bind(stream);
44
- stream.write = ((chunk, ...rest) => write(typeof chunk === "string" ? terminalSafe(chunk) : chunk, ...rest));
85
+ const name = stream.fd === 2 ? "stderr" : "stdout";
86
+ stream.write = ((chunk, ...rest) => write(typeof chunk === "string" ? terminalSafe(chunk, linkStreams[name]) : chunk, ...rest));
45
87
  }
46
88
  //# 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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cbrowser",
3
- "version": "20.1.3",
3
+ "version": "20.2.0",
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",