oh-my-opencode 5.1.60 → 5.1.62

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 (121) hide show
  1. package/.agents/command/remove-deadcode.md +1 -1
  2. package/.agents/skills/remove-deadcode/SKILL.md +1 -1
  3. package/.opencode/command/remove-deadcode.md +1 -1
  4. package/dist/cli/index.js +181 -32
  5. package/dist/cli/service-auth/index.d.ts +2 -1
  6. package/dist/cli/service-auth/session.d.ts +27 -0
  7. package/dist/cli/service-auth/sync-pin-retire.d.ts +7 -0
  8. package/dist/cli-node/index.js +181 -32
  9. package/dist/config/schema/agent-names.d.ts +1 -0
  10. package/dist/index.js +2029 -1406
  11. package/dist/skills/browser/references/owned-engine/README.md +1 -1
  12. package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
  13. package/dist/skills/frontend/SKILL.md +2 -2
  14. package/dist/skills/frontend/references/design/README.md +2 -2
  15. package/dist/skills/frontend/references/design/component-catalogs.md +1 -1
  16. package/dist/skills/frontend/references/design/design-system-architecture.md +1 -1
  17. package/dist/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
  18. package/dist/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
  19. package/dist/skills/frontend/references/designpowers/routing.md +2 -2
  20. package/dist/skills/frontend/references/perfection/README.md +1 -1
  21. package/dist/skills/programming/references/python/libraries.md +3 -3
  22. package/dist/skills/programming/references/python/one-liners.md +1 -1
  23. package/dist/skills/programming/references/python/pyproject-strict.md +1 -1
  24. package/dist/skills/programming/references/rust/libraries.md +2 -2
  25. package/dist/skills/refactor/SKILL.md +1 -1
  26. package/dist/skills/ultimate-browsing/SKILL.md +1 -1
  27. package/dist/skills/ultimate-browsing/references/insane-search/README.md +1 -1
  28. package/dist/skills/ulw-execute/SKILL.md +1 -1
  29. package/dist/skills/ulw-research/SKILL.md +2 -2
  30. package/dist/tui.js +41 -19
  31. package/package.json +14 -14
  32. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  33. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +13 -0
  34. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  35. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  37. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  39. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  40. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  41. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  42. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +1 -1
  43. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  44. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  45. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  46. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  47. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  48. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  49. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  50. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  51. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  52. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  53. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  54. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  55. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  56. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  57. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  72. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  76. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  77. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  78. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  79. package/packages/omo-codex/plugin/package-lock.json +12 -12
  80. package/packages/omo-codex/plugin/package.json +1 -1
  81. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +1 -1
  82. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  83. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +2 -2
  84. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +2 -2
  85. package/packages/omo-codex/plugin/skills/frontend/references/design/component-catalogs.md +1 -1
  86. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +1 -1
  87. package/packages/omo-codex/plugin/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
  88. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
  89. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +2 -2
  90. package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +1 -1
  91. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
  92. package/packages/omo-codex/plugin/skills/programming/references/python/libraries.md +3 -3
  93. package/packages/omo-codex/plugin/skills/programming/references/python/one-liners.md +1 -1
  94. package/packages/omo-codex/plugin/skills/programming/references/python/pyproject-strict.md +1 -1
  95. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +2 -2
  96. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +1 -1
  97. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +1 -1
  98. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +1 -1
  99. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +1 -1
  100. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +2 -2
  101. package/packages/omo-codex/scripts/install-dist/install-local.mjs +15 -2
  102. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +1 -1
  103. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  104. package/packages/shared-skills/skills/frontend/SKILL.md +2 -2
  105. package/packages/shared-skills/skills/frontend/references/design/README.md +2 -2
  106. package/packages/shared-skills/skills/frontend/references/design/component-catalogs.md +1 -1
  107. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +1 -1
  108. package/packages/shared-skills/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
  109. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
  110. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +2 -2
  111. package/packages/shared-skills/skills/frontend/references/perfection/README.md +1 -1
  112. package/packages/shared-skills/skills/programming/references/python/libraries.md +3 -3
  113. package/packages/shared-skills/skills/programming/references/python/one-liners.md +1 -1
  114. package/packages/shared-skills/skills/programming/references/python/pyproject-strict.md +1 -1
  115. package/packages/shared-skills/skills/programming/references/rust/libraries.md +2 -2
  116. package/packages/shared-skills/skills/refactor/SKILL.md +1 -1
  117. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +1 -1
  118. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +1 -1
  119. package/packages/shared-skills/skills/ulw-execute/SKILL.md +1 -1
  120. package/packages/shared-skills/skills/ulw-research/SKILL.md +2 -2
  121. package/.opencode/skills/hyperplan/SKILL.md +0 -450
@@ -58,5 +58,5 @@ or text), not a timer; `goto(url, { waitUntil: "commit" })` is the escape hatch
58
58
  - [network.md](network.md) — `createNetworkSnoop`, `collectWhileScrolling`, `createTrace`, `createRoutes`
59
59
  - [frames-and-humans.md](frames-and-humans.md) — `snapshotWithFrames`, `describeLayers`, dialog policy, `emulate`, `requestHuman`
60
60
 
61
- The library's own skill (`skills/omowright/SKILL.md` and `presets/*` in the omowright repository)
61
+ The omowright repository's own agent guide and its `presets/*`
62
62
  is the authoritative, longer treatment of each; these pages are the routing summary.
@@ -5,5 +5,5 @@
5
5
  "index.js": "3a2e4f2575bdfc15448f13768cd8113f8493bf04611c9fefb09b13430d6520de",
6
6
  "page-bundle.js": "bfd51e8383cf47200d57387bbbed258bce5a3a3d00c38fc108034d2888e23f0c"
7
7
  },
8
- "stagedAtUtc": "2026-11-03T17:35:11.332Z"
8
+ "stagedAtUtc": "2026-11-06T06:50:23.746Z"
9
9
  }
@@ -119,7 +119,7 @@ Layer A (pick AT MOST ONE style skill; they encode opposing philosophies):
119
119
  | `layout-skill.md` / `interaction-skill.md` / `ambience-skill.md` | Stack on any style skill; mechanics only, no visual direction. |
120
120
  | `imagegen-frontend-web.md` / `imagegen-frontend-mobile.md` / `imagegen-brandkit.md` | Image-only output; never code. |
121
121
 
