diff options
| author | amankumarsingh77 <amankumarsingh7702@gmail.com> | 2026-07-28 21:55:55 +0530 |
|---|---|---|
| committer | Aman Kumar <145339995+amankumarsingh77@users.noreply.github.com> | 2026-08-02 19:12:46 +0530 |
| commit | 632600ec0a0a68d9327e19bd419a1ae72047955f (patch) | |
| tree | 5ef59b561d055b8f9173154c252e6d464f3a042b /src/domains/js.ts | |
| parent | 893a9d338ceb5d37aefece1df637c9a5888a120e (diff) | |
refactor: one door from a tool to the browser
Four routes coexisted: cdpCall, a raw client.session().call, a session
held in a local and called directly, and client.evaluateJs — and five
files mixed two or three of them. The CdpError-to-ToolErr mapping was
hand-copied at nine sites, plus a private copy in isolated-tab.ts.
domains/cdp-call.ts now owns all of it: cdpErrToToolErr, cdpCall,
cdpCallOnTarget, cdpCallBrowser, evalJs. Every other file under
src/domains goes through them, which also removes a pile of
`if (!r.success) return err({ kind: "cdp_error", ... })` boilerplate in
favour of returning the failed Result as-is.
Two scanner rules keep it that way, scoped to src/domains/ so the layer
that legitimately owns the session — cdp/ and client.ts — is unaffected.
Scoping is new to the rule model; without it the rules fired on the
transport itself.
One deliberate behaviour change: a CDP timeout now surfaces as
kind "timeout" rather than "cdp_error". isolated-tab.ts already did this
and the other 13 sites flattened it; the shared mapper uses the honest
label rather than preserving the mislabel.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'src/domains/js.ts')
| -rw-r--r-- | src/domains/js.ts | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/domains/js.ts b/src/domains/js.ts index a64b4ac..b43387c 100644 --- a/src/domains/js.ts +++ b/src/domains/js.ts @@ -7,6 +7,7 @@ import { Markdown, Text } from "@mariozechner/pi-tui"; import { getMarkdownTheme, keyHint } from "@mariozechner/pi-coding-agent"; import { type Result, err, ok } from "../util/result"; import { defineBrowserTool, type ToolErr, type ToolOk } from "../util/tool"; +import { evalJs } from "./cdp-call"; import { applyTruncation } from "../util/truncate"; import { asNumber, asRecord, asString, isRecord } from "../util/guards"; @@ -47,8 +48,8 @@ export const executeJsTool = defineBrowserTool({ parameters: ExecuteJsArgs, concurrency: "parallel", async handler(args, { client }): Promise<Result<ToolOk, ToolErr>> { - const r = await client.evaluateJs(args.expression, args.targetId); - if (!r.success) return err({ kind: "cdp_error", message: r.error.message }); + const r = await evalJs(client, args.expression, args.targetId); + if (!r.success) return r; const valueStr = r.data === undefined ? "undefined" : JSON.stringify(r.data); const truncated = await applyTruncation(valueStr, "js"); let pretty: string | undefined; |
