oh-my-opencode 5.0.0-beta.85 → 5.0.0-beta.87

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.
Files changed (237) hide show
  1. package/.agents/skills/codex-qa/SKILL.md +2 -0
  2. package/.agents/skills/hyperplan/SKILL.md +1 -1
  3. package/.agents/skills/senpi-qa/SKILL.md +9 -3
  4. package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs +4 -4
  5. package/.opencode/skills/hyperplan/SKILL.md +1 -1
  6. package/README.md +1 -1
  7. package/dist/cli/index.js +68 -41
  8. package/dist/cli-node/index.js +68 -41
  9. package/dist/index.js +126 -107
  10. package/dist/skills/browser/ATTRIBUTION.md +26 -14
  11. package/dist/skills/browser/SKILL.md +65 -52
  12. package/dist/skills/browser/references/commands.md +81 -66
  13. package/dist/skills/browser/references/install.md +31 -34
  14. package/dist/skills/browser/references/owned-engine/README.md +41 -21
  15. package/dist/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  16. package/dist/skills/browser/references/owned-engine/ladder.md +24 -22
  17. package/dist/skills/browser/references/owned-engine/network.md +35 -15
  18. package/dist/skills/browser/references/recipes/1password.md +13 -11
  19. package/dist/skills/browser/references/remote.md +5 -4
  20. package/dist/skills/browser/runtime/omowright/index.js +1534 -0
  21. package/dist/skills/browser/runtime/omowright/manifest.json +9 -0
  22. package/dist/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  23. package/dist/skills/browser/scripts/browser-doctor.mjs +37 -32
  24. package/dist/skills/browser/scripts/browser-install.mjs +31 -44
  25. package/dist/skills/browser/scripts/omowright.mjs +25 -0
  26. package/dist/skills/debugging/SKILL.md +2 -2
  27. package/dist/skills/debugging/references/methodology/06-fix.md +3 -3
  28. package/dist/skills/debugging/references/methodology/08-qa.md +1 -1
  29. package/dist/skills/debugging/references/tools/browser-qa.md +104 -0
  30. package/dist/skills/frontend/SKILL.md +1 -1
  31. package/dist/skills/frontend/references/design/clone-from-url.md +1 -1
  32. package/dist/skills/programming/SKILL.md +12 -18
  33. package/dist/skills/programming/references/rust/README.md +43 -15
  34. package/dist/skills/programming/references/rust/api-design.md +81 -0
  35. package/dist/skills/programming/references/rust/async-tokio.md +60 -28
  36. package/dist/skills/programming/references/rust/axum-stack.md +1 -13
  37. package/dist/skills/programming/references/rust/cargo-strict.md +44 -8
  38. package/dist/skills/programming/references/rust/clap-stack.md +8 -3
  39. package/dist/skills/programming/references/rust/concurrency.md +66 -52
  40. package/dist/skills/programming/references/rust/libraries.md +35 -25
  41. package/dist/skills/programming/references/rust/macros.md +63 -0
  42. package/dist/skills/programming/references/rust/one-liners.md +5 -3
  43. package/dist/skills/programming/references/rust/proptest-insta.md +8 -0
  44. package/dist/skills/programming/references/rust/type-state.md +50 -12
  45. package/dist/skills/programming/references/rust/unsafe-discipline.md +34 -6
  46. package/dist/skills/programming/references/rust/zero-cost-safety.md +62 -52
  47. package/dist/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  48. package/dist/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  49. package/dist/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  50. package/dist/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  51. package/dist/skills/programming/scripts/rust/new-project.py +31 -28
  52. package/dist/skills/review-work/SKILL.md +1 -1
  53. package/dist/skills/ultimate-browsing/SKILL.md +27 -20
  54. package/dist/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  55. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  56. package/dist/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  57. package/dist/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  58. package/dist/skills/ulw-execute/SKILL.md +4 -4
  59. package/dist/skills/visual-qa/SKILL.md +1 -1
  60. package/dist/skills/visual-qa/references/browser-setup.md +46 -46
  61. package/dist/tui.js +47 -23
  62. package/package.json +15 -14
  63. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  64. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +2 -0
  65. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  66. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  67. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  68. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  69. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  70. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  71. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  72. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  73. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  74. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  75. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  76. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +1 -1
  77. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  78. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  79. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  80. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  81. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  82. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  83. package/packages/omo-codex/plugin/components/ultrawork/README.md +1 -1
  84. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  85. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +63 -89
  86. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  87. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  88. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
  89. package/packages/omo-codex/plugin/components/ulw-execute-continuation/directive.md +2 -2
  90. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  91. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  92. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +63 -89
  93. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  94. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  95. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +2 -3
  96. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +2 -2
  97. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  105. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  106. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  107. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  108. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  109. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  110. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  111. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  112. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  113. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  114. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  115. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  116. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  117. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  118. package/packages/omo-codex/plugin/package-lock.json +12 -12
  119. package/packages/omo-codex/plugin/package.json +1 -1
  120. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +8 -2
  121. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +2 -2
  122. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +26 -14
  123. package/packages/omo-codex/plugin/skills/browser/SKILL.md +65 -52
  124. package/packages/omo-codex/plugin/skills/browser/references/commands.md +81 -66
  125. package/packages/omo-codex/plugin/skills/browser/references/install.md +31 -34
  126. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +41 -21
  127. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  128. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +24 -22
  129. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +35 -15
  130. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +13 -11
  131. package/packages/omo-codex/plugin/skills/browser/references/remote.md +5 -4
  132. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +1534 -0
  133. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +9 -0
  134. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  135. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +37 -32
  136. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +31 -44
  137. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +25 -0
  138. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +2 -2
  139. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +3 -3
  140. package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +1 -1
  141. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +104 -0
  142. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -1
  143. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
  144. package/packages/omo-codex/plugin/skills/programming/SKILL.md +12 -18
  145. package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +43 -15
  146. package/packages/omo-codex/plugin/skills/programming/references/rust/api-design.md +81 -0
  147. package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +60 -28
  148. package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +1 -13
  149. package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +44 -8
  150. package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +8 -3
  151. package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +66 -52
  152. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +35 -25
  153. package/packages/omo-codex/plugin/skills/programming/references/rust/macros.md +63 -0
  154. package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +5 -3
  155. package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +8 -0
  156. package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +50 -12
  157. package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +34 -6
  158. package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +62 -52
  159. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  160. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  161. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  162. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +31 -28
  163. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +1 -1
  164. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +27 -20
  165. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  166. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  167. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  168. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  169. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +63 -89
  170. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +4 -4
  171. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +2 -3
  172. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +2 -2
  173. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +1 -1
  174. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +46 -46
  175. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +2 -2
  176. package/packages/omo-codex/scripts/install-dist/install-local.mjs +4 -2
  177. package/packages/prompts-core/prompts/ultrawork/codex.md +63 -89
  178. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +26 -14
  179. package/packages/shared-skills/skills/browser/SKILL.md +65 -52
  180. package/packages/shared-skills/skills/browser/references/commands.md +81 -66
  181. package/packages/shared-skills/skills/browser/references/install.md +31 -34
  182. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +41 -21
  183. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  184. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +24 -22
  185. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +35 -15
  186. package/packages/shared-skills/skills/browser/references/recipes/1password.md +13 -11
  187. package/packages/shared-skills/skills/browser/references/remote.md +5 -4
  188. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +1534 -0
  189. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +9 -0
  190. package/packages/shared-skills/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  191. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +37 -32
  192. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +31 -44
  193. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +25 -0
  194. package/packages/shared-skills/skills/debugging/SKILL.md +2 -2
  195. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +3 -3
  196. package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +1 -1
  197. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +104 -0
  198. package/packages/shared-skills/skills/frontend/SKILL.md +1 -1
  199. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
  200. package/packages/shared-skills/skills/programming/SKILL.md +12 -18
  201. package/packages/shared-skills/skills/programming/references/rust/README.md +43 -15
  202. package/packages/shared-skills/skills/programming/references/rust/api-design.md +81 -0
  203. package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +60 -28
  204. package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +1 -13
  205. package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +44 -8
  206. package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +8 -3
  207. package/packages/shared-skills/skills/programming/references/rust/concurrency.md +66 -52
  208. package/packages/shared-skills/skills/programming/references/rust/libraries.md +35 -25
  209. package/packages/shared-skills/skills/programming/references/rust/macros.md +63 -0
  210. package/packages/shared-skills/skills/programming/references/rust/one-liners.md +5 -3
  211. package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +8 -0
  212. package/packages/shared-skills/skills/programming/references/rust/type-state.md +50 -12
  213. package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +34 -6
  214. package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +62 -52
  215. package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  216. package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  217. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  218. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  219. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +31 -28
  220. package/packages/shared-skills/skills/review-work/SKILL.md +1 -1
  221. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +27 -20
  222. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  223. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  224. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  225. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  226. package/packages/shared-skills/skills/ulw-execute/SKILL.md +4 -4
  227. package/packages/shared-skills/skills/visual-qa/SKILL.md +1 -1
  228. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +46 -46
  229. package/dist/skills/browser/scripts/browser-env.mjs +0 -41
  230. package/dist/skills/debugging/references/tools/playwright-cli.md +0 -112
  231. package/dist/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  232. package/packages/omo-codex/plugin/skills/browser/scripts/browser-env.mjs +0 -41
  233. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +0 -112
  234. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  235. package/packages/shared-skills/skills/browser/scripts/browser-env.mjs +0 -41
  236. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +0 -112
  237. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
