Skip to content

feat(render): dual-driver render layer — omp-native browser on omp, playwright on pi/CLI - #24

Merged
rz1989s merged 1 commit into
masterfrom
feat/omp-native-driver
Sep 7, 2026
Merged

rz1989s merged 1 commit into
masterfrom
feat/omp-native-driver

Conversation

@rz1989s

@rz1989s rz1989s commented Sep 7, 2026

Copy link
Copy Markdown
Member

What

Removes keystone's dependency on bundling/loading a browser driver on omp by splitting the render flow (engine/render-core.mjs) behind two drivers:

Driver Path Used by
engine/driver-playwright.mjs (lazy specifier, #21 trick unchanged) engine/render.mjs CLI (check-gates --render, audit) + the keystone_render pi extension tool
engine/driver-omp-native.mjs (omp's built-in Puppeteer browser via the eval-kernel browser global) engine/render-omp.mjs omp hosts — the skill imports it from omp's eval kernel

extensions/render.ts now skips registration on omp (engine/host.mjs: argv0/bunfs detection — env vars are unreliable, omp mirrors OMP_* to PI_*). Pi behavior is unchanged. The tsx bootstrap in check-gates.mjs/audit.mjs is gone; tsx dropped from deps.

Skill § 7.2 branches by host: keystone_render tool on pi, one-line eval-kernel import of engine/render-omp.mjs on omp. engine.md / gates.md / README updated to the render-layer framing.

Why

omp-native driver specifics (discovered live on omp 18.1.12)

  • tab.screenshot() returns a temp-file path → copy to artifact
  • tab.run serializes fns — closures don't cross; expressions bridge via { args }
  • settle wait via waitForSelector("body") (playwright's networkidle isn't exposed)

Verification

  • pnpm test 179 pass / 1 skip (~5s); pnpm test:render 4/4 with real Chromium; test:lint 103/103; typecheck clean; lockfile regenerated (--frozen-lockfile green)
  • omp-native driver end-to-end in a live omp session: exact viewport metrics (innerWidth 1280/375, height = w×0.625), OKLCH computed pairs, hero rects at 1280 only, clickables at 1280+375, real screenshot bytes (15.1 KB / 23.3 KB)
  • CLI audit.mjs path mode: full 5-viewport artifact set + report in 3.3s
  • Extension skip live: repo linked as omp plugin → no keystone tool registered (NONE), zero startup warnings

Version

1.1.0 (package.json bumped here; tag v1.1.0 after merge triggers the release workflow).

…laywright on pi/CLI

Split the render flow out of extensions/render.ts into engine/render-core.mjs
behind a driver interface:

- engine/driver-playwright.mjs — playwright-core, lazy specifier (unchanged
  loader-preload avoidance, #21); used by the CLI child process and the pi
  extension tool
- engine/driver-omp-native.mjs — omp's built-in Puppeteer browser via the
  eval-kernel `browser` global (viewport-per-tab, string-evaluate bridging
  through tab.run args, screenshot temp-path copy); omp hosts import
  engine/render-omp.mjs instead of loading any browser driver
- extensions/render.ts now skips tool registration on omp (engine/host.mjs
  detects the bun-compiled runtime via argv0/bunfs entry — env is unreliable,
  omp mirrors OMP_* to PI_*); pi registration unchanged
- check-gates.mjs/audit.mjs import engine/render.mjs directly — the tsx
  bootstrap is gone, tsx dropped from dependencies
- SKILL.md § 7.2 branches by host: keystone_render tool on pi, one-line
  eval-kernel import of engine/render-omp.mjs on omp; engine.md/gates.md/README
  updated to the render-layer framing

omp no longer loads playwright-core at all: the extension path is inert there
and the skill renders through the host's own browser, removing the install
drift + loader preload exposure class entirely (can1357/oh-my-pi#11090,
#11091 context).

Verified: full suite 179 pass / 1 skip (~5s), playwright render suite 4/4 with
real Chromium, omp-native driver end-to-end on omp 18.1.12 (exact viewport
metrics, OKLCH computed pairs, hero at 1280 only, clickables at 1280+375, real
screenshot bytes), CLI audit --render full artifacts, extension skip live on
omp (no keystone tool registered, zero startup warnings), tsc clean.
@rz1989s
rz1989s merged commit aee79d3 into master Sep 7, 2026
1 check passed
@rz1989s
rz1989s deleted the feat/omp-native-driver branch September 7, 2026 01:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant