Files
command-center/agent/managed-skills/omp-bundle-implementation-port/SKILL.md
T

3.4 KiB

name, description
name description
omp-bundle-implementation-port Extract and port a working implementation from omp's minified dist/cli.js bundle (copy-not-invent requests); anchors, python slicing, regex-constant sweep, trace-driven test prediction.

Porting built-in omp behavior out of the minified bundle

Use when Frank says "copy the omp implementation / work off known-working code" — i.e. port a built-in feature (vocalizer segmentation, retry logic, formatting rules) into our own file instead of hand-rolling a heuristic. For merely auditing behavior claims, use omp-bundle-claim-audit; this skill is extraction-for-porting.

Bundle: ~/.bun/install/global/node_modules/@oh-my-pi/pi-coding-agent/dist/cli.js (minified; single-letter names, private #x fields survive).

Extraction recipe

  1. Find the setting/entry strings first. grep -o 'ce({id:"<area>[^"]*"[^}]\{0,200\}' cli.js — setting descriptions state semantics verbatim (e.g. speech.enhanced = "Rewrite assistant output into natural spoken prose with the tiny/smol model"). Descriptions are quotable ground truth.
  2. Anchor to code with a distinctive token, not guesses: a method name (pushDelta), a state init, or a string. Then slice generously with python (bash heredoc), NOT grep -o which truncates:
    src = open('cli.js').read()
    i = src.index('pushDelta'); print(src[i-1500:i+3000])
    
  3. Follow the constructor: pipeline classes instantiate collaborators there (this.#t ??= new fHe → fHe is the real worker; #g() returned {speakable:new fHe, pending:[]…}). Dump class fHe{ +4000 chars.
  4. Regex/helper sweep: minified code declares shared constants in a trailing var a,b,c,… list and initializes them elsewhere (Xyr=, Pwc=function). Loop the names with re.search(rf'{name}=', src) and print ~400 chars each — the actual boundary/cleanup rules live in these one-liners.
  5. Write slices to /tmp/*.txt and read them; don't eyeball megabyte greps.

Port rules

  • Rename fields/methods to readable names but keep logic 1:1 — the value is behavioral fidelity (Frank's "known-working set of code").
  • Private #x fields port cleanly: TS classes in Bun extensions support #.
  • Global-regex .lastIndex=0 before each scan loop — minified code relies on it; keep it.

Verification shortcut

Before running tests, hand-trace each test input through the ported rules (boundary indices, state transitions) and predict exact segment counts/strings; then run — predicted-vs-actual mismatch localizes port errors faster than test output alone. Worked example (2026-10-19, dankvoice PR #26): traced "First stop here. Second one goes!!! Really? Third ... done" → predicted 3 segments incl. "Third ... done" merged via flush (10-char boundary < 24-char started-min) → bats green first run.

Known anchors (2026-10-19 bundle)

  • Speak-aloud vocalizer pipeline: class I6o (gating on speech.enabled, suspend counter, enhancer, #g() per-message state).
  • Utterance segmenter: class fHe + helpers Pwc (line-head classify), Iwc/_wc/b6o/w6o (boundary search), Cwc+y6o (cleanup: links→label, URL→host, path→basename). Regex consts: Xyr sentence-end runs, pHe weak breaks, mwc abbreviations, hwc undecided line-heads, g6o horizontal rules.
  • Port already living in agent/extensions/dankvoice.ts (SpeechSegmenter) — when the bundle updates, re-extract fHe and diff against it before assuming our copy still matches.