oh-my-opencode 5.1.51 → 5.1.55

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 (916) hide show
  1. package/dist/agents/atlas/agent.d.ts +5 -5
  2. package/dist/agents/dynamic-agent-core-sections.d.ts +0 -1
  3. package/dist/agents/dynamic-agent-prompt-builder.d.ts +1 -1
  4. package/dist/agents/gpt-apply-patch-guard.d.ts +0 -1
  5. package/dist/agents/hephaestus/agent.d.ts +3 -7
  6. package/dist/agents/hephaestus/model-support.d.ts +6 -0
  7. package/dist/agents/metis.d.ts +0 -15
  8. package/dist/agents/native-model-prompt.d.ts +9 -0
  9. package/dist/agents/native-prompt-frame.d.ts +20 -0
  10. package/dist/agents/native-tool-snippet.d.ts +6 -0
  11. package/dist/agents/sisyphus/default.d.ts +0 -1
  12. package/dist/agents/sisyphus-agent-factory.d.ts +2 -11
  13. package/dist/agents/sisyphus-junior/agent.d.ts +2 -20
  14. package/dist/agents/sisyphus-junior/index.d.ts +1 -11
  15. package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +6 -0
  16. package/dist/agents/types.d.ts +2 -2
  17. package/dist/cli/index.js +1174 -394
  18. package/dist/cli/service-auth/credential-lock.d.ts +11 -0
  19. package/dist/cli/service-auth/credential-owner.d.ts +10 -0
  20. package/dist/cli/service-auth/index.d.ts +3 -1
  21. package/dist/cli/service-auth/keystore.d.ts +8 -1
  22. package/dist/cli/service-auth/owned-refresh.d.ts +21 -0
  23. package/dist/cli/service-auth/protocol-v2.d.ts +27 -0
  24. package/dist/cli/service-auth/protocol.d.ts +26 -2
  25. package/dist/cli/service-auth/recovery-clock.d.ts +7 -0
  26. package/dist/cli/service-auth/refresh-attempt.d.ts +34 -0
  27. package/dist/cli/service-auth/session.d.ts +9 -2
  28. package/dist/cli-node/index.js +1174 -394
  29. package/dist/config/schema/agent-overrides.d.ts +64 -0
  30. package/dist/config/schema/categories.d.ts +8 -0
  31. package/dist/config/schema/oh-my-opencode-config.d.ts +64 -0
  32. package/dist/hooks/native-edition-nudge/hook.d.ts +3 -4
  33. package/dist/index.js +15625 -8841
  34. package/dist/oh-my-opencode.schema.json +112 -0
  35. package/dist/plugin/session-tool-permissions.d.ts +10 -0
  36. package/dist/plugin/system-transform.d.ts +2 -1
  37. package/dist/plugin/tool-definition.d.ts +1 -0
  38. package/dist/shared/bun-ffi-shim.d.ts +29 -0
  39. package/dist/shared/json-file-cache-store.d.ts +11 -0
  40. package/dist/skills/browser/runtime/omowright/index.js +24 -33
  41. package/dist/skills/browser/runtime/omowright/manifest.json +3 -3
  42. package/dist/skills/frontend/ATTRIBUTION.md +104 -1
  43. package/dist/skills/frontend/SKILL.md +7 -3
  44. package/dist/skills/frontend/references/design/design-system-architecture.md +3 -3
  45. package/dist/skills/frontend/references/perfection/craft-floor.md +59 -0
  46. package/dist/skills/frontend/references/perfection/detect.md +52 -0
  47. package/dist/skills/frontend/scripts/detect/cli.ts +70 -0
  48. package/dist/skills/frontend/scripts/detect/config.test.ts +26 -0
  49. package/dist/skills/frontend/scripts/detect/config.ts +53 -0
  50. package/dist/skills/frontend/scripts/detect/core/characters.ts +2 -0
  51. package/dist/skills/frontend/scripts/detect/core/color.test.ts +29 -0
  52. package/dist/skills/frontend/scripts/detect/core/color.ts +150 -0
  53. package/dist/skills/frontend/scripts/detect/core/page.ts +84 -0
  54. package/dist/skills/frontend/scripts/detect/core/shadow.ts +40 -0
  55. package/dist/skills/frontend/scripts/detect/core/source.ts +33 -0
  56. package/dist/skills/frontend/scripts/detect/detect.ts +77 -0
  57. package/dist/skills/frontend/scripts/detect/index.ts +23 -0
  58. package/dist/skills/frontend/scripts/detect/lint.test.ts +27 -0
  59. package/dist/skills/frontend/scripts/detect/lint.ts +98 -0
  60. package/dist/skills/frontend/scripts/detect/render/probe-placement.test.ts +19 -0
  61. package/dist/skills/frontend/scripts/detect/render/probe-placement.ts +50 -0
  62. package/dist/skills/frontend/scripts/detect/render/renderer.ts +37 -0
  63. package/dist/skills/frontend/scripts/detect/render/webview.ts +71 -0
  64. package/dist/skills/frontend/scripts/detect/report.ts +29 -0
  65. package/dist/skills/frontend/scripts/detect/rule.ts +42 -0
  66. package/dist/skills/frontend/scripts/detect/rules/color/ai-color-palette.test.ts +74 -0
  67. package/dist/skills/frontend/scripts/detect/rules/color/ai-color-palette.ts +83 -0
  68. package/dist/skills/frontend/scripts/detect/rules/color/cream-palette.test.ts +24 -0
  69. package/dist/skills/frontend/scripts/detect/rules/color/cream-palette.ts +35 -0
  70. package/dist/skills/frontend/scripts/detect/rules/color/dark-glow.test.ts +47 -0
  71. package/dist/skills/frontend/scripts/detect/rules/color/dark-glow.ts +44 -0
  72. package/dist/skills/frontend/scripts/detect/rules/color/design-system-color.test.ts +26 -0
  73. package/dist/skills/frontend/scripts/detect/rules/color/design-system-color.ts +35 -0
  74. package/dist/skills/frontend/scripts/detect/rules/color/gradient-text.test.ts +24 -0
  75. package/dist/skills/frontend/scripts/detect/rules/color/gradient-text.ts +59 -0
  76. package/dist/skills/frontend/scripts/detect/rules/color/gray-on-color.test.ts +39 -0
  77. package/dist/skills/frontend/scripts/detect/rules/color/gray-on-color.ts +38 -0
  78. package/dist/skills/frontend/scripts/detect/rules/color/index.ts +15 -0
  79. package/dist/skills/frontend/scripts/detect/rules/color/low-contrast.test.ts +209 -0
  80. package/dist/skills/frontend/scripts/detect/rules/color/low-contrast.ts +57 -0
  81. package/dist/skills/frontend/scripts/detect/rules/color/placeholder-contrast.test.ts +62 -0
  82. package/dist/skills/frontend/scripts/detect/rules/color/radial-halo.test.ts +40 -0
  83. package/dist/skills/frontend/scripts/detect/rules/color/radial-halo.ts +31 -0
  84. package/dist/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.test.ts +27 -0
  85. package/dist/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.ts +33 -0
  86. package/dist/skills/frontend/scripts/detect/rules/color/support/animation-opacity.ts +78 -0
  87. package/dist/skills/frontend/scripts/detect/rules/color/support/color-path.ts +15 -0
  88. package/dist/skills/frontend/scripts/detect/rules/color/support/contrast-pairs.ts +54 -0
  89. package/dist/skills/frontend/scripts/detect/rules/color/support/contrast-role.ts +76 -0
  90. package/dist/skills/frontend/scripts/detect/rules/color/support/glow-forms.ts +56 -0
  91. package/dist/skills/frontend/scripts/detect/rules/color/support/gradient-samples.ts +134 -0
  92. package/dist/skills/frontend/scripts/detect/rules/color/support/gradients.ts +91 -0
  93. package/dist/skills/frontend/scripts/detect/rules/color/support/mockup-roots.ts +63 -0
  94. package/dist/skills/frontend/scripts/detect/rules/color/support/page-ignore.ts +7 -0
  95. package/dist/skills/frontend/scripts/detect/rules/color/support/painted-text.ts +141 -0
  96. package/dist/skills/frontend/scripts/detect/rules/color/support/palette-roles.ts +58 -0
  97. package/dist/skills/frontend/scripts/detect/rules/color/support/placeholder-contrast.ts +25 -0
  98. package/dist/skills/frontend/scripts/detect/rules/color/support/stock-accent.ts +31 -0
  99. package/dist/skills/frontend/scripts/detect/rules/color/support/text-colors.ts +80 -0
  100. package/dist/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.test.ts +18 -0
  101. package/dist/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.ts +20 -0
  102. package/dist/skills/frontend/scripts/detect/rules/copy/broken-image.test.ts +25 -0
  103. package/dist/skills/frontend/scripts/detect/rules/copy/broken-image.ts +17 -0
  104. package/dist/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.test.ts +39 -0
  105. package/dist/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.ts +46 -0
  106. package/dist/skills/frontend/scripts/detect/rules/copy/index.ts +15 -0
  107. package/dist/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.test.ts +18 -0
  108. package/dist/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.ts +33 -0
  109. package/dist/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.test.ts +58 -0
  110. package/dist/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.ts +34 -0
  111. package/dist/skills/frontend/scripts/detect/rules/copy/repeated-container-text.test.ts +43 -0
  112. package/dist/skills/frontend/scripts/detect/rules/copy/repeated-container-text.ts +56 -0
  113. package/dist/skills/frontend/scripts/detect/rules/copy/script-error.test.ts +48 -0
  114. package/dist/skills/frontend/scripts/detect/rules/copy/script-error.ts +38 -0
  115. package/dist/skills/frontend/scripts/detect/rules/copy/skipped-heading.test.ts +49 -0
  116. package/dist/skills/frontend/scripts/detect/rules/copy/skipped-heading.ts +81 -0
  117. package/dist/skills/frontend/scripts/detect/rules/copy/support/numbered-label.ts +94 -0
  118. package/dist/skills/frontend/scripts/detect/rules/copy/support/page-text.ts +37 -0
  119. package/dist/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.test.ts +17 -0
  120. package/dist/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.ts +21 -0
  121. package/dist/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.test.ts +43 -0
  122. package/dist/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.ts +48 -0
  123. package/dist/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.test.ts +33 -0
  124. package/dist/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.ts +14 -0
  125. package/dist/skills/frontend/scripts/detect/rules/decoration/bounce-easing.test.ts +72 -0
  126. package/dist/skills/frontend/scripts/detect/rules/decoration/bounce-easing.ts +83 -0
  127. package/dist/skills/frontend/scripts/detect/rules/decoration/buried-raster.test.ts +95 -0
  128. package/dist/skills/frontend/scripts/detect/rules/decoration/buried-raster.ts +72 -0
  129. package/dist/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.test.ts +28 -0
  130. package/dist/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.ts +34 -0
  131. package/dist/skills/frontend/scripts/detect/rules/decoration/design-system-radius.test.ts +37 -0
  132. package/dist/skills/frontend/scripts/detect/rules/decoration/design-system-radius.ts +31 -0
  133. package/dist/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.test.ts +59 -0
  134. package/dist/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.ts +66 -0
  135. package/dist/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.test.ts +45 -0
  136. package/dist/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.ts +31 -0
  137. package/dist/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.test.ts +76 -0
  138. package/dist/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.ts +19 -0
  139. package/dist/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.test.ts +67 -0
  140. package/dist/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.ts +92 -0
  141. package/dist/skills/frontend/scripts/detect/rules/decoration/index.ts +38 -0
  142. package/dist/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.test.ts +126 -0
  143. package/dist/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.ts +69 -0
  144. package/dist/skills/frontend/scripts/detect/rules/decoration/marquee.test.ts +63 -0
  145. package/dist/skills/frontend/scripts/detect/rules/decoration/marquee.ts +51 -0
  146. package/dist/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.test.ts +67 -0
  147. package/dist/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.ts +41 -0
  148. package/dist/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.test.ts +58 -0
  149. package/dist/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.ts +72 -0
  150. package/dist/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.test.ts +26 -0
  151. package/dist/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.ts +25 -0
  152. package/dist/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.test.ts +59 -0
  153. package/dist/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.ts +58 -0
  154. package/dist/skills/frontend/scripts/detect/rules/decoration/side-tab.test.ts +91 -0
  155. package/dist/skills/frontend/scripts/detect/rules/decoration/side-tab.ts +17 -0
  156. package/dist/skills/frontend/scripts/detect/rules/decoration/support/appearance.ts +110 -0
  157. package/dist/skills/frontend/scripts/detect/rules/decoration/support/assert-cases.ts +25 -0
  158. package/dist/skills/frontend/scripts/detect/rules/decoration/support/borders.ts +150 -0
  159. package/dist/skills/frontend/scripts/detect/rules/decoration/support/clip-geometry.ts +151 -0
  160. package/dist/skills/frontend/scripts/detect/rules/decoration/support/css-candidates.ts +66 -0
  161. package/dist/skills/frontend/scripts/detect/rules/decoration/support/curve-samples.ts +55 -0
  162. package/dist/skills/frontend/scripts/detect/rules/decoration/support/gradient-pattern.ts +40 -0
  163. package/dist/skills/frontend/scripts/detect/rules/decoration/support/keyframes.ts +134 -0
  164. package/dist/skills/frontend/scripts/detect/rules/decoration/support/labels.ts +85 -0
  165. package/dist/skills/frontend/scripts/detect/rules/decoration/support/raster-state.ts +51 -0
  166. package/dist/skills/frontend/scripts/detect/rules/index.ts +16 -0
  167. package/dist/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.test.ts +64 -0
  168. package/dist/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.ts +62 -0
  169. package/dist/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.test.ts +40 -0
  170. package/dist/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.ts +15 -0
  171. package/dist/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.test.ts +62 -0
  172. package/dist/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.ts +63 -0
  173. package/dist/skills/frontend/scripts/detect/rules/layout/cramped-padding.test.ts +61 -0
  174. package/dist/skills/frontend/scripts/detect/rules/layout/cramped-padding.ts +97 -0
  175. package/dist/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.test.ts +43 -0
  176. package/dist/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.ts +47 -0
  177. package/dist/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.test.ts +28 -0
  178. package/dist/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.ts +43 -0
  179. package/dist/skills/frontend/scripts/detect/rules/layout/heading-rhythm.test.ts +67 -0
  180. package/dist/skills/frontend/scripts/detect/rules/layout/heading-rhythm.ts +30 -0
  181. package/dist/skills/frontend/scripts/detect/rules/layout/index.ts +21 -0
  182. package/dist/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.test.ts +19 -0
  183. package/dist/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.ts +32 -0
  184. package/dist/skills/frontend/scripts/detect/rules/layout/nested-cards.test.ts +60 -0
  185. package/dist/skills/frontend/scripts/detect/rules/layout/nested-cards.ts +38 -0
  186. package/dist/skills/frontend/scripts/detect/rules/layout/straggler.test.ts +33 -0
  187. package/dist/skills/frontend/scripts/detect/rules/layout/straggler.ts +28 -0
  188. package/dist/skills/frontend/scripts/detect/rules/layout/support/cards.ts +114 -0
  189. package/dist/skills/frontend/scripts/detect/rules/layout/support/clipping.ts +71 -0
  190. package/dist/skills/frontend/scripts/detect/rules/layout/support/declared-mockups.ts +46 -0
  191. package/dist/skills/frontend/scripts/detect/rules/layout/support/geometry.ts +73 -0
  192. package/dist/skills/frontend/scripts/detect/rules/layout/support/hidden-interface.ts +35 -0
  193. package/dist/skills/frontend/scripts/detect/rules/layout/support/layout-cases.ts +23 -0
  194. package/dist/skills/frontend/scripts/detect/rules/layout/support/line-breaks.ts +32 -0
  195. package/dist/skills/frontend/scripts/detect/rules/layout/support/motion.ts +77 -0
  196. package/dist/skills/frontend/scripts/detect/rules/layout/support/padding.ts +93 -0
  197. package/dist/skills/frontend/scripts/detect/rules/layout/support/rhythm.ts +161 -0
  198. package/dist/skills/frontend/scripts/detect/rules/layout/text-occlusion.test.ts +37 -0
  199. package/dist/skills/frontend/scripts/detect/rules/layout/text-occlusion.ts +84 -0
  200. package/dist/skills/frontend/scripts/detect/rules/layout/text-overflow.test.ts +83 -0
  201. package/dist/skills/frontend/scripts/detect/rules/layout/text-overflow.ts +72 -0
  202. package/dist/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.test.ts +22 -0
  203. package/dist/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.ts +22 -0
  204. package/dist/skills/frontend/scripts/detect/rules/layout/viewport-reflow.test.ts +34 -0
  205. package/dist/skills/frontend/scripts/detect/rules/layout/viewport-reflow.ts +33 -0
  206. package/dist/skills/frontend/scripts/detect/rules/source/ai-color-palette.test.ts +13 -0
  207. package/dist/skills/frontend/scripts/detect/rules/source/ai-color-palette.ts +11 -0
  208. package/dist/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.test.ts +12 -0
  209. package/dist/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.ts +14 -0
  210. package/dist/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.test.ts +14 -0
  211. package/dist/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.ts +20 -0
  212. package/dist/skills/frontend/scripts/detect/rules/source/bounce-easing.test.ts +19 -0
  213. package/dist/skills/frontend/scripts/detect/rules/source/bounce-easing.ts +21 -0
  214. package/dist/skills/frontend/scripts/detect/rules/source/broken-image.test.ts +27 -0
  215. package/dist/skills/frontend/scripts/detect/rules/source/broken-image.ts +16 -0
  216. package/dist/skills/frontend/scripts/detect/rules/source/codex-grid-background.test.ts +11 -0
  217. package/dist/skills/frontend/scripts/detect/rules/source/codex-grid-background.ts +18 -0
  218. package/dist/skills/frontend/scripts/detect/rules/source/dark-glow.test.ts +15 -0
  219. package/dist/skills/frontend/scripts/detect/rules/source/dark-glow.ts +21 -0
  220. package/dist/skills/frontend/scripts/detect/rules/source/em-dash-overuse.test.ts +13 -0
  221. package/dist/skills/frontend/scripts/detect/rules/source/em-dash-overuse.ts +15 -0
  222. package/dist/skills/frontend/scripts/detect/rules/source/gradient-text.test.ts +12 -0
  223. package/dist/skills/frontend/scripts/detect/rules/source/gradient-text.ts +11 -0
  224. package/dist/skills/frontend/scripts/detect/rules/source/gray-on-color.test.ts +20 -0
  225. package/dist/skills/frontend/scripts/detect/rules/source/gray-on-color.ts +13 -0
  226. package/dist/skills/frontend/scripts/detect/rules/source/index.ts +19 -0
  227. package/dist/skills/frontend/scripts/detect/rules/source/marketing-buzzword.test.ts +12 -0
  228. package/dist/skills/frontend/scripts/detect/rules/source/marketing-buzzword.ts +17 -0
  229. package/dist/skills/frontend/scripts/detect/rules/source/marquee.test.ts +12 -0
  230. package/dist/skills/frontend/scripts/detect/rules/source/marquee.ts +12 -0
  231. package/dist/skills/frontend/scripts/detect/rules/source/monotonous-spacing.test.ts +13 -0
  232. package/dist/skills/frontend/scripts/detect/rules/source/monotonous-spacing.ts +22 -0
  233. package/dist/skills/frontend/scripts/detect/rules/source/overused-font.test.ts +21 -0
  234. package/dist/skills/frontend/scripts/detect/rules/source/overused-font.ts +16 -0
  235. package/dist/skills/frontend/scripts/detect/rules/source/radial-halo.test.ts +16 -0
  236. package/dist/skills/frontend/scripts/detect/rules/source/radial-halo.ts +14 -0
  237. package/dist/skills/frontend/scripts/detect/rules/source/side-tab.test.ts +29 -0
  238. package/dist/skills/frontend/scripts/detect/rules/source/side-tab.ts +58 -0
  239. package/dist/skills/frontend/scripts/detect/rules/source/support/accent-scans.ts +78 -0
  240. package/dist/skills/frontend/scripts/detect/rules/source/support/check-source.ts +6 -0
  241. package/dist/skills/frontend/scripts/detect/rules/source/support/corners.ts +105 -0
  242. package/dist/skills/frontend/scripts/detect/rules/source/support/css-effects.ts +81 -0
  243. package/dist/skills/frontend/scripts/detect/rules/source/support/css-scopes.ts +131 -0
  244. package/dist/skills/frontend/scripts/detect/rules/source/support/image-tags.ts +113 -0
  245. package/dist/skills/frontend/scripts/detect/rules/source/support/js-punctuation.ts +34 -0
  246. package/dist/skills/frontend/scripts/detect/rules/source/support/markup-scope.ts +44 -0
  247. package/dist/skills/frontend/scripts/detect/rules/source/support/source-color.ts +42 -0
  248. package/dist/skills/frontend/scripts/detect/rules/source/support/source-shadow.ts +15 -0
  249. package/dist/skills/frontend/scripts/detect/rules/source/support/source-text.ts +110 -0
  250. package/dist/skills/frontend/scripts/detect/rules/typography/all-caps-body.test.ts +24 -0
  251. package/dist/skills/frontend/scripts/detect/rules/typography/all-caps-body.ts +15 -0
  252. package/dist/skills/frontend/scripts/detect/rules/typography/design-system-font-size.test.ts +21 -0
  253. package/dist/skills/frontend/scripts/detect/rules/typography/design-system-font-size.ts +23 -0
  254. package/dist/skills/frontend/scripts/detect/rules/typography/design-system-font.test.ts +22 -0
  255. package/dist/skills/frontend/scripts/detect/rules/typography/design-system-font.ts +24 -0
  256. package/dist/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.test.ts +23 -0
  257. package/dist/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.ts +18 -0
  258. package/dist/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.test.ts +33 -0
  259. package/dist/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.ts +26 -0
  260. package/dist/skills/frontend/scripts/detect/rules/typography/index.ts +21 -0
  261. package/dist/skills/frontend/scripts/detect/rules/typography/italic-serif-display.test.ts +24 -0
  262. package/dist/skills/frontend/scripts/detect/rules/typography/italic-serif-display.ts +24 -0
  263. package/dist/skills/frontend/scripts/detect/rules/typography/justified-text.test.ts +31 -0
  264. package/dist/skills/frontend/scripts/detect/rules/typography/justified-text.ts +32 -0
  265. package/dist/skills/frontend/scripts/detect/rules/typography/line-length.test.ts +43 -0
  266. package/dist/skills/frontend/scripts/detect/rules/typography/line-length.ts +28 -0
  267. package/dist/skills/frontend/scripts/detect/rules/typography/oversized-h1.test.ts +26 -0
  268. package/dist/skills/frontend/scripts/detect/rules/typography/oversized-h1.ts +20 -0
  269. package/dist/skills/frontend/scripts/detect/rules/typography/overused-font.test.ts +35 -0
  270. package/dist/skills/frontend/scripts/detect/rules/typography/overused-font.ts +45 -0
  271. package/dist/skills/frontend/scripts/detect/rules/typography/support/drawn-enlargement.ts +48 -0
  272. package/dist/skills/frontend/scripts/detect/rules/typography/support/fading-text.ts +48 -0
  273. package/dist/skills/frontend/scripts/detect/rules/typography/support/flex-runs.ts +16 -0
  274. package/dist/skills/frontend/scripts/detect/rules/typography/support/font-family.ts +28 -0
  275. package/dist/skills/frontend/scripts/detect/rules/typography/support/painted-text.test.ts +63 -0
  276. package/dist/skills/frontend/scripts/detect/rules/typography/support/painted-text.ts +81 -0
  277. package/dist/skills/frontend/scripts/detect/rules/typography/support/svg-size.ts +57 -0
  278. package/dist/skills/frontend/scripts/detect/rules/typography/support/text-context.ts +112 -0
  279. package/dist/skills/frontend/scripts/detect/rules/typography/support/text-lines.ts +43 -0
  280. package/dist/skills/frontend/scripts/detect/rules/typography/support/type-hierarchy.ts +48 -0
  281. package/dist/skills/frontend/scripts/detect/rules/typography/tight-leading.test.ts +54 -0
  282. package/dist/skills/frontend/scripts/detect/rules/typography/tight-leading.ts +47 -0
  283. package/dist/skills/frontend/scripts/detect/rules/typography/tiny-text.test.ts +60 -0
  284. package/dist/skills/frontend/scripts/detect/rules/typography/tiny-text.ts +23 -0
  285. package/dist/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.test.ts +98 -0
  286. package/dist/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.ts +28 -0
  287. package/dist/skills/frontend/scripts/detect/rules/typography/wide-tracking.test.ts +26 -0
  288. package/dist/skills/frontend/scripts/detect/rules/typography/wide-tracking.ts +26 -0
  289. package/dist/skills/frontend/scripts/detect/snapshot/collect.ts +158 -0
  290. package/dist/skills/frontend/scripts/detect/snapshot/style-props.ts +25 -0
  291. package/dist/skills/frontend/scripts/detect/testing/build-snapshot.ts +78 -0
  292. package/dist/skills/frontend/scripts/detect/tsconfig.json +19 -0
  293. package/dist/skills/frontend/scripts/detect/types.ts +124 -0
  294. package/dist/skills/programming/SKILL.md +17 -74
  295. package/dist/skills/programming/references/go/README.md +1 -1
  296. package/dist/skills/programming/references/go/bootstrap.md +2 -2
  297. package/dist/skills/programming/references/python/README.md +4 -4
  298. package/dist/skills/programming/references/python/one-liners.md +5 -5
  299. package/dist/skills/programming/references/testing/README.md +82 -0
  300. package/dist/skills/programming/references/testing/junk-classes.md +56 -0
  301. package/dist/skills/programming/references/typescript/README.md +1 -2
  302. package/dist/skills/programming/scripts/go/new-project.ts +197 -0
  303. package/dist/skills/programming/scripts/python/new-project.ts +231 -0
  304. package/dist/skills/programming/scripts/python/new-script.ts +134 -0
  305. package/dist/skills/programming/scripts/rust/new-project.ts +215 -0
  306. package/dist/skills/programming/scripts/scaffolders.test.ts +96 -0
  307. package/dist/skills/programming/scripts/shared/run-tool.ts +19 -0
  308. package/dist/skills/programming/scripts/typescript/check-test-junk-rules.ts +140 -0
  309. package/dist/skills/programming/scripts/typescript/check-test-junk.test.ts +125 -0
  310. package/dist/skills/programming/scripts/typescript/check-test-junk.ts +148 -0
  311. package/dist/skills/programming/scripts/typescript/mutation-proof.test.ts +43 -0
  312. package/dist/skills/programming/scripts/typescript/mutation-proof.ts +179 -0
  313. package/dist/skills/remove-ai-slops/SKILL.md +32 -20
  314. package/dist/skills/ulw-research/scripts/source-commands.mjs +3 -1
  315. package/dist/skills/ulw-research/scripts/source-integrity.test.ts +39 -2
  316. package/dist/skills/visual-qa/SKILL.md +12 -1
  317. package/dist/tools/delegate-task/models-distribution.d.ts +1 -0
  318. package/dist/tui.js +142 -42
  319. package/package.json +22 -19
  320. package/packages/lsp-core/src/lsp/config-loader.ts +18 -2
  321. package/packages/lsp-core/src/lsp/host-js-runtime.test.ts +150 -0
  322. package/packages/lsp-core/src/lsp/host-js-runtime.ts +57 -0
  323. package/packages/lsp-core/src/lsp/server-definitions.ts +10 -0
  324. package/packages/lsp-core/src/lsp/server-resolution.ts +9 -1
  325. package/packages/lsp-core/src/lsp/typescript-server-defaults.test.ts +84 -0
  326. package/packages/lsp-daemon/dist/cli.js +81 -15
  327. package/packages/lsp-daemon/dist/client.js +74 -8
  328. package/packages/lsp-daemon/dist/index.js +76 -10
  329. package/packages/lsp-tools-mcp/dist/cli.js +74 -8
  330. package/packages/lsp-tools-mcp/dist/mcp.js +74 -8
  331. package/packages/lsp-tools-mcp/dist/tools.js +74 -8
  332. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  333. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +22 -4
  334. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  335. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  336. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  337. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  338. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  339. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  340. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  341. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  342. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  343. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +77 -13
  344. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  345. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  346. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  347. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  348. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  349. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  350. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +34 -2
  351. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +34 -2
  352. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  353. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  354. package/packages/omo-codex/plugin/components/telemetry/test/codex-hook.test.ts +14 -1
  355. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  356. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  357. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  358. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  359. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  360. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  361. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  362. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  363. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  364. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  365. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  366. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  367. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  368. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  369. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  370. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  371. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  372. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  373. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  374. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  375. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  376. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  377. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  378. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  379. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  380. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  381. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  382. package/packages/omo-codex/plugin/package-lock.json +12 -12
  383. package/packages/omo-codex/plugin/package.json +1 -1
  384. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +16 -1
  385. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +24 -33
  386. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +3 -3
  387. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +104 -1
  388. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +7 -3
  389. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +3 -3
  390. package/packages/omo-codex/plugin/skills/frontend/references/perfection/craft-floor.md +59 -0
  391. package/packages/omo-codex/plugin/skills/frontend/references/perfection/detect.md +52 -0
  392. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/cli.ts +70 -0
  393. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/config.ts +53 -0
  394. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/characters.ts +2 -0
  395. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/color.ts +150 -0
  396. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/page.ts +84 -0
  397. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/shadow.ts +40 -0
  398. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/source.ts +33 -0
  399. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/detect.ts +77 -0
  400. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/index.ts +23 -0
  401. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/lint.ts +98 -0
  402. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/render/probe-placement.ts +50 -0
  403. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/render/renderer.ts +37 -0
  404. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/render/webview.ts +71 -0
  405. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/report.ts +29 -0
  406. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rule.ts +42 -0
  407. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/ai-color-palette.ts +83 -0
  408. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/cream-palette.ts +35 -0
  409. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/dark-glow.ts +44 -0
  410. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/design-system-color.ts +35 -0
  411. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/gradient-text.ts +59 -0
  412. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/gray-on-color.ts +38 -0
  413. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/index.ts +15 -0
  414. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/low-contrast.ts +57 -0
  415. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/radial-halo.ts +31 -0
  416. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.ts +33 -0
  417. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/animation-opacity.ts +78 -0
  418. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/color-path.ts +15 -0
  419. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/contrast-pairs.ts +54 -0
  420. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/contrast-role.ts +76 -0
  421. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/glow-forms.ts +56 -0
  422. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/gradient-samples.ts +134 -0
  423. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/gradients.ts +91 -0
  424. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/mockup-roots.ts +63 -0
  425. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/page-ignore.ts +7 -0
  426. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/painted-text.ts +141 -0
  427. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/palette-roles.ts +58 -0
  428. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/placeholder-contrast.ts +25 -0
  429. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/stock-accent.ts +31 -0
  430. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/text-colors.ts +80 -0
  431. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.ts +20 -0
  432. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/broken-image.ts +17 -0
  433. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.ts +46 -0
  434. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/index.ts +15 -0
  435. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.ts +33 -0
  436. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.ts +34 -0
  437. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/repeated-container-text.ts +56 -0
  438. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/script-error.ts +38 -0
  439. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/skipped-heading.ts +81 -0
  440. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/support/numbered-label.ts +94 -0
  441. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/support/page-text.ts +37 -0
  442. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.ts +21 -0
  443. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.ts +48 -0
  444. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.ts +14 -0
  445. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/bounce-easing.ts +83 -0
  446. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/buried-raster.ts +72 -0
  447. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.ts +34 -0
  448. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/design-system-radius.ts +31 -0
  449. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.ts +66 -0
  450. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.ts +31 -0
  451. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.ts +19 -0
  452. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.ts +92 -0
  453. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/index.ts +38 -0
  454. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.ts +69 -0
  455. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/marquee.ts +51 -0
  456. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.ts +41 -0
  457. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.ts +72 -0
  458. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.ts +25 -0
  459. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.ts +58 -0
  460. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/side-tab.ts +17 -0
  461. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/appearance.ts +110 -0
  462. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/assert-cases.ts +25 -0
  463. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/borders.ts +150 -0
  464. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/clip-geometry.ts +151 -0
  465. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/css-candidates.ts +66 -0
  466. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/curve-samples.ts +55 -0
  467. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/gradient-pattern.ts +40 -0
  468. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/keyframes.ts +134 -0
  469. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/labels.ts +85 -0
  470. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/raster-state.ts +51 -0
  471. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/index.ts +16 -0
  472. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.ts +62 -0
  473. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.ts +15 -0
  474. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.ts +63 -0
  475. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/cramped-padding.ts +97 -0
  476. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.ts +47 -0
  477. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.ts +43 -0
  478. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/heading-rhythm.ts +30 -0
  479. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/index.ts +21 -0
  480. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.ts +32 -0
  481. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/nested-cards.ts +38 -0
  482. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/straggler.ts +28 -0
  483. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/cards.ts +114 -0
  484. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/clipping.ts +71 -0
  485. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/declared-mockups.ts +46 -0
  486. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/geometry.ts +73 -0
  487. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/hidden-interface.ts +35 -0
  488. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/layout-cases.ts +23 -0
  489. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/line-breaks.ts +32 -0
  490. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/motion.ts +77 -0
  491. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/padding.ts +93 -0
  492. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/rhythm.ts +161 -0
  493. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/text-occlusion.ts +84 -0
  494. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/text-overflow.ts +72 -0
  495. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.ts +22 -0
  496. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/viewport-reflow.ts +33 -0
  497. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/ai-color-palette.ts +11 -0
  498. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.ts +14 -0
  499. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.ts +20 -0
  500. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/bounce-easing.ts +21 -0
  501. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/broken-image.ts +16 -0
  502. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/codex-grid-background.ts +18 -0
  503. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/dark-glow.ts +21 -0
  504. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/em-dash-overuse.ts +15 -0
  505. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/gradient-text.ts +11 -0
  506. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/gray-on-color.ts +13 -0
  507. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/index.ts +19 -0
  508. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/marketing-buzzword.ts +17 -0
  509. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/marquee.ts +12 -0
  510. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/monotonous-spacing.ts +22 -0
  511. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/overused-font.ts +16 -0
  512. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/radial-halo.ts +14 -0
  513. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/side-tab.ts +58 -0
  514. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/accent-scans.ts +78 -0
  515. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/check-source.ts +6 -0
  516. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/corners.ts +105 -0
  517. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/css-effects.ts +81 -0
  518. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/css-scopes.ts +131 -0
  519. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/image-tags.ts +113 -0
  520. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/js-punctuation.ts +34 -0
  521. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/markup-scope.ts +44 -0
  522. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/source-color.ts +42 -0
  523. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/source-shadow.ts +15 -0
  524. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/source-text.ts +110 -0
  525. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/all-caps-body.ts +15 -0
  526. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/design-system-font-size.ts +23 -0
  527. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/design-system-font.ts +24 -0
  528. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.ts +18 -0
  529. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.ts +26 -0
  530. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/index.ts +21 -0
  531. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/italic-serif-display.ts +24 -0
  532. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/justified-text.ts +32 -0
  533. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/line-length.ts +28 -0
  534. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/oversized-h1.ts +20 -0
  535. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/overused-font.ts +45 -0
  536. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/drawn-enlargement.ts +48 -0
  537. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/fading-text.ts +48 -0
  538. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/flex-runs.ts +16 -0
  539. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/font-family.ts +28 -0
  540. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/painted-text.ts +81 -0
  541. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/svg-size.ts +57 -0
  542. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/text-context.ts +112 -0
  543. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/text-lines.ts +43 -0
  544. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/type-hierarchy.ts +48 -0
  545. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/tight-leading.ts +47 -0
  546. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/tiny-text.ts +23 -0
  547. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.ts +28 -0
  548. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/wide-tracking.ts +26 -0
  549. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/snapshot/collect.ts +158 -0
  550. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/snapshot/style-props.ts +25 -0
  551. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/testing/build-snapshot.ts +78 -0
  552. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/tsconfig.json +19 -0
  553. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/types.ts +124 -0
  554. package/packages/omo-codex/plugin/skills/programming/SKILL.md +17 -74
  555. package/packages/omo-codex/plugin/skills/programming/references/go/README.md +1 -1
  556. package/packages/omo-codex/plugin/skills/programming/references/go/bootstrap.md +2 -2
  557. package/packages/omo-codex/plugin/skills/programming/references/python/README.md +4 -4
  558. package/packages/omo-codex/plugin/skills/programming/references/python/one-liners.md +5 -5
  559. package/packages/omo-codex/plugin/skills/programming/references/testing/README.md +82 -0
  560. package/packages/omo-codex/plugin/skills/programming/references/testing/junk-classes.md +56 -0
  561. package/packages/omo-codex/plugin/skills/programming/references/typescript/README.md +1 -2
  562. package/packages/omo-codex/plugin/skills/programming/scripts/go/new-project.ts +197 -0
  563. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-project.ts +231 -0
  564. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-script.ts +134 -0
  565. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.ts +215 -0
  566. package/packages/omo-codex/plugin/skills/programming/scripts/shared/run-tool.ts +19 -0
  567. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-test-junk-rules.ts +140 -0
  568. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-test-junk.ts +148 -0
  569. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/mutation-proof.ts +179 -0
  570. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +32 -20
  571. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-commands.mjs +3 -1
  572. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +12 -1
  573. package/packages/omo-codex/plugin/test/auto-update.test.mjs +62 -0
  574. package/packages/omo-codex/plugin/test/payload-equivalence.test.mjs +12 -2
  575. package/packages/omo-codex/scripts/install-dist/install-local.mjs +79 -10
  576. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +24 -33
  577. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +3 -3
  578. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +104 -1
  579. package/packages/shared-skills/skills/frontend/SKILL.md +7 -3
  580. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +3 -3
  581. package/packages/shared-skills/skills/frontend/references/perfection/craft-floor.md +59 -0
  582. package/packages/shared-skills/skills/frontend/references/perfection/detect.md +52 -0
  583. package/packages/shared-skills/skills/frontend/scripts/detect/cli.ts +70 -0
  584. package/packages/shared-skills/skills/frontend/scripts/detect/config.test.ts +26 -0
  585. package/packages/shared-skills/skills/frontend/scripts/detect/config.ts +53 -0
  586. package/packages/shared-skills/skills/frontend/scripts/detect/core/characters.ts +2 -0
  587. package/packages/shared-skills/skills/frontend/scripts/detect/core/color.test.ts +29 -0
  588. package/packages/shared-skills/skills/frontend/scripts/detect/core/color.ts +150 -0
  589. package/packages/shared-skills/skills/frontend/scripts/detect/core/page.ts +84 -0
  590. package/packages/shared-skills/skills/frontend/scripts/detect/core/shadow.ts +40 -0
  591. package/packages/shared-skills/skills/frontend/scripts/detect/core/source.ts +33 -0
  592. package/packages/shared-skills/skills/frontend/scripts/detect/detect.ts +77 -0
  593. package/packages/shared-skills/skills/frontend/scripts/detect/index.ts +23 -0
  594. package/packages/shared-skills/skills/frontend/scripts/detect/lint.test.ts +27 -0
  595. package/packages/shared-skills/skills/frontend/scripts/detect/lint.ts +98 -0
  596. package/packages/shared-skills/skills/frontend/scripts/detect/render/probe-placement.test.ts +19 -0
  597. package/packages/shared-skills/skills/frontend/scripts/detect/render/probe-placement.ts +50 -0
  598. package/packages/shared-skills/skills/frontend/scripts/detect/render/renderer.ts +37 -0
  599. package/packages/shared-skills/skills/frontend/scripts/detect/render/webview.ts +71 -0
  600. package/packages/shared-skills/skills/frontend/scripts/detect/report.ts +29 -0
  601. package/packages/shared-skills/skills/frontend/scripts/detect/rule.ts +42 -0
  602. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/ai-color-palette.test.ts +74 -0
  603. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/ai-color-palette.ts +83 -0
  604. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/cream-palette.test.ts +24 -0
  605. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/cream-palette.ts +35 -0
  606. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/dark-glow.test.ts +47 -0
  607. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/dark-glow.ts +44 -0
  608. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/design-system-color.test.ts +26 -0
  609. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/design-system-color.ts +35 -0
  610. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gradient-text.test.ts +24 -0
  611. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gradient-text.ts +59 -0
  612. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gray-on-color.test.ts +39 -0
  613. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gray-on-color.ts +38 -0
  614. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/index.ts +15 -0
  615. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/low-contrast.test.ts +209 -0
  616. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/low-contrast.ts +57 -0
  617. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/placeholder-contrast.test.ts +62 -0
  618. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-halo.test.ts +40 -0
  619. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-halo.ts +31 -0
  620. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.test.ts +27 -0
  621. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.ts +33 -0
  622. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/animation-opacity.ts +78 -0
  623. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/color-path.ts +15 -0
  624. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/contrast-pairs.ts +54 -0
  625. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/contrast-role.ts +76 -0
  626. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/glow-forms.ts +56 -0
  627. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/gradient-samples.ts +134 -0
  628. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/gradients.ts +91 -0
  629. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/mockup-roots.ts +63 -0
  630. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/page-ignore.ts +7 -0
  631. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/painted-text.ts +141 -0
  632. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/palette-roles.ts +58 -0
  633. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/placeholder-contrast.ts +25 -0
  634. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/stock-accent.ts +31 -0
  635. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/text-colors.ts +80 -0
  636. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.test.ts +18 -0
  637. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.ts +20 -0
  638. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/broken-image.test.ts +25 -0
  639. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/broken-image.ts +17 -0
  640. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.test.ts +39 -0
  641. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.ts +46 -0
  642. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/index.ts +15 -0
  643. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.test.ts +18 -0
  644. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.ts +33 -0
  645. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.test.ts +58 -0
  646. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.ts +34 -0
  647. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/repeated-container-text.test.ts +43 -0
  648. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/repeated-container-text.ts +56 -0
  649. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/script-error.test.ts +48 -0
  650. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/script-error.ts +38 -0
  651. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/skipped-heading.test.ts +49 -0
  652. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/skipped-heading.ts +81 -0
  653. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/support/numbered-label.ts +94 -0
  654. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/support/page-text.ts +37 -0
  655. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.test.ts +17 -0
  656. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.ts +21 -0
  657. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.test.ts +43 -0
  658. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.ts +48 -0
  659. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.test.ts +33 -0
  660. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.ts +14 -0
  661. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/bounce-easing.test.ts +72 -0
  662. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/bounce-easing.ts +83 -0
  663. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/buried-raster.test.ts +95 -0
  664. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/buried-raster.ts +72 -0
  665. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.test.ts +28 -0
  666. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.ts +34 -0
  667. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/design-system-radius.test.ts +37 -0
  668. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/design-system-radius.ts +31 -0
  669. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.test.ts +59 -0
  670. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.ts +66 -0
  671. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.test.ts +45 -0
  672. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.ts +31 -0
  673. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.test.ts +76 -0
  674. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.ts +19 -0
  675. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.test.ts +67 -0
  676. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.ts +92 -0
  677. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/index.ts +38 -0
  678. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.test.ts +126 -0
  679. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.ts +69 -0
  680. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/marquee.test.ts +63 -0
  681. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/marquee.ts +51 -0
  682. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.test.ts +67 -0
  683. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.ts +41 -0
  684. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.test.ts +58 -0
  685. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.ts +72 -0
  686. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.test.ts +26 -0
  687. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.ts +25 -0
  688. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.test.ts +59 -0
  689. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.ts +58 -0
  690. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/side-tab.test.ts +91 -0
  691. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/side-tab.ts +17 -0
  692. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/appearance.ts +110 -0
  693. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/assert-cases.ts +25 -0
  694. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/borders.ts +150 -0
  695. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/clip-geometry.ts +151 -0
  696. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/css-candidates.ts +66 -0
  697. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/curve-samples.ts +55 -0
  698. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/gradient-pattern.ts +40 -0
  699. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/keyframes.ts +134 -0
  700. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/labels.ts +85 -0
  701. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/raster-state.ts +51 -0
  702. package/packages/shared-skills/skills/frontend/scripts/detect/rules/index.ts +16 -0
  703. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.test.ts +64 -0
  704. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.ts +62 -0
  705. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.test.ts +40 -0
  706. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.ts +15 -0
  707. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.test.ts +62 -0
  708. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.ts +63 -0
  709. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/cramped-padding.test.ts +61 -0
  710. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/cramped-padding.ts +97 -0
  711. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.test.ts +43 -0
  712. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.ts +47 -0
  713. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.test.ts +28 -0
  714. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.ts +43 -0
  715. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/heading-rhythm.test.ts +67 -0
  716. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/heading-rhythm.ts +30 -0
  717. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/index.ts +21 -0
  718. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.test.ts +19 -0
  719. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.ts +32 -0
  720. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/nested-cards.test.ts +60 -0
  721. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/nested-cards.ts +38 -0
  722. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/straggler.test.ts +33 -0
  723. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/straggler.ts +28 -0
  724. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/cards.ts +114 -0
  725. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/clipping.ts +71 -0
  726. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/declared-mockups.ts +46 -0
  727. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/geometry.ts +73 -0
  728. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/hidden-interface.ts +35 -0
  729. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/layout-cases.ts +23 -0
  730. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/line-breaks.ts +32 -0
  731. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/motion.ts +77 -0
  732. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/padding.ts +93 -0
  733. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/rhythm.ts +161 -0
  734. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-occlusion.test.ts +37 -0
  735. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-occlusion.ts +84 -0
  736. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-overflow.test.ts +83 -0
  737. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-overflow.ts +72 -0
  738. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.test.ts +22 -0
  739. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.ts +22 -0
  740. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/viewport-reflow.test.ts +34 -0
  741. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/viewport-reflow.ts +33 -0
  742. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/ai-color-palette.test.ts +13 -0
  743. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/ai-color-palette.ts +11 -0
  744. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.test.ts +12 -0
  745. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.ts +14 -0
  746. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.test.ts +14 -0
  747. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.ts +20 -0
  748. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/bounce-easing.test.ts +19 -0
  749. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/bounce-easing.ts +21 -0
  750. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/broken-image.test.ts +27 -0
  751. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/broken-image.ts +16 -0
  752. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/codex-grid-background.test.ts +11 -0
  753. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/codex-grid-background.ts +18 -0
  754. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/dark-glow.test.ts +15 -0
  755. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/dark-glow.ts +21 -0
  756. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/em-dash-overuse.test.ts +13 -0
  757. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/em-dash-overuse.ts +15 -0
  758. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gradient-text.test.ts +12 -0
  759. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gradient-text.ts +11 -0
  760. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gray-on-color.test.ts +20 -0
  761. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gray-on-color.ts +13 -0
  762. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/index.ts +19 -0
  763. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marketing-buzzword.test.ts +12 -0
  764. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marketing-buzzword.ts +17 -0
  765. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marquee.test.ts +12 -0
  766. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marquee.ts +12 -0
  767. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/monotonous-spacing.test.ts +13 -0
  768. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/monotonous-spacing.ts +22 -0
  769. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/overused-font.test.ts +21 -0
  770. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/overused-font.ts +16 -0
  771. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/radial-halo.test.ts +16 -0
  772. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/radial-halo.ts +14 -0
  773. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/side-tab.test.ts +29 -0
  774. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/side-tab.ts +58 -0
  775. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/accent-scans.ts +78 -0
  776. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/check-source.ts +6 -0
  777. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/corners.ts +105 -0
  778. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/css-effects.ts +81 -0
  779. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/css-scopes.ts +131 -0
  780. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/image-tags.ts +113 -0
  781. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/js-punctuation.ts +34 -0
  782. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/markup-scope.ts +44 -0
  783. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/source-color.ts +42 -0
  784. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/source-shadow.ts +15 -0
  785. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/source-text.ts +110 -0
  786. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/all-caps-body.test.ts +24 -0
  787. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/all-caps-body.ts +15 -0
  788. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font-size.test.ts +21 -0
  789. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font-size.ts +23 -0
  790. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font.test.ts +22 -0
  791. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font.ts +24 -0
  792. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.test.ts +23 -0
  793. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.ts +18 -0
  794. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.test.ts +33 -0
  795. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.ts +26 -0
  796. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/index.ts +21 -0
  797. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/italic-serif-display.test.ts +24 -0
  798. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/italic-serif-display.ts +24 -0
  799. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/justified-text.test.ts +31 -0
  800. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/justified-text.ts +32 -0
  801. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/line-length.test.ts +43 -0
  802. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/line-length.ts +28 -0
  803. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/oversized-h1.test.ts +26 -0
  804. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/oversized-h1.ts +20 -0
  805. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/overused-font.test.ts +35 -0
  806. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/overused-font.ts +45 -0
  807. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/drawn-enlargement.ts +48 -0
  808. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/fading-text.ts +48 -0
  809. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/flex-runs.ts +16 -0
  810. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/font-family.ts +28 -0
  811. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/painted-text.test.ts +63 -0
  812. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/painted-text.ts +81 -0
  813. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/svg-size.ts +57 -0
  814. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/text-context.ts +112 -0
  815. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/text-lines.ts +43 -0
  816. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/type-hierarchy.ts +48 -0
  817. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tight-leading.test.ts +54 -0
  818. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tight-leading.ts +47 -0
  819. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tiny-text.test.ts +60 -0
  820. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tiny-text.ts +23 -0
  821. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.test.ts +98 -0
  822. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.ts +28 -0
  823. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/wide-tracking.test.ts +26 -0
  824. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/wide-tracking.ts +26 -0
  825. package/packages/shared-skills/skills/frontend/scripts/detect/snapshot/collect.ts +158 -0
  826. package/packages/shared-skills/skills/frontend/scripts/detect/snapshot/style-props.ts +25 -0
  827. package/packages/shared-skills/skills/frontend/scripts/detect/testing/build-snapshot.ts +78 -0
  828. package/packages/shared-skills/skills/frontend/scripts/detect/tsconfig.json +19 -0
  829. package/packages/shared-skills/skills/frontend/scripts/detect/types.ts +124 -0
  830. package/packages/shared-skills/skills/programming/SKILL.md +17 -74
  831. package/packages/shared-skills/skills/programming/references/go/README.md +1 -1
  832. package/packages/shared-skills/skills/programming/references/go/bootstrap.md +2 -2
  833. package/packages/shared-skills/skills/programming/references/python/README.md +4 -4
  834. package/packages/shared-skills/skills/programming/references/python/one-liners.md +5 -5
  835. package/packages/shared-skills/skills/programming/references/testing/README.md +82 -0
  836. package/packages/shared-skills/skills/programming/references/testing/junk-classes.md +56 -0
  837. package/packages/shared-skills/skills/programming/references/typescript/README.md +1 -2
  838. package/packages/shared-skills/skills/programming/scripts/go/new-project.ts +197 -0
  839. package/packages/shared-skills/skills/programming/scripts/python/new-project.ts +231 -0
  840. package/packages/shared-skills/skills/programming/scripts/python/new-script.ts +134 -0
  841. package/packages/shared-skills/skills/programming/scripts/rust/new-project.ts +215 -0
  842. package/packages/shared-skills/skills/programming/scripts/scaffolders.test.ts +96 -0
  843. package/packages/shared-skills/skills/programming/scripts/shared/run-tool.ts +19 -0
  844. package/packages/shared-skills/skills/programming/scripts/typescript/check-test-junk-rules.ts +140 -0
  845. package/packages/shared-skills/skills/programming/scripts/typescript/check-test-junk.test.ts +125 -0
  846. package/packages/shared-skills/skills/programming/scripts/typescript/check-test-junk.ts +148 -0
  847. package/packages/shared-skills/skills/programming/scripts/typescript/mutation-proof.test.ts +43 -0
  848. package/packages/shared-skills/skills/programming/scripts/typescript/mutation-proof.ts +179 -0
  849. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +32 -20
  850. package/packages/shared-skills/skills/ulw-research/scripts/source-commands.mjs +3 -1
  851. package/packages/shared-skills/skills/ulw-research/scripts/source-integrity.test.ts +39 -2
  852. package/packages/shared-skills/skills/visual-qa/SKILL.md +12 -1
  853. package/dist/agents/gpt-prompt-identity.d.ts +0 -3
  854. package/dist/agents/hephaestus/gpt-5-4.d.ts +0 -24
  855. package/dist/agents/hephaestus/gpt-5-5.d.ts +0 -2
  856. package/dist/agents/hephaestus/gpt-5-6.d.ts +0 -2
  857. package/dist/agents/kimi-tool-loop-guard.d.ts +0 -1
  858. package/dist/agents/sisyphus/claude-fable-5.d.ts +0 -19
  859. package/dist/agents/sisyphus/claude-opus-4-7.d.ts +0 -22
  860. package/dist/agents/sisyphus/claude-opus-4-8.d.ts +0 -19
  861. package/dist/agents/sisyphus/claude-opus-5.d.ts +0 -33
  862. package/dist/agents/sisyphus/gemini.d.ts +0 -20
  863. package/dist/agents/sisyphus/glm-5-2.d.ts +0 -4
  864. package/dist/agents/sisyphus/gpt-5-4.d.ts +0 -26
  865. package/dist/agents/sisyphus/gpt-5-5.d.ts +0 -6
  866. package/dist/agents/sisyphus/gpt-task-system-guide.d.ts +0 -1
  867. package/dist/agents/sisyphus/grok-4.d.ts +0 -21
  868. package/dist/agents/sisyphus/index.d.ts +0 -31
  869. package/dist/agents/sisyphus/kimi-k2-6.d.ts +0 -32
  870. package/dist/agents/sisyphus/kimi-k2-7.d.ts +0 -17
  871. package/dist/agents/sisyphus/kimi-k3-1.d.ts +0 -9
  872. package/dist/agents/sisyphus/kimi-k3.d.ts +0 -19
  873. package/dist/agents/sisyphus-dynamic-prompt-builder.d.ts +0 -2
  874. package/dist/agents/sisyphus-dynamic-prompt-execution.d.ts +0 -2
  875. package/dist/agents/sisyphus-dynamic-prompt-exploration.d.ts +0 -2
  876. package/dist/agents/sisyphus-dynamic-prompt-role.d.ts +0 -2
  877. package/dist/agents/sisyphus-dynamic-prompt-sections.d.ts +0 -18
  878. package/dist/agents/sisyphus-dynamic-prompt-style.d.ts +0 -2
  879. package/dist/agents/sisyphus-dynamic-prompt.d.ts +0 -3
  880. package/dist/agents/sisyphus-gemini-fallback-overrides.d.ts +0 -1
  881. package/dist/agents/sisyphus-junior/gemini.d.ts +0 -10
  882. package/dist/agents/sisyphus-junior/glm-5-2.d.ts +0 -1
  883. package/dist/agents/sisyphus-junior/gpt-5-4.d.ts +0 -11
  884. package/dist/agents/sisyphus-junior/gpt-5-5.d.ts +0 -5
  885. package/dist/agents/sisyphus-junior/gpt.d.ts +0 -9
  886. package/dist/agents/sisyphus-junior/kimi-k2-6.d.ts +0 -13
  887. package/dist/agents/sisyphus-junior/kimi-k2-7.d.ts +0 -11
  888. package/dist/agents/sisyphus-junior/kimi-k3-1.d.ts +0 -6
  889. package/dist/agents/sisyphus-junior/kimi-k3.d.ts +0 -12
  890. package/dist/features/claude-code-agent-loader/opencode-config-agents-reader.d.ts +0 -1
  891. package/dist/features/claude-code-command-loader/loader-cache.d.ts +0 -1
  892. package/dist/features/claude-code-command-loader/loader.d.ts +0 -1
  893. package/dist/features/opencode-skill-loader/config-source-discovery.d.ts +0 -1
  894. package/dist/features/opencode-skill-loader/merger/config-skill-entry-loader.d.ts +0 -1
  895. package/dist/features/opencode-skill-loader/opencode-config-skills-reader.d.ts +0 -1
  896. package/dist/features/team-mode/team-layout-tmux/resolve-caller-tmux-session.d.ts +0 -1
  897. package/dist/features/team-mode/team-registry/team-spec-input-normalizer.d.ts +0 -1
  898. package/dist/shared/git-worktree/collect-git-diff-stats.d.ts +0 -1
  899. package/dist/shared/git-worktree/parse-status-porcelain-line.d.ts +0 -1
  900. package/dist/shared/migration/agent-names.d.ts +0 -1
  901. package/dist/shared/migration/migrations-sidecar.d.ts +0 -1
  902. package/dist/shared/skill-path-resolver.d.ts +0 -1
  903. package/dist/shared/zip-entry-listing/powershell-zip-entry-listing.d.ts +0 -1
  904. package/dist/shared/zip-entry-listing/zipinfo-zip-entry-listing.d.ts +0 -1
  905. package/dist/skills/programming/scripts/go/new-project.py +0 -138
  906. package/dist/skills/programming/scripts/python/new-project.py +0 -172
  907. package/dist/skills/programming/scripts/python/new-script.py +0 -116
  908. package/dist/skills/programming/scripts/rust/new-project.py +0 -178
  909. package/packages/omo-codex/plugin/skills/programming/scripts/go/new-project.py +0 -138
  910. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-project.py +0 -172
  911. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-script.py +0 -116
  912. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +0 -178
  913. package/packages/shared-skills/skills/programming/scripts/go/new-project.py +0 -138
  914. package/packages/shared-skills/skills/programming/scripts/python/new-project.py +0 -172
  915. package/packages/shared-skills/skills/programming/scripts/python/new-script.py +0 -116
  916. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +0 -178