@@ -49,7 +49,7 @@ Before any reviewer sees an image, verify each capture yourself: the file signat
49
49
  ### Web
50
50
 
51
51
  1. Capture a REFERENCE image: the user's mock/target, generated page snapshot, Figma export, source-site capture, or known-good baseline. Save as PNG. If the user provided overview text or annotations, save them next to the image and treat them as part of the reference packet.
52
- 2. Capture the ACTUAL rendered screenshot at the reference viewport. Use two browser tiers from js eval: (1) `new Bun.WebView()` on Bun >= 1.4 (macOS default; Linux/Windows need installed Chrome/Chromium/Edge); (2) otherwise, or for Chrome semantics, stealth, trace, or authenticated profiles, WRITE a `playwright-core` script and run it from the kernel against local Chrome (`chromium.launch({ channel: "chrome" })` / `launchPersistentContext` on a CLONED profile, never the live one). In Codex, prefer `browser:control-in-app-browser` for ordinary captures. Save PNG and return its path; close the browser context. See `$SKILL_DIR/references/browser-setup.md` for fixed-viewport examples and prerequisites.
52
+ 2. Capture the ACTUAL rendered screenshot at the reference viewport with omowright from js eval (the library is staged in the `browser` skill): the owned engine (`connectPipe` on a task-owned profile, viewport pinned with `emulate`, then `page.screenshot()`) for anything unauthenticated, or the attached engine (`connectBrowserSkill()` → `session.screenshot()`) when the page needs the user's login — never a clone of, or a launch against, the user's live profile. Save PNG and return its path; close the browser or stop the session. See `$SKILL_DIR/references/browser-setup.md` for fixed-viewport examples and prerequisites.
53
53
  3. Run the diff and keep the JSON:
