oh-my-opencode 5.0.0-beta.86 → 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 (233) hide show
  1. package/.agents/skills/hyperplan/SKILL.md +1 -1
  2. package/.opencode/skills/hyperplan/SKILL.md +1 -1
  3. package/dist/cli/index.js +27 -21
  4. package/dist/cli-node/index.js +27 -21
  5. package/dist/index.js +85 -87
  6. package/dist/skills/browser/ATTRIBUTION.md +26 -14
  7. package/dist/skills/browser/SKILL.md +65 -52
  8. package/dist/skills/browser/references/commands.md +81 -66
  9. package/dist/skills/browser/references/install.md +31 -34
  10. package/dist/skills/browser/references/owned-engine/README.md +41 -21
  11. package/dist/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  12. package/dist/skills/browser/references/owned-engine/ladder.md +24 -22
  13. package/dist/skills/browser/references/owned-engine/network.md +35 -15
  14. package/dist/skills/browser/references/recipes/1password.md +13 -11
  15. package/dist/skills/browser/references/remote.md +5 -4
  16. package/dist/skills/browser/runtime/omowright/index.js +1534 -0
  17. package/dist/skills/browser/runtime/omowright/manifest.json +9 -0
  18. package/dist/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  19. package/dist/skills/browser/scripts/browser-doctor.mjs +37 -32
  20. package/dist/skills/browser/scripts/browser-install.mjs +31 -44
  21. package/dist/skills/browser/scripts/omowright.mjs +25 -0
  22. package/dist/skills/debugging/SKILL.md +2 -2
  23. package/dist/skills/debugging/references/methodology/06-fix.md +3 -3
  24. package/dist/skills/debugging/references/methodology/08-qa.md +1 -1
  25. package/dist/skills/debugging/references/tools/browser-qa.md +104 -0
  26. package/dist/skills/frontend/SKILL.md +1 -1
  27. package/dist/skills/frontend/references/design/clone-from-url.md +1 -1
  28. package/dist/skills/programming/SKILL.md +12 -18
  29. package/dist/skills/programming/references/rust/README.md +43 -15
  30. package/dist/skills/programming/references/rust/api-design.md +81 -0
  31. package/dist/skills/programming/references/rust/async-tokio.md +60 -28
  32. package/dist/skills/programming/references/rust/axum-stack.md +1 -13
  33. package/dist/skills/programming/references/rust/cargo-strict.md +44 -8
  34. package/dist/skills/programming/references/rust/clap-stack.md +8 -3
  35. package/dist/skills/programming/references/rust/concurrency.md +66 -52
  36. package/dist/skills/programming/references/rust/libraries.md +35 -25
  37. package/dist/skills/programming/references/rust/macros.md +63 -0
  38. package/dist/skills/programming/references/rust/one-liners.md +5 -3
  39. package/dist/skills/programming/references/rust/proptest-insta.md +8 -0
  40. package/dist/skills/programming/references/rust/type-state.md +50 -12
  41. package/dist/skills/programming/references/rust/unsafe-discipline.md +34 -6
  42. package/dist/skills/programming/references/rust/zero-cost-safety.md +62 -52
  43. package/dist/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  44. package/dist/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  45. package/dist/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  46. package/dist/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  47. package/dist/skills/programming/scripts/rust/new-project.py +31 -28
  48. package/dist/skills/review-work/SKILL.md +1 -1
  49. package/dist/skills/ultimate-browsing/SKILL.md +27 -20
  50. package/dist/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  51. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  52. package/dist/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  53. package/dist/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  54. package/dist/skills/ulw-execute/SKILL.md +4 -4
  55. package/dist/skills/visual-qa/SKILL.md +1 -1
  56. package/dist/skills/visual-qa/references/browser-setup.md +46 -46
  57. package/dist/tui.js +6 -3
  58. package/package.json +15 -14
  59. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  60. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +2 -0
  61. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  62. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  63. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  64. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  65. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  66. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  67. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  68. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  69. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  70. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  71. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  72. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +1 -1
  73. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  74. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  75. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  76. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  77. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  78. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  79. package/packages/omo-codex/plugin/components/ultrawork/README.md +1 -1
  80. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  81. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +63 -89
  82. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  83. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  84. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
  85. package/packages/omo-codex/plugin/components/ulw-execute-continuation/directive.md +2 -2
  86. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  87. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  88. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +63 -89
  89. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  90. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  91. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +2 -3
  92. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +2 -2
  93. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  105. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  106. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  107. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  108. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  109. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  110. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  111. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  112. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  113. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  114. package/packages/omo-codex/plugin/package-lock.json +12 -12
  115. package/packages/omo-codex/plugin/package.json +1 -1
  116. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +8 -2
  117. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +2 -2
  118. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +26 -14
  119. package/packages/omo-codex/plugin/skills/browser/SKILL.md +65 -52
  120. package/packages/omo-codex/plugin/skills/browser/references/commands.md +81 -66
  121. package/packages/omo-codex/plugin/skills/browser/references/install.md +31 -34
  122. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +41 -21
  123. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  124. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +24 -22
  125. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +35 -15
  126. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +13 -11
  127. package/packages/omo-codex/plugin/skills/browser/references/remote.md +5 -4
  128. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +1534 -0
  129. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +9 -0
  130. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  131. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +37 -32
  132. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +31 -44
  133. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +25 -0
  134. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +2 -2
  135. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +3 -3
  136. package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +1 -1
  137. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +104 -0
  138. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -1
  139. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
  140. package/packages/omo-codex/plugin/skills/programming/SKILL.md +12 -18
  141. package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +43 -15
  142. package/packages/omo-codex/plugin/skills/programming/references/rust/api-design.md +81 -0
  143. package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +60 -28
  144. package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +1 -13
  145. package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +44 -8
  146. package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +8 -3
  147. package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +66 -52
  148. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +35 -25
  149. package/packages/omo-codex/plugin/skills/programming/references/rust/macros.md +63 -0
  150. package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +5 -3
  151. package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +8 -0
  152. package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +50 -12
  153. package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +34 -6
  154. package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +62 -52
  155. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  156. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  157. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  158. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +31 -28
  159. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +1 -1
  160. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +27 -20
  161. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  162. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  163. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  164. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  165. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +63 -89
  166. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +4 -4
  167. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +2 -3
  168. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +2 -2
  169. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +1 -1
  170. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +46 -46
  171. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +2 -2
  172. package/packages/omo-codex/scripts/install-dist/install-local.mjs +4 -2
  173. package/packages/prompts-core/prompts/ultrawork/codex.md +63 -89
  174. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +26 -14
  175. package/packages/shared-skills/skills/browser/SKILL.md +65 -52
  176. package/packages/shared-skills/skills/browser/references/commands.md +81 -66
  177. package/packages/shared-skills/skills/browser/references/install.md +31 -34
  178. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +41 -21
  179. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  180. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +24 -22
  181. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +35 -15
  182. package/packages/shared-skills/skills/browser/references/recipes/1password.md +13 -11
  183. package/packages/shared-skills/skills/browser/references/remote.md +5 -4
  184. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +1534 -0
  185. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +9 -0
  186. package/packages/shared-skills/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  187. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +37 -32
  188. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +31 -44
  189. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +25 -0
  190. package/packages/shared-skills/skills/debugging/SKILL.md +2 -2
  191. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +3 -3
  192. package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +1 -1
  193. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +104 -0
  194. package/packages/shared-skills/skills/frontend/SKILL.md +1 -1
  195. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
  196. package/packages/shared-skills/skills/programming/SKILL.md +12 -18
  197. package/packages/shared-skills/skills/programming/references/rust/README.md +43 -15
  198. package/packages/shared-skills/skills/programming/references/rust/api-design.md +81 -0
  199. package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +60 -28
  200. package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +1 -13
  201. package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +44 -8
  202. package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +8 -3
  203. package/packages/shared-skills/skills/programming/references/rust/concurrency.md +66 -52
  204. package/packages/shared-skills/skills/programming/references/rust/libraries.md +35 -25
  205. package/packages/shared-skills/skills/programming/references/rust/macros.md +63 -0
  206. package/packages/shared-skills/skills/programming/references/rust/one-liners.md +5 -3
  207. package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +8 -0
  208. package/packages/shared-skills/skills/programming/references/rust/type-state.md +50 -12
  209. package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +34 -6
  210. package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +62 -52
  211. package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  212. package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  213. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  214. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  215. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +31 -28
  216. package/packages/shared-skills/skills/review-work/SKILL.md +1 -1
  217. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +27 -20
  218. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  219. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  220. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  221. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  222. package/packages/shared-skills/skills/ulw-execute/SKILL.md +4 -4
  223. package/packages/shared-skills/skills/visual-qa/SKILL.md +1 -1
  224. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +46 -46
  225. package/dist/skills/browser/scripts/browser-env.mjs +0 -41
  226. package/dist/skills/debugging/references/tools/playwright-cli.md +0 -112
  227. package/dist/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  228. package/packages/omo-codex/plugin/skills/browser/scripts/browser-env.mjs +0 -41
  229. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +0 -112
  230. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  231. package/packages/shared-skills/skills/browser/scripts/browser-env.mjs +0 -41
  232. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +0 -112
  233. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
package/dist/index.js CHANGED
@@ -20238,7 +20238,7 @@ var CATEGORY_MODEL_REQUIREMENTS = {
20238
20238
  },
20239
20239
  quick: {
20240
20240
  fallbackChain: [
20241
- { providers: ["chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
20241
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
20242
20242
  { providers: ["deepseek"], model: "deepseek-flash", variant: "off" },
20243
20243
  {
20244
20244
  providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan"],
@@ -20283,7 +20283,7 @@ var CATEGORY_MODEL_REQUIREMENTS = {
20283
20283
  {
20284
20284
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
20285
20285
  model: "claude-opus-5-5",
20286
- variant: "max"
20286
+ variant: "medium"
20287
20287
  },
20288
20288
  { providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.3", variant: "max" },
20289
20289
  {
@@ -20294,6 +20294,7 @@ var CATEGORY_MODEL_REQUIREMENTS = {
20294
20294
  ]
20295
20295
  },
20296
20296
  writing: {
20297
+ requiresAnyModel: true,
20297
20298
  fallbackChain: [
20298
20299
  {
20299
20300
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
@@ -23561,6 +23562,8 @@ function isRecord9(value) {
23561
23562
  }
23562
23563
  var OmoModelProfileInputSchema = z9.object({
23563
23564
  display_name: z9.string().optional(),
23565
+ family: z9.enum(["daily", "geeky"]).optional(),
23566
+ tier: z9.enum(["normal", "heavy"]).optional(),
23564
23567
  models: z9.array(z9.union([z9.string(), OmoFallbackModelObjectSchema])).optional()
23565
23568
  }).strict();
23566
23569
  var OmoModelProfileSchema = z9.preprocess((value) => isRecord9(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileInputSchema);
@@ -27357,7 +27360,7 @@ var OPENAI_CATEGORIES = [
27357
27360
  },
27358
27361
  {
27359
27362
  name: "unspecified-high",
27360
- config: { model: "anthropic/claude-opus-5-5", variant: "max" },
27363
+ config: { model: "anthropic/claude-opus-5-5", variant: "medium" },
27361
27364
  description: "Tasks that don't fit other categories, high effort required",
27362
27365
  callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
27363
27366
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
@@ -97712,7 +97715,7 @@ function getCachedVersion(options = {}) {
97712
97715
  // package.json
97713
97716
  var package_default = {
97714
97717
  name: "oh-my-opencode",
97715
- version: "5.0.0-beta.86",
97718
+ version: "5.0.0-beta.87",
97716
97719
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
97717
97720
  main: "./dist/index.js",
97718
97721
  types: "dist/index.d.ts",
@@ -97895,7 +97898,7 @@ var package_default = {
97895
97898
  zod: "^4.6.5"
97896
97899
  },
97897
97900
  devDependencies: {
97898
- "@code-yeongyu/senpi": "2026.9.23-2",
97901
+ "@code-yeongyu/senpi": "2026.9.23-4",
97899
97902
  "@oh-my-opencode/agents-md-core": "workspace:*",
97900
97903
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
97901
97904
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -97931,22 +97934,23 @@ var package_default = {
97931
97934
  "@xterm/xterm": "^6.0.0",
97932
97935
  "bun-types": "1.4.2",
97933
97936
  "node-pty": "^1.1.0",
97937
+ omowright: "github:code-yeongyu/omowright#25781c8ac04f9aae358b06551520b792ac45c6ed",
97934
97938
  "puppeteer-core": "^25.11.0",
97935
97939
  typescript: "^7.0.2"
97936
97940
  },
97937
97941
  optionalDependencies: {
97938
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.86",
97939
- "oh-my-opencode-darwin-x64": "5.0.0-beta.86",
97940
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.86",
97941
- "oh-my-opencode-linux-arm64": "5.0.0-beta.86",
97942
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.86",
97943
- "oh-my-opencode-linux-x64": "5.0.0-beta.86",
97944
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.86",
97945
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.86",
97946
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.86",
97947
- "oh-my-opencode-windows-arm64": "5.0.0-beta.86",
97948
- "oh-my-opencode-windows-x64": "5.0.0-beta.86",
97949
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.86"
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"
97950
97954
  },
97951
97955
  overrides: {
97952
97956
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -103787,9 +103791,9 @@ task(category="quick", load_skills=["git-master"], run_in_background=true)
103787
103791
 
103788
103792
  ## EXECUTION RULES
103789
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.
103790
- - 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\`
103791
- - BAD: "Implement feature" / "Fix bug" / "Add tests later" / production code before its failing test \u2192 rewrite.
103792
- - **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.
103793
103797
  - **BACKGROUND FIRST**: Use task for exploration/research agents (10+ concurrent if needed).
103794
103798
  - **VERIFY**: Re-read request after completion. Check every scenario PASS with both artifacts captured.
103795
103799
  - **DELEGATE**: Don't do everything yourself \u2014 orchestrate specialized agents for their strengths.
@@ -103820,10 +103824,10 @@ BEFORE writing ANY code, define realistic scenarios sized to the change \u2014 *
103820
103824
 
103821
103825
  Each scenario MUST specify, upfront:
103822
103826
  - Pass condition as a binary observable ("returns 200 + body matches schema"), not "should work".
103823
- - 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.
103824
- - 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.
103825
103829
 
103826
- **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.
103827
103831
 
103828
103832
  ### Durable Notepad (survives context loss)
103829
103833
 
@@ -103849,12 +103853,12 @@ Every scenario requires TWO captured artifacts \u2014 both mandatory:
103849
103853
 
103850
103854
  | Artifact | Source | Captures |
103851
103855
  |----------|--------|----------|
103852
- | **RED\u2192GREEN proof** | Test runner output before AND after the change | Test id + assertion message in both states |
103853
- | **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 |
103854
103858
 
103855
103859
  Supporting (necessary, not sufficient): build exit 0, full suite green, lsp_diagnostics clean on changed files, regression scenarios still PASS.
103856
103860
 
103857
- 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.
103858
103862
 
103859
103863
  <MANUAL_QA_MANDATE>
103860
103864
  ### YOU MUST EXECUTE MANUAL QA YOURSELF. THIS IS NOT OPTIONAL.
@@ -103868,7 +103872,7 @@ The real-surface artifact is always required. A test is required only where a co
103868
103872
  | Adds/modifies a CLI command | Run the command with Bash. Show the output. |
103869
103873
  | Changes build output | Run the build. Verify the output files exist and are correct. |
103870
103874
  | Modifies API behavior | Call the endpoint. Show the response. |
103871
- | 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. |
103872
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. |
103873
103877
  | Changes a desktop/GUI (non-page) surface | Computer use: OS-level GUI automation against the running app. Capture action log + screenshot. |
103874
103878
  | Adds a new tool/hook/feature | Test it end-to-end in a real scenario. |
@@ -103888,36 +103892,29 @@ The real-surface artifact is always required. A test is required only where a co
103888
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.
103889
103893
  </MANUAL_QA_MANDATE>
103890
103894
 
103891
- ### TDD Workflow (MANDATORY on every production code change with a test seam)
103892
-
103893
- 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.
103894
-
103895
- 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.
103896
- 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.
103897
- 3. **SURFACE**: Exercise the real user-facing surface named by the scenario. Capture artifact path into the notepad.
103898
- 4. **REFACTOR**: Optional, only if needed. Tests MUST stay green throughout.
103899
- 5. **REGRESSION**: Re-run the FULL scenario list. Record PASS/FAIL inline with both evidence paths.
103895
+ ### Test Decision (every production code change)
103900
103896
 
103901
- **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.
103902
103901
 
103903
- **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.
103904
-
103905
- **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.
103906
103903
 
103907
103904
  ### Commit Discipline (MANDATORY)
103908
103905
 
103909
- 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.
103910
103907
 
103911
103908
  ### Verification Anti-Patterns (BLOCKING)
103912
103909
 
103913
103910
  | Violation | Why It Fails |
103914
103911
  |-----------|--------------|
103915
103912
  | "It should work now" | No evidence. Run it. |
103916
- | "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. |
103917
103914
  | "Fixed the bug" | What scenario proves it? Where's the artifact? |
103918
103915
  | "Implementation complete" | Every scenario PASS with both artifacts captured? |
103919
103916
  | Skipping test execution | Tests exist to be RUN, not just written |
103920
- | 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 |
103921
103918
 
103922
103919
  **CLAIM NOTHING WITHOUT PROOF. EXECUTE. VERIFY. SHOW EVIDENCE.**
103923
103920
 
@@ -104165,43 +104162,37 @@ When the \`create_goal\` tool exists, you MUST register the run's goal with it B
104165
104162
 
104166
104163
  ### SCENARIO CONTRACT (binding, defined BEFORE coding)
104167
104164
 
104168
- 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:
104169
104166
  - **Happy path** (always)
104170
104167
  - **Edge** (boundary, empty, malformed, concurrent \u2014 when risky)
104171
104168
  - **Adjacent-surface regression** (callers, sibling endpoints, related modules \u2014 when multi-surface)
104172
104169
 
104173
- 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.
104174
104171
 
104175
104172
  ### DURABLE NOTEPAD
104176
104173
 
104177
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.
104178
104175
 
104179
- ### TDD (MANDATORY for code with a test seam)
104180
-
104181
- 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.
104182
-
104183
- 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.
104184
- 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.
104185
- 3. **SURFACE**: Exercise the real user-facing surface (CLI / API / build / UI / config). Capture artifact path.
104186
- 4. **REGRESSION**: Re-run the FULL scenario list every increment. Record PASS/FAIL with both artifact paths.
104176
+ ### TEST DECISION (every production code change)
104187
104177
 
104188
- **Refactors**: write characterization tests pinning current observable behavior FIRST, watch them GREEN against the old code, THEN refactor. Stay green throughout.
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.
104189
104182
 
104190
- **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.
104191
-
104192
- **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.
104193
104184
 
104194
104185
  ### COMMIT DISCIPLINE (MANDATORY)
104195
104186
 
104196
- 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.
104197
104188
 
104198
104189
  ### Evidence Gates
104199
104190
 
104200
104191
  | Gate | Required Evidence |
104201
104192
  |------|-------------------|
104202
- | **RED** | Failing assertion msg before any production code |
104203
- | **GREEN** | Same test now passing |
104204
- | **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 |
104205
104196
  | **Build** | Exit code 0 |
104206
104197
  | **Suite** | Full run green; no skip/.only/xfail added this turn |
104207
104198
  | **Lint** | lsp_diagnostics clean on changed files |
@@ -104209,13 +104200,13 @@ Commit frequently: one atomic commit per verified increment (RED\u2192GREEN + ev
104209
104200
  <ANTI_OPTIMISM_CHECKPOINT>
104210
104201
  ## BEFORE YOU CLAIM DONE, ANSWER HONESTLY:
104211
104202
 
104212
- 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)
104213
104204
  2. Did I run \`lsp_diagnostics\` and see ZERO errors on changed files? (not "I'm sure")
104214
104205
  3. Did I run the FULL suite and see it PASS? (not "they should pass")
104215
104206
  4. Did I read the actual output of every command? (not skim)
104216
104207
  5. Is EVERY requirement from the request actually implemented? (re-read the request NOW)
104217
104208
  6. Did I classify intent at the start? (if not, my entire approach may be wrong)
104218
- 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)
104219
104210
 
104220
104211
  If ANY answer is no \u2192 GO BACK AND DO IT. Do not claim completion.
104221
104212
  </ANTI_OPTIMISM_CHECKPOINT>
@@ -104240,7 +104231,7 @@ Trigger if user said "\uC5C4\uBC00"/"strictly"/"rigorously"/"properly review", o
104240
104231
  | Adds/modifies a CLI command | Run the command with Bash. Show the output. |
104241
104232
  | Changes build output | Run the build. Verify output files exist and are correct. |
104242
104233
  | Modifies API behavior | Call the endpoint. Show the response. |
104243
- | 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. |
104244
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. |
104245
104236
  | Drives a desktop/GUI (non-page) surface | Computer use: OS-level GUI automation against the running app. Capture action log + screenshot. |
104246
104237
  | Adds a new tool/hook/feature | Test it end-to-end in a real scenario. |
@@ -104448,17 +104439,14 @@ Before production changes, define scenarios covering:
104448
104439
 
104449
104440
  Each scenario needs a binary pass condition. "Looks good" is not a pass condition.
104450
104441
 
104451
- ## TDD WORKFLOW
104452
-
104453
- 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).
104442
+ ## TEST DECISION
104454
104443
 
104455
- 1. RED: write or identify a failing test that proves the needed behavior.
104456
- 2. GREEN: make the smallest change that flips the test to passing.
104457
- 3. SURFACE: exercise the real user path and capture the artifact.
104458
- 4. REFACTOR: improve structure only while tests stay green.
104459
- 5. REGRESSION: rerun the scenario list.
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.
104460
104448
 
104461
- 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).
104462
104450
 
104463
104451
  ## COMMIT DISCIPLINE
104464
104452
 
@@ -104620,8 +104608,8 @@ deep_context = background_output(task_id=...)
104620
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.
104621
104609
 
104622
104610
  **Verify (per-scenario, not just "at the end"):**
104623
- - RED\u2192GREEN proof captured (test id + assertion msg in both states)
104624
- - 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)
104625
104613
  - \`lsp_diagnostics\` clean on modified files
104626
104614
  - Full suite green, regression scenarios still PASS
104627
104615
 
@@ -104642,17 +104630,13 @@ Maintain a live todo list for every multi-step task: one atomic item per action
104642
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:
104643
104631
  - Binary pass condition ("returns 200 with schema-matching body"), not "should work".
104644
104632
  - The real surface that proves it.
104645
- - 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).
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).
104646
104634
 
104647
- 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.
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.
104648
104636
 
104649
- ## TDD (MANDATORY on every production code change with a test seam)
104637
+ ## TEST DECISION
104650
104638
 
104651
- 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.**
104652
-
104653
- 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.
104654
-
104655
- 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.
104656
104640
 
104657
104641
  ## COMMIT DISCIPLINE
104658
104642
 
@@ -104662,8 +104646,8 @@ Commit one atomic commit per verified increment; never one end-of-run omnibus. B
104662
104646
 
104663
104647
  | Phase | Action | Required Evidence |
104664
104648
  |-------|--------|-------------------|
104665
- | RED | Run new test before impl | Failing assertion with msg |
104666
- | 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 |
104667
104651
  | Surface | Exercise real user path | Artifact path (tmux/curl/browser/...) |
104668
104652
  | Build | Run build command | Exit code 0 |
104669
104653
  | Suite | Full test run | All green; no skip/.only/xfail added |
@@ -104679,7 +104663,7 @@ lsp_diagnostics catches type errors only. Logic bugs, missing behavior, broken f
104679
104663
  | Adds/modifies a CLI command | Run it with Bash. Show output. |
104680
104664
  | Changes build output | Run build. Verify output files. |
104681
104665
  | Modifies API behavior | Call the endpoint. Show response. |
104682
- | 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. |
104683
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. |
104684
104668
  | Drives a desktop GUI | Computer use: OS-level GUI automation against the running app. Action log + screenshot. |
104685
104669
  | Adds tool/hook/feature | Test end-to-end in a real scenario. |
@@ -104695,7 +104679,7 @@ Trigger if user said "\uC5C4\uBC00"/"strictly"/"rigorously"/"properly review", o
104695
104679
  ## STOP RULES
104696
104680
 
104697
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.
104698
- - 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.
104699
104683
  - After 2 identical failed attempts at one step, surface what was tried and ask the user before another retry.
104700
104684
  - After 2 parallel exploration waves yield no new useful facts, stop exploring and act.
104701
104685
 
@@ -132222,6 +132206,10 @@ function resolveCategoryConfig(categoryName, options) {
132222
132206
  return null;
132223
132207
  }
132224
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
+ }
132225
132213
  const defaultPromptAppend = CATEGORY_PROMPT_APPENDS[categoryName] ?? "";
132226
132214
  if (!defaultConfig && !userConfig) {
132227
132215
  return null;
@@ -132412,6 +132400,16 @@ To use this category:
132412
132400
  1. Connect a provider with this model: ${requiredModel}
132413
132401
  2. Or configure an alternative model in your .omo/omo.jsonc for this category
132414
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
+
132415
132413
  Available categories: ${allCategoryNames}`);
132416
132414
  }
132417
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.