@@ -1,11 +1,12 @@
1
1
  import { describe, expect, onTestFinished, test } from "bun:test"
2
- import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, unlinkSync, writeFileSync } from "node:fs"
2
+ import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, unlinkSync, writeFileSync } from "node:fs"
3
3
  import { tmpdir } from "node:os"
4
4
  import { join } from "node:path"
5
5
 
6
- import { sha256Of } from "./cli-support.mjs"
6
+ import { CliError, sha256Of } from "./cli-support.mjs"
7
7
  import { addRow, readLedger, writeLedger } from "./fact-ledger.mjs"
8
8
  import { run } from "./report-tools.mjs"
9
+ import { writeSnapshot } from "./source-snapshot.mjs"
9
10
 
10
11
  const BRIEF = readFileSync(join(import.meta.dir, "tests/fixtures/fidelity-brief-locked.md"), "utf8")
11
12
  const PAGE = '<html><body><p>The main deck spans <span title="9 m">320</span> m in total.</p><table id="sizes"><tr><th>Name</th><th>Length</th></tr><tr><td>Deck</td><td>320 m</td></tr></table></body></html>'
@@ -127,6 +128,42 @@ describe("converted text is never a raw snapshot", () => {
127
128
  })
128
129
  })
129
130
 
131
+ describe("replacement over retained raw bytes", () => {
132
+ for (const [name, tampered, recaptured] of [
133
+ ["healthy retained bytes", false, false],
134
+ ["tampered retained bytes", true, false],
135
+ ["an explicit new capture after retained drift", true, true],
136
+ ] as const) {
137
+ test(`#given ${name} #when text replaces the extraction #then only validated retained bytes keep their original observation`, async () => {
138
+ const dir = session()
139
+ const observedAt = "2026-01-01T00:00:00.000Z"
140
+ const { dir: source } = writeSnapshot(join(dir, "sources"), "S1", {
141
+ url: "https://example.invalid/bridge", html: PLAIN, extractor: "model", observed_at: observedAt,
142
+ })
143
+ if (tampered) writeFileSync(join(source, "raw.bin"), PLAIN.replace("320", "330"))
144
+ const before = Object.fromEntries(readdirSync(source).map((name) => [name, readFileSync(join(source, name))]))
145
+ const raw = recaptured ? "A new capture says 340 m." : PLAIN
146
+ const text = recaptured ? raw : "The corrected extraction says 320 m."
147
+ const replaced = snapshot(dir, "S1", "--text", file(dir, "corrected.txt", text), "--replace",
148
+ ...(recaptured ? ["--raw", file(dir, "recaptured.txt", raw)] : []))
149
+
150
+ if (tampered && !recaptured) {
151
+ await expect(replaced).rejects.toBeInstanceOf(CliError)
152
+ expect(Object.fromEntries(readdirSync(source).map((name) => [name, readFileSync(join(source, name))]))).toEqual(before)
153
+ return
154
+ }
155
+
156
+ expect((await replaced).exitCode).toBe(0)
157
+ expect(readFileSync(join(source, "raw.bin"), "utf8")).toBe(raw)
158
+ expect(readFileSync(join(source, "text.txt"), "utf8")).toBe(text)
159
+ const meta = JSON.parse(readFileSync(join(source, "meta.json"), "utf8"))
160
+ expect(meta).toMatchObject({ sha256: sha256Of(raw), text_source: "declared", text_sha256: sha256Of(text) })
161
+ if (recaptured) expect(meta.observed_at).not.toBe(observedAt)
162
+ else expect(meta.observed_at).toBe(observedAt)
163
+ })
164
+ }
165
+ })
166
+
130
167
  // chmod 000 does not stop the owner reading a file on Windows (no POSIX mode bits), so there the same