54
54
 
55
55
  ```
@@ -1,75 +1,75 @@
1
1
  # Browser setup (Web capture)
2
2
 
3
- Use the js-eval kernel for both tiers. In Codex, prefer
4
- `browser:control-in-app-browser` for ordinary captures.
3
+ Capture with omowright from the js-eval kernel. The library is staged inside the `browser` skill;
4
+ load it once per session:
5
5
 
6
- ## Tier 1: Bun.WebView
6
+ ```js
7
+ const { loadOmowright } = await import("<browser-skill-root>/scripts/omowright.mjs")
8
+ const { omowright } = await loadOmowright()
9
+ ```
10
+
11
+ ## Owned engine (default for QA)
7
12
 
8
- On a Bun >= 1.4 kernel, `new Bun.WebView()` is the macOS default (system
9
- WebKit, no browser download). Linux/Windows require `backend: "chrome"`
10
- and installed Chrome/Chromium/Edge. WebView is headless; WebKit has no CDP,
11
- and `type()` emits no keyboard events. Use tier 2 when these differences matter.
13
+ A browser your code launches, with a task-owned profile, pinned viewport and no user state.
14
+ `connectPipe` opens no listening port and reaps the process on `close()`.
12
15
 
13
16
  ```js
14
17
  // js-eval cell; url and pngPath belong to this QA run.
15
- const view = new Bun.WebView({ width: 1280, height: 720 })
18
+ const { mkdtempSync, rmSync } = await import("node:fs")
19
+ const profile = mkdtempSync(`${(await import("node:os")).tmpdir()}/visual-qa-`)
20
+ const browser = await omowright.connectPipe({
21
+ browserPath: chromeBinary, // installed Chrome, Chromium, CloakBrowser or chrome-headless-shell
22
+ browserArgs: ["--headless", "--no-first-run", `--user-data-dir=${profile}`],
23
+ storageRoot: profile,
24
+ })
16
25
  try {
17
- await view.navigate(url)
18
- await Bun.write(pngPath, await view.screenshot())
26
+ const page = await browser.newTab("about:blank")
27
+ await omowright.emulate(page, { width: 1280, height: 720, deviceScaleFactor: 1, mobile: false, hasTouch: false })
28
+ await page.goto(url, { waitUntil: "load" })
29
+ await Bun.write(pngPath, await page.screenshot())
19
30
  console.log(pngPath)
20
31
  } finally {
21
- view[Symbol.dispose]()
32
+ await browser.close()
33
+ rmSync(profile, { recursive: true, force: true })
22
34
  }