122
- Layer B: when the user names a brand or site ("Linear-style", "like Stripe's landing", "Aside-style browser agent"), load `references/design/<brand>.md` as the token source of truth: `aside` `apple` `stripe` `linear.app` `notion` `vercel` `claude` `figma` `airbnb` `nike` `tesla` `spotify` `raycast` `revolut` and ~56 more in `_INDEX.md`. Extract the tokens and apply them to the project's own content; never copy logos or trademarked imagery. A missing brand falls back to a Layer A mood match or the `open-design` skill.
122
+ Layer B: when the user names a brand or site ("Linear-style", "like Stripe's landing", "Aside-style browser agent"), load `references/design/<brand>.md` as the token source of truth: `aside` `apple` `stripe` `linear.app` `notion` `vercel` `claude` `figma` `airbnb` `nike` `tesla` `spotify` `raycast` `revolut` and ~56 more in `_INDEX.md`. Extract the tokens and apply them to the project's own content; never copy logos or trademarked imagery. A missing brand falls back to a Layer A mood match or to the nexu-io/open-design library (https://github.com/nexu-io/open-design).
123
123
 
124
124
  `perfection/`: `README.md` (the seven tenets: real-browser audits only, 100 in every category, fix at the architecture, never weaken UX for points, design-system compliance, the audit report format) and `react-perf-tooling.md` (Playwright + `playwright-lighthouse` + `react-scan/lite` injection, per-route render budgets). Audit CLI, production build only, mobile and desktop presets, 3-5 runs, take the median:
125
125
 
@@ -141,7 +141,7 @@ python3 -B $SKILL_DIR/references/ui-ux-db/scripts/search.py "<query>" --stack <s
141
141
 
142
142
  | Situation | Load |
143
143
  |---|---|
