@hasna/browser 0.4.2 → 0.4.3
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/index.js +436 -6
- package/dist/engines/tui.d.ts +1 -0
- package/dist/engines/tui.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/lib/session.d.ts.map +1 -1
- package/dist/mcp/index.js +429 -4
- package/dist/mcp/meta.d.ts.map +1 -1
- package/dist/mcp/sessions.d.ts.map +1 -1
- package/dist/mcp/tui.d.ts +3 -0
- package/dist/mcp/tui.d.ts.map +1 -0
- package/dist/server/index.js +9 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -12719,6 +12719,13 @@ async function launchTui(command, options = {}) {
|
|
|
12719
12719
|
if (viewport2)
|
|
12720
12720
|
viewport2.style.backgroundColor = theme.background;
|
|
12721
12721
|
}, themeColors);
|
|
12722
|
+
if (options.fontSize) {
|
|
12723
|
+
await page.evaluate((size) => {
|
|
12724
|
+
const term = window.term ?? window.terminal;
|
|
12725
|
+
if (term?.options)
|
|
12726
|
+
term.options.fontSize = size;
|
|
12727
|
+
}, options.fontSize);
|
|
12728
|
+
}
|
|
12722
12729
|
return { ttydProcess, port, browser, page, theme: resolvedTheme };
|
|
12723
12730
|
} catch (err) {
|
|
12724
12731
|
ttydProcess.kill();
|
|
@@ -14224,7 +14231,8 @@ async function createSession2(opts = {}) {
|
|
|
14224
14231
|
const tuiSess = await launchTui(command, {
|
|
14225
14232
|
headless: opts.headless ?? true,
|
|
14226
14233
|
viewport: opts.viewport,
|
|
14227
|
-
theme: opts.tuiTheme ?? "system"
|
|
14234
|
+
theme: opts.tuiTheme ?? "system",
|
|
14235
|
+
fontSize: opts.tuiFontSize
|
|
14228
14236
|
});
|
|
14229
14237
|
browser = tuiSess.browser;
|
|
14230
14238
|
page = tuiSess.page;
|
|
@@ -27681,8 +27689,9 @@ TIPS:
|
|
|
27681
27689
|
force_new: exports_external2.boolean().optional().default(false).describe("Force create a new session even if agent already has one"),
|
|
27682
27690
|
tags: exports_external2.array(exports_external2.string()).optional(),
|
|
27683
27691
|
cdp_url: exports_external2.string().optional().describe("Connect to existing Chrome via CDP (e.g. http://localhost:9222). Start Chrome with --remote-debugging-port=9222"),
|
|
27684
|
-
tui_theme: exports_external2.enum(["dark", "light", "system"]).optional().default("system").describe("TUI engine only: terminal color theme. 'system' auto-detects OS dark/light mode. Choose 'light' for light backgrounds or 'dark' for dark backgrounds.
|
|
27685
|
-
|
|
27692
|
+
tui_theme: exports_external2.enum(["dark", "light", "system"]).optional().default("system").describe("TUI engine only: terminal color theme. 'system' auto-detects OS dark/light mode. Choose 'light' for light backgrounds or 'dark' for dark backgrounds."),
|
|
27693
|
+
tui_font_size: exports_external2.number().optional().default(14).describe("TUI engine only: terminal font size in pixels (default: 14). Larger = more readable screenshots, smaller = more content visible.")
|
|
27694
|
+
}, async ({ engine, use_case, project_id, agent_id, start_url, headless, viewport_width, viewport_height, stealth, auto_gallery, storage_state, force_new, tags, cdp_url, tui_theme, tui_font_size }) => {
|
|
27686
27695
|
try {
|
|
27687
27696
|
if (agent_id && !force_new) {
|
|
27688
27697
|
const existing = getActiveSessionForAgent2(agent_id);
|
|
@@ -27701,7 +27710,8 @@ TIPS:
|
|
|
27701
27710
|
autoGallery: auto_gallery,
|
|
27702
27711
|
storageState: storage_state,
|
|
27703
27712
|
cdpUrl: cdp_url,
|
|
27704
|
-
tuiTheme: tui_theme
|
|
27713
|
+
tuiTheme: tui_theme,
|
|
27714
|
+
tuiFontSize: tui_font_size
|
|
27705
27715
|
});
|
|
27706
27716
|
if (tags?.length) {
|
|
27707
27717
|
const { addSessionTag: addSessionTag2 } = await Promise.resolve().then(() => (init_sessions(), exports_sessions));
|
|
@@ -48267,6 +48277,18 @@ function register10(server) {
|
|
|
48267
48277
|
{ tool: "browser_tab_switch", description: "Switch to a tab by index" },
|
|
48268
48278
|
{ tool: "browser_tab_close", description: "Close a tab by index" }
|
|
48269
48279
|
],
|
|
48280
|
+
TUI: [
|
|
48281
|
+
{ tool: "browser_tui_send_keys", description: "Send keystrokes (ctrl+c, arrow_up, tab, enter, etc.)" },
|
|
48282
|
+
{ tool: "browser_tui_send_text", description: "Type text + optional Enter (most common TUI interaction)" },
|
|
48283
|
+
{ tool: "browser_tui_resize", description: "Resize terminal cols/rows mid-session" },
|
|
48284
|
+
{ tool: "browser_tui_get_text", description: "Get terminal text buffer (full or row range)" },
|
|
48285
|
+
{ tool: "browser_tui_wait_for_text", description: "Wait for text to appear in terminal output" },
|
|
48286
|
+
{ tool: "browser_tui_get_cursor", description: "Get cursor position (row, col)" },
|
|
48287
|
+
{ tool: "browser_tui_assert", description: "Assert terminal conditions (text contains, row N contains, cursor at)" },
|
|
48288
|
+
{ tool: "browser_tui_snapshot", description: "Structured terminal snapshot (rows array, cursor, dimensions)" },
|
|
48289
|
+
{ tool: "browser_tui_record_start", description: "Start recording terminal as asciicast" },
|
|
48290
|
+
{ tool: "browser_tui_record_stop", description: "Stop recording, return asciicast v2 JSON" }
|
|
48291
|
+
],
|
|
48270
48292
|
Meta: [
|
|
48271
48293
|
{ tool: "browser_check", description: "RECOMMENDED: One-call page summary with diagnostics" },
|
|
48272
48294
|
{ tool: "browser_version", description: "Show running binary version and tool count" },
|
|
@@ -48679,6 +48701,412 @@ var init_data = __esm(() => {
|
|
|
48679
48701
|
init_meta();
|
|
48680
48702
|
});
|
|
48681
48703
|
|
|
48704
|
+
// src/mcp/tui.ts
|
|
48705
|
+
function assertTuiSession(sessionId) {
|
|
48706
|
+
const { getSessionEngine: getSessionEngine2 } = (init_session(), __toCommonJS(exports_session));
|
|
48707
|
+
const engine = getSessionEngine2(sessionId);
|
|
48708
|
+
if (engine !== "tui") {
|
|
48709
|
+
throw new Error(`browser_tui_* tools require a TUI session (engine="tui"), but this session uses engine="${engine}". Create a TUI session with: browser_session_create(engine="tui", start_url="your-command")`);
|
|
48710
|
+
}
|
|
48711
|
+
}
|
|
48712
|
+
async function getTermText(page, startRow, endRow) {
|
|
48713
|
+
const result = await page.evaluate((args) => {
|
|
48714
|
+
const [sr, er] = args;
|
|
48715
|
+
const term = window.term ?? window.terminal;
|
|
48716
|
+
if (!term?.buffer?.active)
|
|
48717
|
+
return { text: "", rows: [], row_count: 0 };
|
|
48718
|
+
const buf = term.buffer.active;
|
|
48719
|
+
const allRows = [];
|
|
48720
|
+
for (let i = 0;i < buf.length; i++) {
|
|
48721
|
+
const line = buf.getLine(i);
|
|
48722
|
+
if (line)
|
|
48723
|
+
allRows.push(line.translateToString(true));
|
|
48724
|
+
}
|
|
48725
|
+
const start = sr ?? 0;
|
|
48726
|
+
const end = er ?? allRows.length;
|
|
48727
|
+
const filtered = allRows.slice(start, end);
|
|
48728
|
+
return { text: filtered.join(`
|
|
48729
|
+
`).trimEnd(), rows: filtered, row_count: allRows.length };
|
|
48730
|
+
}, [startRow, endRow]);
|
|
48731
|
+
return result;
|
|
48732
|
+
}
|
|
48733
|
+
function register12(server) {
|
|
48734
|
+
server.tool("browser_tui_send_keys", `Send keystrokes to a TUI terminal session. Use friendly key names.
|
|
48735
|
+
|
|
48736
|
+
SUPPORTED KEYS:
|
|
48737
|
+
- Control: ctrl+c, ctrl+d, ctrl+z, ctrl+l, ctrl+a, ctrl+e, ctrl+k, ctrl+u, ctrl+w, ctrl+r
|
|
48738
|
+
- Navigation: enter, tab, escape, backspace, delete, space
|
|
48739
|
+
- Arrows: up, down, left, right (or arrow_up, arrow_down, arrow_left, arrow_right)
|
|
48740
|
+
- Function: f1-f12
|
|
48741
|
+
- Position: home, end, page_up, page_down
|
|
48742
|
+
|
|
48743
|
+
Pass multiple keys as a comma-separated string: "tab,tab,enter" or "ctrl+c"
|
|
48744
|
+
For typing text, use browser_tui_send_text instead.`, {
|
|
48745
|
+
session_id: exports_external2.string().optional(),
|
|
48746
|
+
keys: exports_external2.string().describe("Comma-separated key names: 'enter', 'ctrl+c', 'tab,tab,enter', 'arrow_down,arrow_down,enter'")
|
|
48747
|
+
}, async ({ session_id, keys }) => {
|
|
48748
|
+
try {
|
|
48749
|
+
const sid = resolveSessionId(session_id);
|
|
48750
|
+
assertTuiSession(sid);
|
|
48751
|
+
const page = getSessionPage(sid);
|
|
48752
|
+
const keyList = keys.split(",").map((k) => k.trim().toLowerCase());
|
|
48753
|
+
const sent = [];
|
|
48754
|
+
for (const key of keyList) {
|
|
48755
|
+
const mapped = KEY_MAP[key];
|
|
48756
|
+
if (mapped) {
|
|
48757
|
+
if (mapped.length === 1 && mapped.charCodeAt(0) < 32) {
|
|
48758
|
+
await page.keyboard.insertText(mapped);
|
|
48759
|
+
} else {
|
|
48760
|
+
await page.keyboard.press(mapped);
|
|
48761
|
+
}
|
|
48762
|
+
sent.push(key);
|
|
48763
|
+
} else {
|
|
48764
|
+
await page.keyboard.press(key);
|
|
48765
|
+
sent.push(key);
|
|
48766
|
+
}
|
|
48767
|
+
}
|
|
48768
|
+
return json({ sent, count: sent.length });
|
|
48769
|
+
} catch (e) {
|
|
48770
|
+
return err(e);
|
|
48771
|
+
}
|
|
48772
|
+
});
|
|
48773
|
+
server.tool("browser_tui_send_text", `Type text into a TUI terminal and optionally press Enter. This is the most common way to interact with terminal apps.
|
|
48774
|
+
|
|
48775
|
+
Examples:
|
|
48776
|
+
- Send a command: text="ls -la", press_enter=true
|
|
48777
|
+
- Type without executing: text="partial input", press_enter=false
|
|
48778
|
+
- Send to a prompt: text="yes", press_enter=true`, {
|
|
48779
|
+
session_id: exports_external2.string().optional(),
|
|
48780
|
+
text: exports_external2.string().describe("Text to type into the terminal"),
|
|
48781
|
+
press_enter: exports_external2.boolean().optional().default(true).describe("Press Enter after typing (default: true)")
|
|
48782
|
+
}, async ({ session_id, text, press_enter }) => {
|
|
48783
|
+
try {
|
|
48784
|
+
const sid = resolveSessionId(session_id);
|
|
48785
|
+
assertTuiSession(sid);
|
|
48786
|
+
const page = getSessionPage(sid);
|
|
48787
|
+
const textarea = await page.$(".xterm-helper-textarea");
|
|
48788
|
+
if (textarea) {
|
|
48789
|
+
await textarea.type(text);
|
|
48790
|
+
} else {
|
|
48791
|
+
await page.keyboard.type(text);
|
|
48792
|
+
}
|
|
48793
|
+
if (press_enter) {
|
|
48794
|
+
await page.keyboard.press("Enter");
|
|
48795
|
+
}
|
|
48796
|
+
return json({ typed: text, pressed_enter: press_enter });
|
|
48797
|
+
} catch (e) {
|
|
48798
|
+
return err(e);
|
|
48799
|
+
}
|
|
48800
|
+
});
|
|
48801
|
+
server.tool("browser_tui_resize", "Resize the terminal to a specific number of columns and rows. Useful for testing responsive TUI layouts at different terminal sizes.", {
|
|
48802
|
+
session_id: exports_external2.string().optional(),
|
|
48803
|
+
cols: exports_external2.number().describe("Number of columns (e.g. 80, 120, 200)"),
|
|
48804
|
+
rows: exports_external2.number().describe("Number of rows (e.g. 24, 40, 50)")
|
|
48805
|
+
}, async ({ session_id, cols, rows }) => {
|
|
48806
|
+
try {
|
|
48807
|
+
const sid = resolveSessionId(session_id);
|
|
48808
|
+
assertTuiSession(sid);
|
|
48809
|
+
const page = getSessionPage(sid);
|
|
48810
|
+
const result = await page.evaluate((args) => {
|
|
48811
|
+
const [c, r] = args;
|
|
48812
|
+
const term = window.term ?? window.terminal;
|
|
48813
|
+
if (!term)
|
|
48814
|
+
return { resized: false, error: "No terminal instance found" };
|
|
48815
|
+
term.resize(c, r);
|
|
48816
|
+
return { resized: true, cols: c, rows: r };
|
|
48817
|
+
}, [cols, rows]);
|
|
48818
|
+
return json(result);
|
|
48819
|
+
} catch (e) {
|
|
48820
|
+
return err(e);
|
|
48821
|
+
}
|
|
48822
|
+
});
|
|
48823
|
+
server.tool("browser_tui_get_text", `Get the text content from the terminal buffer. Returns all visible text, or a specific row range.
|
|
48824
|
+
|
|
48825
|
+
Use this to read what the terminal is currently displaying. For waiting until specific text appears, use browser_tui_wait_for_text instead.`, {
|
|
48826
|
+
session_id: exports_external2.string().optional(),
|
|
48827
|
+
start_row: exports_external2.number().optional().describe("First row to read (0-indexed, default: 0)"),
|
|
48828
|
+
end_row: exports_external2.number().optional().describe("Last row (exclusive). Omit for all rows.")
|
|
48829
|
+
}, async ({ session_id, start_row, end_row }) => {
|
|
48830
|
+
try {
|
|
48831
|
+
const sid = resolveSessionId(session_id);
|
|
48832
|
+
assertTuiSession(sid);
|
|
48833
|
+
const page = getSessionPage(sid);
|
|
48834
|
+
const result = await getTermText(page, start_row, end_row);
|
|
48835
|
+
return json(result);
|
|
48836
|
+
} catch (e) {
|
|
48837
|
+
return err(e);
|
|
48838
|
+
}
|
|
48839
|
+
});
|
|
48840
|
+
server.tool("browser_tui_wait_for_text", `Wait for specific text to appear in the terminal output. Polls the terminal buffer until the text is found or timeout is reached.
|
|
48841
|
+
|
|
48842
|
+
Use this after sending a command to wait for its output, or to wait for a TUI app to finish loading.`, {
|
|
48843
|
+
session_id: exports_external2.string().optional(),
|
|
48844
|
+
text: exports_external2.string().describe("Text to wait for (substring match)"),
|
|
48845
|
+
timeout_ms: exports_external2.number().optional().default(30000).describe("Timeout in milliseconds (default: 30000)")
|
|
48846
|
+
}, async ({ session_id, text, timeout_ms }) => {
|
|
48847
|
+
try {
|
|
48848
|
+
const sid = resolveSessionId(session_id);
|
|
48849
|
+
assertTuiSession(sid);
|
|
48850
|
+
const page = getSessionPage(sid);
|
|
48851
|
+
const start = Date.now();
|
|
48852
|
+
while (Date.now() - start < timeout_ms) {
|
|
48853
|
+
const result = await getTermText(page);
|
|
48854
|
+
if (result.text.includes(text)) {
|
|
48855
|
+
return json({ found: true, elapsed_ms: Date.now() - start, terminal_text: result.text });
|
|
48856
|
+
}
|
|
48857
|
+
await new Promise((r) => setTimeout(r, 250));
|
|
48858
|
+
}
|
|
48859
|
+
const finalText = await getTermText(page);
|
|
48860
|
+
return json({ found: false, elapsed_ms: timeout_ms, terminal_text: finalText.text });
|
|
48861
|
+
} catch (e) {
|
|
48862
|
+
return err(e);
|
|
48863
|
+
}
|
|
48864
|
+
});
|
|
48865
|
+
server.tool("browser_tui_get_cursor", "Get the current cursor position (row and column) in the terminal.", {
|
|
48866
|
+
session_id: exports_external2.string().optional()
|
|
48867
|
+
}, async ({ session_id }) => {
|
|
48868
|
+
try {
|
|
48869
|
+
const sid = resolveSessionId(session_id);
|
|
48870
|
+
assertTuiSession(sid);
|
|
48871
|
+
const page = getSessionPage(sid);
|
|
48872
|
+
const cursor = await page.evaluate(() => {
|
|
48873
|
+
const term = window.term ?? window.terminal;
|
|
48874
|
+
if (!term?.buffer?.active)
|
|
48875
|
+
return null;
|
|
48876
|
+
return { row: term.buffer.active.cursorY, col: term.buffer.active.cursorX };
|
|
48877
|
+
});
|
|
48878
|
+
if (!cursor)
|
|
48879
|
+
return err(new Error("Could not read cursor position \u2014 no terminal instance"));
|
|
48880
|
+
return json(cursor);
|
|
48881
|
+
} catch (e) {
|
|
48882
|
+
return err(e);
|
|
48883
|
+
}
|
|
48884
|
+
});
|
|
48885
|
+
server.tool("browser_tui_assert", `Assert conditions on the terminal state. Chain multiple conditions with AND.
|
|
48886
|
+
|
|
48887
|
+
CONDITION SYNTAX:
|
|
48888
|
+
- "text contains X" \u2014 terminal buffer contains substring X
|
|
48889
|
+
- "row N contains X" \u2014 row N (0-indexed) contains substring X
|
|
48890
|
+
- "cursor at R,C" \u2014 cursor is at row R, column C
|
|
48891
|
+
- "row_count > N" \u2014 total rows greater than N
|
|
48892
|
+
- "row_count == N" \u2014 total rows equals N
|
|
48893
|
+
|
|
48894
|
+
Example: "text contains hello AND row 0 contains $ AND cursor at 1,0"`, {
|
|
48895
|
+
session_id: exports_external2.string().optional(),
|
|
48896
|
+
condition: exports_external2.string().describe("Assertion condition(s), joined with AND")
|
|
48897
|
+
}, async ({ session_id, condition }) => {
|
|
48898
|
+
try {
|
|
48899
|
+
const sid = resolveSessionId(session_id);
|
|
48900
|
+
assertTuiSession(sid);
|
|
48901
|
+
const page = getSessionPage(sid);
|
|
48902
|
+
const termData = await getTermText(page);
|
|
48903
|
+
const cursor = await page.evaluate(() => {
|
|
48904
|
+
const term = window.term ?? window.terminal;
|
|
48905
|
+
if (!term?.buffer?.active)
|
|
48906
|
+
return { row: -1, col: -1 };
|
|
48907
|
+
return { row: term.buffer.active.cursorY, col: term.buffer.active.cursorX };
|
|
48908
|
+
});
|
|
48909
|
+
const checks = [];
|
|
48910
|
+
let allPassed = true;
|
|
48911
|
+
for (const part of condition.split(/\s+AND\s+/i)) {
|
|
48912
|
+
const trimmed = part.trim();
|
|
48913
|
+
let result = false;
|
|
48914
|
+
if (/^text\s+contains\s+/i.test(trimmed)) {
|
|
48915
|
+
const needle = trimmed.replace(/^text\s+contains\s+/i, "").replace(/^["']|["']$/g, "");
|
|
48916
|
+
result = termData.text.includes(needle);
|
|
48917
|
+
} else if (/^row\s+(\d+)\s+contains\s+/i.test(trimmed)) {
|
|
48918
|
+
const match = trimmed.match(/^row\s+(\d+)\s+contains\s+(.+)/i);
|
|
48919
|
+
if (match) {
|
|
48920
|
+
const rowIdx = parseInt(match[1]);
|
|
48921
|
+
const needle = match[2].replace(/^["']|["']$/g, "");
|
|
48922
|
+
result = (termData.rows[rowIdx] ?? "").includes(needle);
|
|
48923
|
+
}
|
|
48924
|
+
} else if (/^cursor\s+at\s+(\d+)\s*,\s*(\d+)/i.test(trimmed)) {
|
|
48925
|
+
const match = trimmed.match(/^cursor\s+at\s+(\d+)\s*,\s*(\d+)/i);
|
|
48926
|
+
if (match) {
|
|
48927
|
+
result = cursor.row === parseInt(match[1]) && cursor.col === parseInt(match[2]);
|
|
48928
|
+
}
|
|
48929
|
+
} else if (/^row_count\s*(>|>=|<|<=|==|!=)\s*(\d+)/i.test(trimmed)) {
|
|
48930
|
+
const match = trimmed.match(/^row_count\s*(>|>=|<|<=|==|!=)\s*(\d+)/i);
|
|
48931
|
+
if (match) {
|
|
48932
|
+
const op = match[1];
|
|
48933
|
+
const n = parseInt(match[2]);
|
|
48934
|
+
const count = termData.row_count;
|
|
48935
|
+
result = op === ">" ? count > n : op === ">=" ? count >= n : op === "<" ? count < n : op === "<=" ? count <= n : op === "==" ? count === n : count !== n;
|
|
48936
|
+
}
|
|
48937
|
+
}
|
|
48938
|
+
checks.push({ assertion: trimmed, result });
|
|
48939
|
+
if (!result)
|
|
48940
|
+
allPassed = false;
|
|
48941
|
+
}
|
|
48942
|
+
return json({ passed: allPassed, checks, cursor, row_count: termData.row_count });
|
|
48943
|
+
} catch (e) {
|
|
48944
|
+
return err(e);
|
|
48945
|
+
}
|
|
48946
|
+
});
|
|
48947
|
+
server.tool("browser_tui_snapshot", "Capture a structured snapshot of the terminal buffer: all rows as an array, cursor position, dimensions, and theme. Useful for comparing terminal state before and after actions.", {
|
|
48948
|
+
session_id: exports_external2.string().optional()
|
|
48949
|
+
}, async ({ session_id }) => {
|
|
48950
|
+
try {
|
|
48951
|
+
const sid = resolveSessionId(session_id);
|
|
48952
|
+
assertTuiSession(sid);
|
|
48953
|
+
const page = getSessionPage(sid);
|
|
48954
|
+
const snapshot = await page.evaluate(() => {
|
|
48955
|
+
const term = window.term ?? window.terminal;
|
|
48956
|
+
if (!term?.buffer?.active)
|
|
48957
|
+
return null;
|
|
48958
|
+
const buf = term.buffer.active;
|
|
48959
|
+
const rows = [];
|
|
48960
|
+
for (let i = 0;i < buf.length; i++) {
|
|
48961
|
+
const line = buf.getLine(i);
|
|
48962
|
+
if (line)
|
|
48963
|
+
rows.push(line.translateToString(true));
|
|
48964
|
+
}
|
|
48965
|
+
return {
|
|
48966
|
+
rows,
|
|
48967
|
+
cols: term.cols,
|
|
48968
|
+
total_rows: term.rows,
|
|
48969
|
+
buffer_length: buf.length,
|
|
48970
|
+
cursor_row: buf.cursorY,
|
|
48971
|
+
cursor_col: buf.cursorX,
|
|
48972
|
+
font_size: term.options?.fontSize,
|
|
48973
|
+
theme: term.options?.theme?.background === "#ffffff" ? "light" : "dark"
|
|
48974
|
+
};
|
|
48975
|
+
});
|
|
48976
|
+
if (!snapshot)
|
|
48977
|
+
return err(new Error("Could not capture snapshot \u2014 no terminal instance"));
|
|
48978
|
+
return json(snapshot);
|
|
48979
|
+
} catch (e) {
|
|
48980
|
+
return err(e);
|
|
48981
|
+
}
|
|
48982
|
+
});
|
|
48983
|
+
server.tool("browser_tui_record_start", "Start recording the terminal session as an asciicast v2 file (asciinema-compatible). Polls the terminal buffer at an interval and captures changes.", {
|
|
48984
|
+
session_id: exports_external2.string().optional(),
|
|
48985
|
+
interval_ms: exports_external2.number().optional().default(500).describe("Polling interval in ms (default: 500)")
|
|
48986
|
+
}, async ({ session_id, interval_ms }) => {
|
|
48987
|
+
try {
|
|
48988
|
+
const sid = resolveSessionId(session_id);
|
|
48989
|
+
assertTuiSession(sid);
|
|
48990
|
+
const page = getSessionPage(sid);
|
|
48991
|
+
if (activeRecordings2.has(sid)) {
|
|
48992
|
+
return err(new Error("Recording already active for this session. Stop it first with browser_tui_record_stop."));
|
|
48993
|
+
}
|
|
48994
|
+
const dims = await page.evaluate(() => {
|
|
48995
|
+
const term = window.term ?? window.terminal;
|
|
48996
|
+
return term ? { cols: term.cols, rows: term.rows } : { cols: 80, rows: 24 };
|
|
48997
|
+
});
|
|
48998
|
+
const initialText = (await getTermText(page)).text;
|
|
48999
|
+
const recording = {
|
|
49000
|
+
sessionId: sid,
|
|
49001
|
+
startTime: Date.now(),
|
|
49002
|
+
cols: dims.cols,
|
|
49003
|
+
rows: dims.rows,
|
|
49004
|
+
events: [],
|
|
49005
|
+
lastText: initialText,
|
|
49006
|
+
intervalId: setInterval(async () => {
|
|
49007
|
+
try {
|
|
49008
|
+
const current = await getTermText(page);
|
|
49009
|
+
if (current.text !== recording.lastText) {
|
|
49010
|
+
const elapsed = (Date.now() - recording.startTime) / 1000;
|
|
49011
|
+
recording.events.push([elapsed, "o", current.text.slice(recording.lastText.length) || current.text]);
|
|
49012
|
+
recording.lastText = current.text;
|
|
49013
|
+
}
|
|
49014
|
+
} catch {}
|
|
49015
|
+
}, interval_ms)
|
|
49016
|
+
};
|
|
49017
|
+
activeRecordings2.set(sid, recording);
|
|
49018
|
+
return json({ recording: true, session_id: sid, interval_ms, cols: dims.cols, rows: dims.rows });
|
|
49019
|
+
} catch (e) {
|
|
49020
|
+
return err(e);
|
|
49021
|
+
}
|
|
49022
|
+
});
|
|
49023
|
+
server.tool("browser_tui_record_stop", "Stop recording and return the asciicast v2 JSON. Compatible with asciinema player.", {
|
|
49024
|
+
session_id: exports_external2.string().optional()
|
|
49025
|
+
}, async ({ session_id }) => {
|
|
49026
|
+
try {
|
|
49027
|
+
const sid = resolveSessionId(session_id);
|
|
49028
|
+
const recording = activeRecordings2.get(sid);
|
|
49029
|
+
if (!recording)
|
|
49030
|
+
return err(new Error("No active recording for this session"));
|
|
49031
|
+
clearInterval(recording.intervalId);
|
|
49032
|
+
activeRecordings2.delete(sid);
|
|
49033
|
+
const duration = (Date.now() - recording.startTime) / 1000;
|
|
49034
|
+
const header = {
|
|
49035
|
+
version: 2,
|
|
49036
|
+
width: recording.cols,
|
|
49037
|
+
height: recording.rows,
|
|
49038
|
+
timestamp: Math.floor(recording.startTime / 1000),
|
|
49039
|
+
duration,
|
|
49040
|
+
env: { TERM: "xterm-256color", SHELL: "/bin/bash" }
|
|
49041
|
+
};
|
|
49042
|
+
const lines = [JSON.stringify(header)];
|
|
49043
|
+
for (const [time, type2, data] of recording.events) {
|
|
49044
|
+
lines.push(JSON.stringify([time, type2, data]));
|
|
49045
|
+
}
|
|
49046
|
+
const asciicast = lines.join(`
|
|
49047
|
+
`);
|
|
49048
|
+
return json({
|
|
49049
|
+
format: "asciicast_v2",
|
|
49050
|
+
duration_seconds: Math.round(duration * 10) / 10,
|
|
49051
|
+
event_count: recording.events.length,
|
|
49052
|
+
asciicast
|
|
49053
|
+
});
|
|
49054
|
+
} catch (e) {
|
|
49055
|
+
return err(e);
|
|
49056
|
+
}
|
|
49057
|
+
});
|
|
49058
|
+
}
|
|
49059
|
+
var KEY_MAP, activeRecordings2;
|
|
49060
|
+
var init_tui2 = __esm(() => {
|
|
49061
|
+
init_helpers();
|
|
49062
|
+
KEY_MAP = {
|
|
49063
|
+
"ctrl+c": "\x03",
|
|
49064
|
+
"ctrl+d": "\x04",
|
|
49065
|
+
"ctrl+z": "\x1A",
|
|
49066
|
+
"ctrl+l": "\f",
|
|
49067
|
+
"ctrl+a": "\x01",
|
|
49068
|
+
"ctrl+e": "\x05",
|
|
49069
|
+
"ctrl+k": "\v",
|
|
49070
|
+
"ctrl+u": "\x15",
|
|
49071
|
+
"ctrl+w": "\x17",
|
|
49072
|
+
"ctrl+r": "\x12",
|
|
49073
|
+
"ctrl+p": "\x10",
|
|
49074
|
+
"ctrl+n": "\x0E",
|
|
49075
|
+
enter: "Enter",
|
|
49076
|
+
tab: "Tab",
|
|
49077
|
+
escape: "Escape",
|
|
49078
|
+
esc: "Escape",
|
|
49079
|
+
backspace: "Backspace",
|
|
49080
|
+
delete: "Delete",
|
|
49081
|
+
space: " ",
|
|
49082
|
+
up: "ArrowUp",
|
|
49083
|
+
down: "ArrowDown",
|
|
49084
|
+
left: "ArrowLeft",
|
|
49085
|
+
right: "ArrowRight",
|
|
49086
|
+
arrow_up: "ArrowUp",
|
|
49087
|
+
arrow_down: "ArrowDown",
|
|
49088
|
+
arrow_left: "ArrowLeft",
|
|
49089
|
+
arrow_right: "ArrowRight",
|
|
49090
|
+
home: "Home",
|
|
49091
|
+
end: "End",
|
|
49092
|
+
page_up: "PageUp",
|
|
49093
|
+
page_down: "PageDown",
|
|
49094
|
+
f1: "F1",
|
|
49095
|
+
f2: "F2",
|
|
49096
|
+
f3: "F3",
|
|
49097
|
+
f4: "F4",
|
|
49098
|
+
f5: "F5",
|
|
49099
|
+
f6: "F6",
|
|
49100
|
+
f7: "F7",
|
|
49101
|
+
f8: "F8",
|
|
49102
|
+
f9: "F9",
|
|
49103
|
+
f10: "F10",
|
|
49104
|
+
f11: "F11",
|
|
49105
|
+
f12: "F12"
|
|
49106
|
+
};
|
|
49107
|
+
activeRecordings2 = new Map;
|
|
49108
|
+
});
|
|
49109
|
+
|
|
48682
49110
|
// src/mcp/index.ts
|
|
48683
49111
|
var exports_mcp = {};
|
|
48684
49112
|
import { McpServer as McpServer2 } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -48692,6 +49120,7 @@ var init_mcp = __esm(async () => {
|
|
|
48692
49120
|
init_capture();
|
|
48693
49121
|
init_network2();
|
|
48694
49122
|
init_data();
|
|
49123
|
+
init_tui2();
|
|
48695
49124
|
init_zod2();
|
|
48696
49125
|
init_schema();
|
|
48697
49126
|
_pkg = JSON.parse(readFileSync10(join21(import.meta.dir, "../../package.json"), "utf8"));
|
|
@@ -48704,6 +49133,7 @@ var init_mcp = __esm(async () => {
|
|
|
48704
49133
|
register6(server);
|
|
48705
49134
|
register7(server);
|
|
48706
49135
|
register11(server);
|
|
49136
|
+
register12(server);
|
|
48707
49137
|
server.tool("send_feedback", "Send feedback about this service", { message: exports_external2.string(), email: exports_external2.string().optional(), category: exports_external2.enum(["bug", "feature", "general"]).optional() }, async (params) => {
|
|
48708
49138
|
try {
|
|
48709
49139
|
const db2 = getDatabase();
|
|
@@ -49533,7 +49963,7 @@ init_recorder();
|
|
|
49533
49963
|
init_recordings();
|
|
49534
49964
|
init_lightpanda();
|
|
49535
49965
|
import chalk4 from "chalk";
|
|
49536
|
-
function
|
|
49966
|
+
function register13(program2) {
|
|
49537
49967
|
const recordCmd = program2.command("record").description("Manage action recordings");
|
|
49538
49968
|
recordCmd.command("start <name>").description("Start recording actions in a new session").option("--url <url>", "Start URL").option("--engine <engine>", "Browser engine", "auto").option("--headed", "Run in headed (visible) mode").action(async (name, opts) => {
|
|
49539
49969
|
const { session } = await createSession2({ engine: opts.engine, startUrl: opts.url, headless: !opts.headed });
|
|
@@ -49938,5 +50368,5 @@ program2.name("browser").description("@hasna/browser \u2014 general-purpose brow
|
|
|
49938
50368
|
register(program2);
|
|
49939
50369
|
register2(program2);
|
|
49940
50370
|
register3(program2);
|
|
49941
|
-
|
|
50371
|
+
register13(program2);
|
|
49942
50372
|
program2.parseAsync(process.argv);
|
package/dist/engines/tui.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/engines/tui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYhD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,YAAY,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,QAAQ,CAAC;CACjB;AAkDD;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAqCD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,KAAK,CAAC,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/engines/tui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYhD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,YAAY,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,QAAQ,CAAC;CACjB;AAkDD;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAqCD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACd,GACL,OAAO,CAAC,UAAU,CAAC,CA+FrB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAStE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBjE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,MAAe,GACzB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjE"}
|
package/dist/index.js
CHANGED
|
@@ -18493,6 +18493,13 @@ async function launchTui(command, options = {}) {
|
|
|
18493
18493
|
if (viewport2)
|
|
18494
18494
|
viewport2.style.backgroundColor = theme.background;
|
|
18495
18495
|
}, themeColors);
|
|
18496
|
+
if (options.fontSize) {
|
|
18497
|
+
await page.evaluate((size) => {
|
|
18498
|
+
const term = window.term ?? window.terminal;
|
|
18499
|
+
if (term?.options)
|
|
18500
|
+
term.options.fontSize = size;
|
|
18501
|
+
}, options.fontSize);
|
|
18502
|
+
}
|
|
18496
18503
|
return { ttydProcess, port, browser, page, theme: resolvedTheme };
|
|
18497
18504
|
} catch (err) {
|
|
18498
18505
|
ttydProcess.kill();
|
|
@@ -18917,7 +18924,8 @@ async function createSession2(opts = {}) {
|
|
|
18917
18924
|
const tuiSess = await launchTui(command, {
|
|
18918
18925
|
headless: opts.headless ?? true,
|
|
18919
18926
|
viewport: opts.viewport,
|
|
18920
|
-
theme: opts.tuiTheme ?? "system"
|
|
18927
|
+
theme: opts.tuiTheme ?? "system",
|
|
18928
|
+
fontSize: opts.tuiFontSize
|
|
18921
18929
|
});
|
|
18922
18930
|
browser = tuiSess.browser;
|
|
18923
18931
|
page = tuiSess.page;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAA0F,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE/I,OAAO,EAAE,iBAAiB,EAAyB,MAAM,2BAA2B,CAAC;AAyBrF,QAAA,MAAM,IAAI,aAAqB,CAAC;AA2ChC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,wBAAsB,aAAa,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAA0F,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE/I,OAAO,EAAE,iBAAiB,EAAyB,MAAM,2BAA2B,CAAC;AAyBrF,QAAA,MAAM,IAAI,aAAqB,CAAC;AA2ChC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,wBAAsB,aAAa,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmL3F;AAID,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAkBtD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAE7E;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAK5D;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAIjE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAIlE;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBtE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,aAAa,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,EAAE,CAE/F;AAED,wBAAgB,iBAAiB,IAAI,OAAO,EAAE,CAE7C;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKtD;AAED,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC;AAE/B,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,kBAE5C;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,WAErD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGxF;AAID,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAcpF;AAID,wBAAgB,iBAAiB,IAAI,mBAAmB,GAAG,IAAI,CAa9D;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -10685,6 +10685,13 @@ async function launchTui(command, options = {}) {
|
|
|
10685
10685
|
if (viewport2)
|
|
10686
10686
|
viewport2.style.backgroundColor = theme.background;
|
|
10687
10687
|
}, themeColors);
|
|
10688
|
+
if (options.fontSize) {
|
|
10689
|
+
await page.evaluate((size) => {
|
|
10690
|
+
const term = window.term ?? window.terminal;
|
|
10691
|
+
if (term?.options)
|
|
10692
|
+
term.options.fontSize = size;
|
|
10693
|
+
}, options.fontSize);
|
|
10694
|
+
}
|
|
10688
10695
|
return { ttydProcess, port, browser, page, theme: resolvedTheme };
|
|
10689
10696
|
} catch (err) {
|
|
10690
10697
|
ttydProcess.kill();
|
|
@@ -12186,7 +12193,8 @@ async function createSession2(opts = {}) {
|
|
|
12186
12193
|
const tuiSess = await launchTui(command, {
|
|
12187
12194
|
headless: opts.headless ?? true,
|
|
12188
12195
|
viewport: opts.viewport,
|
|
12189
|
-
theme: opts.tuiTheme ?? "system"
|
|
12196
|
+
theme: opts.tuiTheme ?? "system",
|
|
12197
|
+
fontSize: opts.tuiFontSize
|
|
12190
12198
|
});
|
|
12191
12199
|
browser = tuiSess.browser;
|
|
12192
12200
|
page = tuiSess.page;
|
|
@@ -43919,8 +43927,9 @@ TIPS:
|
|
|
43919
43927
|
force_new: exports_external.boolean().optional().default(false).describe("Force create a new session even if agent already has one"),
|
|
43920
43928
|
tags: exports_external.array(exports_external.string()).optional(),
|
|
43921
43929
|
cdp_url: exports_external.string().optional().describe("Connect to existing Chrome via CDP (e.g. http://localhost:9222). Start Chrome with --remote-debugging-port=9222"),
|
|
43922
|
-
tui_theme: exports_external.enum(["dark", "light", "system"]).optional().default("system").describe("TUI engine only: terminal color theme. 'system' auto-detects OS dark/light mode. Choose 'light' for light backgrounds or 'dark' for dark backgrounds.
|
|
43923
|
-
|
|
43930
|
+
tui_theme: exports_external.enum(["dark", "light", "system"]).optional().default("system").describe("TUI engine only: terminal color theme. 'system' auto-detects OS dark/light mode. Choose 'light' for light backgrounds or 'dark' for dark backgrounds."),
|
|
43931
|
+
tui_font_size: exports_external.number().optional().default(14).describe("TUI engine only: terminal font size in pixels (default: 14). Larger = more readable screenshots, smaller = more content visible.")
|
|
43932
|
+
}, async ({ engine, use_case, project_id, agent_id, start_url, headless, viewport_width, viewport_height, stealth, auto_gallery, storage_state, force_new, tags, cdp_url, tui_theme, tui_font_size }) => {
|
|
43924
43933
|
try {
|
|
43925
43934
|
if (agent_id && !force_new) {
|
|
43926
43935
|
const existing = getActiveSessionForAgent2(agent_id);
|
|
@@ -43939,7 +43948,8 @@ TIPS:
|
|
|
43939
43948
|
autoGallery: auto_gallery,
|
|
43940
43949
|
storageState: storage_state,
|
|
43941
43950
|
cdpUrl: cdp_url,
|
|
43942
|
-
tuiTheme: tui_theme
|
|
43951
|
+
tuiTheme: tui_theme,
|
|
43952
|
+
tuiFontSize: tui_font_size
|
|
43943
43953
|
});
|
|
43944
43954
|
if (tags?.length) {
|
|
43945
43955
|
const { addSessionTag: addSessionTag2 } = await Promise.resolve().then(() => (init_sessions(), exports_sessions));
|
|
@@ -46118,6 +46128,18 @@ function register7(server) {
|
|
|
46118
46128
|
{ tool: "browser_tab_switch", description: "Switch to a tab by index" },
|
|
46119
46129
|
{ tool: "browser_tab_close", description: "Close a tab by index" }
|
|
46120
46130
|
],
|
|
46131
|
+
TUI: [
|
|
46132
|
+
{ tool: "browser_tui_send_keys", description: "Send keystrokes (ctrl+c, arrow_up, tab, enter, etc.)" },
|
|
46133
|
+
{ tool: "browser_tui_send_text", description: "Type text + optional Enter (most common TUI interaction)" },
|
|
46134
|
+
{ tool: "browser_tui_resize", description: "Resize terminal cols/rows mid-session" },
|
|
46135
|
+
{ tool: "browser_tui_get_text", description: "Get terminal text buffer (full or row range)" },
|
|
46136
|
+
{ tool: "browser_tui_wait_for_text", description: "Wait for text to appear in terminal output" },
|
|
46137
|
+
{ tool: "browser_tui_get_cursor", description: "Get cursor position (row, col)" },
|
|
46138
|
+
{ tool: "browser_tui_assert", description: "Assert terminal conditions (text contains, row N contains, cursor at)" },
|
|
46139
|
+
{ tool: "browser_tui_snapshot", description: "Structured terminal snapshot (rows array, cursor, dimensions)" },
|
|
46140
|
+
{ tool: "browser_tui_record_start", description: "Start recording terminal as asciicast" },
|
|
46141
|
+
{ tool: "browser_tui_record_stop", description: "Stop recording, return asciicast v2 JSON" }
|
|
46142
|
+
],
|
|
46121
46143
|
Meta: [
|
|
46122
46144
|
{ tool: "browser_check", description: "RECOMMENDED: One-call page summary with diagnostics" },
|
|
46123
46145
|
{ tool: "browser_version", description: "Show running binary version and tool count" },
|
|
@@ -46522,6 +46544,408 @@ function register8(server) {
|
|
|
46522
46544
|
register7(server);
|
|
46523
46545
|
}
|
|
46524
46546
|
|
|
46547
|
+
// src/mcp/tui.ts
|
|
46548
|
+
var KEY_MAP = {
|
|
46549
|
+
"ctrl+c": "\x03",
|
|
46550
|
+
"ctrl+d": "\x04",
|
|
46551
|
+
"ctrl+z": "\x1A",
|
|
46552
|
+
"ctrl+l": "\f",
|
|
46553
|
+
"ctrl+a": "\x01",
|
|
46554
|
+
"ctrl+e": "\x05",
|
|
46555
|
+
"ctrl+k": "\v",
|
|
46556
|
+
"ctrl+u": "\x15",
|
|
46557
|
+
"ctrl+w": "\x17",
|
|
46558
|
+
"ctrl+r": "\x12",
|
|
46559
|
+
"ctrl+p": "\x10",
|
|
46560
|
+
"ctrl+n": "\x0E",
|
|
46561
|
+
enter: "Enter",
|
|
46562
|
+
tab: "Tab",
|
|
46563
|
+
escape: "Escape",
|
|
46564
|
+
esc: "Escape",
|
|
46565
|
+
backspace: "Backspace",
|
|
46566
|
+
delete: "Delete",
|
|
46567
|
+
space: " ",
|
|
46568
|
+
up: "ArrowUp",
|
|
46569
|
+
down: "ArrowDown",
|
|
46570
|
+
left: "ArrowLeft",
|
|
46571
|
+
right: "ArrowRight",
|
|
46572
|
+
arrow_up: "ArrowUp",
|
|
46573
|
+
arrow_down: "ArrowDown",
|
|
46574
|
+
arrow_left: "ArrowLeft",
|
|
46575
|
+
arrow_right: "ArrowRight",
|
|
46576
|
+
home: "Home",
|
|
46577
|
+
end: "End",
|
|
46578
|
+
page_up: "PageUp",
|
|
46579
|
+
page_down: "PageDown",
|
|
46580
|
+
f1: "F1",
|
|
46581
|
+
f2: "F2",
|
|
46582
|
+
f3: "F3",
|
|
46583
|
+
f4: "F4",
|
|
46584
|
+
f5: "F5",
|
|
46585
|
+
f6: "F6",
|
|
46586
|
+
f7: "F7",
|
|
46587
|
+
f8: "F8",
|
|
46588
|
+
f9: "F9",
|
|
46589
|
+
f10: "F10",
|
|
46590
|
+
f11: "F11",
|
|
46591
|
+
f12: "F12"
|
|
46592
|
+
};
|
|
46593
|
+
function assertTuiSession(sessionId) {
|
|
46594
|
+
const { getSessionEngine: getSessionEngine2 } = (init_session(), __toCommonJS(exports_session));
|
|
46595
|
+
const engine = getSessionEngine2(sessionId);
|
|
46596
|
+
if (engine !== "tui") {
|
|
46597
|
+
throw new Error(`browser_tui_* tools require a TUI session (engine="tui"), but this session uses engine="${engine}". Create a TUI session with: browser_session_create(engine="tui", start_url="your-command")`);
|
|
46598
|
+
}
|
|
46599
|
+
}
|
|
46600
|
+
async function getTermText(page, startRow, endRow) {
|
|
46601
|
+
const result = await page.evaluate((args) => {
|
|
46602
|
+
const [sr, er] = args;
|
|
46603
|
+
const term = window.term ?? window.terminal;
|
|
46604
|
+
if (!term?.buffer?.active)
|
|
46605
|
+
return { text: "", rows: [], row_count: 0 };
|
|
46606
|
+
const buf = term.buffer.active;
|
|
46607
|
+
const allRows = [];
|
|
46608
|
+
for (let i = 0;i < buf.length; i++) {
|
|
46609
|
+
const line = buf.getLine(i);
|
|
46610
|
+
if (line)
|
|
46611
|
+
allRows.push(line.translateToString(true));
|
|
46612
|
+
}
|
|
46613
|
+
const start = sr ?? 0;
|
|
46614
|
+
const end = er ?? allRows.length;
|
|
46615
|
+
const filtered = allRows.slice(start, end);
|
|
46616
|
+
return { text: filtered.join(`
|
|
46617
|
+
`).trimEnd(), rows: filtered, row_count: allRows.length };
|
|
46618
|
+
}, [startRow, endRow]);
|
|
46619
|
+
return result;
|
|
46620
|
+
}
|
|
46621
|
+
var activeRecordings2 = new Map;
|
|
46622
|
+
function register9(server) {
|
|
46623
|
+
server.tool("browser_tui_send_keys", `Send keystrokes to a TUI terminal session. Use friendly key names.
|
|
46624
|
+
|
|
46625
|
+
SUPPORTED KEYS:
|
|
46626
|
+
- Control: ctrl+c, ctrl+d, ctrl+z, ctrl+l, ctrl+a, ctrl+e, ctrl+k, ctrl+u, ctrl+w, ctrl+r
|
|
46627
|
+
- Navigation: enter, tab, escape, backspace, delete, space
|
|
46628
|
+
- Arrows: up, down, left, right (or arrow_up, arrow_down, arrow_left, arrow_right)
|
|
46629
|
+
- Function: f1-f12
|
|
46630
|
+
- Position: home, end, page_up, page_down
|
|
46631
|
+
|
|
46632
|
+
Pass multiple keys as a comma-separated string: "tab,tab,enter" or "ctrl+c"
|
|
46633
|
+
For typing text, use browser_tui_send_text instead.`, {
|
|
46634
|
+
session_id: exports_external.string().optional(),
|
|
46635
|
+
keys: exports_external.string().describe("Comma-separated key names: 'enter', 'ctrl+c', 'tab,tab,enter', 'arrow_down,arrow_down,enter'")
|
|
46636
|
+
}, async ({ session_id, keys }) => {
|
|
46637
|
+
try {
|
|
46638
|
+
const sid = resolveSessionId(session_id);
|
|
46639
|
+
assertTuiSession(sid);
|
|
46640
|
+
const page = getSessionPage(sid);
|
|
46641
|
+
const keyList = keys.split(",").map((k) => k.trim().toLowerCase());
|
|
46642
|
+
const sent = [];
|
|
46643
|
+
for (const key of keyList) {
|
|
46644
|
+
const mapped = KEY_MAP[key];
|
|
46645
|
+
if (mapped) {
|
|
46646
|
+
if (mapped.length === 1 && mapped.charCodeAt(0) < 32) {
|
|
46647
|
+
await page.keyboard.insertText(mapped);
|
|
46648
|
+
} else {
|
|
46649
|
+
await page.keyboard.press(mapped);
|
|
46650
|
+
}
|
|
46651
|
+
sent.push(key);
|
|
46652
|
+
} else {
|
|
46653
|
+
await page.keyboard.press(key);
|
|
46654
|
+
sent.push(key);
|
|
46655
|
+
}
|
|
46656
|
+
}
|
|
46657
|
+
return json({ sent, count: sent.length });
|
|
46658
|
+
} catch (e) {
|
|
46659
|
+
return err(e);
|
|
46660
|
+
}
|
|
46661
|
+
});
|
|
46662
|
+
server.tool("browser_tui_send_text", `Type text into a TUI terminal and optionally press Enter. This is the most common way to interact with terminal apps.
|
|
46663
|
+
|
|
46664
|
+
Examples:
|
|
46665
|
+
- Send a command: text="ls -la", press_enter=true
|
|
46666
|
+
- Type without executing: text="partial input", press_enter=false
|
|
46667
|
+
- Send to a prompt: text="yes", press_enter=true`, {
|
|
46668
|
+
session_id: exports_external.string().optional(),
|
|
46669
|
+
text: exports_external.string().describe("Text to type into the terminal"),
|
|
46670
|
+
press_enter: exports_external.boolean().optional().default(true).describe("Press Enter after typing (default: true)")
|
|
46671
|
+
}, async ({ session_id, text, press_enter }) => {
|
|
46672
|
+
try {
|
|
46673
|
+
const sid = resolveSessionId(session_id);
|
|
46674
|
+
assertTuiSession(sid);
|
|
46675
|
+
const page = getSessionPage(sid);
|
|
46676
|
+
const textarea = await page.$(".xterm-helper-textarea");
|
|
46677
|
+
if (textarea) {
|
|
46678
|
+
await textarea.type(text);
|
|
46679
|
+
} else {
|
|
46680
|
+
await page.keyboard.type(text);
|
|
46681
|
+
}
|
|
46682
|
+
if (press_enter) {
|
|
46683
|
+
await page.keyboard.press("Enter");
|
|
46684
|
+
}
|
|
46685
|
+
return json({ typed: text, pressed_enter: press_enter });
|
|
46686
|
+
} catch (e) {
|
|
46687
|
+
return err(e);
|
|
46688
|
+
}
|
|
46689
|
+
});
|
|
46690
|
+
server.tool("browser_tui_resize", "Resize the terminal to a specific number of columns and rows. Useful for testing responsive TUI layouts at different terminal sizes.", {
|
|
46691
|
+
session_id: exports_external.string().optional(),
|
|
46692
|
+
cols: exports_external.number().describe("Number of columns (e.g. 80, 120, 200)"),
|
|
46693
|
+
rows: exports_external.number().describe("Number of rows (e.g. 24, 40, 50)")
|
|
46694
|
+
}, async ({ session_id, cols, rows }) => {
|
|
46695
|
+
try {
|
|
46696
|
+
const sid = resolveSessionId(session_id);
|
|
46697
|
+
assertTuiSession(sid);
|
|
46698
|
+
const page = getSessionPage(sid);
|
|
46699
|
+
const result = await page.evaluate((args) => {
|
|
46700
|
+
const [c, r] = args;
|
|
46701
|
+
const term = window.term ?? window.terminal;
|
|
46702
|
+
if (!term)
|
|
46703
|
+
return { resized: false, error: "No terminal instance found" };
|
|
46704
|
+
term.resize(c, r);
|
|
46705
|
+
return { resized: true, cols: c, rows: r };
|
|
46706
|
+
}, [cols, rows]);
|
|
46707
|
+
return json(result);
|
|
46708
|
+
} catch (e) {
|
|
46709
|
+
return err(e);
|
|
46710
|
+
}
|
|
46711
|
+
});
|
|
46712
|
+
server.tool("browser_tui_get_text", `Get the text content from the terminal buffer. Returns all visible text, or a specific row range.
|
|
46713
|
+
|
|
46714
|
+
Use this to read what the terminal is currently displaying. For waiting until specific text appears, use browser_tui_wait_for_text instead.`, {
|
|
46715
|
+
session_id: exports_external.string().optional(),
|
|
46716
|
+
start_row: exports_external.number().optional().describe("First row to read (0-indexed, default: 0)"),
|
|
46717
|
+
end_row: exports_external.number().optional().describe("Last row (exclusive). Omit for all rows.")
|
|
46718
|
+
}, async ({ session_id, start_row, end_row }) => {
|
|
46719
|
+
try {
|
|
46720
|
+
const sid = resolveSessionId(session_id);
|
|
46721
|
+
assertTuiSession(sid);
|
|
46722
|
+
const page = getSessionPage(sid);
|
|
46723
|
+
const result = await getTermText(page, start_row, end_row);
|
|
46724
|
+
return json(result);
|
|
46725
|
+
} catch (e) {
|
|
46726
|
+
return err(e);
|
|
46727
|
+
}
|
|
46728
|
+
});
|
|
46729
|
+
server.tool("browser_tui_wait_for_text", `Wait for specific text to appear in the terminal output. Polls the terminal buffer until the text is found or timeout is reached.
|
|
46730
|
+
|
|
46731
|
+
Use this after sending a command to wait for its output, or to wait for a TUI app to finish loading.`, {
|
|
46732
|
+
session_id: exports_external.string().optional(),
|
|
46733
|
+
text: exports_external.string().describe("Text to wait for (substring match)"),
|
|
46734
|
+
timeout_ms: exports_external.number().optional().default(30000).describe("Timeout in milliseconds (default: 30000)")
|
|
46735
|
+
}, async ({ session_id, text, timeout_ms }) => {
|
|
46736
|
+
try {
|
|
46737
|
+
const sid = resolveSessionId(session_id);
|
|
46738
|
+
assertTuiSession(sid);
|
|
46739
|
+
const page = getSessionPage(sid);
|
|
46740
|
+
const start = Date.now();
|
|
46741
|
+
while (Date.now() - start < timeout_ms) {
|
|
46742
|
+
const result = await getTermText(page);
|
|
46743
|
+
if (result.text.includes(text)) {
|
|
46744
|
+
return json({ found: true, elapsed_ms: Date.now() - start, terminal_text: result.text });
|
|
46745
|
+
}
|
|
46746
|
+
await new Promise((r) => setTimeout(r, 250));
|
|
46747
|
+
}
|
|
46748
|
+
const finalText = await getTermText(page);
|
|
46749
|
+
return json({ found: false, elapsed_ms: timeout_ms, terminal_text: finalText.text });
|
|
46750
|
+
} catch (e) {
|
|
46751
|
+
return err(e);
|
|
46752
|
+
}
|
|
46753
|
+
});
|
|
46754
|
+
server.tool("browser_tui_get_cursor", "Get the current cursor position (row and column) in the terminal.", {
|
|
46755
|
+
session_id: exports_external.string().optional()
|
|
46756
|
+
}, async ({ session_id }) => {
|
|
46757
|
+
try {
|
|
46758
|
+
const sid = resolveSessionId(session_id);
|
|
46759
|
+
assertTuiSession(sid);
|
|
46760
|
+
const page = getSessionPage(sid);
|
|
46761
|
+
const cursor = await page.evaluate(() => {
|
|
46762
|
+
const term = window.term ?? window.terminal;
|
|
46763
|
+
if (!term?.buffer?.active)
|
|
46764
|
+
return null;
|
|
46765
|
+
return { row: term.buffer.active.cursorY, col: term.buffer.active.cursorX };
|
|
46766
|
+
});
|
|
46767
|
+
if (!cursor)
|
|
46768
|
+
return err(new Error("Could not read cursor position \u2014 no terminal instance"));
|
|
46769
|
+
return json(cursor);
|
|
46770
|
+
} catch (e) {
|
|
46771
|
+
return err(e);
|
|
46772
|
+
}
|
|
46773
|
+
});
|
|
46774
|
+
server.tool("browser_tui_assert", `Assert conditions on the terminal state. Chain multiple conditions with AND.
|
|
46775
|
+
|
|
46776
|
+
CONDITION SYNTAX:
|
|
46777
|
+
- "text contains X" \u2014 terminal buffer contains substring X
|
|
46778
|
+
- "row N contains X" \u2014 row N (0-indexed) contains substring X
|
|
46779
|
+
- "cursor at R,C" \u2014 cursor is at row R, column C
|
|
46780
|
+
- "row_count > N" \u2014 total rows greater than N
|
|
46781
|
+
- "row_count == N" \u2014 total rows equals N
|
|
46782
|
+
|
|
46783
|
+
Example: "text contains hello AND row 0 contains $ AND cursor at 1,0"`, {
|
|
46784
|
+
session_id: exports_external.string().optional(),
|
|
46785
|
+
condition: exports_external.string().describe("Assertion condition(s), joined with AND")
|
|
46786
|
+
}, async ({ session_id, condition }) => {
|
|
46787
|
+
try {
|
|
46788
|
+
const sid = resolveSessionId(session_id);
|
|
46789
|
+
assertTuiSession(sid);
|
|
46790
|
+
const page = getSessionPage(sid);
|
|
46791
|
+
const termData = await getTermText(page);
|
|
46792
|
+
const cursor = await page.evaluate(() => {
|
|
46793
|
+
const term = window.term ?? window.terminal;
|
|
46794
|
+
if (!term?.buffer?.active)
|
|
46795
|
+
return { row: -1, col: -1 };
|
|
46796
|
+
return { row: term.buffer.active.cursorY, col: term.buffer.active.cursorX };
|
|
46797
|
+
});
|
|
46798
|
+
const checks = [];
|
|
46799
|
+
let allPassed = true;
|
|
46800
|
+
for (const part of condition.split(/\s+AND\s+/i)) {
|
|
46801
|
+
const trimmed = part.trim();
|
|
46802
|
+
let result = false;
|
|
46803
|
+
if (/^text\s+contains\s+/i.test(trimmed)) {
|
|
46804
|
+
const needle = trimmed.replace(/^text\s+contains\s+/i, "").replace(/^["']|["']$/g, "");
|
|
46805
|
+
result = termData.text.includes(needle);
|
|
46806
|
+
} else if (/^row\s+(\d+)\s+contains\s+/i.test(trimmed)) {
|
|
46807
|
+
const match = trimmed.match(/^row\s+(\d+)\s+contains\s+(.+)/i);
|
|
46808
|
+
if (match) {
|
|
46809
|
+
const rowIdx = parseInt(match[1]);
|
|
46810
|
+
const needle = match[2].replace(/^["']|["']$/g, "");
|
|
46811
|
+
result = (termData.rows[rowIdx] ?? "").includes(needle);
|
|
46812
|
+
}
|
|
46813
|
+
} else if (/^cursor\s+at\s+(\d+)\s*,\s*(\d+)/i.test(trimmed)) {
|
|
46814
|
+
const match = trimmed.match(/^cursor\s+at\s+(\d+)\s*,\s*(\d+)/i);
|
|
46815
|
+
if (match) {
|
|
46816
|
+
result = cursor.row === parseInt(match[1]) && cursor.col === parseInt(match[2]);
|
|
46817
|
+
}
|
|
46818
|
+
} else if (/^row_count\s*(>|>=|<|<=|==|!=)\s*(\d+)/i.test(trimmed)) {
|
|
46819
|
+
const match = trimmed.match(/^row_count\s*(>|>=|<|<=|==|!=)\s*(\d+)/i);
|
|
46820
|
+
if (match) {
|
|
46821
|
+
const op = match[1];
|
|
46822
|
+
const n = parseInt(match[2]);
|
|
46823
|
+
const count = termData.row_count;
|
|
46824
|
+
result = op === ">" ? count > n : op === ">=" ? count >= n : op === "<" ? count < n : op === "<=" ? count <= n : op === "==" ? count === n : count !== n;
|
|
46825
|
+
}
|
|
46826
|
+
}
|
|
46827
|
+
checks.push({ assertion: trimmed, result });
|
|
46828
|
+
if (!result)
|
|
46829
|
+
allPassed = false;
|
|
46830
|
+
}
|
|
46831
|
+
return json({ passed: allPassed, checks, cursor, row_count: termData.row_count });
|
|
46832
|
+
} catch (e) {
|
|
46833
|
+
return err(e);
|
|
46834
|
+
}
|
|
46835
|
+
});
|
|
46836
|
+
server.tool("browser_tui_snapshot", "Capture a structured snapshot of the terminal buffer: all rows as an array, cursor position, dimensions, and theme. Useful for comparing terminal state before and after actions.", {
|
|
46837
|
+
session_id: exports_external.string().optional()
|
|
46838
|
+
}, async ({ session_id }) => {
|
|
46839
|
+
try {
|
|
46840
|
+
const sid = resolveSessionId(session_id);
|
|
46841
|
+
assertTuiSession(sid);
|
|
46842
|
+
const page = getSessionPage(sid);
|
|
46843
|
+
const snapshot = await page.evaluate(() => {
|
|
46844
|
+
const term = window.term ?? window.terminal;
|
|
46845
|
+
if (!term?.buffer?.active)
|
|
46846
|
+
return null;
|
|
46847
|
+
const buf = term.buffer.active;
|
|
46848
|
+
const rows = [];
|
|
46849
|
+
for (let i = 0;i < buf.length; i++) {
|
|
46850
|
+
const line = buf.getLine(i);
|
|
46851
|
+
if (line)
|
|
46852
|
+
rows.push(line.translateToString(true));
|
|
46853
|
+
}
|
|
46854
|
+
return {
|
|
46855
|
+
rows,
|
|
46856
|
+
cols: term.cols,
|
|
46857
|
+
total_rows: term.rows,
|
|
46858
|
+
buffer_length: buf.length,
|
|
46859
|
+
cursor_row: buf.cursorY,
|
|
46860
|
+
cursor_col: buf.cursorX,
|
|
46861
|
+
font_size: term.options?.fontSize,
|
|
46862
|
+
theme: term.options?.theme?.background === "#ffffff" ? "light" : "dark"
|
|
46863
|
+
};
|
|
46864
|
+
});
|
|
46865
|
+
if (!snapshot)
|
|
46866
|
+
return err(new Error("Could not capture snapshot \u2014 no terminal instance"));
|
|
46867
|
+
return json(snapshot);
|
|
46868
|
+
} catch (e) {
|
|
46869
|
+
return err(e);
|
|
46870
|
+
}
|
|
46871
|
+
});
|
|
46872
|
+
server.tool("browser_tui_record_start", "Start recording the terminal session as an asciicast v2 file (asciinema-compatible). Polls the terminal buffer at an interval and captures changes.", {
|
|
46873
|
+
session_id: exports_external.string().optional(),
|
|
46874
|
+
interval_ms: exports_external.number().optional().default(500).describe("Polling interval in ms (default: 500)")
|
|
46875
|
+
}, async ({ session_id, interval_ms }) => {
|
|
46876
|
+
try {
|
|
46877
|
+
const sid = resolveSessionId(session_id);
|
|
46878
|
+
assertTuiSession(sid);
|
|
46879
|
+
const page = getSessionPage(sid);
|
|
46880
|
+
if (activeRecordings2.has(sid)) {
|
|
46881
|
+
return err(new Error("Recording already active for this session. Stop it first with browser_tui_record_stop."));
|
|
46882
|
+
}
|
|
46883
|
+
const dims = await page.evaluate(() => {
|
|
46884
|
+
const term = window.term ?? window.terminal;
|
|
46885
|
+
return term ? { cols: term.cols, rows: term.rows } : { cols: 80, rows: 24 };
|
|
46886
|
+
});
|
|
46887
|
+
const initialText = (await getTermText(page)).text;
|
|
46888
|
+
const recording = {
|
|
46889
|
+
sessionId: sid,
|
|
46890
|
+
startTime: Date.now(),
|
|
46891
|
+
cols: dims.cols,
|
|
46892
|
+
rows: dims.rows,
|
|
46893
|
+
events: [],
|
|
46894
|
+
lastText: initialText,
|
|
46895
|
+
intervalId: setInterval(async () => {
|
|
46896
|
+
try {
|
|
46897
|
+
const current = await getTermText(page);
|
|
46898
|
+
if (current.text !== recording.lastText) {
|
|
46899
|
+
const elapsed = (Date.now() - recording.startTime) / 1000;
|
|
46900
|
+
recording.events.push([elapsed, "o", current.text.slice(recording.lastText.length) || current.text]);
|
|
46901
|
+
recording.lastText = current.text;
|
|
46902
|
+
}
|
|
46903
|
+
} catch {}
|
|
46904
|
+
}, interval_ms)
|
|
46905
|
+
};
|
|
46906
|
+
activeRecordings2.set(sid, recording);
|
|
46907
|
+
return json({ recording: true, session_id: sid, interval_ms, cols: dims.cols, rows: dims.rows });
|
|
46908
|
+
} catch (e) {
|
|
46909
|
+
return err(e);
|
|
46910
|
+
}
|
|
46911
|
+
});
|
|
46912
|
+
server.tool("browser_tui_record_stop", "Stop recording and return the asciicast v2 JSON. Compatible with asciinema player.", {
|
|
46913
|
+
session_id: exports_external.string().optional()
|
|
46914
|
+
}, async ({ session_id }) => {
|
|
46915
|
+
try {
|
|
46916
|
+
const sid = resolveSessionId(session_id);
|
|
46917
|
+
const recording = activeRecordings2.get(sid);
|
|
46918
|
+
if (!recording)
|
|
46919
|
+
return err(new Error("No active recording for this session"));
|
|
46920
|
+
clearInterval(recording.intervalId);
|
|
46921
|
+
activeRecordings2.delete(sid);
|
|
46922
|
+
const duration = (Date.now() - recording.startTime) / 1000;
|
|
46923
|
+
const header = {
|
|
46924
|
+
version: 2,
|
|
46925
|
+
width: recording.cols,
|
|
46926
|
+
height: recording.rows,
|
|
46927
|
+
timestamp: Math.floor(recording.startTime / 1000),
|
|
46928
|
+
duration,
|
|
46929
|
+
env: { TERM: "xterm-256color", SHELL: "/bin/bash" }
|
|
46930
|
+
};
|
|
46931
|
+
const lines = [JSON.stringify(header)];
|
|
46932
|
+
for (const [time, type2, data] of recording.events) {
|
|
46933
|
+
lines.push(JSON.stringify([time, type2, data]));
|
|
46934
|
+
}
|
|
46935
|
+
const asciicast = lines.join(`
|
|
46936
|
+
`);
|
|
46937
|
+
return json({
|
|
46938
|
+
format: "asciicast_v2",
|
|
46939
|
+
duration_seconds: Math.round(duration * 10) / 10,
|
|
46940
|
+
event_count: recording.events.length,
|
|
46941
|
+
asciicast
|
|
46942
|
+
});
|
|
46943
|
+
} catch (e) {
|
|
46944
|
+
return err(e);
|
|
46945
|
+
}
|
|
46946
|
+
});
|
|
46947
|
+
}
|
|
46948
|
+
|
|
46525
46949
|
// src/mcp/index.ts
|
|
46526
46950
|
init_schema();
|
|
46527
46951
|
var _pkg = JSON.parse(readFileSync11(join20(import.meta.dir, "../../package.json"), "utf8"));
|
|
@@ -46534,6 +46958,7 @@ register2(server);
|
|
|
46534
46958
|
register3(server);
|
|
46535
46959
|
register4(server);
|
|
46536
46960
|
register8(server);
|
|
46961
|
+
register9(server);
|
|
46537
46962
|
server.tool("send_feedback", "Send feedback about this service", { message: exports_external.string(), email: exports_external.string().optional(), category: exports_external.enum(["bug", "feature", "general"]).optional() }, async (params) => {
|
|
46538
46963
|
try {
|
|
46539
46964
|
const db2 = getDatabase();
|
package/dist/mcp/meta.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/mcp/meta.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8CzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/mcp/meta.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8CzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,QAi8BzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/mcp/sessions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgCzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/mcp/sessions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgCzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,QA2YzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/mcp/tui.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4FzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,QA2ZzC"}
|
package/dist/server/index.js
CHANGED
|
@@ -18284,6 +18284,13 @@ async function launchTui(command, options = {}) {
|
|
|
18284
18284
|
if (viewport2)
|
|
18285
18285
|
viewport2.style.backgroundColor = theme.background;
|
|
18286
18286
|
}, themeColors);
|
|
18287
|
+
if (options.fontSize) {
|
|
18288
|
+
await page.evaluate((size) => {
|
|
18289
|
+
const term = window.term ?? window.terminal;
|
|
18290
|
+
if (term?.options)
|
|
18291
|
+
term.options.fontSize = size;
|
|
18292
|
+
}, options.fontSize);
|
|
18293
|
+
}
|
|
18287
18294
|
return { ttydProcess, port, browser, page, theme: resolvedTheme };
|
|
18288
18295
|
} catch (err) {
|
|
18289
18296
|
ttydProcess.kill();
|
|
@@ -18652,7 +18659,8 @@ async function createSession2(opts = {}) {
|
|
|
18652
18659
|
const tuiSess = await launchTui(command, {
|
|
18653
18660
|
headless: opts.headless ?? true,
|
|
18654
18661
|
viewport: opts.viewport,
|
|
18655
|
-
theme: opts.tuiTheme ?? "system"
|
|
18662
|
+
theme: opts.tuiTheme ?? "system",
|
|
18663
|
+
fontSize: opts.tuiFontSize
|
|
18656
18664
|
});
|
|
18657
18665
|
browser = tuiSess.browser;
|
|
18658
18666
|
page = tuiSess.page;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/browser",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "General-purpose browser agent toolkit — Playwright, Chrome DevTools Protocol, Lightpanda with auto engine selection. CLI + MCP + REST + SDK.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|