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.
- 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 +16 -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 +50 -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;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
|
|
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. 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
|
|
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"}
|
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,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"}
|
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,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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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",
|