144
- | Brand/style not among the 70 in `references/design/`, or the user says "Open Design" | `open-design` skill: the local nexu-io/open-design library (137+ design skills, 150+ design systems) |
144
+ | Brand/style not among the 70 in `references/design/`, or the user says "Open Design" | The nexu-io/open-design library (https://github.com/nexu-io/open-design; 137+ design skills, 150+ design systems) |
145
145
  | Driving a browser for captures | `visual-qa` skill: omowright from js eval (owned engine for renders, attached engine for signed-in pages) |
146
146
  | Pure TypeScript/logic work with zero visual surface | `programming` skill alone; this skill adds nothing there |
147
147
 
@@ -12,7 +12,7 @@ Restraint with a visible hierarchy. The brief's primary action is the one promin
12
12
  - **Layer A, taste skills (12 files, named `-skill.md` or `imagegen-`):** how to execute. Discipline, spacing, motion physics, anti-slop guardrails, output completeness.
13
13
  - **Layer B, design systems (70 brand files):** what it looks like. Concrete colour, type, and component tokens for one brand.
14
14
 
15
- `_INDEX.md` lists all 83 with mood-to-brand mappings and stacking rules; read it when routing is not obvious. Most non-trivial tasks load one from each layer. For a brand or style outside the curated set, or when the user says "Open Design", load the `open-design` skill (the local nexu-io/open-design library, 150+ design systems) as the expanded library; this file keeps routing discipline, the `DESIGN.md` gate, and execution quality.
15
+ `_INDEX.md` lists all 83 with mood-to-brand mappings and stacking rules; read it when routing is not obvious. Most non-trivial tasks load one from each layer. For a brand or style outside the curated set, or when the user says "Open Design", use the nexu-io/open-design library (https://github.com/nexu-io/open-design), 150+ design systems, as the expanded library; this file keeps routing discipline, the `DESIGN.md` gate, and execution quality.
16
16
 
17
17
  ## Phase 0: Design System Gate (before routing, before any UI code)
18
18
 
@@ -23,7 +23,7 @@ Look for `DESIGN.md`, `design-system.md`, or `design-tokens.md` at the project r
23
23
  **It does not exist: read `design-system-architecture.md` for the structure, then take the branch:**
24
24
 
25
25
  1. **Greenfield, no concrete reference.** Research is a build step with named deliverables, not exploration to budget: run the lanes in parallel and open `DESIGN.md` with `## 0. Research Log`, one line per lane. A lane with no line did not run; skip a lane only when its tool or network is unavailable, and name the skip there.
26
- - *Embedded references:* shortlist 2-3 plausible Layer B candidates from `_INDEX.md`, then read ONE Layer A style skill and ONE Layer B reference in full, every line (they are 200-500 lines; a sliced read produces the flattened token set this gate exists to prevent). Log the shortlist, the pick, and why. `open-design` only when the curated set has no fit; `ui-ux-db` lookups for palette, type, and domain questions that come up here.
26
+ - *Embedded references:* shortlist 2-3 plausible Layer B candidates from `_INDEX.md`, then read ONE Layer A style skill and ONE Layer B reference in full, every line (they are 200-500 lines; a sliced read produces the flattened token set this gate exists to prevent). Log the shortlist, the pick, and why. The open-design library only when the curated set has no fit; `ui-ux-db` lookups for palette, type, and domain questions that come up here.
27
27
  - *Lazyweb real-product screens:* read `lazyweb.md` FIRST and run its recipe verbatim; it mints its own anonymous token, so never improvise curl calls against the host. Log the queries, how many screens you actually viewed, and the layout grammar taken, never pixel copies. When the harness has the user's own Mobbin MCP connected, run its `search_screens`, `search_flows`, or `search_sections` in this lane too; never reach Mobbin any other way (`component-catalogs.md` section 2). For every reference keep the product name and URL, write what you saw apart from what you recommend, and treat a recurring pattern as a convention, not proof. If the findings lean on one product, widen the set before you build.
28
28
  - *StyleGallery:* read `stylegallery.md`, fetch the pattern whose primary spatial problem matches the screen, and write the `Layout:` line.
29
29
  - *Imagen concept drafts:* generate 2-3 drafts, each seeded with the loaded Layer A + Layer B tokens (palette, type, material); pick the strongest and treat it as the reference-fidelity contract. Log the paths and the pick.
@@ -15,7 +15,7 @@
15
15
  | Tailwind-only, no React, server-rendered HTML | daisyUI class components | - | Motion is CSS transitions on `DESIGN.md` section 6 tokens. |
16
16
  | Charts and data viz | `ui-ux-db` `--domain chart` for the chart type | bklit for animated chart source; MUI X Charts on Material projects | Section 4. |
17
17
  | Landing sections: header, pricing, FAQ, logo cloud, stats, testimonials, footer | smoothui blocks, cult-ui blocks | the section galleries in section 2 (navbar, pricing, CTA, hero, footer) | Take structure only; copy and imagery stay the project's. |
18
- | A brand outside the 70 Layer B files | `open-design` skill | designmd.ai: community `DESIGN.md` files, MCP; read each file's licence first (its uploader picks MIT, CC0, CC-BY, CC-BY-SA, or a custom one) | Never refero styles (section 2). |
18
+ | A brand outside the 70 Layer B files | The nexu-io/open-design library | designmd.ai: community `DESIGN.md` files, MCP; read each file's licence first (its uploader picks MIT, CC0, CC-BY, CC-BY-SA, or a custom one) | Never refero styles (section 2). |
19
19
 
20
20
  ## 2. Catalogs (measured 2026-10-06; microkit, motion-primitives, uiverse, and 21st.dev on 2026-10-25)
21
21
 
@@ -229,7 +229,7 @@ Both paths start with `grounding.md`: the guideline source read in full, the ide
229
229
 
230
230
  ### For New Projects
231
231
 
232
- 1. **Select references before taste** — no visual reference means `_INDEX.md` shortlist of 2-3 Layer B candidates, then exactly one Layer A style skill and one Layer B brand/design-system reference. Use `open-design` only when the curated set has no fit.
232
+ 1. **Select references before taste** — no visual reference means `_INDEX.md` shortlist of 2-3 Layer B candidates, then exactly one Layer A style skill and one Layer B brand/design-system reference. Use the open-design library only when the curated set has no fit.
233
233
  2. **Assemble from references** — extract tokens, layout grammar, component anatomy, states, motion, and taste decisions, then recombine them into project-specific primitives. Customize for the user's product; never copy logos, trademarked assets, or brand-specific copy.
234
234
  3. **Define the system** — colour roles first (both themes), then atmosphere, typography, spacing, and one depth strategy, grounded in the selected references and product semantics. Sanity-check the palette and type pairing with one `ui-ux-db` domain search (CLI in `references/ui-ux-db/README.md`).
235
235
  4. **Document initial primitives** — only components you are about to build, including variants and states, starting from shadcn/ui anatomy (or the project's own kit) restyled with the tokens.
@@ -222,7 +222,7 @@ If any of those leak into production, the dev gate is broken. Fix the gate befor
222
222
  ## Cross-skill references
223
223
 
224
224
  - For **render performance / Lighthouse 100** work, see `../perfection/react-perf-tooling.md` — Playwright + `react-scan/lite` integration used during automated audits.
225
- - For **debugging an in-flight React bug**, see `../../debugging/references/tools/react-devtools.md` — runtime/static use during a bug hunt rather than initial setup.
225
+ - For **browser runtime inspection during an in-flight React bug** (rendered state, console, network), load the `debugging` skill and follow its `references/tools/browser-qa.md`; React-specific inspection uses the React dev tooling this file sets up.
226
226
  - The Phase 0 Design System Gate (in `README.md`) and this React Dev Tooling Gate are both pre-implementation gates. Run Phase 0 first (design system must exist), then this gate (dev tooling must be installed).
227
227
 
228
228
  ## Mantra
@@ -1,17 +1,17 @@
1
1
  # Lane A: Direction & Discovery
2
2
 
3
- Lane A feeds `ulw-plan`. It does not replace Prometheus, write a parallel plan, or start implementation. Its job is to translate designpowers discovery, research, persona, taste, debate, and state capabilities into prompt context that lets `ulw-plan` produce a decision-complete work plan with design-specific acceptance criteria.
3
+ Lane A feeds `ulw-plan`. It does not replace the `ulw-plan` planner, write a parallel plan, or start implementation. Its job is to translate designpowers discovery, research, persona, taste, debate, and state capabilities into prompt context that lets `ulw-plan` produce a decision-complete work plan with design-specific acceptance criteria.
4
4
 
5
5
  ## Phase Owner
6
6
 
7
7
  | Capability | Source boundary | owner | Mapping |
8
8
  |---|---|---|---|
9
- | Discover the human problem, constraints, audience, success criteria, and early taste signals | Authored concept preserved from excluded raw `design-discovery` | `ulw-plan` | Inject a compact design brief request before Prometheus drafts tasks. Prometheus still decides the plan structure and asks only unresolved owner decisions. |
9
+ | Discover the human problem, constraints, audience, success criteria, and early taste signals | Authored concept preserved from excluded raw `design-discovery` | `ulw-plan` | Inject a compact design brief request before the planner drafts tasks. The planner still decides the plan structure and asks only unresolved owner decisions. |
10
10
  | Identify research gaps and inclusion-aware research methods | `research-planning` | `ulw-plan` | Convert research questions into plan discovery tasks or explicit assumptions with evidence requirements. |
11
11
  | Define principles, experience map, positioning, and success metrics | Authored concept preserved from excluded raw `design-strategy` | `ulw-plan` | Add strategy constraints and design principles to the plan's acceptance criteria. |
12
12
  | Represent the full ability spectrum | `inclusive-personas` | `ulw-plan` | Require personas and stress cases in plan inputs, including permanent, temporary, and situational contexts. |
13
13
  | Calibrate current-project taste and quality bar | Authored concept preserved from excluded raw `design-taste` | `ulw-plan` | Add live taste constraints for this project only; do not import cross-project memory as a design rule. |
14
- | Surface competing directions and trade-offs | `design-debate` | `ulw-plan` | When direction is ambiguous, ask Prometheus to present 2-3 options with accessibility and usability trade-offs before choosing defaults. |
14
+ | Surface competing directions and trade-offs | `design-debate` | `ulw-plan` | When direction is ambiguous, ask the planner to present 2-3 options with accessibility and usability trade-offs before choosing defaults. |
15
15
  | Curate references and inspiration without copying | `inspiration-scouting` | `ulw-plan` | Add evidence-backed inspiration notes as optional plan context, with "what to take" and "what to leave." |
16
16
  | Maintain shared design state | Authored concept preserved from excluded raw `design-state` | `ulw-plan` | Read and update `.omo/frontend-design/state.md` as the OpenAgent-native state ledger. |
17
17
 
@@ -33,7 +33,7 @@ Before planning, extract or infer:
33
33
  - competing directions and trade-offs when direction is not settled
34
34
  - existing `.omo/frontend-design/state.md` decisions, debt, and open questions
35
35
 
36
- Add design-specific acceptance criteria to the Prometheus plan:
36
+ Add design-specific acceptance criteria to the `ulw-plan` plan:
37
37
  - each UI task names the persona or journey it serves
38
38
  - each task has accessibility and cognitive-accessibility checks where relevant
39
39
  - each visual decision traces to a design principle, taste signal, or design-system token
@@ -52,7 +52,7 @@ Lane A passes only when the plan has inspectable design context, not vague inten
52
52
  ## Guardrails
53
53
 
54
54
  - `ulw-plan` owns the final plan. Lane A may enrich prompts, but it must not create a second planning lane or standalone design plan.
55
- - `writing-design-plans` content is used only as task-quality guidance; Prometheus remains the source of executable TODOs.
55
+ - `writing-design-plans` content is used only as task-quality guidance; the `ulw-plan` plan remains the source of executable TODOs.
56
56
  - Cross-project memory is descriptive only and must not steer this project's direction unless the user states the preference now.
57
57
  - Direction debates pause for user decision when the trade-off is product-shaping, accessibility-critical, or hard to reverse.
58
58
  - No new scheduler, background automation, or project root design-state convention is introduced; state stays at `.omo/frontend-design/state.md`.
@@ -14,7 +14,7 @@
14
14
 
15
15
  ## Planning Through `/ulw-plan`
16
16
 
17
- When planning is needed, `designpowers` supplies design-specific context and lets `/ulw-plan` own the plan artifact. Do not write a separate design plan. The Prometheus plan should receive:
17
+ When planning is needed, `designpowers` supplies design-specific context and lets `/ulw-plan` own the plan artifact. Do not write a separate design plan. The `ulw-plan` plan should receive:
18
18
 
19
19
  - product or page goal;
20
20
  - primary tasks and user journeys;
@@ -35,7 +35,7 @@ When a plan is approved or selected, `/ulw-execute` remains the orchestrator. `d
35
35
  - required `/visual-qa` loading for rendered visual proof;
36
36
  - the design debt rule: unresolved accessibility debt cannot disappear into a summary.
37
37
 
38
- Direct implementation outside `/ulw-execute` is not part of this routing contract when a Prometheus plan is active.
38
+ Direct implementation outside `/ulw-execute` is not part of this routing contract when a `ulw-plan` plan is active.
39
39
 
40
40
  ## UI Build Through Frontend `design` And `perfection`
41
41
 
@@ -16,7 +16,7 @@ The correct path:
16
16
  3. Run Lighthouse against the Playwright-controlled page via `playwright-lighthouse` OR via `chrome-launcher` + the `lighthouse` Node API, attaching to the Playwright CDP endpoint so cookies, auth state, and warmed caches mirror what a real returning user sees.
17
17
  4. Use the **mobile** preset (4x CPU throttle, Fast 3G) for the primary number, AND the **desktop** preset for the secondary number. Report both.
18
18
 
19
- If the `playwright` skill is not loaded in this session, load it now via the `skill` tool.
19
+ If no browser-automation skill is loaded in this session, load the `browser` skill now (read its `SKILL.md`).
20
20
 
21
21
  ### 2. 100 IN EVERY CATEGORY IS THE FLOOR.
22
22
 
@@ -52,7 +52,7 @@ Next-generation HTTP client under Pydantic stewardship. Sync and async in one li
52
52
 
53
53
  **Install**: `httpx2[http2,brotli,zstd]` — always include all three extras, no exceptions.
54
54
 
55
- **A bare `httpx2.AsyncClient()` / `httpx2.Client()` is a bug.** Always use the factory pattern from `references/httpx2-optimization.md` with ALL optimizations enabled by default:
55
+ **A bare `httpx2.AsyncClient()` / `httpx2.Client()` is a bug.** Always use the factory pattern from `references/python/httpx2-optimization.md` with ALL optimizations enabled by default:
56
56
 
57
57
  ```python
58
58
  import socket
@@ -78,7 +78,7 @@ with httpx2.Client(transport=transport, timeout=_TIMEOUT, follow_redirects=True)
78
78
  users = response.json()
79
79
  ```
80
80
 
81
- See `references/httpx2-optimization.md` for the full factory functions (`create_client()` / `create_async_client()`), event hooks, and the rationale behind every setting. **Load that reference whenever you write ANY network code.**
81
+ See `references/python/httpx2-optimization.md` for the full factory functions (`create_client()` / `create_async_client()`), event hooks, and the rationale behind every setting. **Load that reference whenever you write ANY network code.**
82
82
 
83
83
  ## JSON — stdlib `json` (default) or `orjson` (hot paths)
84
84
 
@@ -98,7 +98,7 @@ raw: bytes = orjson.dumps(
98
98
 
99
99
  For FastAPI: `app = FastAPI(default_response_class=ORJSONResponse)`. Pydantic-typed responses bypass it (and that's correct — Pydantic's path is faster). Raw `dict`/`list` returns go through orjson.
100
100
 
101
- See `references/orjson-stack.md` for the full decision tree, option flag reference, FastAPI integration, Redis/queue/logging patterns, and the `model_dump_json()` vs orjson benchmark.
101
+ See `references/python/orjson-stack.md` for the full decision tree, option flag reference, FastAPI integration, Redis/queue/logging patterns, and the `model_dump_json()` vs orjson benchmark.
102
102
 
103
103
  ## Validation — pydantic v2
104
104
 
@@ -258,7 +258,7 @@ if __name__ == "__main__":
258
258
  | `python -m venv .venv && ...` | `uv run --script` handles it |
259
259
  | Script without usage comment | Always include the "How to run" block |
260
260
  | `import asyncio; asyncio.run(main())` | `import anyio; anyio.run(main)` |
261
- | Bare `httpx2.AsyncClient()` | Full production defaults (see `references/httpx2-optimization.md`) |
261
+ | Bare `httpx2.AsyncClient()` | Full production defaults (see `references/python/httpx2-optimization.md`) |
262
262
 
263
263
  ## Sources
264
264
 
@@ -209,7 +209,7 @@ A single `make ci` target combining the four works fine.
209
209
 
210
210
  ## Enforcement summary
211
211
 
212
- The config above, combined with `scripts/check-no-excuse-rules.py`, enforces:
212
+ The config above, combined with `scripts/python/check-no-excuse-rules.py`, enforces:
213
213
 
214
214
  | What | How |
215
215
  |---|---|
@@ -321,7 +321,7 @@ let player: WorldPoint = Point2D::new(3.5, 1.2);
321
321
  // let mistake = cursor + player; // compile error: different coordinate spaces
322
322
  ```
323
323
 
324
- Generalize the pattern to your own domains (see `references/type-state.md`).
324
+ Generalize the pattern to your own domains (see `references/rust/type-state.md`).
325
325
 
326
326
  ## Property tests — `proptest`
327
327
 
@@ -380,7 +380,7 @@ Run with `cargo bench`. HTML reports under `target/criterion/`. Pair with `cargo
380
380
 
381
381
  ## Concurrency model — `loom`
382
382
 
383
- For lock-free or atomic-heavy code (channels, refcounts, hazard pointers). See `references/concurrency.md` for the full pattern.
383
+ For lock-free or atomic-heavy code (channels, refcounts, hazard pointers). See `references/rust/concurrency.md` for the full pattern.
384
384
 
385
385
  ## Arena allocator — `bumpalo`
386
386
 
@@ -656,7 +656,7 @@ Record the chosen path in the TodoWrite list.
656
656
 
657
657
  **Precondition checks** (fail hard if any step fails):
658
658
 
659
- 1. Load the \`team-mode\` skill via the \`skill\` tool for lifecycle, message protocol, and limits.
659
+ 1. When the session lists the \`team-mode\` skill, load it for lifecycle, message protocol, and limits.
660
660
  2. Call \`team_list\` and verify no active \`refactor-squad\` run exists; if one does, shutdown + delete the orphan before proceeding.
661
661
  3. If \`~/.omo/teams/refactor-squad/config.json\` is missing, write it using the spec below.
662
662
 
@@ -15,7 +15,7 @@ Web access for the hosts the user's browser cannot open (WAF / 403 / Cloudflare
15
15
  User request
16
16
  |
17
17
  +- a page the user's browser can open (read, click, screenshot, QA, login) NOT this skill (browser skill, attached engine)
18
- +- simple search query ------------------------------ NOT this skill (use web-search)
18
+ +- simple search query ------------------------------ NOT this skill (use web search)
19
19
  |
20
20
  +- URL blocked / 403 / Cloudflare / WAF ------------- TIER 1 insane-search
21
21
  +- YouTube/Vimeo/TikTok subtitles or metadata ------- TIER 1 insane-search (yt-dlp)
@@ -46,7 +46,7 @@
46
46
  - Claude는 그 사이 foreground에서 MCP Playwright 정찰 루트를 진행
47
47
  - engine이 먼저 성공해도 좋고, MCP 정찰로 얻은 API가 먼저 성공해도 좋음. 빠른 쪽 결과 채택
48
48
 
49
- **MCP 정찰 루트**:
49
+ **MCP 정찰 루트** (Playwright MCP가 로드된 세션 전용. 없으면 the `browser` skill's `references/owned-engine/network.md` 로 같은 XHR/fetch 목록을 모은다):
50
50
  1. `mcp__playwright__browser_navigate` → 대상 페이지 로드 (브라우저 렌더링)
51
51
  2. `mcp__playwright__browser_network_requests` → XHR/fetch 호출 목록 수집, `/api/`·`/graphql`·`\.json` 필터로 내부 엔드포인트 식별
52
52
  3. 식별된 JSON API URL을 `python3 -B -m engine <API_URL>`로 재호출 (백그라운드 engine과는 별개 호출). 대부분 API 레이어는 페이지 HTML보다 WAF 보호가 얕아 curl_cffi로 바로 수집됨
@@ -103,7 +103,7 @@ Every phase (plan wave) runs in its own task-owned worktree with its own goal: b
103
103
  Solo orchestration with parallel background workers is the default topology. Decide once, when the wave's lanes are known, and record the verdict in the ledger:
104
104
 
105
105
  - **Independent lanes -> parallel workers.** Separate files, no shared contract: one parallel spawn burst; no team.
106
- - **Dependency-ordered lanes -> one `workflow` run per wave.** Sub-tasks with real ordering between them (C needs A and B finished first) and a harness with a native `workflow` tool: dispatch the wave as ONE run (one producer node per lane plus a verification node); recover inside it with `retry`/`amend`/`send`; let the run's settle wake you instead of arming per-lane watchers; the next wave is a NEW run (or `amend` when only the definition changed) — never one graph for the whole plan. Read the `mass-ulw` skill's `SKILL.md` and `references/planning.md` IN FULL before defining any graph.
106
+ - **Dependency-ordered lanes -> one `workflow` run per wave.** Sub-tasks with real ordering between them (C needs A and B finished first) and a harness with a native `workflow` tool: dispatch the wave as ONE run (one producer node per lane plus a verification node); recover inside it with `retry`/`amend`/`send`; let the run's settle wake you instead of arming per-lane watchers; the next wave is a NEW run (or `amend` when only the definition changed) — never one graph for the whole plan. When the harness lists the `mass-ulw` skill, read its `SKILL.md` and `references/planning.md` IN FULL before defining any graph.
107
107
  - **Overlapping lanes -> a team.** The lanes touch the same module or contract AND running them concurrently actually finishes sooner: stand up a team (where the harness has one) so one lane's discoveries relay through you mid-flight.
108
108
  - **PR-mode independent lanes -> a worktree per lane.** Under `--make-pr`/`--ship`, when a wave holds independent checkboxes, give each lane its own branch and task-owned worktree, delivered as its own PR.
109
109
 
@@ -76,7 +76,7 @@ Observation candidates and claim candidates travel back from workers as message
76
76
 
77
77
  ## Run the swarm as a cooperating team
78
78
 
79
- Saturation research defaults to teammode, not isolated fire-and-forget workers: a lead one worker surfaces almost always reshapes what another should search next. When your harness gives you real cooperating members — Codex: the `teammode` skill (MultiAgentV2 agents, or `codex_app` threads as its fallback); OpenCode: `team_mode` — run this swarm as a team. Fall back to the background-worker swarm below only when team mode is unavailable, or the axes are genuinely independent with no cross-pollination expected.
79
+ Saturation research defaults to teammode, not isolated fire-and-forget workers: a lead one worker surfaces almost always reshapes what another should search next. When your harness gives you real cooperating members — Codex: the `teammode` skill when it is listed (MultiAgentV2 agents, or `codex_app` threads as its fallback); OpenCode: `team_mode` — run this swarm as a team. Fall back to the background-worker swarm below only when team mode is unavailable, or the axes are genuinely independent with no cross-pollination expected.
80
80
 
81
81
  - **One member per axis — by part, ownership, or perspective, never a job title.** Each Phase 0 axis is one member owning one concrete slice: a codebase part, a source territory, or a question lens. No two members share an angle. "Backend researcher" or "the web person" gives no real boundary and invites overlap — name what the member owns.
82
82
  - **Always the maximum roster.** The team is not sized by taste: fill every member slot your harness allows (OpenCode `team_mode` caps members at 8; Codex teammode has its own ceiling) on every run. If you can only name five axes, split the broadest one — by source territory, by time window, by perspective — until the roster is full. A half-empty team is a half-covered topic.
@@ -151,7 +151,7 @@ Asset workers (background, parallel, each fed `design-spec.md`) — visuals are
151
151
 
152
152
  **Verify the asset manifest before rendering.** List every asset the document references, assert each file exists and is non-empty on disk, and re-render whatever is missing. A document that renders with three broken diagrams is a document you will publish twice.
153
153
 
154
- Assembly worker — `task(category="deep-low", load_skills=["frontend", "visual-qa", "open-design", "data-scientist", "imagegen", "ulw-loop"], run_in_background=true, ...)`: before writing, read every available design and visualization skill and apply it — the report is a designed artifact, not a text dump; the worker's prompt carries `design-spec.md`. Use the template the user approved; absent a stronger house style the default skeleton is executive summary → key findings by theme → detailed analysis (quotes under 20 words with attribution, charts, Mermaid graphs, generated visuals, SHA-pinned permalinks, verification results) → comparative analysis when options compete → numbered sources with access dates → methodology appendix (workers, waves, searches, verifications, debate rounds) → correction log naming what verification overturned. Write it long and specific: every claim cites `[Source N]`, and the sources section lists every source the run actually used rather than a curated few. The assembly worker writes `report.src.html` with placeholders, never typed values; the orchestrator runs `node "$SKILL_DIR/scripts/report-tools.mjs" fact fill "$SESSION_DIR/report.src.html" --out "$SESSION_DIR/report.html" --session-dir "$SESSION_DIR"` and gates the filled file. The inline edition for a PDF, DOCX, or oversized HTML deliverable comes from the same source (`fact fill "$SESSION_DIR/report.src.html" --inline --out "$SESSION_DIR/report.inline.html"`, which inlines local stylesheets and makes image paths absolute on the filled output), never from a hand copy.
154
+ Assembly worker — `task(category="deep-low", load_skills=["frontend", "visual-qa", "data-scientist"], run_in_background=true, ...)`; when the session lists the `imagegen` skill or the `ulw-loop` skill, add each one it lists to `load_skills`. Before writing, read every available design and visualization skill and apply it — the report is a designed artifact, not a text dump; the worker's prompt carries `design-spec.md`. Use the template the user approved; absent a stronger house style the default skeleton is executive summary → key findings by theme → detailed analysis (quotes under 20 words with attribution, charts, Mermaid graphs, generated visuals, SHA-pinned permalinks, verification results) → comparative analysis when options compete → numbered sources with access dates → methodology appendix (workers, waves, searches, verifications, debate rounds) → correction log naming what verification overturned. Write it long and specific: every claim cites `[Source N]`, and the sources section lists every source the run actually used rather than a curated few. The assembly worker writes `report.src.html` with placeholders, never typed values; the orchestrator runs `node "$SKILL_DIR/scripts/report-tools.mjs" fact fill "$SESSION_DIR/report.src.html" --out "$SESSION_DIR/report.html" --session-dir "$SESSION_DIR"` and gates the filled file. The inline edition for a PDF, DOCX, or oversized HTML deliverable comes from the same source (`fact fill "$SESSION_DIR/report.src.html" --inline --out "$SESSION_DIR/report.inline.html"`, which inlines local stylesheets and makes image paths absolute on the filled output), never from a hand copy.
155
155
 
156
156
  ### The delivery gates — every gate for the QA tier must PASS, in order
157
157
 
package/dist/tui.js CHANGED
@@ -2295,7 +2295,7 @@ function createLogger(options) {
2295
2295
  function scheduleFlush() {
2296
2296
  if (flushTimer)
2297
2297
  return;
2298
- flushTimer = setTimeout(() => {
2298
+ flushTimer = scheduleTimeout(() => {
2299
2299
  flushTimer = null;
2300
2300
  flush();
2301
2301
  }, flushIntervalMs);
@@ -2322,7 +2322,7 @@ function createLogger(options) {
2322
2322
  function _setLoggerForTesting(overrides) {
2323
2323
  buffer = [];
2324
2324
  if (flushTimer) {
2325
- clearTimeout(flushTimer);
2325
+ cancelTimeout(flushTimer);
2326
2326
  flushTimer = null;
2327
2327
  }
2328
2328
  if (overrides.filePath !== undefined)
@@ -2338,13 +2338,13 @@ function createLogger(options) {
2338
2338
  maxLogFileBackups = maxLogFileBackupsDefault;
2339
2339
  buffer = [];
2340
2340
  if (flushTimer) {
2341
- clearTimeout(flushTimer);
2341
+ cancelTimeout(flushTimer);
2342
2342
  flushTimer = null;
2343
2343
  }
2344
2344
  }
2345
2345
  function _flushForTesting() {
2346
2346
  if (flushTimer) {
2347
- clearTimeout(flushTimer);
2347
+ cancelTimeout(flushTimer);
2348
2348
  flushTimer = null;
2349
2349
  }
2350
2350
  flush();
@@ -2357,8 +2357,10 @@ function createLogger(options) {
2357
2357
  _flushForTesting
2358
2358
  };
2359
2359
  }
2360
- var DEFAULT_MAX_LOG_FILE_SIZE_BYTES, DEFAULT_MAX_LOG_FILE_BACKUPS = 2, DEFAULT_LOG_FLUSH_INTERVAL_MS = 500, DEFAULT_LOG_BUFFER_SIZE_LIMIT = 50;
2360
+ var scheduleTimeout, cancelTimeout, DEFAULT_MAX_LOG_FILE_SIZE_BYTES, DEFAULT_MAX_LOG_FILE_BACKUPS = 2, DEFAULT_LOG_FLUSH_INTERVAL_MS = 500, DEFAULT_LOG_BUFFER_SIZE_LIMIT = 50;
2361
2361
  var init_logger = __esm(() => {
2362
+ scheduleTimeout = globalThis.setTimeout;
2363
+ cancelTimeout = globalThis.clearTimeout;
2362
2364
  DEFAULT_MAX_LOG_FILE_SIZE_BYTES = 50 * 1024 * 1024;
2363
2365
  });
2364
2366
 
@@ -70891,6 +70893,19 @@ var init_telemetry = __esm(() => {
70891
70893
  }).strict();
70892
70894
  });
70893
70895
 
70896
+ // packages/omo-config-core/src/schema/device-service.ts
70897
+ var OmoDeviceServiceSettingsShape, OmoDeviceServiceSettingsLayerSchema, OmoDeviceServiceSettingsSchema;
70898
+ var init_device_service = __esm(() => {
70899
+ init_zod();
70900
+ OmoDeviceServiceSettingsShape = {
70901
+ enabled: boolean2()
70902
+ };
70903
+ OmoDeviceServiceSettingsLayerSchema = object(OmoDeviceServiceSettingsShape).partial().strict();
70904
+ OmoDeviceServiceSettingsSchema = OmoDeviceServiceSettingsLayerSchema.extend({
70905
+ enabled: boolean2().default(true)
70906
+ }).strict();
70907
+ });
70908
+
70894
70909
  // packages/omo-config-core/src/schema/format-on-mutation.ts
70895
70910
  var mode, languages, OmoFormatOnMutationLayerSchema, OmoFormatOnMutationSchema;
70896
70911
  var init_format_on_mutation = __esm(() => {
@@ -70939,6 +70954,7 @@ var init_config = __esm(() => {
70939
70954
  init_task();
70940
70955
  init_team();
70941
70956
  init_telemetry();
70957
+ init_device_service();
70942
70958
  init_format_on_mutation();
70943
70959
  init_provenance();
70944
70960
  OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
@@ -70958,6 +70974,7 @@ var init_config = __esm(() => {
70958
70974
  model_pad: OmoModelPadSchema.optional(),
70959
70975
  memory: OmoMemorySettingsLayerSchema.optional(),
70960
70976
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
70977
+ device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
70961
70978
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
70962
70979
  computer: OmoComputerSettingsLayerSchema.optional(),
70963
70980
  disabled_skills: OmoDisabledSkillsSchema.optional(),
@@ -70977,6 +70994,7 @@ var init_config = __esm(() => {
70977
70994
  model_pad: OmoModelPadSchema.optional(),
70978
70995
  memory: OmoMemorySettingsLayerSchema.optional(),
70979
70996
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
70997
+ device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
70980
70998
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
70981
70999
  computer: OmoComputerSettingsLayerSchema.optional(),
70982
71000
  disabled_skills: OmoDisabledSkillsSchema.optional(),
@@ -71001,6 +71019,7 @@ var init_config = __esm(() => {
71001
71019
  model_pad: OmoModelPadSchema.optional(),
71002
71020
  memory: OmoMemorySettingsSchema.optional(),
71003
71021
  telemetry: OmoTelemetrySettingsSchema.optional(),
71022
+ device_service: OmoDeviceServiceSettingsSchema.optional(),
71004
71023
  side_panel: OmoSidePanelSettingsSchema.optional(),
71005
71024
  computer: OmoComputerSettingsSchema.optional(),
71006
71025
  disabled_skills: OmoDisabledSkillsSchema.optional(),
@@ -71028,6 +71047,7 @@ var init_config = __esm(() => {
71028
71047
  model_pad: OmoModelPadSchema.optional(),
71029
71048
  memory: OmoMemorySettingsLayerSchema.optional(),
71030
71049
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
71050
+ device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
71031
71051
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
71032
71052
  computer: OmoComputerSettingsLayerSchema.optional(),
71033
71053
  disabled_skills: OmoDisabledSkillsSchema.optional(),
@@ -71173,6 +71193,7 @@ var init_schema = __esm(() => {
71173
71193
  init_task();
71174
71194
  init_team();
71175
71195
  init_telemetry();
71196
+ init_device_service();
71176
71197
  init_computer();
71177
71198
  });
71178
71199
 
@@ -72960,6 +72981,7 @@ var init_agent_names2 = __esm(() => {
72960
72981
  "debugging",
72961
72982
  "security-research",
72962
72983
  "security-review",
72984
+ "hyperplan",
72963
72985
  "visual-qa",
72964
72986
  "team-mode"
72965
72987
  ]);
@@ -75719,7 +75741,7 @@ init_shared();
75719
75741
  // package.json
75720
75742
  var package_default = {
75721
75743
  name: "oh-my-opencode",
75722
- version: "5.1.60",
75744
+ version: "5.1.62",
75723
75745
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
75724
75746
  main: "./dist/index.js",
75725
75747
  types: "dist/index.d.ts",
@@ -75906,7 +75928,7 @@ var package_default = {
75906
75928
  },
75907
75929
  devDependencies: {
75908
75930
  "@clack/prompts": "^1.8.1",
75909
- "@code-yeongyu/senpi": "2026.11.2-3",
75931
+ "@code-yeongyu/senpi": "2026.11.5-1",
75910
75932
  "@modelcontextprotocol/sdk": "^1.30.0",
75911
75933
  "@oh-my-opencode/agents-md-core": "workspace:*",
75912
75934
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -75971,18 +75993,18 @@ var package_default = {
75971
75993
  typescript: "^7.0.2"
75972
75994
  },
75973
75995
  optionalDependencies: {
75974
- "oh-my-opencode-darwin-arm64": "5.1.60",
75975
- "oh-my-opencode-darwin-x64": "5.1.60",
75976
- "oh-my-opencode-darwin-x64-baseline": "5.1.60",
75977
- "oh-my-opencode-linux-arm64": "5.1.60",
75978
- "oh-my-opencode-linux-arm64-musl": "5.1.60",
75979
- "oh-my-opencode-linux-x64": "5.1.60",
75980
- "oh-my-opencode-linux-x64-baseline": "5.1.60",
75981
- "oh-my-opencode-linux-x64-musl": "5.1.60",
75982
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.60",
75983
- "oh-my-opencode-windows-arm64": "5.1.60",
75984
- "oh-my-opencode-windows-x64": "5.1.60",
75985
- "oh-my-opencode-windows-x64-baseline": "5.1.60"
75996
+ "oh-my-opencode-darwin-arm64": "5.1.62",
75997
+ "oh-my-opencode-darwin-x64": "5.1.62",
75998
+ "oh-my-opencode-darwin-x64-baseline": "5.1.62",
75999
+ "oh-my-opencode-linux-arm64": "5.1.62",
76000
+ "oh-my-opencode-linux-arm64-musl": "5.1.62",
76001
+ "oh-my-opencode-linux-x64": "5.1.62",
76002
+ "oh-my-opencode-linux-x64-baseline": "5.1.62",
76003
+ "oh-my-opencode-linux-x64-musl": "5.1.62",
76004
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.62",
76005
+ "oh-my-opencode-windows-arm64": "5.1.62",
76006
+ "oh-my-opencode-windows-x64": "5.1.62",
76007
+ "oh-my-opencode-windows-x64-baseline": "5.1.62"
75986
76008
  },
75987
76009
  overrides: {
75988
76010
  hono: "^4.13.8",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.1.60",
3
+ "version": "5.1.62",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -187,7 +187,7 @@
187
187
  },
188
188
  "devDependencies": {
189
189
  "@clack/prompts": "^1.8.1",
190
- "@code-yeongyu/senpi": "2026.11.2-3",
190
+ "@code-yeongyu/senpi": "2026.11.5-1",
191
191
  "@modelcontextprotocol/sdk": "^1.30.0",
192
192
  "@oh-my-opencode/agents-md-core": "workspace:*",
193
193
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
@@ -252,18 +252,18 @@
252
252
  "typescript": "^7.0.2"
253
253
  },
254
254
  "optionalDependencies": {
255
- "oh-my-opencode-darwin-arm64": "5.1.60",
256
- "oh-my-opencode-darwin-x64": "5.1.60",
257
- "oh-my-opencode-darwin-x64-baseline": "5.1.60",
258
- "oh-my-opencode-linux-arm64": "5.1.60",
259
- "oh-my-opencode-linux-arm64-musl": "5.1.60",
260
- "oh-my-opencode-linux-x64": "5.1.60",
261
- "oh-my-opencode-linux-x64-baseline": "5.1.60",
262
- "oh-my-opencode-linux-x64-musl": "5.1.60",
263
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.60",
264
- "oh-my-opencode-windows-arm64": "5.1.60",
265
- "oh-my-opencode-windows-x64": "5.1.60",
266
- "oh-my-opencode-windows-x64-baseline": "5.1.60"
255
+ "oh-my-opencode-darwin-arm64": "5.1.62",
256
+ "oh-my-opencode-darwin-x64": "5.1.62",
257
+ "oh-my-opencode-darwin-x64-baseline": "5.1.62",
258
+ "oh-my-opencode-linux-arm64": "5.1.62",
259
+ "oh-my-opencode-linux-arm64-musl": "5.1.62",
260
+ "oh-my-opencode-linux-x64": "5.1.62",
261
+ "oh-my-opencode-linux-x64-baseline": "5.1.62",
262
+ "oh-my-opencode-linux-x64-musl": "5.1.62",
263
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.62",
264
+ "oh-my-opencode-windows-arm64": "5.1.62",
265
+ "oh-my-opencode-windows-x64": "5.1.62",
266
+ "oh-my-opencode-windows-x64-baseline": "5.1.62"
267
267
  },
268
268
  "overrides": {
269
269
  "hono": "^4.13.8",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.1.60",
3
+ "version": "5.1.62",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -7655,6 +7655,15 @@ var OmoTelemetrySettingsSchema = OmoTelemetrySettingsLayerSchema.extend({
7655
7655
  enabled: boolean2().default(true)
7656
7656
  }).strict();
7657
7657
 
7658
+ // ../../omo-config-core/src/schema/device-service.ts
7659
+ var OmoDeviceServiceSettingsShape = {
7660
+ enabled: boolean2()
7661
+ };
7662
+ var OmoDeviceServiceSettingsLayerSchema = object(OmoDeviceServiceSettingsShape).partial().strict();
7663
+ var OmoDeviceServiceSettingsSchema = OmoDeviceServiceSettingsLayerSchema.extend({
7664
+ enabled: boolean2().default(true)
7665
+ }).strict();
7666
+
7658
7667
  // ../../omo-config-core/src/schema/format-on-mutation.ts
7659
7668
  var mode = _enum(["off", "best-effort", "required"]);
7660
7669
  var languages = record(string2(), boolean2()).optional();
@@ -7697,6 +7706,7 @@ var OmoTypedHarnessConfigSchema = object({
7697
7706
  model_pad: OmoModelPadSchema.optional(),
7698
7707
  memory: OmoMemorySettingsLayerSchema.optional(),
7699
7708
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
7709
+ device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
7700
7710
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
7701
7711
  computer: OmoComputerSettingsLayerSchema.optional(),
7702
7712
  disabled_skills: OmoDisabledSkillsSchema.optional(),
@@ -7716,6 +7726,7 @@ var OmoConfigProfileSchema = object({
7716
7726
  model_pad: OmoModelPadSchema.optional(),
7717
7727
  memory: OmoMemorySettingsLayerSchema.optional(),
7718
7728
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
7729
+ device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
7719
7730
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
7720
7731
  computer: OmoComputerSettingsLayerSchema.optional(),
7721
7732
  disabled_skills: OmoDisabledSkillsSchema.optional(),
@@ -7740,6 +7751,7 @@ var OmoConfigSchema = object({
7740
7751
  model_pad: OmoModelPadSchema.optional(),
7741
7752
  memory: OmoMemorySettingsSchema.optional(),
7742
7753
  telemetry: OmoTelemetrySettingsSchema.optional(),
7754
+ device_service: OmoDeviceServiceSettingsSchema.optional(),
7743
7755
  side_panel: OmoSidePanelSettingsSchema.optional(),
7744
7756
  computer: OmoComputerSettingsSchema.optional(),
7745
7757
  disabled_skills: OmoDisabledSkillsSchema.optional(),
@@ -7767,6 +7779,7 @@ var OmoConfigLayerSchema = object({
7767
7779
  model_pad: OmoModelPadSchema.optional(),
7768
7780
  memory: OmoMemorySettingsLayerSchema.optional(),
7769
7781
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
7782
+ device_service: OmoDeviceServiceSettingsLayerSchema.optional(),
7770
7783
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
7771
7784
  computer: OmoComputerSettingsLayerSchema.optional(),
7772
7785
  disabled_skills: OmoDisabledSkillsSchema.optional(),
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.1.60) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.1.62) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.1.60",
3
+ "version": "5.1.62",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.1.60) Checking Comments"
11
+ "statusMessage": "(OmO 5.1.62) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.1.60",
3
+ "version": "5.1.62",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",