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
package/dist/index.js CHANGED
@@ -20057,26 +20057,20 @@ var AGENT_MODEL_REQUIREMENTS = {
20057
20057
  fallbackChain: [
20058
20058
  { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
20059
20059
  { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
20060
- { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
20060
+ { providers: ["deepseek"], model: "deepseek-flash", variant: "max" },
20061
20061
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
20062
- { providers: ["opencode-go"], model: "minimax-m3" },
20063
- { providers: ["minimax-coding-plan", "minimax-cn-coding-plan"], model: "MiniMax-M3" },
20064
20062
  { providers: ["opencode-go"], model: "minimax-m2.7" },
20065
- { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" },
20066
- { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.4-nano" }
20063
+ { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" }
20067
20064
  ]
20068
20065
  },
20069
20066
  explore: {
20070
20067
  fallbackChain: [
20071
20068
  { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed", variant: "off" },
20072
20069
  { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
20073
- { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "max" },
20070
+ { providers: ["deepseek"], model: "deepseek-flash", variant: "max" },
20074
20071
  { providers: ["opencode-go", "bailian-coding-plan"], model: "qwen3.7-plus" },
20075
- { providers: ["opencode-go"], model: "minimax-m3" },
20076
- { providers: ["minimax-coding-plan", "minimax-cn-coding-plan"], model: "MiniMax-M3" },
20077
20072
  { providers: ["opencode-go"], model: "minimax-m2.7" },
20078
- { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" },
20079
- { providers: ["openai", "chatgpt-subscription"], model: "gpt-5.4-nano" }
20073
+ { providers: ["anthropic", "github-copilot"], model: "claude-haiku-4-5" }
20080
20074
  ]
20081
20075
  },
20082
20076
  "multimodal-looker": {
@@ -20206,15 +20200,11 @@ var CATEGORY_MODEL_REQUIREMENTS = {
20206
20200
  },
20207
20201
  "deep-low": {
20208
20202
  fallbackChain: [
20203
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-sol-fast", variant: "medium" },
20209
20204
  {
20210
20205
  providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
20211
20206
  model: "gpt-6-sol",
20212
20207
  variant: "medium"
20213
- },
20214
- {
20215
- providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
20216
- model: "gpt-5.6-sol",
20217
- variant: "medium"
20218
20208
  }
20219
20209
  ]
20220
20210
  },
@@ -20223,7 +20213,7 @@ var CATEGORY_MODEL_REQUIREMENTS = {
20223
20213
  {
20224
20214
  providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
20225
20215
  model: "gpt-6-astra",
20226
- variant: "high"
20216
+ variant: "xhigh"
20227
20217
  }
20228
20218
  ]
20229
20219
  },
@@ -20248,8 +20238,8 @@ var CATEGORY_MODEL_REQUIREMENTS = {
20248
20238
  },
20249
20239
  quick: {
20250
20240
  fallbackChain: [
20251
- { providers: ["chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
20252
- { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "off" },
20241
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
20242
+ { providers: ["deepseek"], model: "deepseek-flash", variant: "off" },
20253
20243
  {
20254
20244
  providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan"],
20255
20245
  model: "qwen3.6-flash",
@@ -20293,7 +20283,7 @@ var CATEGORY_MODEL_REQUIREMENTS = {
20293
20283
  {
20294
20284
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
20295
20285
  model: "claude-opus-5-5",
20296
- variant: "max"
20286
+ variant: "medium"
20297
20287
  },
20298
20288
  { providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.3", variant: "max" },
20299
20289
  {
@@ -20304,6 +20294,7 @@ var CATEGORY_MODEL_REQUIREMENTS = {
20304
20294
  ]
20305
20295
  },
20306
20296
  writing: {
20297
+ requiresAnyModel: true,
20307
20298
  fallbackChain: [
20308
20299
  {
20309
20300
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
@@ -21915,6 +21906,22 @@ var SUPPLEMENTAL_MODEL_CAPABILITIES = {
21915
21906
  output: 128000
21916
21907
  }
21917
21908
  },
21909
+ "gpt-6-sol-fast": {
21910
+ id: "gpt-6-sol-fast",
21911
+ family: "gpt",
21912
+ reasoning: true,
21913
+ temperature: false,
21914
+ toolCall: true,
21915
+ modalities: {
21916
+ input: ["text", "image"],
21917
+ output: ["text"]
21918
+ },
21919
+ limit: {
21920
+ context: 1050000,
21921
+ input: 922000,
21922
+ output: 128000
21923
+ }
21924
+ },
21918
21925
  "gpt-6-luna": {
21919
21926
  id: "gpt-6-luna",
21920
21927
  family: "gpt-nano",
@@ -21995,6 +22002,21 @@ var SUPPLEMENTAL_MODEL_CAPABILITIES = {
21995
22002
  output: 128000
21996
22003
  }
21997
22004
  },
22005
+ "deepseek-flash": {
22006
+ id: "deepseek-flash",
22007
+ family: "deepseek-flash",
22008
+ reasoning: true,
22009
+ temperature: true,
22010
+ toolCall: true,
22011
+ modalities: {
22012
+ input: ["text", "image"],
22013
+ output: ["text"]
22014
+ },
22015
+ limit: {
22016
+ context: 1e6,
22017
+ output: 384000
22018
+ }
22019
+ },
21998
22020
  "gpt-6-luna-fast": {
21999
22021
  id: "gpt-6-luna-fast",
22000
22022
  family: "gpt-nano",
@@ -23540,6 +23562,8 @@ function isRecord9(value) {
23540
23562
  }
23541
23563
  var OmoModelProfileInputSchema = z9.object({
23542
23564
  display_name: z9.string().optional(),
23565
+ family: z9.enum(["daily", "geeky"]).optional(),
23566
+ tier: z9.enum(["normal", "heavy"]).optional(),
23543
23567
  models: z9.array(z9.union([z9.string(), OmoFallbackModelObjectSchema])).optional()
23544
23568
  }).strict();
23545
23569
  var OmoModelProfileSchema = z9.preprocess((value) => isRecord9(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileInputSchema);
@@ -27292,7 +27316,7 @@ You are working on tasks that don't fit specific categories but require substant
27292
27316
  var 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>`;
27293
27317
  var 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>`;
27294
27318
  var 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>`;
27295
- var DEEP_LOW_GATE_MODELS = ["gpt-6-sol", "gpt-5.6-sol"];
27319
+ var DEEP_LOW_GATE_MODELS = ["gpt-6-sol-fast", "gpt-6-sol"];
27296
27320
  var DEEP_HIGH_GATE_MODEL = "gpt-6-astra";
27297
27321
  var OPENAI_CATEGORIES = [
27298
27322
  {
@@ -27304,7 +27328,7 @@ var OPENAI_CATEGORIES = [
27304
27328
  },
27305
27329
  {
27306
27330
  name: "deep-low",
27307
- config: { model: "openai/gpt-6-sol", variant: "medium" },
27331
+ config: { model: "openai/gpt-6-sol-fast", variant: "medium" },
27308
27332
  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.",
27309
27333
  callerGuidance: DEEP_LOW_CATEGORY_CALLER_GUIDANCE,
27310
27334
  promptAppend: DEEP_LOW_CATEGORY_PROMPT_APPEND,
@@ -27313,7 +27337,7 @@ var OPENAI_CATEGORIES = [
27313
27337
  },
27314
27338
  {
27315
27339
  name: "deep-high",
27316
- config: { model: "openai/gpt-6-astra", variant: "high" },
27340
+ config: { model: "openai/gpt-6-astra", variant: "xhigh" },
27317
27341
  description: "Escalation deep lane: a goal whose central decision cannot be settled from evidence alone. Same one-goal, one-deliverable contract as deep-low.",
27318
27342
  callerGuidance: DEEP_HIGH_CATEGORY_CALLER_GUIDANCE,
27319
27343
  promptAppend: DEEP_HIGH_CATEGORY_PROMPT_APPEND,
@@ -27336,7 +27360,7 @@ var OPENAI_CATEGORIES = [
27336
27360
  },
27337
27361
  {
27338
27362
  name: "unspecified-high",
27339
- config: { model: "anthropic/claude-opus-5-5", variant: "max" },
27363
+ config: { model: "anthropic/claude-opus-5-5", variant: "medium" },
27340
27364
  description: "Tasks that don't fit other categories, high effort required",
27341
27365
  callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
27342
27366
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
@@ -97691,7 +97715,7 @@ function getCachedVersion(options = {}) {
97691
97715
  // package.json
97692
97716
  var package_default = {
97693
97717
  name: "oh-my-opencode",
97694
- version: "5.0.0-beta.85",
97718
+ version: "5.0.0-beta.87",
97695
97719
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
97696
97720
  main: "./dist/index.js",
97697
97721
  types: "dist/index.d.ts",
@@ -97874,7 +97898,7 @@ var package_default = {
97874
97898
  zod: "^4.6.5"
97875
97899
  },
97876
97900
  devDependencies: {
97877
- "@code-yeongyu/senpi": "2026.9.23",
97901
+ "@code-yeongyu/senpi": "2026.9.23-4",
97878
97902
  "@oh-my-opencode/agents-md-core": "workspace:*",
97879
97903
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
97880
97904
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -97910,22 +97934,23 @@ var package_default = {
97910
97934
  "@xterm/xterm": "^6.0.0",
97911
97935
  "bun-types": "1.4.2",
97912
97936
  "node-pty": "^1.1.0",
97937
+ omowright: "github:code-yeongyu/omowright#25781c8ac04f9aae358b06551520b792ac45c6ed",
97913
97938
  "puppeteer-core": "^25.11.0",
97914
97939
  typescript: "^7.0.2"
97915
97940
  },
97916
97941
  optionalDependencies: {
97917
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.85",
97918
- "oh-my-opencode-darwin-x64": "5.0.0-beta.85",
97919
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.85",
97920
- "oh-my-opencode-linux-arm64": "5.0.0-beta.85",
97921
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.85",
97922
- "oh-my-opencode-linux-x64": "5.0.0-beta.85",
97923
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.85",
97924
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.85",
97925
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.85",
97926
- "oh-my-opencode-windows-arm64": "5.0.0-beta.85",
97927
- "oh-my-opencode-windows-x64": "5.0.0-beta.85",
97928
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.85"
97942
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.87",
97943
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.87",
97944
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.87",
97945
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.87",
97946
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.87",
97947
+ "oh-my-opencode-linux-x64": "5.0.0-beta.87",
97948
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.87",
97949
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.87",
97950
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.87",
97951
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.87",
97952
+ "oh-my-opencode-windows-x64": "5.0.0-beta.87",
97953
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.87"
97929
97954
  },
97930
97955
  overrides: {
97931
97956
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -103766,9 +103791,9 @@ task(category="quick", load_skills=["git-master"], run_in_background=true)
103766
103791
 
103767
103792
  ## EXECUTION RULES
103768
103793
  - **TODO format**: \`path: <action> for <scenario-id> \u2014 verify by <check>\` encoding WHERE / WHY (which scenario it advances) / HOW / VERIFY. Exactly ONE in_progress at a time. Mark completed IMMEDIATELY \u2014 never batch.
103769
- - GOOD pair (test-first, ordered): \`module.test: Write FAILING case invalid-email\u2192ValidationError for S2 - verify by RED with assertion msg\` \u2192 \`src/module: Implement validateEmail() for S2 - verify by module.test GREEN + curl 400 body\`
103770
- - BAD: "Implement feature" / "Fix bug" / "Add tests later" / production code before its failing test \u2192 rewrite.
103771
- - **PARALLEL**: Fire independent agent calls simultaneously via task(run_in_background=true) \u2014 NEVER wait sequentially. But NEVER parallelise RED and GREEN of the same scenario.
103794
+ - GOOD pair (ordered): \`test/module.test: read the validateEmail cases for S2 - verify by noting intent / coverage / pass in the notepad\` \u2192 \`src/module: Implement validateEmail() for S2 - verify by curl 400 body + module.test green\`
103795
+ - BAD: "Implement feature" / "Fix bug" / "Add tests later" \u2192 rewrite.
103796
+ - **PARALLEL**: Fire independent agent calls simultaneously via task(run_in_background=true) \u2014 NEVER wait sequentially. But READ before CHANGE, never in parallel with it.
103772
103797
  - **BACKGROUND FIRST**: Use task for exploration/research agents (10+ concurrent if needed).
103773
103798
  - **VERIFY**: Re-read request after completion. Check every scenario PASS with both artifacts captured.
103774
103799
  - **DELEGATE**: Don't do everything yourself \u2014 orchestrate specialized agents for their strengths.
@@ -103799,10 +103824,10 @@ BEFORE writing ANY code, define realistic scenarios sized to the change \u2014 *
103799
103824
 
103800
103825
  Each scenario MUST specify, upfront:
103801
103826
  - Pass condition as a binary observable ("returns 200 + body matches schema"), not "should work".
103802
- - The REAL surface that proves it: tmux transcript, curl status+body, browser/Playwright assertion, computer-use action log, CLI stdout, parsed config dump, DB state diff. Asserting "tests pass" alone is NOT evidence.
103803
- - The cheapest faithful proof: a test file + test id at a code seam (written test-first \u2014 see TDD below), or the real-surface scenario itself when no seam exists. Prose, docs, prompt, and visual-only changes take review + real-surface QA \u2014 a test pinning their text is pretend-coverage, not proof.
103827
+ - The REAL surface that proves it: tmux transcript, curl status+body, browser (omowright) assertion, computer-use action log, CLI stdout, parsed config dump, DB state diff. Asserting "tests pass" alone is NOT evidence.
103828
+ - The existing tests that cover it (read first \u2014 see Test Decision below) and the real-surface scenario that proves it. Prose, docs, prompt, and visual-only changes take review + real-surface QA \u2014 a test pinning their text is pretend-coverage, not proof.
103804
103829
 
103805
- **These scenarios are the CONTRACT.** Record them in your TODO/notepad. You are not done until every one PASSES with both pieces of evidence captured (RED\u2192GREEN proof + real-surface artifact).
103830
+ **These scenarios are the CONTRACT.** Record them in your TODO/notepad. You are not done until every one PASSES with its real-surface artifact captured and the tests the repository keeps for it green.
103806
103831
 
103807
103832
  ### Durable Notepad (survives context loss)
103808
103833
 
@@ -103828,12 +103853,12 @@ Every scenario requires TWO captured artifacts \u2014 both mandatory:
103828
103853
 
103829
103854
  | Artifact | Source | Captures |
103830
103855
  |----------|--------|----------|
103831
- | **RED\u2192GREEN proof** | Test runner output before AND after the change | Test id + assertion message in both states |
103832
- | **Real-surface artifact** | tmux / curl / browser / Playwright / computer-use / CLI / DB | What the user actually sees |
103856
+ | **Tests of record** | The existing suite for the area, read before the change and green after it | Intent / coverage / pass noted; stale expectations updated |
103857
+ | **Real-surface artifact** | tmux / curl / browser (omowright) / computer-use / CLI / DB | What the user actually sees |
103833
103858
 
103834
103859
  Supporting (necessary, not sufficient): build exit 0, full suite green, lsp_diagnostics clean on changed files, regression scenarios still PASS.
103835
103860
 
103836
- The real-surface artifact is always required. A test is required only where a code seam exists. "tests pass" alone is NOT done, and a test pinning prose or visual text is NOT evidence.
103861
+ The real-surface artifact is always required. A new test only where the repository keeps tests for this behavior and a regression would otherwise pass unnoticed. "tests pass" alone is NOT done, and a test pinning prose or visual text is NOT evidence.
103837
103862
 
103838
103863
  <MANUAL_QA_MANDATE>
103839
103864
  ### YOU MUST EXECUTE MANUAL QA YOURSELF. THIS IS NOT OPTIONAL.
@@ -103847,7 +103872,7 @@ The real-surface artifact is always required. A test is required only where a co
103847
103872
  | Adds/modifies a CLI command | Run the command with Bash. Show the output. |
103848
103873
  | Changes build output | Run the build. Verify the output files exist and are correct. |
103849
103874
  | Modifies API behavior | Call the endpoint. Show the response. |
103850
- | Changes UI rendering | Drive the REAL page 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 auth, WRITE a \`playwright-core\` script and run it from the kernel against local Chrome (\`chromium.launch({ channel: "chrome" })\` / \`launchPersistentContext\`). Capture screenshot + action log. NEVER clear cookies, cache, or site data on the user's live profile. For login state, CLONE the profile first (\`rsync -a <profile>/ <tmp-clone>/\`) and use only the clone as the persistent user-data-dir; clear data only there. |
103875
+ | Changes UI rendering | Drive the REAL page from js eval with omowright (staged in the \`browser\` skill): the owned engine (\`connectPipe\` on a task-owned profile, \`connectCloakProfile\` for bot-scored targets) for unauthenticated pages, the attached engine (\`connectBrowserSkill()\` in the user's own signed-in browser) when the page needs their login. Capture screenshot + action log. NEVER clear cookies, cache, or site data on the user's live profile, and never clone it; if the attached engine is missing, run the browser skill's onboarding script and relay its one human step instead of launching a headless browser. |
103851
103876
  | Changes UI rendering or a TUI/terminal layout (incl. CJK/Korean/Japanese/Chinese text) | Load the visual-qa skill: capture reference + actual screenshots (web) or the xterm.js web terminal render (TUI; NEVER \`tmux capture-pane\` - it degrades color and CJK width), run its bundled pixel-diff / column-width script, and get the dual read-only verdict (design-system + functional integrity, and visual fidelity + CJK precision). Record the diff/score artifact. |
103852
103877
  | Changes a desktop/GUI (non-page) surface | Computer use: OS-level GUI automation against the running app. Capture action log + screenshot. |
103853
103878
  | Adds a new tool/hook/feature | Test it end-to-end in a real scenario. |
@@ -103867,36 +103892,29 @@ The real-surface artifact is always required. A test is required only where a co
103867
103892
  **CLEANUP IS PART OF QA \u2014 TRACK IT AS TODOS.** The moment a QA scenario spawns any resource, add a teardown todo for it (QA scripts, tmux assets, browser contexts, PIDs, ports, containers, temp dirs). Execute every teardown todo and capture the receipt before declaring done. A leftover process / tmux session / browser context / bound port / temp dir = NOT done.
103868
103893
  </MANUAL_QA_MANDATE>
103869
103894
 
103870
- ### TDD Workflow (MANDATORY on every production code change with a test seam)
103871
-
103872
- Test-first is not optional for code. Every code behavior change \u2014 features, fixes, refactors, perf, glue, config-with-logic \u2014 follows RED \u2192 GREEN \u2192 SURFACE. Prose, docs, and visual-only changes have no seam: skip RED\u2192GREEN and prove them through the surface channel.
103873
-
103874
- 1. **RED**: Write the failing test FIRST. Run it. Capture the assertion message proving it fails for the RIGHT reason (not syntax, not import). Paste RED output into the notepad. No production code yet.
103875
- 2. **GREEN**: Write the SMALLEST change that flips RED\u2192GREEN. Re-run. Capture GREEN output. If GREEN required ~20+ lines, your test was too coarse \u2014 split it.
103876
- 3. **SURFACE**: Exercise the real user-facing surface named by the scenario. Capture artifact path into the notepad.
103877
- 4. **REFACTOR**: Optional, only if needed. Tests MUST stay green throughout.
103878
- 5. **REGRESSION**: Re-run the FULL scenario list. Record PASS/FAIL inline with both evidence paths.
103895
+ ### Test Decision (every production code change)
103879
103896
 
103880
- **Refactor exception**: when refactoring behavior whose regressions the change could hide, write characterization tests pinning current observable behavior FIRST, watch them go GREEN against old code, THEN refactor. They remain green throughout.
103897
+ 1. **READ** the tests covering the area BEFORE touching it \u2014 they are the behavior of record. Note in the notepad: do they encode the intent, cover this path, pass? One WRONG before your change is a FINDING to report \u2014 NEVER edit a test green. A bug: reproduce it first and capture the failure. A refactor: the existing tests are green on the unchanged code first.
103898
+ 2. **CHANGE**: the SMALLEST change that meets the scenario; update the tests your change makes stale. Add a test ONLY when BOTH hold: the repository keeps tests for this behavior AND a regression would otherwise pass unnoticed by the run and the existing tests \u2014 sized like its neighbors, one case per stated behavior, failing when that behavior breaks. A test that restates the change (a constant, a string, a rename, a call) is NOT evidence; the run is.
103899
+ 3. **SURFACE**: Exercise the real user-facing surface named by the scenario; a reproduction now passes. Capture the artifact path into the notepad.
103900
+ 4. **REGRESSION**: Re-run the FULL scenario list plus the step-1 tests. Record PASS/FAIL inline with evidence paths.
103881
103901
 
103882
- **Exemption whitelist** (no new test required): pure formatting, comment-only edits, dependency version bumps with no behavior delta, rename-only moves. Each exemption MUST be justified in \`## Findings\` with the exact reason. Unjustified exemption is rejection.
103883
-
103884
- **If you typed production code without a failing test preceding it in the notepad: STOP, revert, write the test, watch it fail, then redo.**
103902
+ Prose, docs, prompt, and visual-only changes have no test seam: review + real-surface QA, NO test \u2014 a test pinning their text is pretend-coverage.
103885
103903
 
103886
103904
  ### Commit Discipline (MANDATORY)
103887
103905
 
103888
- Commit frequently: one atomic commit per verified increment (RED\u2192GREEN + evidence captured), never one end-of-run omnibus. BEFORE composing each message, study the history and mimic it \u2014 run \`git log --oneline -20\` plus \`git log -5 -- <touched paths>\` \u2014 matching subject shape, scope names, message language, body style, and typical commit size. Load the \`git-master\` skill for the commit workflow when available. Skip committing only when the user forbade commits this session.
103906
+ Commit frequently: one atomic commit per verified increment (change + evidence captured), never one end-of-run omnibus. BEFORE composing each message, study the history and mimic it \u2014 run \`git log --oneline -20\` plus \`git log -5 -- <touched paths>\` \u2014 matching subject shape, scope names, message language, body style, and typical commit size. Load the \`git-master\` skill for the commit workflow when available. Skip committing only when the user forbade commits this session.
103889
103907
 
103890
103908
  ### Verification Anti-Patterns (BLOCKING)
103891
103909
 
103892
103910
  | Violation | Why It Fails |
103893
103911
  |-----------|--------------|
103894
103912
  | "It should work now" | No evidence. Run it. |
103895
- | "I added the tests" | Did they go RED first, then GREEN? Show both. |
103913
+ | "I added the tests" | Did the repository keep tests here, and would the regression have passed unnoticed without them? Otherwise the run is the proof. |
103896
103914
  | "Fixed the bug" | What scenario proves it? Where's the artifact? |
103897
103915
  | "Implementation complete" | Every scenario PASS with both artifacts captured? |
103898
103916
  | Skipping test execution | Tests exist to be RUN, not just written |
103899
- | Writing code before its failing test | TDD floor violated \u2014 revert, write test, redo |
103917
+ | A test that restates the change | Cannot fail for any regression \u2014 delete it; the run is the proof |
103900
103918
 
103901
103919
  **CLAIM NOTHING WITHOUT PROOF. EXECUTE. VERIFY. SHOW EVIDENCE.**
103902
103920
 
@@ -104144,43 +104162,37 @@ When the \`create_goal\` tool exists, you MUST register the run's goal with it B
104144
104162
 
104145
104163
  ### SCENARIO CONTRACT (binding, defined BEFORE coding)
104146
104164
 
104147
- Define scenarios sized to the change \u2014 1-2 for a small single-surface change, 3+ for risky or multi-surface work \u2014 each with a binary pass condition and the cheapest faithful proof: a test file+test id at a code seam (test-first), or the real-surface scenario itself when no seam exists (prose, docs, visual-only: review + real-surface QA, no test). Classes:
104165
+ Define scenarios sized to the change \u2014 1-2 for a small single-surface change, 3+ for risky or multi-surface work \u2014 each with a binary pass condition and the existing tests that cover it (read first) and the real-surface scenario that proves it (prose, docs, visual-only: review + real-surface QA, no test). Classes:
104148
104166
  - **Happy path** (always)
104149
104167
  - **Edge** (boundary, empty, malformed, concurrent \u2014 when risky)
104150
104168
  - **Adjacent-surface regression** (callers, sibling endpoints, related modules \u2014 when multi-surface)
104151
104169
 
104152
- Scenarios are the contract. Done = every scenario PASSES with both artifacts (RED\u2192GREEN proof AND real-surface artifact).
104170
+ Scenarios are the contract. Done = every scenario PASSES with its real-surface artifact captured and the tests of record green.
104153
104171
 
104154
104172
  ### DURABLE NOTEPAD
104155
104173
 
104156
104174
  At start: \`NOTE=$(mktemp -t ulw-$(date +%Y%m%d-%H%M%S).XXXXXX.md)\`. Echo the path. APPEND-ONLY sections: Plan, Scenarios, Now, Todo, Findings (file:line), Learnings. If context is lost, re-read and resume \u2014 this is your only durable memory.
104157
104175
 
104158
- ### TDD (MANDATORY for code with a test seam)
104159
-
104160
- Every production code change \u2014 features, fixes, refactors, perf, glue, config-with-logic \u2014 follows RED\u2192GREEN\u2192SURFACE. Prose, docs, and visual-only changes have no seam: skip RED\u2192GREEN, prove them through the surface channel.
104161
-
104162
- 1. **RED**: Write the failing test FIRST. Run it. Capture the assertion message that proves it fails for the RIGHT reason (not syntax, not import). Paste RED output into the notepad. No production code yet.
104163
- 2. **GREEN**: Smallest change to flip RED\u2192GREEN. Re-run, capture GREEN output. If GREEN required ~20+ lines, your test was too coarse \u2014 split it.
104164
- 3. **SURFACE**: Exercise the real user-facing surface (CLI / API / build / UI / config). Capture artifact path.
104165
- 4. **REGRESSION**: Re-run the FULL scenario list every increment. Record PASS/FAIL with both artifact paths.
104166
-
104167
- **Refactors**: write characterization tests pinning current observable behavior FIRST, watch them GREEN against the old code, THEN refactor. Stay green throughout.
104176
+ ### TEST DECISION (every production code change)
104168
104177
 
104169
- **Exemption whitelist**: pure formatting, comment-only edits, version bumps with no behavior delta, rename-only moves. Each MUST be justified in writing. Unjustified exemption = rejection.
104178
+ 1. **READ** the tests covering the area BEFORE touching it \u2014 the behavior of record: do they encode the intent, cover this path, pass? One WRONG before your change is a FINDING to report \u2014 NEVER edit a test green. A bug: reproduce it first and capture the failure. A refactor: the existing tests are green on the unchanged code first.
104179
+ 2. **CHANGE**: the SMALLEST change that meets the scenario; update the tests it makes stale. Add a test ONLY when BOTH hold: the repository keeps tests for this behavior AND a regression would otherwise pass unnoticed by the run and the existing tests \u2014 sized like its neighbors, never one that restates the change. The run is the proof, not a test that certifies the diff.
104180
+ 3. **SURFACE**: Exercise the real user-facing surface (CLI / API / build / UI / config); a reproduction now passes. Capture artifact path.
104181
+ 4. **REGRESSION**: Re-run the FULL scenario list plus the step-1 tests every increment. Record PASS/FAIL with artifact paths.
104170
104182
 
104171
- **If you typed production code without a failing test preceding it: STOP, revert, write the test, watch it fail, then redo.** No exceptions \u2014 "obvious" / "one-liner" / "too small" do NOT exempt you.
104183
+ Prose, docs, and visual-only changes have no seam: prove them through the surface channel, NO test.
104172
104184
 
104173
104185
  ### COMMIT DISCIPLINE (MANDATORY)
104174
104186
 
104175
- Commit frequently: one atomic commit per verified increment (RED\u2192GREEN + evidence captured), never one end-of-run omnibus. BEFORE composing each message, study the history and mimic it \u2014 run \`git log --oneline -20\` plus \`git log -5 -- <touched paths>\` \u2014 matching subject shape, scope names, message language, body style, and typical commit size. Skip committing only when the user forbade commits this session.
104187
+ Commit frequently: one atomic commit per verified increment (change + evidence captured), never one end-of-run omnibus. BEFORE composing each message, study the history and mimic it \u2014 run \`git log --oneline -20\` plus \`git log -5 -- <touched paths>\` \u2014 matching subject shape, scope names, message language, body style, and typical commit size. Skip committing only when the user forbade commits this session.
104176
104188
 
104177
104189
  ### Evidence Gates
104178
104190
 
104179
104191
  | Gate | Required Evidence |
104180
104192
  |------|-------------------|
104181
- | **RED** | Failing assertion msg before any production code |
104182
- | **GREEN** | Same test now passing |
104183
- | **Surface** | tmux / curl / browser / Playwright / computer-use / CLI / DB diff artifact path |
104193
+ | **Read** | Existing tests for the area noted (intent / coverage / pass) before the change |
104194
+ | **Run** | Tests of record green after it; stale expectations updated |
104195
+ | **Surface** | tmux / curl / browser (omowright) / computer-use / CLI / DB diff artifact path |
104184
104196
  | **Build** | Exit code 0 |
104185
104197
  | **Suite** | Full run green; no skip/.only/xfail added this turn |
104186
104198
  | **Lint** | lsp_diagnostics clean on changed files |
@@ -104188,13 +104200,13 @@ Commit frequently: one atomic commit per verified increment (RED\u2192GREEN + ev
104188
104200
  <ANTI_OPTIMISM_CHECKPOINT>
104189
104201
  ## BEFORE YOU CLAIM DONE, ANSWER HONESTLY:
104190
104202
 
104191
- 1. Did EVERY scenario reach RED captured \u2192 GREEN captured \u2192 surface artifact captured? (paths in notepad)
104203
+ 1. Did EVERY scenario reach surface artifact captured with the tests of record green? (paths in notepad)
104192
104204
  2. Did I run \`lsp_diagnostics\` and see ZERO errors on changed files? (not "I'm sure")
104193
104205
  3. Did I run the FULL suite and see it PASS? (not "they should pass")
104194
104206
  4. Did I read the actual output of every command? (not skim)
104195
104207
  5. Is EVERY requirement from the request actually implemented? (re-read the request NOW)
104196
104208
  6. Did I classify intent at the start? (if not, my entire approach may be wrong)
104197
- 7. Did I write code BEFORE its failing test, anywhere? (if yes, REVERT and redo via TDD)
104209
+ 7. Did I add a test that only restates the change, or edit a wrong test green? (if yes, delete it / report the finding)
104198
104210
 
104199
104211
  If ANY answer is no \u2192 GO BACK AND DO IT. Do not claim completion.
104200
104212
  </ANTI_OPTIMISM_CHECKPOINT>
@@ -104219,7 +104231,7 @@ Trigger if user said "\uC5C4\uBC00"/"strictly"/"rigorously"/"properly review", o
104219
104231
  | Adds/modifies a CLI command | Run the command with Bash. Show the output. |
104220
104232
  | Changes build output | Run the build. Verify output files exist and are correct. |
104221
104233
  | Modifies API behavior | Call the endpoint. Show the response. |
104222
- | Renders/changes a page | Drive the REAL page 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 auth, WRITE a \`playwright-core\` script and run it from the kernel against local Chrome (\`chromium.launch({ channel: "chrome" })\` / \`launchPersistentContext\`). Capture screenshot + action log. NEVER clear cookies, cache, or site data on the user's live profile. For login state, CLONE it first (\`rsync -a <profile>/ <tmp-clone>/\`) and use only the clone as the persistent user-data-dir; clear data only there. |
104234
+ | Renders/changes a page | Drive the REAL page from js eval with omowright (staged in the \`browser\` skill): the owned engine (\`connectPipe\` on a task-owned profile, \`connectCloakProfile\` for bot-scored targets) for unauthenticated pages, the attached engine (\`connectBrowserSkill()\` in the user's own signed-in browser) when the page needs their login. Capture screenshot + action log. NEVER clear cookies, cache, or site data on the user's live profile, and never clone it; if the attached engine is missing, run the browser skill's onboarding script and relay its one human step instead of launching a headless browser. |
104223
104235
  | Changes UI rendering or a TUI/terminal layout (incl. CJK/Korean/Japanese/Chinese text) | Load the visual-qa skill: capture reference + actual screenshots (web) or the xterm.js web terminal render (TUI; NEVER \`tmux capture-pane\` - it degrades color and CJK width), run its bundled pixel-diff / column-width script, and get the dual read-only verdict (design-system + functional integrity, and visual fidelity + CJK precision). Record the diff/score artifact. |
104224
104236
  | Drives a desktop/GUI (non-page) surface | Computer use: OS-level GUI automation against the running app. Capture action log + screenshot. |
104225
104237
  | Adds a new tool/hook/feature | Test it end-to-end in a real scenario. |
@@ -104427,17 +104439,14 @@ Before production changes, define scenarios covering:
104427
104439
 
104428
104440
  Each scenario needs a binary pass condition. "Looks good" is not a pass condition.
104429
104441
 
104430
- ## TDD WORKFLOW
104442
+ ## TEST DECISION
104431
104443
 
104432
- TDD is mandatory on production code changes with a test seam; prose, docs, and visual-only changes take review + real-surface QA instead (a test pinning their text is pretend-coverage).
104444
+ 1. READ: the tests covering the area, before any edit \u2014 intent, coverage, pass. One wrong before your change is a finding, never edited green. A bug: reproduce it first.
104445
+ 2. CHANGE: the smallest change; update tests it makes stale. A new test only where the repository keeps tests for this behavior AND a regression would otherwise pass unnoticed \u2014 never one that restates the change.
104446
+ 3. SURFACE: exercise the real user path and capture the artifact; a reproduction now passes.
104447
+ 4. REGRESSION: rerun the scenario list and the step-1 tests.
104433
104448
 
104434
- 1. RED: write or identify a failing test that proves the needed behavior.
104435
- 2. GREEN: make the smallest change that flips the test to passing.
104436
- 3. SURFACE: exercise the real user path and capture the artifact.
104437
- 4. REFACTOR: improve structure only while tests stay green.
104438
- 5. REGRESSION: rerun the scenario list.
104439
-
104440
- Exemptions: pure prompt text, formatting, comment-only edits, version bumps with no behavior delta, and rename-only moves. Justify every exemption in the final report.
104449
+ Prose, docs, and visual-only changes take review + real-surface QA, no test (a test pinning their text is pretend-coverage).
104441
104450
 
104442
104451
  ## COMMIT DISCIPLINE
104443
104452
 
@@ -104599,8 +104608,8 @@ deep_context = background_output(task_id=...)
104599
104608
  - If delegating: every child prompt carries GOAL, STOP WHEN (the exact observable condition that ends its run \u2014 the child stops the moment it holds), and EVIDENCE (what it returns so you can verify, not trust) \u2014 plus exhaustive context. Judge the child by its returned EVIDENCE against its STOP WHEN, never by its self-report.
104600
104609
 
104601
104610
  **Verify (per-scenario, not just "at the end"):**
104602
- - RED\u2192GREEN proof captured (test id + assertion msg in both states)
104603
- - Real-surface artifact (tmux / curl / browser / Playwright / computer-use / CLI / DB diff)
104611
+ - Existing tests read (intent / coverage / pass), stale expectations updated
104612
+ - Real-surface artifact (tmux / curl / browser (omowright) / computer-use / CLI / DB diff)
104604
104613
  - \`lsp_diagnostics\` clean on modified files
104605
104614
  - Full suite green, regression scenarios still PASS
104606
104615
 
@@ -104621,17 +104630,13 @@ Maintain a live todo list for every multi-step task: one atomic item per action
104621
104630
  Define scenarios sized to the change \u2014 1-2 for small single-surface work, 3+ for risky or multi-surface work \u2014 covering: **happy path**, plus **edge** (boundary / empty / malformed / concurrent) and **adjacent-surface regression** when the change is risky or multi-surface. For each, write:
104622
104631
  - Binary pass condition ("returns 200 with schema-matching body"), not "should work".
104623
104632
  - The real surface that proves it.
104624
- - The cheapest faithful proof: a test file + test id at a code seam (test-first; see TDD), or the real-surface scenario itself when no seam exists (prose, docs, visual-only: review + real-surface QA, no test).
104625
-
104626
- Scenarios are the contract. Done = every scenario PASSES with RED\u2192GREEN proof AND real-surface artifact captured. Then declare WHEN TO STOP for the whole run, in one line: "I'll stop right away when <the exact observable state that ends this run>" \u2014 its end state MUST be the full STOP GOAL from the Stop rules, never scenario completion alone. The Stop rules bind to this line \u2014 the moment it holds, you stop.
104627
-
104628
- ## TDD (MANDATORY on every production code change with a test seam)
104633
+ - The existing tests that cover it (see TEST DECISION) and the real-surface scenario that proves it (prose, docs, visual-only: review + real-surface QA, no test).
104629
104634
 
104630
- Code features, fixes, refactors, perf, glue, config-with-logic \u2014 all follow RED\u2192GREEN\u2192SURFACE. Prose, docs, and visual-only changes have no test seam: prove them through the real-surface channel; a test pinning their text is pretend-coverage. Write the failing test FIRST; capture the assertion proving it fails for the right reason; write the SMALLEST change to flip it green; exercise the real surface; capture both artifacts. **If you wrote production code without a failing test preceding it: STOP, revert, write the test, redo.**
104635
+ Scenarios are the contract. Done = every scenario PASSES with its real-surface artifact captured and the tests of record green. Then declare WHEN TO STOP for the whole run, in one line: "I'll stop right away when <the exact observable state that ends this run>" \u2014 its end state MUST be the full STOP GOAL from the Stop rules, never scenario completion alone. The Stop rules bind to this line \u2014 the moment it holds, you stop.
104631
104636
 
104632
- Refactors of behavior whose regressions the change could hide: write characterization tests pinning current behavior FIRST, watch them GREEN against old code, THEN refactor. They stay green throughout.
104637
+ ## TEST DECISION
104633
104638
 
104634
- Exemption whitelist (no new test required): formatting, comment-only, version bumps with no behavior delta, rename-only. Each must be justified in writing. Unjustified exemption is rejection.
104639
+ READ the tests covering the area BEFORE touching it \u2014 they are the behavior of record: intent, coverage, pass. One WRONG before your change is a FINDING \u2014 never edit a test green. Reproduce a bug before fixing it; a refactor starts with the existing tests green on the unchanged code. The run proves the change: add a test ONLY where the repository keeps tests for this behavior AND a regression would otherwise pass unnoticed \u2014 sized like its neighbors, never one that restates the change. Prose, docs, and visual-only changes have no test seam: real-surface channel, no test; a test pinning their text is pretend-coverage.
104635
104640
 
104636
104641
  ## COMMIT DISCIPLINE
104637
104642
 
@@ -104641,8 +104646,8 @@ Commit one atomic commit per verified increment; never one end-of-run omnibus. B
104641
104646
 
104642
104647
  | Phase | Action | Required Evidence |
104643
104648
  |-------|--------|-------------------|
104644
- | RED | Run new test before impl | Failing assertion with msg |
104645
- | GREEN | Re-run after smallest change | Passing assertion |
104649
+ | Read | Existing tests for the area, before the change | Intent / coverage / pass noted |
104650
+ | Run | Tests of record after the change | Green; stale expectations updated |
104646
104651
  | Surface | Exercise real user path | Artifact path (tmux/curl/browser/...) |
104647
104652
  | Build | Run build command | Exit code 0 |
104648
104653
  | Suite | Full test run | All green; no skip/.only/xfail added |
@@ -104658,7 +104663,7 @@ lsp_diagnostics catches type errors only. Logic bugs, missing behavior, broken f
104658
104663
  | Adds/modifies a CLI command | Run it with Bash. Show output. |
104659
104664
  | Changes build output | Run build. Verify output files. |
104660
104665
  | Modifies API behavior | Call the endpoint. Show response. |
104661
- | Renders/changes a page | Drive the page 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 auth, WRITE a \`playwright-core\` script and run it from the kernel against local Chrome (\`chromium.launch({ channel: "chrome" })\` / \`launchPersistentContext\`). Screenshot + action log. NEVER clear cookies, cache, or site data on the user's live profile. For login state, CLONE it first (\`rsync -a <profile>/ <tmp-clone>/\`) and use only the clone as the persistent user-data-dir; clear data only there. |
104666
+ | Renders/changes a page | Drive the REAL page from js eval with omowright (staged in the \`browser\` skill): the owned engine (\`connectPipe\` on a task-owned profile, \`connectCloakProfile\` for bot-scored targets) for unauthenticated pages, the attached engine (\`connectBrowserSkill()\` in the user's own signed-in browser) when the page needs their login. Screenshot + action log. NEVER clear cookies, cache, or site data on the user's live profile, and never clone it; if the attached engine is missing, run the browser skill's onboarding script and relay its one human step instead of launching a headless browser. |
104662
104667
  | Changes UI rendering or a TUI/terminal layout (incl. CJK/Korean/Japanese/Chinese text) | Load the visual-qa skill: capture reference + actual screenshots (web) or the xterm.js web terminal render (TUI; NEVER \`tmux capture-pane\` - it degrades color and CJK width), run its bundled pixel-diff / column-width script, and get the dual read-only verdict (design-system + functional integrity, and visual fidelity + CJK precision). Record the diff/score artifact. |
104663
104668
  | Drives a desktop GUI | Computer use: OS-level GUI automation against the running app. Action log + screenshot. |
104664
104669
  | Adds tool/hook/feature | Test end-to-end in a real scenario. |
@@ -104674,7 +104679,7 @@ Trigger if user said "\uC5C4\uBC00"/"strictly"/"rigorously"/"properly review", o
104674
104679
  ## STOP RULES
104675
104680
 
104676
104681
  - After each result, ask whether the user's core request can now be answered with useful evidence in hand. If yes, answer now \u2014 skip any remaining retrieval, ceremony, or verification that adds no evidence.
104677
- - The STOP GOAL: every scenario PASSES with RED\u2192GREEN proof AND real-surface artifact captured; full suite green and \`lsp_diagnostics\` clean on changed files; QA teardown receipts recorded; no scope creep; and (if triggered) the reviewer gate approved unconditionally. Above ALL of that, the decisive test \u2014 outranking every other consideration \u2014 is: is the user's problem ACTUALLY SOLVED in observable behavior? If no, you are NOT done, whatever the checklist says. If yes, deliver the final message and STOP \u2014 no hesitation, no extra verification pass, no polish loop. Work past the stop goal is scope creep, not diligence.
104682
+ - The STOP GOAL: every scenario PASSES with its real-surface artifact captured and the tests of record green; full suite green and \`lsp_diagnostics\` clean on changed files; QA teardown receipts recorded; no scope creep; and (if triggered) the reviewer gate approved unconditionally. Above ALL of that, the decisive test \u2014 outranking every other consideration \u2014 is: is the user's problem ACTUALLY SOLVED in observable behavior? If no, you are NOT done, whatever the checklist says. If yes, deliver the final message and STOP \u2014 no hesitation, no extra verification pass, no polish loop. Work past the stop goal is scope creep, not diligence.
104678
104683
  - After 2 identical failed attempts at one step, surface what was tried and ask the user before another retry.
104679
104684
  - After 2 parallel exploration waves yield no new useful facts, stop exploring and act.
104680
104685
 
@@ -132201,6 +132206,10 @@ function resolveCategoryConfig(categoryName, options) {
132201
132206
  return null;
132202
132207
  }
132203
132208
  }
132209
+ if (categoryReq?.requiresAnyModel && availableModels && !hasExplicitUserConfig && !isAnyFallbackModelAvailable(categoryReq.fallbackChain, availableModels)) {
132210
+ log2(`[resolveCategoryConfig] Category ${categoryName} has no available model in its fallback chain`);
132211
+ return null;
132212
+ }
132204
132213
  const defaultPromptAppend = CATEGORY_PROMPT_APPENDS[categoryName] ?? "";
132205
132214
  if (!defaultConfig && !userConfig) {
132206
132215
  return null;
@@ -132391,6 +132400,16 @@ To use this category:
132391
132400
  1. Connect a provider with this model: ${requiredModel}
132392
132401
  2. Or configure an alternative model in your .omo/omo.jsonc for this category
132393
132402
 
132403
+ Available categories: ${allCategoryNames}`);
132404
+ }
132405
+ if (categoryExists && requirement?.requiresAnyModel && userCategories?.[categoryName] === undefined) {
132406
+ const chainModels = [...new Set(requirement.fallbackChain.map((entry) => entry.model))].join(", ");
132407
+ return categoryResolutionError(`Category "${categoryName}" has no available model: none of its fallback-chain models (${chainModels}) is available.
132408
+
132409
+ To use this category:
132410
+ 1. Connect a provider that serves one of: ${chainModels}
132411
+ 2. Or configure a model for this category in your .omo/omo.jsonc
132412
+
132394
132413
  Available categories: ${allCategoryNames}`);
132395
132414
  }
132396
132415
  return categoryResolutionError(`Unknown category: "${categoryName}". Available: ${allCategoryNames}`);
@@ -1,25 +1,37 @@
1
1
  # ATTRIBUTION / NOTICE
2
2
 
3
- This skill (`browser`, part of `@oh-my-opencode/shared-skills`) is project-original documentation.
4
- It drives a third-party tool that it does **not** redistribute.
3
+ This skill (`browser`, part of `@oh-my-opencode/shared-skills`) is project-original documentation
4
+ plus a staged copy of one library it drives.
5
+
6
+ ## omowright — bundled
7
+
8
+ Both engines this skill documents are provided by **omowright**.
9
+
10
+ - Upstream: the `omowright` repository on GitHub, pinned by commit in the root `package.json`
11
+ devDependency.
12
+ - License: MIT
13
+ - What ships here: `runtime/omowright/index.js` (the library bundled into one ESM file, including
14
+ its `ws` and `zod` dependencies) and `runtime/omowright/page-bundle.js` (the in-page snapshot
15
+ script it reads at import time), staged at build time by
16
+ `packages/shared-skills/stage-omowright-runtime.mjs` from the pinned root devDependency, with a
17
+ `manifest.json` recording the version and file digests. The repository holds no copy; the
18
+ staged files are gitignored and packed through the sibling `.npmignore`.
19
+ - omowright's own license notice is preserved inside the bundled file.
5
20
 
6
21
  ## BrowserSkill — driven, not vendored
7
22
 
8
- The attached engine this skill documents is **BrowserSkill** by Tencent.
23
+ The attached engine reaches the user's browser through **BrowserSkill** by Tencent.
9
24
 
10
25
  - Upstream: https://github.com/Tencent/BrowserSkill
11
26
  - License: MIT
12
- - What ships here: documentation and two local helper scripts, authored by this project.
13
- - What does NOT ship here: the `bsk` CLI, the daemon, the browser extension, or any upstream
14
- source. The user installs those from upstream's own installer and from the Chrome Web Store /
15
- Edge Add-ons listings. This package never bundles a browser binary or an extension payload.
16
-
17
- MIT permits redistribution; we simply have no reason to, because upstream publishes signed
18
- per-platform releases and store builds that stay current on their own.
27
+ - What ships here: nothing of upstream's. omowright speaks the daemon's IPC protocol; the user
28
+ installs the `bsk` CLI from upstream's own installer (run by `scripts/browser-install.mjs`) and
29
+ the extension from the Chrome Web Store / Edge Add-ons listings (registered by the same script
30
+ through Chrome's external-extension mechanism). This package never bundles a browser binary or
31
+ an extension payload.
19
32
 
20
33
  ## Owned-engine references
21
34
 
22
- `references/owned-engine/` documents a *contract* for a code-driven browser — the escalation
23
- ladder, viewport pinning, reading the network instead of the DOM, overlay and cross-origin
24
- handling — not any particular package. The techniques are generic CDP practice. No third-party
25
- source is reproduced.
35
+ `references/owned-engine/` summarizes omowright's own skill and presets (escalation ladder,
36
+ network-first reading, frames, dialogs, human handoff) as routing text; the library's repository
37
+ is the authoritative treatment.