23
35
  ```
24
36
 
25
- ## Tier 2: playwright-core with local Chrome
37
+ Chrome must already be installed; report an absent executable rather than downloading a managed
38
+ browser. For bot-scored or WAF targets use `connectCloakProfile({ profileDir })` (CloakBrowser
39
+ with a pinned fingerprint seed) — the `browser` skill's `references/owned-engine/README.md`
40
+ covers it.
41
+
42
+ ## Attached engine (authenticated pages)
26
43
 
27
- For other kernels, real-Chrome semantics, stealth, traces, or authenticated
28
- profiles, WRITE a script beside the project's installed `playwright-core`
29
- dependency and execute it from js eval. The user installs `playwright-core`
30
- once with `bun add playwright-core` if needed; Chrome must already exist.
31
- No managed browser download is needed.
44
+ When the capture needs the user's login, drive the browser they are signed into instead of
45
+ cloning its profile:
32
46
 
33
47
  ```js
34
- // capture.mjs
35
- import { chromium } from "playwright-core"
36
- const [url, pngPath] = process.argv.slice(2)
37
- const browser = await chromium.launch({ channel: "chrome", headless: true })
48
+ const session = await omowright.connectBrowserSkill({ name: "visual-qa capture", focused: false })
38
49
  try {
39
- const page = await browser.newPage({ viewport: { width: 1280, height: 720 }, deviceScaleFactor: 1 })
40
- await page.goto(url, { waitUntil: "load", timeout: 30000 })
41
- await page.screenshot({ path: pngPath })
42
- console.log(pngPath)
50
+ await session.navigate(url, { waitUntil: "load" })
51
+ await session.resize(1280, 720)
52
+ const shot = await session.screenshot() // { buffer, width, height }
53
+ await Bun.write(pngPath, shot.buffer)
43
54
  } finally {
44
- await browser.close()
55
+ await session.stop()
45
56
  }
46
57
  ```
47
58
 
48
- Run from the js-eval kernel (also works on a Node kernel):
49
-
50
- ```js
51
- const { promisify } = await import("node:util")
52
- const { execFile } = await import("node:child_process")
53
- const result = await promisify(execFile)("node", [scriptPath, url, pngPath], { timeout: 45000 })
54
- console.log(result.stdout)
55
- ```
56
-
57
- For auth, CLONE the user-data directory to a private task-owned directory
58
- and use `chromium.launchPersistentContext(clonePath, { channel: "chrome" })`.
59
- NEVER launch against or clear cookies/cache/site data from the live profile.
60
- Close the context and remove only the clone after QA. For script-based stealth,
61
- read the ultimate-browsing skill's `references/chrome-stealth.md`.
59
+ NEVER launch anything against, or clear cookies/cache/site data from, the user's live profile;
60
+ the attached engine is the only sanctioned way to a signed-in page. If no extension is connected,
61
+ run the `browser` skill's `scripts/browser-install.mjs`, relay its one human step, and wait — do
62
+ not fall back to the owned engine for an authenticated criterion.
62
63
 
63
64
  ## Capture a screenshot at a fixed viewport
64
65
 
65
- Match CSS viewport AND PNG dimensions: WebKit follows native display scale
66
- (a 1280x720 viewport can yield 2560x1440 pixels). Use matching reference
67
- captures or Chrome's `deviceScaleFactor`, not resizing to force a pass.
68
- Wait for the specific page state, not a sleep, then compare:
66
+ Match CSS viewport AND PNG dimensions: pin `deviceScaleFactor` through `emulate` (owned) or
67
+ `resize` (attached) instead of resizing the PNG to force a pass. Wait for the specific page state
68
+ (a locator, a `waitForURL`, a `createNetworkSnoop(page).waitFor(...)`), not a sleep, then compare:
69
69
 
70
70
  ```sh
71
71
  node "$SKILL_DIR/scripts/visual-qa.mjs" image-diff reference.png actual.png