131
168
  // fail-closed condition is produced the way an unreadable path occurs on win32: raw.bin is replaced by
132
169
  // a directory, and reading it fails (EISDIR). Both paths must make verify exit 1 with the cause.
@@ -42,6 +42,10 @@ The verdict is per page. One failing page fails the whole surface, so "most page
42
42
 
43
43
  Every gate runs on captures produced AFTER the last edit to the rendered source. If any screenshot, PDF, capture, or QA JSON is older than the source file it claims to verify, it is stale and invalid - regenerate it before trusting it. Never report a PASS from an artifact you did not just produce against the current build. Between review rounds, re-capture only the pages a fix touched; the final approving round always judges a complete fresh set. The one deliberately old artifact is the `before` set of Step 6, which is dated to the pre-edit build on purpose.
44
44
 
45
+ ### Machine pre-check - the detect SDK before any reviewer
46
+
47
+ On a web surface, run the `frontend` skill's detect SDK on every enumerated page before capturing for reviewers (`frontend/references/perfection/detect.md`: `detectPage({ kind: "url", url }, { reflow: true })`, or `bun <frontend skill dir>/scripts/detect/cli.ts --reflow --json <url>`). It reads the rendered page and reports contrast against the painted background, the type scale and heading order, overflow at 320-1440 px under an unbroken stress string, and decoration and copy tells. An error or warning is a FAIL on the matching checklist item (E2 contrast, B8 type scale, A9 or A13 layout, F8/F9 surfaces and scaffolds, C4 wrapping) before either reviewer looks; fix it and rerun. Keep the JSON beside the captures and hand it to both reviewers as evidence. Advisories go to the verdict's taste findings.
48
+
45
49
  ### Capture hygiene - validate before dispatching reviewers
46
50
 
47
51
  Before any reviewer sees an image, verify each capture yourself: the file signature matches its extension (a JPEG named `.png` is invalid), the frame is fully composited (no black or missing regions from the screenshot compositor), dimensions match the requested viewport, and the frame holds only the page - a capture showing the browser's tabs or address bar, or the capture tool's own UI, is a window grab, not evidence. A defective capture wastes an entire review round on the pipeline instead of the product - fix the capture tooling and re-shoot before dispatch, and record the tooling defect in the QA log instead of looping the reviewer on it.
@@ -116,7 +120,7 @@ This is the platform baseline, distilled from Apple's Human Interface Guidelines
116
120
  **A. Layout and alignment**
117
121
  - A1 Content is anchored by intent, centred or on the layout grid; nothing sits in the top-left of an otherwise empty canvas.
118
122
  - A2 Backgrounds and scrolling layouts run full-bleed to the display edges; no stray inset margin.
119
- - A3 Margins are symmetric; prose sits in a 45-75 character measure.
123
+ - A3 Margins are symmetric; prose sits in a 65-75 character measure on desktop and at least 45 on a phone.
120
124
  - A4 (phone) Safe areas respected: bars and content inset for the home indicator, notch and status bar.
121
125
  - A5 (phone) Scrollbars are overlay; no reserved right-hand gutter.
122
126
  - A6 One scroll owner per region, no nested same-direction scrolling; a sticky or floating bar stays legible over whatever scrolls under it.
@@ -126,6 +130,7 @@ This is the platform baseline, distilled from Apple's Human Interface Guidelines
126
130
  - A10 Content that continues out of view shows a cue (partial item, fade, chevron).
127
131
  - A11 (mac) Nothing important lives only at the window's bottom edge; the minimum window size keeps toolbar and content legible; the sidebar collapses when the window narrows.
128
132
  - A12 (web and app screens; N/A for a TUI, a printed page, or a figure) Layout contract: every changed screen or region has a `Layout:` line (in `DESIGN.md`, or in the change description when the project has none; the `frontend` skill's Brief step); the capture shows that pattern's structure; the logged owner is the region's main scroller in the probe output, every other scroller listed is nested inside it for its own content (a code block, a dropdown, a composer) or is named in the line too; none of the line's anti-patterns appear. A missing line, a different main scroller, an unexplained sibling scroller, or a present anti-pattern is a FAIL; a logged skip still owes the scroll-owner check.
133
+ - A13 Spacing rhythm, read from computed values: the space above a section heading is at least 1.5x the space below it, and the gap between groups is at least 2x the gap inside a group (the `frontend` skill's `references/perfection/craft-floor.md`).
129
134
 
130
135
  **B. Hierarchy**
131
136
  - B1 One primary action per view, in the prominent style (accent on its background, not its glyph); peers differ by style, never by size.
@@ -135,6 +140,7 @@ This is the platform baseline, distilled from Apple's Human Interface Guidelines
135
140
  - B5 One or two accents per screen; toolbars and tab bars stay monochrome over colourful content; nothing decorative carries accent.
136
141
  - B6 Type hierarchy comes from weight, size and colour, holds in both themes, and uses at most two typefaces.
137
142
  - B7 (web and app screens; N/A for a TUI, a printed page, or a figure) The screen matches its brief (the `frontend` skill's Brief step): the named primary action is the single prominent control, priorities 1-3 appear in that order in reading order on the first viewport, and nothing listed under "left out on purpose" is on the screen. A screen built or changed in this session with no brief is a FAIL; a pre-existing screen under audit with no brief is N/A.
143
+ - B8 Type scale floor, read from computed values: each heading step in use (display to h3, and the smallest heading to body) differs by at least 1.25x in size, and body-family roles (lead, body, small, caption, label) that sit closer also differ by weight, colour or case, a display heading stays at or under 6rem, and letter spacing never goes below -0.04em, unless the brief's chosen style route sets its own display scale or tracking (then that value is the check).
138
144
 
139
145
  **C. Text and copy**
140
146
  - C1 Body text is at least 17 pt-equivalent at 390 (15 pt for secondary text) and 14 px on desktop; no thin weights at small sizes.
@@ -159,6 +165,7 @@ This is the platform baseline, distilled from Apple's Human Interface Guidelines
159
165
  - E4 One colour never means two things; status colours are consistent across the surface.
160
166
  - E5 Translucent surfaces keep text legible over any scrolled content: blur or vibrancy, not a plain alpha fill.
161
167
  - E6 The theme follows the system; an in-app theme control also offers "system".
168
+ - E7 Secondary text on a tinted or coloured surface is a shade of that hue or the foreground at reduced alpha, never neutral gray; a shadow carries a y-offset and a soft blur, never a zero-offset coloured glow unless the brief asked for glowing-border cards (the `frontend` skill's ambience route).
162
169
 
163
170
  **F. Consistency and brand**
164
171
  - F1 One icon set with one stroke, weight and size; icon weight matches adjacent text; no emoji used as an icon.
@@ -168,6 +175,10 @@ This is the platform baseline, distilled from Apple's Human Interface Guidelines
168
175
  - F5 Selected or active state is a wash plus a glyph; focus is a focus-visible ring on fields and a row highlight in lists; no coloured accent side-border marks state.
169
176
  - F6 Standard glyphs for standard actions (share, close, back, search, more) in their standard places.
170
177
  - F7 Windows, sheets and popovers use system shapes; one sheet or popover at a time; a popover's arrow points at its source; only an alert may appear over a popover.
178
+ - F8 Browser surfaces carry the palette in both themes: text selection, caret, visible scrollbars, focus ring, link underline offset, and tabular numerals in changing or aligned numbers; none shows the browser default (select text and focus a field in the capture to prove it).
179
+ - F9 None of the generated scaffolds: a kicker label above a heading, an icon tile stacked over a heading in a grid of same-size cards, a hero metric with no decision behind it, a card nested in a card, monospace used as a "technical" costume. One the brief or its chosen route asked for, recorded as such, passes.
180
+
181
+ A13, B8, E7, F8 and F9 are adapted from the craft floor of [pbakaus/impeccable](https://github.com/pbakaus/impeccable) (Apache-2.0, Copyright 2025 Paul Bakaus); the license and the list of changes are in the `frontend` skill's `ATTRIBUTION.md` section 6.
171
182
 
172
183
  **G. Motion and feedback**
173
184
  - G1 Every animation has a cause - an interaction, a state change, an arrival; no motion on non-interactive elements, no hover that changes nothing, no permanent loop.
@@ -0,0 +1 @@
1
+ export declare const distributeTaskModels: import("@oh-my-opencode/omo-config-core").ModelDistributor;
package/dist/tui.js CHANGED
@@ -2547,7 +2547,8 @@ var init_latest_models = __esm(() => {
2547
2547
  gptLunaFast: "gpt-6-luna-fast",
2548
2548
  glm: "glm-5.3",
2549
2549
  glmFlash: "glm-5.3-flash",
2550
- kimi: "kimi-k3",
2550
+ kimi: "kimi-k3.1-pro",
2551
+ kimiK3: "kimi-k3",
2551
2552
  geminiPro: "gemini-4-argon"
2552
2553
  };
2553
2554
  });
@@ -3450,9 +3451,13 @@ var init_agent_model_requirements = __esm(() => {
3450
3451
  variant: "max"
3451
3452
  },
3452
3453
  {
3453
- providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode", "bailian-coding-plan", "moonshotai-cn", "firmware", "ollama-cloud", "aihubmix"],
3454
+ providers: ["opencode-go", "kimi-for-coding", "moonshotai", "moonshotai-cn"],
3454
3455
  model: LATEST_MODEL_BY_FAMILY.kimi
3455
3456
  },
3457
+ {
3458
+ providers: ["opencode", "bailian-coding-plan", "firmware", "ollama-cloud", "aihubmix"],
3459
+ model: LATEST_MODEL_BY_FAMILY.kimiK3
3460
+ },
3456
3461
  {
3457
3462
  providers: ["openai", "chatgpt-subscription", "github-copilot", "opencode"],
3458
3463
  model: "gpt-5.6-sol",
@@ -3547,10 +3552,11 @@ var init_agent_model_requirements = __esm(() => {
3547
3552
  variant: "max"
3548
3553
  },
3549
3554
  {
3550
- providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode"],
3555
+ providers: ["opencode-go", "kimi-for-coding", "moonshotai"],
3551
3556
  model: LATEST_MODEL_BY_FAMILY.kimi,
3552
3557
  variant: "max"
3553
- }
3558
+ },
3559
+ { providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
3554
3560
  ])
3555
3561
  },
3556
3562
  metis: {
@@ -3571,10 +3577,11 @@ var init_agent_model_requirements = __esm(() => {
3571
3577
  variant: "max"
3572
3578
  },
3573
3579
  {
3574
- providers: ["opencode-go", "kimi-for-coding", "moonshotai", "opencode"],
3580
+ providers: ["opencode-go", "kimi-for-coding", "moonshotai"],
3575
3581
  model: LATEST_MODEL_BY_FAMILY.kimi,
3576
3582
  variant: "max"
3577
- }
3583
+ },
3584
+ { providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
3578
3585
  ])
3579
3586
  },
3580
3587
  momus: {
@@ -3657,10 +3664,11 @@ var init_category_model_requirements = __esm(() => {
3657
3664
  variant: "max"
3658
3665
  },
3659
3666
  {
3660
- providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
3667
+ providers: ["kimi-for-coding", "moonshotai", "opencode-go"],
3661
3668
  model: LATEST_MODEL_BY_FAMILY.kimi,
3662
3669
  variant: "max"
3663
- }
3670
+ },
3671
+ { providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
3664
3672
  ])
3665
3673
  },
3666
3674
  ultrabrain: {
@@ -3712,10 +3720,11 @@ var init_category_model_requirements = __esm(() => {
3712
3720
  variant: "max"
3713
3721
  },
3714
3722
  {
3715
- providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
3723
+ providers: ["kimi-for-coding", "moonshotai", "opencode-go"],
3716
3724
  model: LATEST_MODEL_BY_FAMILY.kimi,
3717
3725
  variant: "max"
3718
- }
3726
+ },
3727
+ { providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
3719
3728
  ])
3720
3729
  },
3721
3730
  quick: {
@@ -3778,10 +3787,11 @@ var init_category_model_requirements = __esm(() => {
3778
3787
  },
3779
3788
  { providers: ["zai-coding-plan", "opencode-go"], model: LATEST_MODEL_BY_FAMILY.glm, variant: "max" },
3780
3789
  {
3781
- providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
3790
+ providers: ["kimi-for-coding", "moonshotai", "opencode-go"],
3782
3791
  model: LATEST_MODEL_BY_FAMILY.kimi,
3783
3792
  variant: "max"
3784
- }
3793
+ },
3794
+ { providers: ["opencode"], model: LATEST_MODEL_BY_FAMILY.kimiK3, variant: "max" }
3785
3795
  ]
3786
3796
  },
3787
3797
  writing: {
@@ -4193,6 +4203,36 @@ var init_supplemental_entries = __esm(() => {
4193
4203
  output: 262144
4194
4204
  }
4195
4205
  },
4206
+ "kimi-k3.1-pro": {
4207
+ id: "kimi-k3.1-pro",
4208
+ family: "kimi",
4209
+ reasoning: true,
4210
+ temperature: true,
4211
+ toolCall: true,
4212
+ modalities: {
4213
+ input: ["text", "image", "video"],
4214
+ output: ["text"]
4215
+ },
4216
+ limit: {
4217
+ context: 1048576,
4218
+ output: 1048576
4219
+ }
4220
+ },
4221
+ "kimi-k3.1-pro-highspeed": {
4222
+ id: "kimi-k3.1-pro-highspeed",
4223
+ family: "kimi",
4224
+ reasoning: true,
4225
+ temperature: true,
4226
+ toolCall: true,
4227
+ modalities: {
4228
+ input: ["text", "image", "video"],
4229
+ output: ["text"]
4230
+ },
4231
+ limit: {
4232
+ context: 1048576,
4233
+ output: 1048576
4234
+ }
4235
+ },
4196
4236
  "kimi-k2.6": {
4197
4237
  id: "kimi-k2.6",
4198
4238
  family: "kimi",
@@ -5939,6 +5979,33 @@ function createJsonFileCacheStore(options) {
5939
5979
  });
5940
5980
  }
5941
5981
  }
5982
+ function writeIfChanged(value) {
5983
+ ensureCacheDir();
5984
+ const cacheFile = getCacheFilePath();
5985
+ const serialized = options.serialize?.(value) ?? JSON.stringify(value, null, 2);
5986
+ try {
5987
+ const existing = existsSync4(cacheFile) ? readFileSync2(cacheFile, "utf-8") : undefined;
5988
+ const unchanged = existing !== undefined && (existing === serialized || options.comparable !== undefined && JSON.stringify(options.comparable(JSON.parse(existing))) === JSON.stringify(options.comparable(value)));
5989
+ if (unchanged) {
5990
+ memoryValue = value;
5991
+ writtenInCurrentProcess = true;
5992
+ log2(`[${options.logPrefix}] ${options.cacheLabel} unchanged; skipped write`, options.describe(value));
5993
+ return false;
5994
+ }
5995
+ } catch {}
5996
+ try {
5997
+ writeFileSync2(cacheFile, serialized);
5998
+ memoryValue = value;
5999
+ writtenInCurrentProcess = true;
6000
+ log2(`[${options.logPrefix}] ${options.cacheLabel} written`, options.describe(value));
6001
+ return true;
6002
+ } catch (error) {
6003
+ log2(`[${options.logPrefix}] Error writing ${toLogLabel(options.cacheLabel)}`, {
6004
+ error: String(error)
6005
+ });
6006
+ return false;
6007
+ }
6008
+ }
5942
6009
  function resetMemory() {
5943
6010
  memoryValue = undefined;
5944
6011
  writtenInCurrentProcess = false;
@@ -5947,6 +6014,7 @@ function createJsonFileCacheStore(options) {
5947
6014
  read,
5948
6015
  has,
5949
6016
  write,
6017
+ writeIfChanged,
5950
6018
  resetMemory
5951
6019
  };
5952
6020
  }
@@ -60995,7 +61063,8 @@ function createModelCapabilitiesCacheStore(getCacheDir = getOmoOpenCodeCacheDir)
60995
61063
  generatedAt: snapshot.generatedAt
60996
61064
  }),
60997
61065
  serialize: (snapshot) => `${JSON.stringify(snapshot, null, 2)}
60998
- `
61066
+ `,
61067
+ comparable: ({ generatedAt: _generatedAt, ...catalog }) => catalog
60999
61068
  });
61000
61069
  function readModelCapabilitiesCache() {
61001
61070
  return snapshotCacheStore.read();
@@ -61008,7 +61077,7 @@ function createModelCapabilitiesCacheStore(getCacheDir = getOmoOpenCodeCacheDir)
61008
61077
  }
61009
61078
  async function refreshModelCapabilitiesCache(args = {}) {
61010
61079
  const snapshot = await fetchModelCapabilitiesSnapshot(args);
61011
- writeModelCapabilitiesCache(snapshot);
61080
+ snapshotCacheStore.writeIfChanged(snapshot);
61012
61081
  return snapshot;
61013
61082
  }
61014
61083
  return {
@@ -70140,6 +70209,7 @@ var init_agent = __esm(() => {
70140
70209
  prompt: string2().optional(),
70141
70210
  model: string2().optional(),
70142
70211
  models: array(OmoAgentModelEntrySchema).optional(),
70212
+ models_distribution: _enum(["sequential", "round_robin"]).optional(),
70143
70213
  reasoning: OmoReasoningSchema.optional(),
70144
70214
  variant: string2().optional(),
70145
70215
  reasoningEffort: OmoReasoningEffortSchema.optional(),
@@ -70172,6 +70242,7 @@ var init_category = __esm(() => {
70172
70242
  description: string2().optional(),
70173
70243
  model: string2().optional(),
70174
70244
  models: array(union([string2(), OmoFallbackModelObjectSchema])).optional(),
70245
+ models_distribution: _enum(["sequential", "round_robin"]).optional(),
70175
70246
  reasoning: OmoReasoningSchema.optional(),
70176
70247
  temperature: number2().min(0).max(2).optional(),
70177
70248
  top_p: number2().min(0).max(1).optional(),
@@ -70410,8 +70481,8 @@ var init_memory = __esm(() => {
70410
70481
  enabled: boolean2().optional()
70411
70482
  }).strict();
70412
70483
  OmoMemoryProjectionSchema = object({
70413
- max_entries_per_directory: number2().int().min(0).default(40),
70414
- max_bytes: number2().int().min(0).default(24576)
70484
+ max_entries_per_directory: number2().int().min(0).default(0),
70485
+ max_bytes: number2().int().min(0).default(40960)
70415
70486
  }).strict();
70416
70487
  OmoMemoryProjectionLayerSchema = object({
70417
70488
  max_entries_per_directory: number2().int().min(0).optional(),
@@ -70475,7 +70546,7 @@ var init_memory = __esm(() => {
70475
70546
  query_expansion: false
70476
70547
  }),
70477
70548
  project_scope: OmoMemoryProjectScopeSchema.default({ nudge: true, recall: true }),
70478
- projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 40, max_bytes: 24576 }),
70549
+ projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 0, max_bytes: 40960 }),
70479
70550
  compile_warn_tokens: number2().int().positive().default(30000),
70480
70551
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
70481
70552
  }).strict();
@@ -70523,6 +70594,21 @@ var init_model_catalog = __esm(() => {
70523
70594
  OmoModelCatalogLayerSchema = record(string2(), OmoModelCatalogEntryLayerSchema);
70524
70595
  });
70525
70596
 
70597
+ // packages/omo-config-core/src/schema/model-pad.ts
70598
+ var OmoModelPadLabelsSchema, OmoModelPadSchema;
70599
+ var init_model_pad = __esm(() => {
70600
+ init_zod();
70601
+ OmoModelPadLabelsSchema = object({
70602
+ daily: string2().optional(),
70603
+ geeky: string2().optional(),
70604
+ normal: string2().optional(),
70605
+ heavy: string2().optional()
70606
+ }).strict();
70607
+ OmoModelPadSchema = object({
70608
+ labels: OmoModelPadLabelsSchema.optional()
70609
+ }).strict();
70610
+ });
70611
+
70526
70612
  // packages/omo-config-core/src/schema/model-profile.ts
70527
70613
  function isRecord8(value) {
70528
70614
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -70843,6 +70929,7 @@ var init_config = __esm(() => {
70843
70929
  init_git_master();
70844
70930
  init_memory();
70845
70931
  init_model_catalog();
70932
+ init_model_pad();
70846
70933
  init_model_profile();
70847
70934
  init_side_panel();
70848
70935
  init_task();
@@ -70864,6 +70951,7 @@ var init_config = __esm(() => {
70864
70951
  models: OmoModelCatalogLayerSchema.optional(),
70865
70952
  model_profiles: OmoModelProfilesLayerSchema.optional(),
70866
70953
  model_profile: string2().optional(),
70954
+ model_pad: OmoModelPadSchema.optional(),
70867
70955
  memory: OmoMemorySettingsLayerSchema.optional(),
70868
70956
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
70869
70957
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
@@ -70882,6 +70970,7 @@ var init_config = __esm(() => {
70882
70970
  models: OmoModelCatalogLayerSchema.optional(),
70883
70971
  model_profiles: OmoModelProfilesLayerSchema.optional(),
70884
70972
  model_profile: string2().optional(),
70973
+ model_pad: OmoModelPadSchema.optional(),
70885
70974
  memory: OmoMemorySettingsLayerSchema.optional(),
70886
70975
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
70887
70976
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
@@ -70905,6 +70994,7 @@ var init_config = __esm(() => {
70905
70994
  models: OmoModelCatalogSchema.optional(),
70906
70995
  model_profiles: OmoModelProfilesSchema.optional(),
70907
70996
  model_profile: string2().optional(),
70997
+ model_pad: OmoModelPadSchema.optional(),
70908
70998
  memory: OmoMemorySettingsSchema.optional(),
70909
70999
  telemetry: OmoTelemetrySettingsSchema.optional(),
70910
71000
  side_panel: OmoSidePanelSettingsSchema.optional(),
@@ -70931,6 +71021,7 @@ var init_config = __esm(() => {
70931
71021
  models: OmoModelCatalogLayerSchema.optional(),
70932
71022
  model_profiles: OmoModelProfilesLayerSchema.optional(),
70933
71023
  model_profile: string2().optional(),
71024
+ model_pad: OmoModelPadSchema.optional(),
70934
71025
  memory: OmoMemorySettingsLayerSchema.optional(),
70935
71026
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
70936
71027
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
@@ -71070,6 +71161,7 @@ var init_schema = __esm(() => {
71070
71161
  init_legacy_harness_names();
71071
71162
  init_memory();
71072
71163
  init_model_catalog();
71164
+ init_model_pad();
71073
71165
  init_model_profile();
71074
71166
  init_model_ref();
71075
71167
  init_provenance();
@@ -71985,9 +72077,13 @@ function resolveModelReferences(view) {
71985
72077
  }
71986
72078
  var init_model_reference_resolution = () => {};
71987
72079
 
72080
+ // packages/omo-config-core/src/models/models-distribution.ts
72081
+ var init_models_distribution = () => {};
72082
+
71988
72083
  // packages/omo-config-core/src/models/index.ts
71989
72084
  var init_models = __esm(() => {
71990
72085
  init_model_reference_resolution();
72086
+ init_models_distribution();
71991
72087
  });
71992
72088
 
71993
72089
  // packages/omo-config-core/src/writer/types.ts
@@ -72644,11 +72740,11 @@ function recordFields(value, fields) {
72644
72740
  }
72645
72741
  function modelInput(view) {
72646
72742
  const agents = isPlainRecord(view.agents) ? Object.fromEntries(Object.entries(view.agents).flatMap(([name, definition]) => {
72647
- const fields = recordFields(definition, ["description", "prompt", "model", "models", "variant", "reasoningEffort", "tools", "temperature", "disable"]);
72743
+ const fields = recordFields(definition, ["description", "prompt", "model", "models", "models_distribution", "variant", "reasoningEffort", "tools", "temperature", "disable"]);
72648
72744
  return fields === undefined ? [] : [[name, fields]];
72649
72745
  })) : undefined;
72650
72746
  const categories = isPlainRecord(view.categories) ? Object.fromEntries(Object.entries(view.categories).flatMap(([name, definition]) => {
72651
- const fields = recordFields(definition, ["description", "model", "fallback_models", "variant", "temperature", "top_p", "maxTokens", "thinking", "reasoningEffort", "textVerbosity", "tools", "prompt_append", "max_prompt_tokens", "is_unstable_agent", "disable"]);
72747
+ const fields = recordFields(definition, ["description", "model", "models", "models_distribution", "fallback_models", "variant", "temperature", "top_p", "maxTokens", "thinking", "reasoningEffort", "textVerbosity", "tools", "prompt_append", "max_prompt_tokens", "is_unstable_agent", "disable"]);
72652
72748
  return fields === undefined ? [] : [[name, fields]];
72653
72749
  })) : undefined;
72654
72750
  return {
@@ -72939,6 +73035,7 @@ var init_agent_overrides = __esm(() => {
72939
73035
  AgentOverrideConfigSchema = object({
72940
73036
  model: string2().optional(),
72941
73037
  models: array(union([string2(), FallbackModelObjectSchema])).optional(),
73038
+ models_distribution: _enum(["sequential", "round_robin"]).optional(),
72942
73039
  fallback_models: FallbackModelsSchema.optional(),
72943
73040
  reasoning: OmoReasoningSchema.optional(),
72944
73041
  variant: string2().optional(),
@@ -73056,6 +73153,7 @@ var init_categories = __esm(() => {
73056
73153
  description: string2().optional(),
73057
73154
  model: string2().optional(),
73058
73155
  models: array(union([string2(), FallbackModelObjectSchema])).optional(),
73156
+ models_distribution: _enum(["sequential", "round_robin"]).optional(),
73059
73157
  fallback_models: FallbackModelsSchema.optional(),
73060
73158
  reasoning: OmoReasoningSchema.optional(),
73061
73159
  variant: string2().optional(),
@@ -73799,7 +73897,8 @@ function materializeAgentModelChains(config) {
73799
73897
  return [name, {
73800
73898
  ...rest,
73801
73899
  ...primarySettings,
73802
- fallback_models: fallbacks
73900
+ fallback_models: fallbacks,
73901
+ ...agent.models_distribution === "round_robin" ? { models: agent.models } : {}
73803
73902
  }];
73804
73903
  }));
73805
73904
  return changed ? { ...config, agents } : config;
@@ -75616,7 +75715,7 @@ init_shared();
75616
75715
  // package.json
75617
75716
  var package_default = {
75618
75717
  name: "oh-my-opencode",
75619
- version: "5.1.51",
75718
+ version: "5.1.55",
75620
75719
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
75621
75720
  main: "./dist/index.js",
75622
75721
  types: "dist/index.d.ts",
@@ -75640,6 +75739,7 @@ var package_default = {
75640
75739
  "packages/openclaw-core",
75641
75740
  "packages/boulder-state",
75642
75741
  "packages/memory-core",
75742
+ "packages/device-service-core",
75643
75743
  "packages/isolation-core",
75644
75744
  "packages/telemetry-core",
75645
75745
  "packages/claude-code-compat-core",
@@ -75758,14 +75858,15 @@ var package_default = {
75758
75858
  prepublishOnly: "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
75759
75859
  "test:model-capabilities": "bun test --timeout 20000 packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail",
75760
75860
  "check:copy": "bun script/check-copy.ts",
75761
- typecheck: "bun run check:copy && tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
75762
- "typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/isolation-core/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-protocol/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-engine/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-prelude/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-service/tsconfig.json && tsgo --noEmit -p packages/senpi-desktop-tool/tsconfig.json",
75763
- "typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
75861
+ typecheck: "bun run check:copy && bun check --no-script --all -p tsconfig.json && bun run typecheck:script && bun run typecheck:packages && bun run typecheck:skill-scripts",
75862
+ "typecheck:skill-scripts": "bun check --no-script --all -p packages/shared-skills/skills/frontend/scripts/detect/tsconfig.json",
75863
+ "typecheck:packages": "bun check --no-script --all -p packages/rules-engine/tsconfig.json && bun check --no-script --all -p packages/delegate-core/tsconfig.json && bun check --no-script --all -p packages/mcp-stdio-core/tsconfig.json && bun check --no-script --all -p packages/mcp-client-core/tsconfig.json && bun check --no-script --all -p packages/git-bash-mcp/tsconfig.json && bun check --no-script --all -p packages/ast-grep-mcp/tsconfig.json && bun check --no-script --all -p packages/lsp-core/tsconfig.json && bun check --no-script --all -p packages/utils/tsconfig.json && bun check --no-script --all -p packages/device-service-core/tsconfig.json && bun check --no-script --all -p packages/model-core/tsconfig.json && bun check --no-script --all -p packages/omo-config-core/tsconfig.json && bun check --no-script --all -p packages/prompts-core/tsconfig.json && bun check --no-script --all -p packages/comment-checker-core/tsconfig.json && bun check --no-script --all -p packages/hashline-core/tsconfig.json && bun check --no-script --all -p packages/tmux-core/tsconfig.json && bun check --no-script --all -p packages/team-core/tsconfig.json && bun check --no-script --all -p packages/openclaw-core/tsconfig.json && bun check --no-script --all -p packages/boulder-state/tsconfig.json && bun check --no-script --all -p packages/isolation-core/tsconfig.json && bun check --no-script --all -p packages/memory-core/tsconfig.json && bun check --no-script --all -p packages/telemetry-core/tsconfig.json && bun check --no-script --all -p packages/claude-code-compat-core/tsconfig.json && bun check --no-script --all -p packages/skills-loader-core/tsconfig.json && bun check --no-script --all -p packages/agents-md-core/tsconfig.json && bun check --no-script --all -p packages/omo-codex/plugin/shared/tsconfig.json && bun check --no-script --all -p packages/omo-codex/tsconfig.json && bun check --no-script --all -p packages/omo-senpi/tsconfig.json && bun check --no-script --all -p packages/senpi-task/tsconfig.json && bun check --no-script --all -p packages/omo-opencode/tsconfig.json && bun check --no-script --all -p packages/omo-native/tsconfig.json && bun check --no-script --all -p packages/senpi-desktop-protocol/tsconfig.json && bun check --no-script --all -p packages/senpi-desktop-engine/tsconfig.json && bun check --no-script --all -p packages/senpi-desktop-prelude/tsconfig.json && bun check --no-script --all -p packages/senpi-desktop-service/tsconfig.json && bun check --no-script --all -p packages/senpi-desktop-tool/tsconfig.json",
75864
+ "typecheck:script": "bun check --no-script --all -p script/tsconfig.json",
75764
75865
  test: "bun test --timeout 20000",
75765
75866
  "changelog:section": "bun script/changelog-section.ts",
75766
75867
  "test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test --timeout 20000 packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
75767
75868
  "test:fast": "bun run script/test-fast.ts",
75768
- "test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test --timeout 20000 packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
75869
+ "test:senpi": "bun run build:senpi-plugin && bun check --no-script --all -p packages/omo-senpi/tsconfig.json && bun test --timeout 20000 packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
75769
75870
  "test:windows-codex": "bun run test:codex",
75770
75871
  "build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
75771
75872
  "build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build",
@@ -75801,11 +75902,12 @@ var package_default = {
75801
75902
  },
75802
75903
  devDependencies: {
75803
75904
  "@clack/prompts": "^1.8.1",
75804
- "@code-yeongyu/senpi": "2026.10.27-1",
75905
+ "@code-yeongyu/senpi": "2026.10.30-1",
75805
75906
  "@modelcontextprotocol/sdk": "^1.30.0",
75806
75907
  "@oh-my-opencode/agents-md-core": "workspace:*",
75807
75908
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
75808
75909
  "@oh-my-opencode/boulder-state": "workspace:*",
75910
+ "@oh-my-opencode/device-service-core": "workspace:*",
75809
75911
  "@oh-my-opencode/claude-code-compat-core": "workspace:*",
75810
75912
  "@oh-my-opencode/comment-checker-core": "workspace:*",
75811
75913
  "@oh-my-opencode/delegate-core": "workspace:*",
@@ -75855,7 +75957,7 @@ var package_default = {
75855
75957
  "jsonc-parser": "^3.3.1",
75856
75958
  knip: "6.43.0",
75857
75959
  "node-pty": "^1.1.0",
75858
- omowright: "github:code-yeongyu/omowright#f87ef4d63fe7b56fe117dbab246c8ad88dd8a780",
75960
+ omowright: "github:code-yeongyu/omowright#c06d20337ad942b09dea8757a45f6c848008a68d",
75859
75961
  "oxc-parser": "0.148.0",
75860
75962
  oxlint: "1.89.0",
75861
75963
  picocolors: "^1.1.1",
@@ -75865,18 +75967,18 @@ var package_default = {
75865
75967
  typescript: "^7.0.2"
75866
75968
  },
75867
75969
  optionalDependencies: {
75868
- "oh-my-opencode-darwin-arm64": "5.1.51",
75869
- "oh-my-opencode-darwin-x64": "5.1.51",
75870
- "oh-my-opencode-darwin-x64-baseline": "5.1.51",
75871
- "oh-my-opencode-linux-arm64": "5.1.51",
75872
- "oh-my-opencode-linux-arm64-musl": "5.1.51",
75873
- "oh-my-opencode-linux-x64": "5.1.51",
75874
- "oh-my-opencode-linux-x64-baseline": "5.1.51",
75875
- "oh-my-opencode-linux-x64-musl": "5.1.51",
75876
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.51",
75877
- "oh-my-opencode-windows-arm64": "5.1.51",
75878
- "oh-my-opencode-windows-x64": "5.1.51",
75879
- "oh-my-opencode-windows-x64-baseline": "5.1.51"
75970
+ "oh-my-opencode-darwin-arm64": "5.1.55",
75971
+ "oh-my-opencode-darwin-x64": "5.1.55",
75972
+ "oh-my-opencode-darwin-x64-baseline": "5.1.55",
75973
+ "oh-my-opencode-linux-arm64": "5.1.55",
75974
+ "oh-my-opencode-linux-arm64-musl": "5.1.55",
75975
+ "oh-my-opencode-linux-x64": "5.1.55",
75976
+ "oh-my-opencode-linux-x64-baseline": "5.1.55",
75977
+ "oh-my-opencode-linux-x64-musl": "5.1.55",
75978
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.55",
75979
+ "oh-my-opencode-windows-arm64": "5.1.55",
75980
+ "oh-my-opencode-windows-x64": "5.1.55",
75981
+ "oh-my-opencode-windows-x64-baseline": "5.1.55"
75880
75982
  },
75881
75983
  overrides: {
75882
75984
  hono: "^4.13.8",
@@ -75934,8 +76036,8 @@ var NUDGE_INTERVALS_MS = [3, 7, 14].map((days) => days * 24 * 60 * 60 * 1000);
75934
76036
  var NUDGE_SNOOZE_MS = 7 * 24 * 60 * 60 * 1000;
75935
76037
  var NUDGE_CORRUPT_RECOVERY_MS = 3 * 24 * 60 * 60 * 1000;
75936
76038
  // packages/omo-opencode/src/hooks/native-edition-nudge/hook.ts
75937
- import { join as join10 } from "path";
75938
76039
  init_logger2();
76040
+ import { join as join10 } from "path";
75939
76041
 
75940
76042
  // packages/omo-opencode/src/hooks/auto-update-checker/constants.ts
75941
76043
  import * as path4 from "path";
@@ -76028,8 +76130,6 @@ function createNudgeStateStore(stateDir) {
76028
76130
  }
76029
76131
 
76030
76132
  // packages/omo-opencode/src/hooks/native-edition-nudge/hook.ts
76031
- var NATIVE_NUDGE_TOAST_MESSAGE = `Same agent, one binary, nothing else to keep updated.
76032
- Install: ${NATIVE_EDITION_INSTALL_COMMAND}`;
76033
76133
  function nativeEditionStateDir() {
76034
76134
  return join10(getUserConfigDir(), "oh-my-openagent");
76035
76135
  }