72
72
  ```
73
73
 
74
- Inspect `dimensionsMatch` and `diffRatio`, then inspect the image. Close every
75
- WebView/browser context and the fixture server, even on a failed capture.
74
+ Inspect `dimensionsMatch` and `diffRatio`, then inspect the image. Close every browser and session
75
+ and the fixture server, even on a failed capture; remove the owned profile in the same `finally`.
package/dist/tui.js CHANGED
@@ -3352,26 +3352,20 @@ var init_agent_model_requirements = __esm(() => {
3352
3352
  fallbackChain: [
3353
3353
  { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
3354
3354
  { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
3355
- { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
3355
+ { providers: ["deepseek"], model: "deepseek-flash", variant: "max" },
3356
3356
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
3357
- { providers: ["opencode-go"], model: "minimax-m3" },
3358
- { providers: ["minimax-coding-plan", "minimax-cn-coding-plan"], model: "MiniMax-M3" },
3359
3357
  { providers: ["opencode-go"], model: "minimax-m2.7" },
3360
- { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" },
3361
- { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.4-nano" }
3358
+ { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" }
3362
3359
  ]
3363
3360
  },
3364
3361
  explore: {
3365
3362
  fallbackChain: [
3366
3363
  { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
3367
3364
  { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
3368
- { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
3365
+ { providers: ["deepseek"], model: "deepseek-flash", variant: "max" },
3369
3366
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
3370
- { providers: ["opencode-go"], model: "minimax-m3" },
3371
- { providers: ["minimax-coding-plan", "minimax-cn-coding-plan"], model: "MiniMax-M3" },
3372
3367
  { providers: ["opencode-go"], model: "minimax-m2.7" },
3373
- { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" },
3374
- { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.4-nano" }
3368
+ { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" }
3375
3369
  ]
3376
3370
  },
3377
3371
  "multimodal-looker": {
@@ -3505,15 +3499,11 @@ var init_category_model_requirements = __esm(() => {
3505
3499
  },
3506
3500
  "deep-low": {
3507
3501
  fallbackChain: [
3502
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-sol-fast", variant: "medium" },
3508
3503
  {
3509
3504
  providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
3510
3505
  model: "gpt-6-sol",
3511
3506
  variant: "medium"
3512
- },
3513
- {
3514
- providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
3515
- model: "gpt-5.6-sol",
3516
- variant: "medium"
3517
3507
  }
3518
3508
  ]
3519
3509
  },
@@ -3522,7 +3512,7 @@ var init_category_model_requirements = __esm(() => {
3522
3512
  {
3523
3513
  providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
3524
3514
  model: "gpt-6-astra",
3525
- variant: "high"
3515
+ variant: "xhigh"
3526
3516
  }
3527
3517
  ]
3528
3518
  },
@@ -3547,8 +3537,8 @@ var init_category_model_requirements = __esm(() => {
3547
3537
  },
3548
3538
  quick: {
3549
3539
  fallbackChain: [
3550
- { providers: ["chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
3551
- { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "off" },
3540
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
3541
+ { providers: ["deepseek"], model: "deepseek-flash", variant: "off" },
3552
3542
  {
3553
3543
  providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan"],
3554
3544
  model: "qwen3.6-flash",
@@ -3592,7 +3582,7 @@ var init_category_model_requirements = __esm(() => {
3592
3582
  {
3593
3583
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
3594
3584
  model: "claude-opus-5-5",
3595
- variant: "max"
3585
+ variant: "medium"
3596
3586
  },
3597
3587
  { providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.3", variant: "max" },
3598
3588
  {
@@ -3603,6 +3593,7 @@ var init_category_model_requirements = __esm(() => {
3603
3593
  ]
3604
3594
  },
3605
3595
  writing: {
3596
+ requiresAnyModel: true,
3606
3597
  fallbackChain: [
3607
3598
  {
3608
3599
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
@@ -4071,6 +4062,22 @@ var init_supplemental_entries = __esm(() => {
4071
4062
  output: 128000
4072
4063
  }
4073
4064
  },
4065
+ "gpt-6-sol-fast": {
4066
+ id: "gpt-6-sol-fast",
4067
+ family: "gpt",
4068
+ reasoning: true,
4069
+ temperature: false,
4070
+ toolCall: true,
4071
+ modalities: {
4072
+ input: ["text", "image"],
4073
+ output: ["text"]
4074
+ },
4075
+ limit: {
4076
+ context: 1050000,
4077
+ input: 922000,
4078
+ output: 128000
4079
+ }
4080
+ },
4074
4081
  "gpt-6-luna": {
4075
4082
  id: "gpt-6-luna",
4076
4083
  family: "gpt-nano",
@@ -4151,6 +4158,21 @@ var init_supplemental_entries = __esm(() => {
4151
4158
  output: 128000
4152
4159
  }
4153
4160
  },
4161
+ "deepseek-flash": {
4162
+ id: "deepseek-flash",
4163
+ family: "deepseek-flash",
4164
+ reasoning: true,
4165
+ temperature: true,
4166
+ toolCall: true,
4167
+ modalities: {
4168
+ input: ["text", "image"],
4169
+ output: ["text"]
4170
+ },
4171
+ limit: {
4172
+ context: 1e6,
4173
+ output: 384000
4174
+ }
4175
+ },
4154
4176
  "gpt-6-luna-fast": {
4155
4177
  id: "gpt-6-luna-fast",
4156
4178
  family: "gpt-nano",
@@ -5207,7 +5229,7 @@ You are working on tasks that don't fit specific categories but require substant
5207
5229
  </Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, DEEP_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here when one subsystem plus its callers holds the mechanism and the evidence, once read, leaves one right answer. Wide but mechanical work belongs here or in a quick batch. When unsure, choose deep-low: a misrouted child returns \`ESCALATE: deep-high\` after one cheap attempt; re-spawn the same brief as deep-high with its findings.</Selection_Gate>`, DEEP_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Route here only when you can name the decision evidence cannot settle: a trade-off with no single right answer, a contract change crossing a package or process boundary, a mechanism with no in-repo pattern to copy, or correctness argued from invariants rather than observed in a test. Wide scope with easy decisions is deep-low or unspecified-high; reasoning as the deliverable is ultrabrain.</Selection_Gate>`, DEEP_LOW_GATE_MODELS, DEEP_HIGH_GATE_MODEL = "gpt-6-astra", OPENAI_CATEGORIES;
5208
5230
  var init_openai_categories = __esm(() => {
5209
5231
  init_types();
5210
- DEEP_LOW_GATE_MODELS = ["gpt-6-sol", "gpt-5.6-sol"];
5232
+ DEEP_LOW_GATE_MODELS = ["gpt-6-sol-fast", "gpt-6-sol"];
5211
5233
  OPENAI_CATEGORIES = [
5212
5234
  {
5213
5235
  name: "ultrabrain",
@@ -5218,7 +5240,7 @@ var init_openai_categories = __esm(() => {
5218
5240
  },
5219
5241
  {
5220
5242
  name: "deep-low",
5221
- config: { model: "openai/gpt-6-sol", variant: "medium" },
5243
+ config: { model: "openai/gpt-6-sol-fast", variant: "medium" },
5222
5244
  description: "Default deep lane: one goal, one deliverable, decisions the child can settle from what it reads. **3D graphics, computer/browser use, CAPTCHA, multimodal, backend, logic, and algorithm work is routed here.** Multiple goals fan out as parallel calls.",
5223
5245
  callerGuidance: DEEP_LOW_CATEGORY_CALLER_GUIDANCE,
5224
5246
  promptAppend: DEEP_LOW_CATEGORY_PROMPT_APPEND,
@@ -5227,7 +5249,7 @@ var init_openai_categories = __esm(() => {
5227
5249
  },
5228
5250
  {
5229
5251
  name: "deep-high",
5230
- config: { model: "openai/gpt-6-astra", variant: "high" },
5252
+ config: { model: "openai/gpt-6-astra", variant: "xhigh" },
5231
5253
  description: "Escalation deep lane: a goal whose central decision cannot be settled from evidence alone. Same one-goal, one-deliverable contract as deep-low.",
5232
5254
  callerGuidance: DEEP_HIGH_CATEGORY_CALLER_GUIDANCE,
5233
5255
  promptAppend: DEEP_HIGH_CATEGORY_PROMPT_APPEND,
@@ -5250,7 +5272,7 @@ var init_openai_categories = __esm(() => {
5250
5272
  },
5251
5273
  {
5252
5274
  name: "unspecified-high",
5253
- config: { model: "anthropic/claude-opus-5-5", variant: "max" },
5275
+ config: { model: "anthropic/claude-opus-5-5", variant: "medium" },
5254
5276
  description: "Tasks that don't fit other categories, high effort required",
5255
5277
  callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
5256
5278
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
@@ -69903,6 +69925,8 @@ var init_model_profile = __esm(() => {
69903
69925
  init_fallback_models();
69904
69926
  OmoModelProfileInputSchema = object({
69905
69927
  display_name: string2().optional(),
69928
+ family: _enum(["daily", "geeky"]).optional(),
69929
+ tier: _enum(["normal", "heavy"]).optional(),
69906
69930
  models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
69907
69931
  }).strict();
69908
69932
  OmoModelProfileSchema = preprocess((value) => isRecord8(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileInputSchema);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.85",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -183,7 +183,7 @@
183
183
  "zod": "^4.6.5"
184
184
  },
185
185
  "devDependencies": {
186
- "@code-yeongyu/senpi": "2026.9.23",
186
+ "@code-yeongyu/senpi": "2026.9.23-4",
187
187
  "@oh-my-opencode/agents-md-core": "workspace:*",
188
188
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
189
189
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -219,22 +219,23 @@
219
219
  "@xterm/xterm": "^6.0.0",
220
220
  "bun-types": "1.4.2",
221
221
  "node-pty": "^1.1.0",
222
+ "omowright": "github:code-yeongyu/omowright#25781c8ac04f9aae358b06551520b792ac45c6ed",
222
223
  "puppeteer-core": "^25.11.0",
223
224
  "typescript": "^7.0.2"
224
225
  },
225
226
  "optionalDependencies": {
226
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.85",
227
- "oh-my-opencode-darwin-x64": "5.0.0-beta.85",
228
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.85",
229
- "oh-my-opencode-linux-arm64": "5.0.0-beta.85",
230
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.85",
231
- "oh-my-opencode-linux-x64": "5.0.0-beta.85",
232
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.85",
233
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.85",
234
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.85",
235
- "oh-my-opencode-windows-arm64": "5.0.0-beta.85",
236
- "oh-my-opencode-windows-x64": "5.0.0-beta.85",
237
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.85"
227
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.87",
228
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.87",
229
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.87",
230
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.87",
231
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.87",
232
+ "oh-my-opencode-linux-x64": "5.0.0-beta.87",
233
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.87",
234
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.87",
235
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.87",
236
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.87",
237
+ "oh-my-opencode-windows-x64": "5.0.0-beta.87",
238
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.87"
238
239
  },
239
240
  "overrides": {
240
241
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.85",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -7292,6 +7292,8 @@ function isRecord6(value) {
7292
7292
  }
7293
7293
  var OmoModelProfileInputSchema = object({
7294
7294
  display_name: string2().optional(),
7295
+ family: _enum(["daily", "geeky"]).optional(),
7296
+ tier: _enum(["normal", "heavy"]).optional(),
7295
7297
  models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
7296
7298
  }).strict();
7297
7299
  var OmoModelProfileSchema = preprocess((value) => isRecord6(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileInputSchema);
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.85) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.0.0-beta.85",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.85) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.0.0-beta.85",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.0.0-beta.85) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Recommending Git Bash MCP"
12
12
  }
13
13
  ]
14
14
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.0.0-beta.85) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.87) Resetting Git Bash MCP Reminder"
24
24
  }
25
25
  ]
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "5.0.0-beta.85",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.85) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Verifying LazyCodex Executor Evidence"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "5.0.0-beta.85",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.0.0-beta.85",
4
- "inputDigest": "sha256:3352272e820508dc21e74177e5d02ebfc11124033064d69fad605c073f6c2283",
3
+ "version": "5.0.0-beta.87",
4
+ "inputDigest": "sha256:72acd620e3bb18d2b7ff2299536bc0c48b009811a865fa1504e934010d24ea98",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO 5.0.0-beta.85) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO 5.0.0-beta.85) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.87) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "5.0.0-beta.85",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -53,7 +53,7 @@ Arm an available completion or state-change subscription when starting a build,
53
53
 
54
54
  Scale the scope of checks to the change and keep the rigor. A non-behavioral single-file edit needs diagnostics on that file. A single-domain behavior change adds related tests and one run of the affected entry point. Multi-file or cross-cutting work adds the build and user-visible behavior exercised through its real surface. omo-codex injects LSP diagnostics after edits; reported errors are blocking until resolved. Broaden or repeat checks only when a new change, failure, or open concern justifies it; otherwise keep moving toward completion.
55
55
 
56
- A behavior change starts with one failing test at its seam, observed failing for the right reason, then the smallest change that passes it. Formatting, comments, renames, dependency bumps, and visual-only work get review and a real-surface check instead. Leave out tests that mirror the implementation or cannot fail for the regression they name.
56
+ Read existing tests first - the behavior of record: update those your change makes stale; one wrong before your change is a finding, not a test to edit green. Reproduce a bug before fixing it. The run proves the change: add a test only where the repository keeps tests for this behavior and a regression would otherwise pass unnoticed - sized like its neighbors, never restating the change.
57
57
 
58
58
  ### Test Discipline
59
59
 
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.85) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.87) Loading Project Rules"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 5.0.0-beta.85) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.87) Loading Project Rules"
23
23
  }
24
24
  ]
25
25
  }
@@ -32,7 +32,7 @@
32
32
  "type": "command",
33
33
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
34
34
  "timeout": 10,
35
- "statusMessage": "(OmO 5.0.0-beta.85) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.87) Matching Project Rules"
36
36
  }
37
37
  ]
38
38
  }
@@ -45,7 +45,7 @@
45
45
  "type": "command",
46
46
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
47
47
  "timeout": 10,
48
- "statusMessage": "(OmO 5.0.0-beta.85) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.87) Resetting Project Rule Cache"
49
49
  }
50
50
  ]
51
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "5.0.0-beta.85",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.85) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "5.0.0-beta.85",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.85) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.87) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "5.0.0-beta.85",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -11,7 +11,7 @@ All 12 bundled agent TOMLs set `model = "gpt-6-astra"`; each role keeps its own
11
11
  | Mandate | Behavior |
12
12
  |---|---|
13
13
  | Goal + binding success criteria | Call `create_goal` (or open with a `# Goal` block) listing the deliverable + **3+ realistic QA scenarios** (happy path, edge cases, adjacent-surface regression). Each scenario MUST name which **Manual-QA channel** it will use. "Tests pass" is supporting signal, NEVER completion proof. |
14
- | Manual-QA channels (TESTS ALONE NEVER PROVE DONE) | A dedicated top-level section enumerates the **four** channels you can use to verify a criterion in reality: **(1) HTTP call** (`curl -i` / Playwright APIRequestContext), **(2) tmux** (`tmux new-session` + `send-keys` + `capture-pane`), **(3) Browser use** (in Codex, `browser:control-in-app-browser` first when no authenticated/persistent browser profile is needed; otherwise Playwright / puppeteer / Chromium driving the real page), **(4) Computer use** (OS-level GUI automation against the running app). Every criterion picks one channel, builds a real-usage scenario, runs it, and captures the artifact — every time. Aux surfaces (CLI stdout / DB diff / parsed config) only count for genuinely CLI- or data-shaped criteria. |
14
+ | Manual-QA channels (TESTS ALONE NEVER PROVE DONE) | A dedicated top-level section enumerates the **four** channels you can use to verify a criterion in reality: **(1) HTTP call** (`curl -i` / an HTTP client from js eval), **(2) tmux** (`tmux new-session` + `send-keys` + `capture-pane`), **(3) Browser use** (in Codex, `browser:control-in-app-browser` first when no authenticated/persistent browser profile is needed; otherwise omowright driving the real page — the owned engine for a browser you launch, the attached engine for the user's signed-in browser), **(4) Computer use** (OS-level GUI automation against the running app). Every criterion picks one channel, builds a real-usage scenario, runs it, and captures the artifact — every time. Aux surfaces (CLI stdout / DB diff / parsed config) only count for genuinely CLI- or data-shaped criteria. |
15
15
  | Surface + paired cleanup | Execution loop step 4 (**SURFACE-AS-SCENARIO**) runs the chosen channel scenario end-to-end. Step 5 (**CLEANUP, PAIRED**) tears down every QA-spawned process / tmux session / browser context / container / port / temp dir, with a one-line receipt appended to the notepad. Leftover state → NOT done. |
16
16
  | Durable /tmp notepad | `mktemp -t ulw-$(date +%Y%m%d-%H%M%S).XXXXXX.md` with sections `Plan`, `Success criteria + QA scenarios`, `Now`, `Todo`, `Findings`, `Learnings`. **Append**, never rewrite. |
17
17
  | Obsessive atomic todos | Every action — even one-line edits, `ls`, single test runs — becomes a todo. Format: `path: <action> for <criterion> — verify by <check>`. One in_progress at a time, mark completed immediately. |