oh-my-opencode 5.1.48 → 5.1.54

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 (1312) 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/refusal-rule.d.ts +7 -0
  12. package/dist/agents/sisyphus/default.d.ts +0 -1
  13. package/dist/agents/sisyphus-agent-factory.d.ts +2 -11
  14. package/dist/agents/sisyphus-junior/agent.d.ts +2 -20
  15. package/dist/agents/sisyphus-junior/index.d.ts +1 -11
  16. package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +6 -0
  17. package/dist/agents/types.d.ts +2 -2
  18. package/dist/cli/index.js +2255 -1044
  19. package/dist/cli/service-auth/accounts-gate.d.ts +11 -0
  20. package/dist/cli/service-auth/commands.d.ts +2 -4
  21. package/dist/cli/service-auth/credential-lock.d.ts +11 -0
  22. package/dist/cli/service-auth/credential-owner.d.ts +10 -0
  23. package/dist/cli/service-auth/index.d.ts +3 -1
  24. package/dist/cli/service-auth/keystore.d.ts +33 -2
  25. package/dist/cli/service-auth/owned-refresh.d.ts +21 -0
  26. package/dist/cli/service-auth/protocol-v2.d.ts +27 -0
  27. package/dist/cli/service-auth/protocol.d.ts +32 -2
  28. package/dist/cli/service-auth/recovery-clock.d.ts +7 -0
  29. package/dist/cli/service-auth/refresh-attempt.d.ts +34 -0
  30. package/dist/cli/service-auth/session.d.ts +15 -2
  31. package/dist/cli/service-auth/signed-out-marker.d.ts +11 -0
  32. package/dist/cli-node/index.js +2255 -1044
  33. package/dist/config/schema/hooks.d.ts +1 -0
  34. package/dist/create-hooks.d.ts +1 -0
  35. package/dist/features/boulder-state/storage.d.ts +1 -1
  36. package/dist/features/boulder-state/types.d.ts +1 -1
  37. package/dist/hooks/atlas/idle-continuation.d.ts +2 -1
  38. package/dist/hooks/atlas/types.d.ts +9 -1
  39. package/dist/hooks/index.d.ts +1 -0
  40. package/dist/hooks/momus-review-persistence/hook.d.ts +19 -0
  41. package/dist/hooks/momus-review-persistence/index.d.ts +1 -0
  42. package/dist/hooks/momus-review-persistence/review-resolution.d.ts +20 -0
  43. package/dist/hooks/native-edition-nudge/hook.d.ts +3 -4
  44. package/dist/hooks/prometheus-md-only/constants.d.ts +2 -0
  45. package/dist/hooks/prometheus-md-only/fixtures/denial-log.d.ts +1 -0
  46. package/dist/hooks/prometheus-md-only/fixtures/guarded-hashline.d.ts +1 -0
  47. package/dist/hooks/prometheus-md-only/fixtures/invoke-before.d.ts +7 -0
  48. package/dist/hooks/prometheus-md-only/fixtures/opencode-patch-parser.d.ts +2 -0
  49. package/dist/hooks/prometheus-md-only/hook.d.ts +5 -1
  50. package/dist/hooks/prometheus-md-only/path-policy.d.ts +2 -9
  51. package/dist/hooks/prometheus-md-only/vendor/opencode-patch-parser.d.ts +22 -0
  52. package/dist/index.js +17483 -9494
  53. package/dist/plugin/hooks/create-core-hooks.d.ts +1 -0
  54. package/dist/plugin/hooks/create-tool-guard-hooks.d.ts +2 -1
  55. package/dist/plugin/session-tool-permissions.d.ts +10 -0
  56. package/dist/plugin/system-transform.d.ts +2 -1
  57. package/dist/plugin/tool-definition.d.ts +1 -0
  58. package/dist/shared/bun-ffi-shim.d.ts +29 -0
  59. package/dist/shared/json-file-cache-store.d.ts +11 -0
  60. package/dist/shared/posthog-activity-state.d.ts +1 -0
  61. package/dist/shared/posthog.d.ts +1 -2
  62. package/dist/shared/resolve-file-write-path.d.ts +6 -0
  63. package/dist/skills/ast-grep/README.md +1 -1
  64. package/dist/skills/ast-grep/install.ps1 +5 -3
  65. package/dist/skills/ast-grep/install.sh +4 -5
  66. package/dist/skills/ast-grep/references/install.md +2 -2
  67. package/dist/skills/ast-grep/scripts/ast_grep_helper.py +13 -3
  68. package/dist/skills/browser/runtime/omowright/index.js +24 -33
  69. package/dist/skills/browser/runtime/omowright/manifest.json +3 -3
  70. package/dist/skills/coding-agent-sessions/AGENTS.md +5 -4
  71. package/dist/skills/coding-agent-sessions/SKILL.md +11 -11
  72. package/dist/skills/coding-agent-sessions/references/all-platforms.md +2 -2
  73. package/dist/skills/coding-agent-sessions/references/codex.md +4 -4
  74. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +1 -1
  75. package/dist/skills/coding-agent-sessions/scripts/find-agent-sessions.py +6 -3
  76. package/dist/skills/frontend/ATTRIBUTION.md +105 -2
  77. package/dist/skills/frontend/SKILL.md +40 -14
  78. package/dist/skills/frontend/references/design/README.md +2 -2
  79. package/dist/skills/frontend/references/design/_INDEX.md +2 -1
  80. package/dist/skills/frontend/references/design/component-catalogs.md +14 -10
  81. package/dist/skills/frontend/references/design/design-system-architecture.md +22 -9
  82. package/dist/skills/frontend/references/design/grounding.md +29 -0
  83. package/dist/skills/frontend/references/perfection/craft-floor.md +59 -0
  84. package/dist/skills/frontend/references/perfection/detect.md +52 -0
  85. package/dist/skills/frontend/references/ui-ux-db/scripts/design_system.py +2 -0
  86. package/dist/skills/frontend/references/ui-ux-db/scripts/search.py +2 -0
  87. package/dist/skills/frontend/scripts/detect/cli.ts +70 -0
  88. package/dist/skills/frontend/scripts/detect/config.test.ts +26 -0
  89. package/dist/skills/frontend/scripts/detect/config.ts +53 -0
  90. package/dist/skills/frontend/scripts/detect/core/characters.ts +2 -0
  91. package/dist/skills/frontend/scripts/detect/core/color.test.ts +29 -0
  92. package/dist/skills/frontend/scripts/detect/core/color.ts +150 -0
  93. package/dist/skills/frontend/scripts/detect/core/page.ts +84 -0
  94. package/dist/skills/frontend/scripts/detect/core/shadow.ts +40 -0
  95. package/dist/skills/frontend/scripts/detect/core/source.ts +33 -0
  96. package/dist/skills/frontend/scripts/detect/detect.ts +77 -0
  97. package/dist/skills/frontend/scripts/detect/index.ts +23 -0
  98. package/dist/skills/frontend/scripts/detect/lint.test.ts +27 -0
  99. package/dist/skills/frontend/scripts/detect/lint.ts +98 -0
  100. package/dist/skills/frontend/scripts/detect/render/probe-placement.test.ts +19 -0
  101. package/dist/skills/frontend/scripts/detect/render/probe-placement.ts +50 -0
  102. package/dist/skills/frontend/scripts/detect/render/renderer.ts +37 -0
  103. package/dist/skills/frontend/scripts/detect/render/webview.ts +71 -0
  104. package/dist/skills/frontend/scripts/detect/report.ts +29 -0
  105. package/dist/skills/frontend/scripts/detect/rule.ts +42 -0
  106. package/dist/skills/frontend/scripts/detect/rules/color/ai-color-palette.test.ts +74 -0
  107. package/dist/skills/frontend/scripts/detect/rules/color/ai-color-palette.ts +83 -0
  108. package/dist/skills/frontend/scripts/detect/rules/color/cream-palette.test.ts +24 -0
  109. package/dist/skills/frontend/scripts/detect/rules/color/cream-palette.ts +35 -0
  110. package/dist/skills/frontend/scripts/detect/rules/color/dark-glow.test.ts +47 -0
  111. package/dist/skills/frontend/scripts/detect/rules/color/dark-glow.ts +44 -0
  112. package/dist/skills/frontend/scripts/detect/rules/color/design-system-color.test.ts +26 -0
  113. package/dist/skills/frontend/scripts/detect/rules/color/design-system-color.ts +35 -0
  114. package/dist/skills/frontend/scripts/detect/rules/color/gradient-text.test.ts +24 -0
  115. package/dist/skills/frontend/scripts/detect/rules/color/gradient-text.ts +59 -0
  116. package/dist/skills/frontend/scripts/detect/rules/color/gray-on-color.test.ts +39 -0
  117. package/dist/skills/frontend/scripts/detect/rules/color/gray-on-color.ts +38 -0
  118. package/dist/skills/frontend/scripts/detect/rules/color/index.ts +15 -0
  119. package/dist/skills/frontend/scripts/detect/rules/color/low-contrast.test.ts +209 -0
  120. package/dist/skills/frontend/scripts/detect/rules/color/low-contrast.ts +57 -0
  121. package/dist/skills/frontend/scripts/detect/rules/color/placeholder-contrast.test.ts +62 -0
  122. package/dist/skills/frontend/scripts/detect/rules/color/radial-halo.test.ts +40 -0
  123. package/dist/skills/frontend/scripts/detect/rules/color/radial-halo.ts +31 -0
  124. package/dist/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.test.ts +27 -0
  125. package/dist/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.ts +33 -0
  126. package/dist/skills/frontend/scripts/detect/rules/color/support/animation-opacity.ts +78 -0
  127. package/dist/skills/frontend/scripts/detect/rules/color/support/color-path.ts +15 -0
  128. package/dist/skills/frontend/scripts/detect/rules/color/support/contrast-pairs.ts +54 -0
  129. package/dist/skills/frontend/scripts/detect/rules/color/support/contrast-role.ts +76 -0
  130. package/dist/skills/frontend/scripts/detect/rules/color/support/glow-forms.ts +56 -0
  131. package/dist/skills/frontend/scripts/detect/rules/color/support/gradient-samples.ts +134 -0
  132. package/dist/skills/frontend/scripts/detect/rules/color/support/gradients.ts +91 -0
  133. package/dist/skills/frontend/scripts/detect/rules/color/support/mockup-roots.ts +63 -0
  134. package/dist/skills/frontend/scripts/detect/rules/color/support/page-ignore.ts +7 -0
  135. package/dist/skills/frontend/scripts/detect/rules/color/support/painted-text.ts +141 -0
  136. package/dist/skills/frontend/scripts/detect/rules/color/support/palette-roles.ts +58 -0
  137. package/dist/skills/frontend/scripts/detect/rules/color/support/placeholder-contrast.ts +25 -0
  138. package/dist/skills/frontend/scripts/detect/rules/color/support/stock-accent.ts +31 -0
  139. package/dist/skills/frontend/scripts/detect/rules/color/support/text-colors.ts +80 -0
  140. package/dist/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.test.ts +18 -0
  141. package/dist/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.ts +20 -0
  142. package/dist/skills/frontend/scripts/detect/rules/copy/broken-image.test.ts +25 -0
  143. package/dist/skills/frontend/scripts/detect/rules/copy/broken-image.ts +17 -0
  144. package/dist/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.test.ts +39 -0
  145. package/dist/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.ts +46 -0
  146. package/dist/skills/frontend/scripts/detect/rules/copy/index.ts +15 -0
  147. package/dist/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.test.ts +18 -0
  148. package/dist/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.ts +33 -0
  149. package/dist/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.test.ts +58 -0
  150. package/dist/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.ts +34 -0
  151. package/dist/skills/frontend/scripts/detect/rules/copy/repeated-container-text.test.ts +43 -0
  152. package/dist/skills/frontend/scripts/detect/rules/copy/repeated-container-text.ts +56 -0
  153. package/dist/skills/frontend/scripts/detect/rules/copy/script-error.test.ts +48 -0
  154. package/dist/skills/frontend/scripts/detect/rules/copy/script-error.ts +38 -0
  155. package/dist/skills/frontend/scripts/detect/rules/copy/skipped-heading.test.ts +49 -0
  156. package/dist/skills/frontend/scripts/detect/rules/copy/skipped-heading.ts +81 -0
  157. package/dist/skills/frontend/scripts/detect/rules/copy/support/numbered-label.ts +94 -0
  158. package/dist/skills/frontend/scripts/detect/rules/copy/support/page-text.ts +37 -0
  159. package/dist/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.test.ts +17 -0
  160. package/dist/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.ts +21 -0
  161. package/dist/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.test.ts +43 -0
  162. package/dist/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.ts +48 -0
  163. package/dist/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.test.ts +33 -0
  164. package/dist/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.ts +14 -0
  165. package/dist/skills/frontend/scripts/detect/rules/decoration/bounce-easing.test.ts +72 -0
  166. package/dist/skills/frontend/scripts/detect/rules/decoration/bounce-easing.ts +83 -0
  167. package/dist/skills/frontend/scripts/detect/rules/decoration/buried-raster.test.ts +95 -0
  168. package/dist/skills/frontend/scripts/detect/rules/decoration/buried-raster.ts +72 -0
  169. package/dist/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.test.ts +28 -0
  170. package/dist/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.ts +34 -0
  171. package/dist/skills/frontend/scripts/detect/rules/decoration/design-system-radius.test.ts +37 -0
  172. package/dist/skills/frontend/scripts/detect/rules/decoration/design-system-radius.ts +31 -0
  173. package/dist/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.test.ts +59 -0
  174. package/dist/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.ts +66 -0
  175. package/dist/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.test.ts +45 -0
  176. package/dist/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.ts +31 -0
  177. package/dist/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.test.ts +76 -0
  178. package/dist/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.ts +19 -0
  179. package/dist/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.test.ts +67 -0
  180. package/dist/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.ts +92 -0
  181. package/dist/skills/frontend/scripts/detect/rules/decoration/index.ts +38 -0
  182. package/dist/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.test.ts +126 -0
  183. package/dist/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.ts +69 -0
  184. package/dist/skills/frontend/scripts/detect/rules/decoration/marquee.test.ts +63 -0
  185. package/dist/skills/frontend/scripts/detect/rules/decoration/marquee.ts +51 -0
  186. package/dist/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.test.ts +67 -0
  187. package/dist/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.ts +41 -0
  188. package/dist/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.test.ts +58 -0
  189. package/dist/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.ts +72 -0
  190. package/dist/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.test.ts +26 -0
  191. package/dist/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.ts +25 -0
  192. package/dist/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.test.ts +59 -0
  193. package/dist/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.ts +58 -0
  194. package/dist/skills/frontend/scripts/detect/rules/decoration/side-tab.test.ts +91 -0
  195. package/dist/skills/frontend/scripts/detect/rules/decoration/side-tab.ts +17 -0
  196. package/dist/skills/frontend/scripts/detect/rules/decoration/support/appearance.ts +110 -0
  197. package/dist/skills/frontend/scripts/detect/rules/decoration/support/assert-cases.ts +25 -0
  198. package/dist/skills/frontend/scripts/detect/rules/decoration/support/borders.ts +150 -0
  199. package/dist/skills/frontend/scripts/detect/rules/decoration/support/clip-geometry.ts +151 -0
  200. package/dist/skills/frontend/scripts/detect/rules/decoration/support/css-candidates.ts +66 -0
  201. package/dist/skills/frontend/scripts/detect/rules/decoration/support/curve-samples.ts +55 -0
  202. package/dist/skills/frontend/scripts/detect/rules/decoration/support/gradient-pattern.ts +40 -0
  203. package/dist/skills/frontend/scripts/detect/rules/decoration/support/keyframes.ts +134 -0
  204. package/dist/skills/frontend/scripts/detect/rules/decoration/support/labels.ts +85 -0
  205. package/dist/skills/frontend/scripts/detect/rules/decoration/support/raster-state.ts +51 -0
  206. package/dist/skills/frontend/scripts/detect/rules/index.ts +16 -0
  207. package/dist/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.test.ts +64 -0
  208. package/dist/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.ts +62 -0
  209. package/dist/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.test.ts +40 -0
  210. package/dist/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.ts +15 -0
  211. package/dist/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.test.ts +62 -0
  212. package/dist/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.ts +63 -0
  213. package/dist/skills/frontend/scripts/detect/rules/layout/cramped-padding.test.ts +61 -0
  214. package/dist/skills/frontend/scripts/detect/rules/layout/cramped-padding.ts +97 -0
  215. package/dist/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.test.ts +43 -0
  216. package/dist/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.ts +47 -0
  217. package/dist/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.test.ts +28 -0
  218. package/dist/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.ts +43 -0
  219. package/dist/skills/frontend/scripts/detect/rules/layout/heading-rhythm.test.ts +67 -0
  220. package/dist/skills/frontend/scripts/detect/rules/layout/heading-rhythm.ts +30 -0
  221. package/dist/skills/frontend/scripts/detect/rules/layout/index.ts +21 -0
  222. package/dist/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.test.ts +19 -0
  223. package/dist/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.ts +32 -0
  224. package/dist/skills/frontend/scripts/detect/rules/layout/nested-cards.test.ts +60 -0
  225. package/dist/skills/frontend/scripts/detect/rules/layout/nested-cards.ts +38 -0
  226. package/dist/skills/frontend/scripts/detect/rules/layout/straggler.test.ts +33 -0
  227. package/dist/skills/frontend/scripts/detect/rules/layout/straggler.ts +28 -0
  228. package/dist/skills/frontend/scripts/detect/rules/layout/support/cards.ts +114 -0
  229. package/dist/skills/frontend/scripts/detect/rules/layout/support/clipping.ts +71 -0
  230. package/dist/skills/frontend/scripts/detect/rules/layout/support/declared-mockups.ts +46 -0
  231. package/dist/skills/frontend/scripts/detect/rules/layout/support/geometry.ts +73 -0
  232. package/dist/skills/frontend/scripts/detect/rules/layout/support/hidden-interface.ts +35 -0
  233. package/dist/skills/frontend/scripts/detect/rules/layout/support/layout-cases.ts +23 -0
  234. package/dist/skills/frontend/scripts/detect/rules/layout/support/line-breaks.ts +32 -0
  235. package/dist/skills/frontend/scripts/detect/rules/layout/support/motion.ts +77 -0
  236. package/dist/skills/frontend/scripts/detect/rules/layout/support/padding.ts +93 -0
  237. package/dist/skills/frontend/scripts/detect/rules/layout/support/rhythm.ts +161 -0
  238. package/dist/skills/frontend/scripts/detect/rules/layout/text-occlusion.test.ts +37 -0
  239. package/dist/skills/frontend/scripts/detect/rules/layout/text-occlusion.ts +84 -0
  240. package/dist/skills/frontend/scripts/detect/rules/layout/text-overflow.test.ts +83 -0
  241. package/dist/skills/frontend/scripts/detect/rules/layout/text-overflow.ts +72 -0
  242. package/dist/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.test.ts +22 -0
  243. package/dist/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.ts +22 -0
  244. package/dist/skills/frontend/scripts/detect/rules/layout/viewport-reflow.test.ts +34 -0
  245. package/dist/skills/frontend/scripts/detect/rules/layout/viewport-reflow.ts +33 -0
  246. package/dist/skills/frontend/scripts/detect/rules/source/ai-color-palette.test.ts +13 -0
  247. package/dist/skills/frontend/scripts/detect/rules/source/ai-color-palette.ts +11 -0
  248. package/dist/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.test.ts +12 -0
  249. package/dist/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.ts +14 -0
  250. package/dist/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.test.ts +14 -0
  251. package/dist/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.ts +20 -0
  252. package/dist/skills/frontend/scripts/detect/rules/source/bounce-easing.test.ts +19 -0
  253. package/dist/skills/frontend/scripts/detect/rules/source/bounce-easing.ts +21 -0
  254. package/dist/skills/frontend/scripts/detect/rules/source/broken-image.test.ts +27 -0
  255. package/dist/skills/frontend/scripts/detect/rules/source/broken-image.ts +16 -0
  256. package/dist/skills/frontend/scripts/detect/rules/source/codex-grid-background.test.ts +11 -0
  257. package/dist/skills/frontend/scripts/detect/rules/source/codex-grid-background.ts +18 -0
  258. package/dist/skills/frontend/scripts/detect/rules/source/dark-glow.test.ts +15 -0
  259. package/dist/skills/frontend/scripts/detect/rules/source/dark-glow.ts +21 -0
  260. package/dist/skills/frontend/scripts/detect/rules/source/em-dash-overuse.test.ts +13 -0
  261. package/dist/skills/frontend/scripts/detect/rules/source/em-dash-overuse.ts +15 -0
  262. package/dist/skills/frontend/scripts/detect/rules/source/gradient-text.test.ts +12 -0
  263. package/dist/skills/frontend/scripts/detect/rules/source/gradient-text.ts +11 -0
  264. package/dist/skills/frontend/scripts/detect/rules/source/gray-on-color.test.ts +20 -0
  265. package/dist/skills/frontend/scripts/detect/rules/source/gray-on-color.ts +13 -0
  266. package/dist/skills/frontend/scripts/detect/rules/source/index.ts +19 -0
  267. package/dist/skills/frontend/scripts/detect/rules/source/marketing-buzzword.test.ts +12 -0
  268. package/dist/skills/frontend/scripts/detect/rules/source/marketing-buzzword.ts +17 -0
  269. package/dist/skills/frontend/scripts/detect/rules/source/marquee.test.ts +12 -0
  270. package/dist/skills/frontend/scripts/detect/rules/source/marquee.ts +12 -0
  271. package/dist/skills/frontend/scripts/detect/rules/source/monotonous-spacing.test.ts +13 -0
  272. package/dist/skills/frontend/scripts/detect/rules/source/monotonous-spacing.ts +22 -0
  273. package/dist/skills/frontend/scripts/detect/rules/source/overused-font.test.ts +21 -0
  274. package/dist/skills/frontend/scripts/detect/rules/source/overused-font.ts +16 -0
  275. package/dist/skills/frontend/scripts/detect/rules/source/radial-halo.test.ts +16 -0
  276. package/dist/skills/frontend/scripts/detect/rules/source/radial-halo.ts +14 -0
  277. package/dist/skills/frontend/scripts/detect/rules/source/side-tab.test.ts +29 -0
  278. package/dist/skills/frontend/scripts/detect/rules/source/side-tab.ts +58 -0
  279. package/dist/skills/frontend/scripts/detect/rules/source/support/accent-scans.ts +78 -0
  280. package/dist/skills/frontend/scripts/detect/rules/source/support/check-source.ts +6 -0
  281. package/dist/skills/frontend/scripts/detect/rules/source/support/corners.ts +105 -0
  282. package/dist/skills/frontend/scripts/detect/rules/source/support/css-effects.ts +81 -0
  283. package/dist/skills/frontend/scripts/detect/rules/source/support/css-scopes.ts +131 -0
  284. package/dist/skills/frontend/scripts/detect/rules/source/support/image-tags.ts +113 -0
  285. package/dist/skills/frontend/scripts/detect/rules/source/support/js-punctuation.ts +34 -0
  286. package/dist/skills/frontend/scripts/detect/rules/source/support/markup-scope.ts +44 -0
  287. package/dist/skills/frontend/scripts/detect/rules/source/support/source-color.ts +42 -0
  288. package/dist/skills/frontend/scripts/detect/rules/source/support/source-shadow.ts +15 -0
  289. package/dist/skills/frontend/scripts/detect/rules/source/support/source-text.ts +110 -0
  290. package/dist/skills/frontend/scripts/detect/rules/typography/all-caps-body.test.ts +24 -0
  291. package/dist/skills/frontend/scripts/detect/rules/typography/all-caps-body.ts +15 -0
  292. package/dist/skills/frontend/scripts/detect/rules/typography/design-system-font-size.test.ts +21 -0
  293. package/dist/skills/frontend/scripts/detect/rules/typography/design-system-font-size.ts +23 -0
  294. package/dist/skills/frontend/scripts/detect/rules/typography/design-system-font.test.ts +22 -0
  295. package/dist/skills/frontend/scripts/detect/rules/typography/design-system-font.ts +24 -0
  296. package/dist/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.test.ts +23 -0
  297. package/dist/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.ts +18 -0
  298. package/dist/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.test.ts +33 -0
  299. package/dist/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.ts +26 -0
  300. package/dist/skills/frontend/scripts/detect/rules/typography/index.ts +21 -0
  301. package/dist/skills/frontend/scripts/detect/rules/typography/italic-serif-display.test.ts +24 -0
  302. package/dist/skills/frontend/scripts/detect/rules/typography/italic-serif-display.ts +24 -0
  303. package/dist/skills/frontend/scripts/detect/rules/typography/justified-text.test.ts +31 -0
  304. package/dist/skills/frontend/scripts/detect/rules/typography/justified-text.ts +32 -0
  305. package/dist/skills/frontend/scripts/detect/rules/typography/line-length.test.ts +43 -0
  306. package/dist/skills/frontend/scripts/detect/rules/typography/line-length.ts +28 -0
  307. package/dist/skills/frontend/scripts/detect/rules/typography/oversized-h1.test.ts +26 -0
  308. package/dist/skills/frontend/scripts/detect/rules/typography/oversized-h1.ts +20 -0
  309. package/dist/skills/frontend/scripts/detect/rules/typography/overused-font.test.ts +35 -0
  310. package/dist/skills/frontend/scripts/detect/rules/typography/overused-font.ts +45 -0
  311. package/dist/skills/frontend/scripts/detect/rules/typography/support/drawn-enlargement.ts +48 -0
  312. package/dist/skills/frontend/scripts/detect/rules/typography/support/fading-text.ts +48 -0
  313. package/dist/skills/frontend/scripts/detect/rules/typography/support/flex-runs.ts +16 -0
  314. package/dist/skills/frontend/scripts/detect/rules/typography/support/font-family.ts +28 -0
  315. package/dist/skills/frontend/scripts/detect/rules/typography/support/painted-text.test.ts +63 -0
  316. package/dist/skills/frontend/scripts/detect/rules/typography/support/painted-text.ts +81 -0
  317. package/dist/skills/frontend/scripts/detect/rules/typography/support/svg-size.ts +57 -0
  318. package/dist/skills/frontend/scripts/detect/rules/typography/support/text-context.ts +112 -0
  319. package/dist/skills/frontend/scripts/detect/rules/typography/support/text-lines.ts +43 -0
  320. package/dist/skills/frontend/scripts/detect/rules/typography/support/type-hierarchy.ts +48 -0
  321. package/dist/skills/frontend/scripts/detect/rules/typography/tight-leading.test.ts +54 -0
  322. package/dist/skills/frontend/scripts/detect/rules/typography/tight-leading.ts +47 -0
  323. package/dist/skills/frontend/scripts/detect/rules/typography/tiny-text.test.ts +60 -0
  324. package/dist/skills/frontend/scripts/detect/rules/typography/tiny-text.ts +23 -0
  325. package/dist/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.test.ts +98 -0
  326. package/dist/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.ts +28 -0
  327. package/dist/skills/frontend/scripts/detect/rules/typography/wide-tracking.test.ts +26 -0
  328. package/dist/skills/frontend/scripts/detect/rules/typography/wide-tracking.ts +26 -0
  329. package/dist/skills/frontend/scripts/detect/snapshot/collect.ts +158 -0
  330. package/dist/skills/frontend/scripts/detect/snapshot/style-props.ts +25 -0
  331. package/dist/skills/frontend/scripts/detect/testing/build-snapshot.ts +78 -0
  332. package/dist/skills/frontend/scripts/detect/tsconfig.json +19 -0
  333. package/dist/skills/frontend/scripts/detect/types.ts +124 -0
  334. package/dist/skills/programming/SKILL.md +15 -74
  335. package/dist/skills/programming/references/go/README.md +1 -1
  336. package/dist/skills/programming/references/go/bootstrap.md +2 -2
  337. package/dist/skills/programming/references/python/README.md +4 -4
  338. package/dist/skills/programming/references/python/one-liners.md +5 -5
  339. package/dist/skills/programming/references/testing/README.md +82 -0
  340. package/dist/skills/programming/references/testing/junk-classes.md +56 -0
  341. package/dist/skills/programming/references/typescript/README.md +1 -2
  342. package/dist/skills/programming/scripts/go/new-project.ts +197 -0
  343. package/dist/skills/programming/scripts/python/new-project.ts +231 -0
  344. package/dist/skills/programming/scripts/python/new-script.ts +134 -0
  345. package/dist/skills/programming/scripts/rust/new-project.ts +215 -0
  346. package/dist/skills/programming/scripts/scaffolders.test.ts +96 -0
  347. package/dist/skills/programming/scripts/shared/run-tool.ts +19 -0
  348. package/dist/skills/ultimate-browsing/SKILL.md +5 -4
  349. package/dist/skills/ultimate-browsing/engine/AGENTS.md +2 -2
  350. package/dist/skills/ultimate-browsing/engine/__main__.py +9 -6
  351. package/dist/skills/ultimate-browsing/engine/summary.py +1 -1
  352. package/dist/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  353. package/dist/skills/ultimate-browsing/scripts/extract_cookies.py +4 -2
  354. package/dist/skills/ulw-research/AGENTS.md +8 -4
  355. package/dist/skills/ulw-research/SKILL.md +7 -316
  356. package/dist/skills/ulw-research/references/deliverable-phase.md +23 -21
  357. package/dist/skills/ulw-research/references/fact-ledger-grammar.md +7 -3
  358. package/dist/skills/ulw-research/references/fact-ledger.md +42 -8
  359. package/dist/skills/ulw-research/references/fidelity-claim-kinds.md +1 -1
  360. package/dist/skills/ulw-research/references/markdown-blocks.md +12 -0
  361. package/dist/skills/ulw-research/references/report-gates.md +12 -5
  362. package/dist/skills/ulw-research/references/research-collection.md +195 -0
  363. package/dist/skills/ulw-research/references/research-delivery.md +123 -0
  364. package/dist/skills/ulw-research/scripts/claim-kinds.mjs +33 -5
  365. package/dist/skills/ulw-research/scripts/claim-kinds.test.ts +37 -2
  366. package/dist/skills/ulw-research/scripts/claim-prefix.test.ts +76 -0
  367. package/dist/skills/ulw-research/scripts/contracts-validation.test.ts +83 -0
  368. package/dist/skills/ulw-research/scripts/contracts.mjs +13 -4
  369. package/dist/skills/ulw-research/scripts/contracts.test.ts +6 -110
  370. package/dist/skills/ulw-research/scripts/conversion-altered.test.ts +154 -0
  371. package/dist/skills/ulw-research/scripts/conversion-originals.test.ts +297 -0
  372. package/dist/skills/ulw-research/scripts/conversion-probe-classes.test.ts +361 -0
  373. package/dist/skills/ulw-research/scripts/conversion-probe.mjs +229 -0
  374. package/dist/skills/ulw-research/scripts/conversion-probe.test.ts +218 -0
  375. package/dist/skills/ulw-research/scripts/copy-returns-polish.test.ts +4 -3
  376. package/dist/skills/ulw-research/scripts/css-hiding.mjs +158 -0
  377. package/dist/skills/ulw-research/scripts/css-lite.mjs +4 -2
  378. package/dist/skills/ulw-research/scripts/delivery-barrier-meaning.test.ts +186 -0
  379. package/dist/skills/ulw-research/scripts/delivery-barrier.test.ts +40 -87
  380. package/dist/skills/ulw-research/scripts/entities.mjs +13 -4
  381. package/dist/skills/ulw-research/scripts/fact-commands-fill.mjs +11 -1
  382. package/dist/skills/ulw-research/scripts/fact-commands-meaning.mjs +13 -9
  383. package/dist/skills/ulw-research/scripts/fact-commands-polish.mjs +40 -18
  384. package/dist/skills/ulw-research/scripts/fact-commands-verify.mjs +25 -8
  385. package/dist/skills/ulw-research/scripts/fact-commands.mjs +35 -16
  386. package/dist/skills/ulw-research/scripts/fact-derive-2.test.ts +149 -0
  387. package/dist/skills/ulw-research/scripts/fact-derive.mjs +7 -2
  388. package/dist/skills/ulw-research/scripts/fact-derive.test.ts +7 -192
  389. package/dist/skills/ulw-research/scripts/fact-fill.mjs +6 -4
  390. package/dist/skills/ulw-research/scripts/fact-ledger-kinds.mjs +6 -7
  391. package/dist/skills/ulw-research/scripts/fact-ledger-kinds.test.ts +2 -1
  392. package/dist/skills/ulw-research/scripts/fact-ledger-legacy.test.ts +2 -1
  393. package/dist/skills/ulw-research/scripts/fact-locate.mjs +15 -9
  394. package/dist/skills/ulw-research/scripts/fact-unit-dimensions-2.test.ts +149 -0
  395. package/dist/skills/ulw-research/scripts/fact-unit-dimensions.test.ts +4 -168
  396. package/dist/skills/ulw-research/scripts/fact-unit-rules.test.ts +3 -229
  397. package/dist/skills/ulw-research/scripts/fidelity-claims.mjs +4 -3
  398. package/dist/skills/ulw-research/scripts/fidelity-csv.mjs +32 -0
  399. package/dist/skills/ulw-research/scripts/fidelity-lexicon.mjs +1 -1
  400. package/dist/skills/ulw-research/scripts/fidelity-originals.mjs +161 -0
  401. package/dist/skills/ulw-research/scripts/fidelity-policy.mjs +4 -4
  402. package/dist/skills/ulw-research/scripts/fidelity-records.mjs +81 -14
  403. package/dist/skills/ulw-research/scripts/fidelity-snapshot-readability.mjs +49 -0
  404. package/dist/skills/ulw-research/scripts/fidelity-sources.mjs +76 -0
  405. package/dist/skills/ulw-research/scripts/fidelity-trace.mjs +25 -11
  406. package/dist/skills/ulw-research/scripts/fidelity-value-unit.mjs +202 -0
  407. package/dist/skills/ulw-research/scripts/fidelity-values.mjs +40 -39
  408. package/dist/skills/ulw-research/scripts/fidelity-values.test.ts +8 -29
  409. package/dist/skills/ulw-research/scripts/gates-fidelity.mjs +8 -6
  410. package/dist/skills/ulw-research/scripts/gates-static-headings.test.ts +17 -0
  411. package/dist/skills/ulw-research/scripts/gates-static.mjs +10 -1
  412. package/dist/skills/ulw-research/scripts/html-lite.mjs +6 -2
  413. package/dist/skills/ulw-research/scripts/html-markup.mjs +2 -2
  414. package/dist/skills/ulw-research/scripts/html-text-map.mjs +140 -0
  415. package/dist/skills/ulw-research/scripts/html-text-map.test.ts +148 -0
  416. package/dist/skills/ulw-research/scripts/markdown-closers.mjs +126 -0
  417. package/dist/skills/ulw-research/scripts/md-lite-boundaries.test.ts +46 -0
  418. package/dist/skills/ulw-research/scripts/md-lite.mjs +1 -1
  419. package/dist/skills/ulw-research/scripts/number-grammar.mjs +33 -0
  420. package/dist/skills/ulw-research/scripts/number-grammar.test.ts +36 -0
  421. package/dist/skills/ulw-research/scripts/numerals.mjs +18 -7
  422. package/dist/skills/ulw-research/scripts/numerals.test.ts +3 -0
  423. package/dist/skills/ulw-research/scripts/outcome-start.mjs +66 -0
  424. package/dist/skills/ulw-research/scripts/outcome-start.test.ts +109 -0
  425. package/dist/skills/ulw-research/scripts/outcome.mjs +11 -22
  426. package/dist/skills/ulw-research/scripts/page-source-locator.test.ts +187 -0
  427. package/dist/skills/ulw-research/scripts/placeholder.mjs +18 -6
  428. package/dist/skills/ulw-research/scripts/polish-apply.mjs +3 -2
  429. package/dist/skills/ulw-research/scripts/polish-markup.test.ts +15 -1
  430. package/dist/skills/ulw-research/scripts/polish-partial.test.ts +42 -0
  431. package/dist/skills/ulw-research/scripts/raw-decode.mjs +110 -0
  432. package/dist/skills/ulw-research/scripts/raw-locator.mjs +47 -0
  433. package/dist/skills/ulw-research/scripts/raw-snapshot.test.ts +139 -0
  434. package/dist/skills/ulw-research/scripts/report-tools-2.test.ts +233 -0
  435. package/dist/skills/ulw-research/scripts/report-tools-3.test.ts +141 -0
  436. package/dist/skills/ulw-research/scripts/report-tools-4.test.ts +135 -0
  437. package/dist/skills/ulw-research/scripts/report-tools-5.test.ts +231 -0
  438. package/dist/skills/ulw-research/scripts/report-tools-commands.mjs +1 -1
  439. package/dist/skills/ulw-research/scripts/report-tools.mjs +7 -1
  440. package/dist/skills/ulw-research/scripts/report-tools.test.ts +5 -800
  441. package/dist/skills/ulw-research/scripts/snapshot-readability.test.ts +116 -0
  442. package/dist/skills/ulw-research/scripts/source-commands.mjs +79 -26
  443. package/dist/skills/ulw-research/scripts/source-integrity.test.ts +243 -0
  444. package/dist/skills/ulw-research/scripts/source-refresh.mjs +82 -0
  445. package/dist/skills/ulw-research/scripts/source-snapshot.mjs +73 -69
  446. package/dist/skills/ulw-research/scripts/source-snapshot.test.ts +7 -4
  447. package/dist/skills/ulw-research/scripts/source-view.mjs +89 -0
  448. package/dist/skills/ulw-research/scripts/sources-citation.mjs +203 -0
  449. package/dist/skills/ulw-research/scripts/sources-citation.test.ts +236 -0
  450. package/dist/skills/ulw-research/scripts/tests/contracts-support.ts +147 -0
  451. package/dist/skills/ulw-research/scripts/tests/delivery-barrier-session.ts +59 -0
  452. package/dist/skills/ulw-research/scripts/tests/derive-clock.ts +4 -0
  453. package/dist/skills/ulw-research/scripts/tests/fact-derive-support.ts +65 -0
  454. package/dist/skills/ulw-research/scripts/tests/fact-unit-dimensions-support.ts +41 -0
  455. package/dist/skills/ulw-research/scripts/tests/fact-unit-rules-support.ts +241 -0
  456. package/dist/skills/ulw-research/scripts/tests/fidelity-values-support.ts +30 -0
  457. package/dist/skills/ulw-research/scripts/tests/fixtures/conversion-probe.html +14 -0
  458. package/dist/skills/ulw-research/scripts/tests/fixtures/sources-shapes.html +20 -0
  459. package/dist/skills/ulw-research/scripts/tests/numeral-classes.ts +196 -0
  460. package/dist/skills/ulw-research/scripts/tests/report-tools-support.ts +182 -0
  461. package/dist/skills/ulw-research/scripts/tests/value-mode-support.ts +48 -0
  462. package/dist/skills/ulw-research/scripts/units.mjs +14 -3
  463. package/dist/skills/ulw-research/scripts/units.test.ts +10 -0
  464. package/dist/skills/ulw-research/scripts/value-mode-unit-classes.test.ts +255 -0
  465. package/dist/skills/ulw-research/scripts/value-mode-unit.test.ts +179 -0
  466. package/dist/skills/ulw-research/scripts/value-rules-cli.test.ts +157 -0
  467. package/dist/skills/ulw-research/scripts/value-rules-followups.test.ts +72 -0
  468. package/dist/skills/ulw-research/scripts/value-rules-priority.test.ts +80 -0
  469. package/dist/skills/visual-qa/SKILL.md +12 -1
  470. package/dist/tools/delegate-task/executor-types.d.ts +1 -0
  471. package/dist/tools/delegate-task/sync-session-existence.d.ts +4 -0
  472. package/dist/tools/delegate-task/types.d.ts +1 -0
  473. package/dist/tools/skill/description-formatter.d.ts +2 -1
  474. package/dist/tools/skill/types.d.ts +6 -0
  475. package/dist/tui.js +245 -58
  476. package/package.json +24 -20
  477. package/packages/git-bash-mcp/package.json +1 -1
  478. package/packages/lsp-core/src/lsp/config-loader.ts +18 -2
  479. package/packages/lsp-core/src/lsp/host-js-runtime.test.ts +150 -0
  480. package/packages/lsp-core/src/lsp/host-js-runtime.ts +57 -0
  481. package/packages/lsp-core/src/lsp/server-definitions.ts +10 -0
  482. package/packages/lsp-core/src/lsp/server-resolution.ts +9 -1
  483. package/packages/lsp-core/src/lsp/typescript-server-defaults.test.ts +84 -0
  484. package/packages/lsp-daemon/dist/cli.js +81 -15
  485. package/packages/lsp-daemon/dist/client.js +74 -8
  486. package/packages/lsp-daemon/dist/index.js +76 -10
  487. package/packages/lsp-tools-mcp/dist/cli.js +74 -8
  488. package/packages/lsp-tools-mcp/dist/mcp.js +74 -8
  489. package/packages/lsp-tools-mcp/dist/tools.js +74 -8
  490. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  491. package/packages/omo-codex/plugin/README.md +1 -1
  492. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +20 -4
  493. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  494. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  495. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  496. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  497. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  498. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  499. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  500. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  501. package/packages/omo-codex/plugin/components/lcx/skills/lcx-contribute-bug-fix/SKILL.md +51 -55
  502. package/packages/omo-codex/plugin/components/lcx/skills/lcx-contribute-bug-fix/agents/openai.yaml +1 -1
  503. package/packages/omo-codex/plugin/components/lcx/skills/lcx-report-bug/SKILL.md +7 -7
  504. package/packages/omo-codex/plugin/components/lcx/skills/lcx-report-bug/agents/openai.yaml +1 -1
  505. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  506. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +77 -13
  507. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  508. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  509. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  510. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  511. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  512. package/packages/omo-codex/plugin/components/teammode/package.json +2 -2
  513. package/packages/omo-codex/plugin/components/telemetry/README.md +2 -2
  514. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +85 -16
  515. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +85 -20
  516. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  517. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  518. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +2 -9
  519. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -13
  520. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +0 -2
  521. package/packages/omo-codex/plugin/components/telemetry/test/codex-hook-diagnostics.test.ts +0 -3
  522. package/packages/omo-codex/plugin/components/telemetry/test/codex-hook.test.ts +17 -9
  523. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +3 -0
  524. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  525. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  526. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
  527. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  528. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  529. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +3 -0
  530. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  531. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  532. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  533. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  534. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  535. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  536. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  537. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  538. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  539. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  540. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  541. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  542. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  543. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  544. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  545. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  546. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  547. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  548. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  549. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  550. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  551. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  552. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  553. package/packages/omo-codex/plugin/package-lock.json +16 -16
  554. package/packages/omo-codex/plugin/package.json +1 -1
  555. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +16 -1
  556. package/packages/omo-codex/plugin/shared/package.json +1 -1
  557. package/packages/omo-codex/plugin/skills/ast-grep/README.md +1 -1
  558. package/packages/omo-codex/plugin/skills/ast-grep/install.ps1 +5 -3
  559. package/packages/omo-codex/plugin/skills/ast-grep/install.sh +4 -5
  560. package/packages/omo-codex/plugin/skills/ast-grep/references/install.md +2 -2
  561. package/packages/omo-codex/plugin/skills/ast-grep/scripts/ast_grep_helper.py +13 -3
  562. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +24 -33
  563. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +3 -3
  564. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +5 -4
  565. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +11 -11
  566. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +2 -2
  567. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/codex.md +4 -4
  568. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +1 -1
  569. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/find-agent-sessions.py +6 -3
  570. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +105 -2
  571. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +40 -14
  572. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +2 -2
  573. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +2 -1
  574. package/packages/omo-codex/plugin/skills/frontend/references/design/component-catalogs.md +14 -10
  575. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +22 -9
  576. package/packages/omo-codex/plugin/skills/frontend/references/design/grounding.md +29 -0
  577. package/packages/omo-codex/plugin/skills/frontend/references/perfection/craft-floor.md +59 -0
  578. package/packages/omo-codex/plugin/skills/frontend/references/perfection/detect.md +52 -0
  579. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/design_system.py +2 -0
  580. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/search.py +2 -0
  581. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/cli.ts +70 -0
  582. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/config.ts +53 -0
  583. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/characters.ts +2 -0
  584. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/color.ts +150 -0
  585. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/page.ts +84 -0
  586. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/shadow.ts +40 -0
  587. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/core/source.ts +33 -0
  588. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/detect.ts +77 -0
  589. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/index.ts +23 -0
  590. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/lint.ts +98 -0
  591. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/render/probe-placement.ts +50 -0
  592. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/render/renderer.ts +37 -0
  593. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/render/webview.ts +71 -0
  594. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/report.ts +29 -0
  595. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rule.ts +42 -0
  596. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/ai-color-palette.ts +83 -0
  597. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/cream-palette.ts +35 -0
  598. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/dark-glow.ts +44 -0
  599. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/design-system-color.ts +35 -0
  600. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/gradient-text.ts +59 -0
  601. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/gray-on-color.ts +38 -0
  602. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/index.ts +15 -0
  603. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/low-contrast.ts +57 -0
  604. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/radial-halo.ts +31 -0
  605. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.ts +33 -0
  606. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/animation-opacity.ts +78 -0
  607. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/color-path.ts +15 -0
  608. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/contrast-pairs.ts +54 -0
  609. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/contrast-role.ts +76 -0
  610. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/glow-forms.ts +56 -0
  611. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/gradient-samples.ts +134 -0
  612. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/gradients.ts +91 -0
  613. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/mockup-roots.ts +63 -0
  614. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/page-ignore.ts +7 -0
  615. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/painted-text.ts +141 -0
  616. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/palette-roles.ts +58 -0
  617. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/placeholder-contrast.ts +25 -0
  618. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/stock-accent.ts +31 -0
  619. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/color/support/text-colors.ts +80 -0
  620. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.ts +20 -0
  621. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/broken-image.ts +17 -0
  622. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.ts +46 -0
  623. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/index.ts +15 -0
  624. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.ts +33 -0
  625. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.ts +34 -0
  626. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/repeated-container-text.ts +56 -0
  627. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/script-error.ts +38 -0
  628. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/skipped-heading.ts +81 -0
  629. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/support/numbered-label.ts +94 -0
  630. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/support/page-text.ts +37 -0
  631. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.ts +21 -0
  632. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.ts +48 -0
  633. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.ts +14 -0
  634. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/bounce-easing.ts +83 -0
  635. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/buried-raster.ts +72 -0
  636. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.ts +34 -0
  637. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/design-system-radius.ts +31 -0
  638. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.ts +66 -0
  639. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.ts +31 -0
  640. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.ts +19 -0
  641. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.ts +92 -0
  642. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/index.ts +38 -0
  643. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.ts +69 -0
  644. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/marquee.ts +51 -0
  645. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.ts +41 -0
  646. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.ts +72 -0
  647. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.ts +25 -0
  648. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.ts +58 -0
  649. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/side-tab.ts +17 -0
  650. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/appearance.ts +110 -0
  651. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/assert-cases.ts +25 -0
  652. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/borders.ts +150 -0
  653. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/clip-geometry.ts +151 -0
  654. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/css-candidates.ts +66 -0
  655. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/curve-samples.ts +55 -0
  656. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/gradient-pattern.ts +40 -0
  657. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/keyframes.ts +134 -0
  658. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/labels.ts +85 -0
  659. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/decoration/support/raster-state.ts +51 -0
  660. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/index.ts +16 -0
  661. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.ts +62 -0
  662. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.ts +15 -0
  663. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.ts +63 -0
  664. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/cramped-padding.ts +97 -0
  665. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.ts +47 -0
  666. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.ts +43 -0
  667. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/heading-rhythm.ts +30 -0
  668. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/index.ts +21 -0
  669. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.ts +32 -0
  670. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/nested-cards.ts +38 -0
  671. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/straggler.ts +28 -0
  672. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/cards.ts +114 -0
  673. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/clipping.ts +71 -0
  674. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/declared-mockups.ts +46 -0
  675. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/geometry.ts +73 -0
  676. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/hidden-interface.ts +35 -0
  677. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/layout-cases.ts +23 -0
  678. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/line-breaks.ts +32 -0
  679. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/motion.ts +77 -0
  680. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/padding.ts +93 -0
  681. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/support/rhythm.ts +161 -0
  682. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/text-occlusion.ts +84 -0
  683. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/text-overflow.ts +72 -0
  684. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.ts +22 -0
  685. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/layout/viewport-reflow.ts +33 -0
  686. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/ai-color-palette.ts +11 -0
  687. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.ts +14 -0
  688. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.ts +20 -0
  689. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/bounce-easing.ts +21 -0
  690. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/broken-image.ts +16 -0
  691. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/codex-grid-background.ts +18 -0
  692. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/dark-glow.ts +21 -0
  693. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/em-dash-overuse.ts +15 -0
  694. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/gradient-text.ts +11 -0
  695. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/gray-on-color.ts +13 -0
  696. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/index.ts +19 -0
  697. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/marketing-buzzword.ts +17 -0
  698. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/marquee.ts +12 -0
  699. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/monotonous-spacing.ts +22 -0
  700. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/overused-font.ts +16 -0
  701. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/radial-halo.ts +14 -0
  702. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/side-tab.ts +58 -0
  703. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/accent-scans.ts +78 -0
  704. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/check-source.ts +6 -0
  705. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/corners.ts +105 -0
  706. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/css-effects.ts +81 -0
  707. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/css-scopes.ts +131 -0
  708. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/image-tags.ts +113 -0
  709. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/js-punctuation.ts +34 -0
  710. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/markup-scope.ts +44 -0
  711. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/source-color.ts +42 -0
  712. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/source-shadow.ts +15 -0
  713. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/source/support/source-text.ts +110 -0
  714. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/all-caps-body.ts +15 -0
  715. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/design-system-font-size.ts +23 -0
  716. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/design-system-font.ts +24 -0
  717. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.ts +18 -0
  718. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.ts +26 -0
  719. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/index.ts +21 -0
  720. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/italic-serif-display.ts +24 -0
  721. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/justified-text.ts +32 -0
  722. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/line-length.ts +28 -0
  723. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/oversized-h1.ts +20 -0
  724. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/overused-font.ts +45 -0
  725. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/drawn-enlargement.ts +48 -0
  726. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/fading-text.ts +48 -0
  727. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/flex-runs.ts +16 -0
  728. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/font-family.ts +28 -0
  729. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/painted-text.ts +81 -0
  730. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/svg-size.ts +57 -0
  731. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/text-context.ts +112 -0
  732. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/text-lines.ts +43 -0
  733. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/support/type-hierarchy.ts +48 -0
  734. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/tight-leading.ts +47 -0
  735. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/tiny-text.ts +23 -0
  736. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.ts +28 -0
  737. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/rules/typography/wide-tracking.ts +26 -0
  738. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/snapshot/collect.ts +158 -0
  739. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/snapshot/style-props.ts +25 -0
  740. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/testing/build-snapshot.ts +78 -0
  741. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/tsconfig.json +19 -0
  742. package/packages/omo-codex/plugin/skills/frontend/scripts/detect/types.ts +124 -0
  743. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +51 -55
  744. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/agents/openai.yaml +1 -1
  745. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +7 -7
  746. package/packages/omo-codex/plugin/skills/lcx-report-bug/agents/openai.yaml +1 -1
  747. package/packages/omo-codex/plugin/skills/programming/SKILL.md +15 -74
  748. package/packages/omo-codex/plugin/skills/programming/references/go/README.md +1 -1
  749. package/packages/omo-codex/plugin/skills/programming/references/go/bootstrap.md +2 -2
  750. package/packages/omo-codex/plugin/skills/programming/references/python/README.md +4 -4
  751. package/packages/omo-codex/plugin/skills/programming/references/python/one-liners.md +5 -5
  752. package/packages/omo-codex/plugin/skills/programming/references/testing/README.md +82 -0
  753. package/packages/omo-codex/plugin/skills/programming/references/testing/junk-classes.md +56 -0
  754. package/packages/omo-codex/plugin/skills/programming/references/typescript/README.md +1 -2
  755. package/packages/omo-codex/plugin/skills/programming/scripts/go/new-project.ts +197 -0
  756. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-project.ts +231 -0
  757. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-script.ts +134 -0
  758. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.ts +215 -0
  759. package/packages/omo-codex/plugin/skills/programming/scripts/shared/run-tool.ts +19 -0
  760. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +5 -4
  761. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +2 -2
  762. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__main__.py +9 -6
  763. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/summary.py +1 -1
  764. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  765. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +4 -2
  766. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +3 -0
  767. package/packages/omo-codex/plugin/skills/ulw-research/AGENTS.md +8 -4
  768. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +7 -316
  769. package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +23 -21
  770. package/packages/omo-codex/plugin/skills/ulw-research/references/fact-ledger-grammar.md +7 -3
  771. package/packages/omo-codex/plugin/skills/ulw-research/references/fact-ledger.md +42 -8
  772. package/packages/omo-codex/plugin/skills/ulw-research/references/fidelity-claim-kinds.md +1 -1
  773. package/packages/omo-codex/plugin/skills/ulw-research/references/markdown-blocks.md +12 -0
  774. package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +12 -5
  775. package/packages/omo-codex/plugin/skills/ulw-research/references/research-collection.md +195 -0
  776. package/packages/omo-codex/plugin/skills/ulw-research/references/research-delivery.md +123 -0
  777. package/packages/omo-codex/plugin/skills/ulw-research/scripts/claim-kinds.mjs +33 -5
  778. package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +13 -4
  779. package/packages/omo-codex/plugin/skills/ulw-research/scripts/conversion-probe.mjs +229 -0
  780. package/packages/omo-codex/plugin/skills/ulw-research/scripts/css-hiding.mjs +158 -0
  781. package/packages/omo-codex/plugin/skills/ulw-research/scripts/css-lite.mjs +4 -2
  782. package/packages/omo-codex/plugin/skills/ulw-research/scripts/entities.mjs +13 -4
  783. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-fill.mjs +11 -1
  784. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-meaning.mjs +13 -9
  785. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-polish.mjs +40 -18
  786. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands-verify.mjs +25 -8
  787. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-commands.mjs +35 -16
  788. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-derive.mjs +7 -2
  789. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-fill.mjs +6 -4
  790. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-ledger-kinds.mjs +6 -7
  791. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fact-locate.mjs +15 -9
  792. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-claims.mjs +4 -3
  793. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-csv.mjs +32 -0
  794. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-lexicon.mjs +1 -1
  795. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-originals.mjs +161 -0
  796. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-policy.mjs +4 -4
  797. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-records.mjs +81 -14
  798. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-snapshot-readability.mjs +49 -0
  799. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-sources.mjs +76 -0
  800. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-trace.mjs +25 -11
  801. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-value-unit.mjs +202 -0
  802. package/packages/omo-codex/plugin/skills/ulw-research/scripts/fidelity-values.mjs +40 -39
  803. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-fidelity.mjs +8 -6
  804. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-static.mjs +10 -1
  805. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-lite.mjs +6 -2
  806. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-markup.mjs +2 -2
  807. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-text-map.mjs +140 -0
  808. package/packages/omo-codex/plugin/skills/ulw-research/scripts/markdown-closers.mjs +126 -0
  809. package/packages/omo-codex/plugin/skills/ulw-research/scripts/md-lite.mjs +1 -1
  810. package/packages/omo-codex/plugin/skills/ulw-research/scripts/number-grammar.mjs +33 -0
  811. package/packages/omo-codex/plugin/skills/ulw-research/scripts/numerals.mjs +18 -7
  812. package/packages/omo-codex/plugin/skills/ulw-research/scripts/outcome-start.mjs +66 -0
  813. package/packages/omo-codex/plugin/skills/ulw-research/scripts/outcome.mjs +11 -22
  814. package/packages/omo-codex/plugin/skills/ulw-research/scripts/placeholder.mjs +18 -6
  815. package/packages/omo-codex/plugin/skills/ulw-research/scripts/polish-apply.mjs +3 -2
  816. package/packages/omo-codex/plugin/skills/ulw-research/scripts/raw-decode.mjs +110 -0
  817. package/packages/omo-codex/plugin/skills/ulw-research/scripts/raw-locator.mjs +47 -0
  818. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools-commands.mjs +1 -1
  819. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools.mjs +7 -1
  820. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-commands.mjs +79 -26
  821. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-refresh.mjs +82 -0
  822. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-snapshot.mjs +73 -69
  823. package/packages/omo-codex/plugin/skills/ulw-research/scripts/source-view.mjs +89 -0
  824. package/packages/omo-codex/plugin/skills/ulw-research/scripts/sources-citation.mjs +203 -0
  825. package/packages/omo-codex/plugin/skills/ulw-research/scripts/units.mjs +14 -3
  826. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +12 -1
  827. package/packages/omo-codex/plugin/test/auto-update.test.mjs +62 -0
  828. package/packages/omo-codex/plugin/test/payload-equivalence.test.mjs +18 -6
  829. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +4 -3
  830. package/packages/omo-codex/scripts/install-dist/install-local.mjs +413 -245
  831. package/packages/prompts-core/prompts/ultrawork/codex.md +3 -0
  832. package/packages/shared-skills/skill-source-filter.mjs +6 -2
  833. package/packages/shared-skills/skills/ast-grep/README.md +1 -1
  834. package/packages/shared-skills/skills/ast-grep/install.ps1 +5 -3
  835. package/packages/shared-skills/skills/ast-grep/install.sh +4 -5
  836. package/packages/shared-skills/skills/ast-grep/references/install.md +2 -2
  837. package/packages/shared-skills/skills/ast-grep/scripts/ast_grep_helper.py +13 -3
  838. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +24 -33
  839. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +3 -3
  840. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +5 -4
  841. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +11 -11
  842. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +2 -2
  843. package/packages/shared-skills/skills/coding-agent-sessions/references/codex.md +4 -4
  844. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +1 -1
  845. package/packages/shared-skills/skills/coding-agent-sessions/scripts/find-agent-sessions.py +6 -3
  846. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +105 -2
  847. package/packages/shared-skills/skills/frontend/SKILL.md +40 -14
  848. package/packages/shared-skills/skills/frontend/references/design/README.md +2 -2
  849. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +2 -1
  850. package/packages/shared-skills/skills/frontend/references/design/component-catalogs.md +14 -10
  851. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +22 -9
  852. package/packages/shared-skills/skills/frontend/references/design/grounding.md +29 -0
  853. package/packages/shared-skills/skills/frontend/references/perfection/craft-floor.md +59 -0
  854. package/packages/shared-skills/skills/frontend/references/perfection/detect.md +52 -0
  855. package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/design_system.py +2 -0
  856. package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/search.py +2 -0
  857. package/packages/shared-skills/skills/frontend/scripts/detect/cli.ts +70 -0
  858. package/packages/shared-skills/skills/frontend/scripts/detect/config.test.ts +26 -0
  859. package/packages/shared-skills/skills/frontend/scripts/detect/config.ts +53 -0
  860. package/packages/shared-skills/skills/frontend/scripts/detect/core/characters.ts +2 -0
  861. package/packages/shared-skills/skills/frontend/scripts/detect/core/color.test.ts +29 -0
  862. package/packages/shared-skills/skills/frontend/scripts/detect/core/color.ts +150 -0
  863. package/packages/shared-skills/skills/frontend/scripts/detect/core/page.ts +84 -0
  864. package/packages/shared-skills/skills/frontend/scripts/detect/core/shadow.ts +40 -0
  865. package/packages/shared-skills/skills/frontend/scripts/detect/core/source.ts +33 -0
  866. package/packages/shared-skills/skills/frontend/scripts/detect/detect.ts +77 -0
  867. package/packages/shared-skills/skills/frontend/scripts/detect/index.ts +23 -0
  868. package/packages/shared-skills/skills/frontend/scripts/detect/lint.test.ts +27 -0
  869. package/packages/shared-skills/skills/frontend/scripts/detect/lint.ts +98 -0
  870. package/packages/shared-skills/skills/frontend/scripts/detect/render/probe-placement.test.ts +19 -0
  871. package/packages/shared-skills/skills/frontend/scripts/detect/render/probe-placement.ts +50 -0
  872. package/packages/shared-skills/skills/frontend/scripts/detect/render/renderer.ts +37 -0
  873. package/packages/shared-skills/skills/frontend/scripts/detect/render/webview.ts +71 -0
  874. package/packages/shared-skills/skills/frontend/scripts/detect/report.ts +29 -0
  875. package/packages/shared-skills/skills/frontend/scripts/detect/rule.ts +42 -0
  876. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/ai-color-palette.test.ts +74 -0
  877. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/ai-color-palette.ts +83 -0
  878. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/cream-palette.test.ts +24 -0
  879. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/cream-palette.ts +35 -0
  880. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/dark-glow.test.ts +47 -0
  881. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/dark-glow.ts +44 -0
  882. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/design-system-color.test.ts +26 -0
  883. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/design-system-color.ts +35 -0
  884. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gradient-text.test.ts +24 -0
  885. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gradient-text.ts +59 -0
  886. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gray-on-color.test.ts +39 -0
  887. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/gray-on-color.ts +38 -0
  888. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/index.ts +15 -0
  889. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/low-contrast.test.ts +209 -0
  890. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/low-contrast.ts +57 -0
  891. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/placeholder-contrast.test.ts +62 -0
  892. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-halo.test.ts +40 -0
  893. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-halo.ts +31 -0
  894. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.test.ts +27 -0
  895. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/radial-spotlight-glow.ts +33 -0
  896. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/animation-opacity.ts +78 -0
  897. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/color-path.ts +15 -0
  898. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/contrast-pairs.ts +54 -0
  899. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/contrast-role.ts +76 -0
  900. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/glow-forms.ts +56 -0
  901. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/gradient-samples.ts +134 -0
  902. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/gradients.ts +91 -0
  903. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/mockup-roots.ts +63 -0
  904. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/page-ignore.ts +7 -0
  905. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/painted-text.ts +141 -0
  906. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/palette-roles.ts +58 -0
  907. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/placeholder-contrast.ts +25 -0
  908. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/stock-accent.ts +31 -0
  909. package/packages/shared-skills/skills/frontend/scripts/detect/rules/color/support/text-colors.ts +80 -0
  910. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.test.ts +18 -0
  911. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/aphoristic-cadence.ts +20 -0
  912. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/broken-image.test.ts +25 -0
  913. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/broken-image.ts +17 -0
  914. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.test.ts +39 -0
  915. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/em-dash-overuse.ts +46 -0
  916. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/index.ts +15 -0
  917. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.test.ts +18 -0
  918. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/marketing-buzzword.ts +33 -0
  919. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.test.ts +58 -0
  920. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/numbered-section-labels.ts +34 -0
  921. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/repeated-container-text.test.ts +43 -0
  922. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/repeated-container-text.ts +56 -0
  923. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/script-error.test.ts +48 -0
  924. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/script-error.ts +38 -0
  925. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/skipped-heading.test.ts +49 -0
  926. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/skipped-heading.ts +81 -0
  927. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/support/numbered-label.ts +94 -0
  928. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/support/page-text.ts +37 -0
  929. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.test.ts +17 -0
  930. package/packages/shared-skills/skills/frontend/scripts/detect/rules/copy/theater-slop-phrase.ts +21 -0
  931. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.test.ts +43 -0
  932. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/blinking-cursor.ts +48 -0
  933. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.test.ts +33 -0
  934. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/border-accent-on-rounded.ts +14 -0
  935. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/bounce-easing.test.ts +72 -0
  936. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/bounce-easing.ts +83 -0
  937. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/buried-raster.test.ts +95 -0
  938. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/buried-raster.ts +72 -0
  939. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.test.ts +28 -0
  940. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/codex-grid-background.ts +34 -0
  941. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/design-system-radius.test.ts +37 -0
  942. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/design-system-radius.ts +31 -0
  943. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.test.ts +59 -0
  944. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/gpt-thin-border-wide-shadow.ts +66 -0
  945. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.test.ts +45 -0
  946. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hard-offset-shadow.ts +31 -0
  947. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.test.ts +76 -0
  948. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/hero-eyebrow-chip.ts +19 -0
  949. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.test.ts +67 -0
  950. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/icon-tile-stack.ts +92 -0
  951. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/index.ts +38 -0
  952. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.test.ts +126 -0
  953. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/kicker-above-heading.ts +69 -0
  954. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/marquee.test.ts +63 -0
  955. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/marquee.ts +51 -0
  956. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.test.ts +67 -0
  957. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/organic-clip-path.ts +41 -0
  958. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.test.ts +58 -0
  959. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/pulsing-dot.ts +72 -0
  960. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.test.ts +26 -0
  961. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/repeating-stripes-gradient.ts +25 -0
  962. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.test.ts +59 -0
  963. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/shape-assembled-illustration.ts +58 -0
  964. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/side-tab.test.ts +91 -0
  965. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/side-tab.ts +17 -0
  966. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/appearance.ts +110 -0
  967. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/assert-cases.ts +25 -0
  968. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/borders.ts +150 -0
  969. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/clip-geometry.ts +151 -0
  970. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/css-candidates.ts +66 -0
  971. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/curve-samples.ts +55 -0
  972. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/gradient-pattern.ts +40 -0
  973. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/keyframes.ts +134 -0
  974. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/labels.ts +85 -0
  975. package/packages/shared-skills/skills/frontend/scripts/detect/rules/decoration/support/raster-state.ts +51 -0
  976. package/packages/shared-skills/skills/frontend/scripts/detect/rules/index.ts +16 -0
  977. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.test.ts +64 -0
  978. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/body-text-viewport-edge.ts +62 -0
  979. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.test.ts +40 -0
  980. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/clipped-overflow-container.ts +15 -0
  981. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.test.ts +62 -0
  982. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/content-hidden-at-rest.ts +63 -0
  983. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/cramped-padding.test.ts +61 -0
  984. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/cramped-padding.ts +97 -0
  985. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.test.ts +43 -0
  986. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/edge-flush-cards.ts +47 -0
  987. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.test.ts +28 -0
  988. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/first-viewport-column-overflow.ts +43 -0
  989. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/heading-rhythm.test.ts +67 -0
  990. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/heading-rhythm.ts +30 -0
  991. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/index.ts +21 -0
  992. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.test.ts +19 -0
  993. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/monotonous-spacing.ts +32 -0
  994. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/nested-cards.test.ts +60 -0
  995. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/nested-cards.ts +38 -0
  996. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/straggler.test.ts +33 -0
  997. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/straggler.ts +28 -0
  998. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/cards.ts +114 -0
  999. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/clipping.ts +71 -0
  1000. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/declared-mockups.ts +46 -0
  1001. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/geometry.ts +73 -0
  1002. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/hidden-interface.ts +35 -0
  1003. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/layout-cases.ts +23 -0
  1004. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/line-breaks.ts +32 -0
  1005. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/motion.ts +77 -0
  1006. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/padding.ts +93 -0
  1007. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/support/rhythm.ts +161 -0
  1008. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-occlusion.test.ts +37 -0
  1009. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-occlusion.ts +84 -0
  1010. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-overflow.test.ts +83 -0
  1011. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/text-overflow.ts +72 -0
  1012. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.test.ts +22 -0
  1013. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/unbalanced-heading.ts +22 -0
  1014. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/viewport-reflow.test.ts +34 -0
  1015. package/packages/shared-skills/skills/frontend/scripts/detect/rules/layout/viewport-reflow.ts +33 -0
  1016. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/ai-color-palette.test.ts +13 -0
  1017. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/ai-color-palette.ts +11 -0
  1018. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.test.ts +12 -0
  1019. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/aphoristic-cadence.ts +14 -0
  1020. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.test.ts +14 -0
  1021. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/border-accent-on-rounded.ts +20 -0
  1022. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/bounce-easing.test.ts +19 -0
  1023. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/bounce-easing.ts +21 -0
  1024. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/broken-image.test.ts +27 -0
  1025. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/broken-image.ts +16 -0
  1026. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/codex-grid-background.test.ts +11 -0
  1027. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/codex-grid-background.ts +18 -0
  1028. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/dark-glow.test.ts +15 -0
  1029. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/dark-glow.ts +21 -0
  1030. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/em-dash-overuse.test.ts +13 -0
  1031. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/em-dash-overuse.ts +15 -0
  1032. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gradient-text.test.ts +12 -0
  1033. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gradient-text.ts +11 -0
  1034. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gray-on-color.test.ts +20 -0
  1035. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/gray-on-color.ts +13 -0
  1036. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/index.ts +19 -0
  1037. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marketing-buzzword.test.ts +12 -0
  1038. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marketing-buzzword.ts +17 -0
  1039. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marquee.test.ts +12 -0
  1040. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/marquee.ts +12 -0
  1041. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/monotonous-spacing.test.ts +13 -0
  1042. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/monotonous-spacing.ts +22 -0
  1043. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/overused-font.test.ts +21 -0
  1044. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/overused-font.ts +16 -0
  1045. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/radial-halo.test.ts +16 -0
  1046. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/radial-halo.ts +14 -0
  1047. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/side-tab.test.ts +29 -0
  1048. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/side-tab.ts +58 -0
  1049. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/accent-scans.ts +78 -0
  1050. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/check-source.ts +6 -0
  1051. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/corners.ts +105 -0
  1052. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/css-effects.ts +81 -0
  1053. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/css-scopes.ts +131 -0
  1054. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/image-tags.ts +113 -0
  1055. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/js-punctuation.ts +34 -0
  1056. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/markup-scope.ts +44 -0
  1057. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/source-color.ts +42 -0
  1058. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/source-shadow.ts +15 -0
  1059. package/packages/shared-skills/skills/frontend/scripts/detect/rules/source/support/source-text.ts +110 -0
  1060. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/all-caps-body.test.ts +24 -0
  1061. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/all-caps-body.ts +15 -0
  1062. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font-size.test.ts +21 -0
  1063. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font-size.ts +23 -0
  1064. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font.test.ts +22 -0
  1065. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/design-system-font.ts +24 -0
  1066. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.test.ts +23 -0
  1067. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/extreme-negative-tracking.ts +18 -0
  1068. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.test.ts +33 -0
  1069. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/flat-type-hierarchy.ts +26 -0
  1070. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/index.ts +21 -0
  1071. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/italic-serif-display.test.ts +24 -0
  1072. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/italic-serif-display.ts +24 -0
  1073. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/justified-text.test.ts +31 -0
  1074. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/justified-text.ts +32 -0
  1075. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/line-length.test.ts +43 -0
  1076. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/line-length.ts +28 -0
  1077. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/oversized-h1.test.ts +26 -0
  1078. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/oversized-h1.ts +20 -0
  1079. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/overused-font.test.ts +35 -0
  1080. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/overused-font.ts +45 -0
  1081. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/drawn-enlargement.ts +48 -0
  1082. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/fading-text.ts +48 -0
  1083. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/flex-runs.ts +16 -0
  1084. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/font-family.ts +28 -0
  1085. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/painted-text.test.ts +63 -0
  1086. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/painted-text.ts +81 -0
  1087. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/svg-size.ts +57 -0
  1088. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/text-context.ts +112 -0
  1089. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/text-lines.ts +43 -0
  1090. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/support/type-hierarchy.ts +48 -0
  1091. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tight-leading.test.ts +54 -0
  1092. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tight-leading.ts +47 -0
  1093. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tiny-text.test.ts +60 -0
  1094. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/tiny-text.ts +23 -0
  1095. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.test.ts +98 -0
  1096. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/undersized-ui-text.ts +28 -0
  1097. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/wide-tracking.test.ts +26 -0
  1098. package/packages/shared-skills/skills/frontend/scripts/detect/rules/typography/wide-tracking.ts +26 -0
  1099. package/packages/shared-skills/skills/frontend/scripts/detect/snapshot/collect.ts +158 -0
  1100. package/packages/shared-skills/skills/frontend/scripts/detect/snapshot/style-props.ts +25 -0
  1101. package/packages/shared-skills/skills/frontend/scripts/detect/testing/build-snapshot.ts +78 -0
  1102. package/packages/shared-skills/skills/frontend/scripts/detect/tsconfig.json +19 -0
  1103. package/packages/shared-skills/skills/frontend/scripts/detect/types.ts +124 -0
  1104. package/packages/shared-skills/skills/programming/SKILL.md +15 -74
  1105. package/packages/shared-skills/skills/programming/references/go/README.md +1 -1
  1106. package/packages/shared-skills/skills/programming/references/go/bootstrap.md +2 -2
  1107. package/packages/shared-skills/skills/programming/references/python/README.md +4 -4
  1108. package/packages/shared-skills/skills/programming/references/python/one-liners.md +5 -5
  1109. package/packages/shared-skills/skills/programming/references/testing/README.md +82 -0
  1110. package/packages/shared-skills/skills/programming/references/testing/junk-classes.md +56 -0
  1111. package/packages/shared-skills/skills/programming/references/typescript/README.md +1 -2
  1112. package/packages/shared-skills/skills/programming/scripts/go/new-project.ts +197 -0
  1113. package/packages/shared-skills/skills/programming/scripts/python/new-project.ts +231 -0
  1114. package/packages/shared-skills/skills/programming/scripts/python/new-script.ts +134 -0
  1115. package/packages/shared-skills/skills/programming/scripts/rust/new-project.ts +215 -0
  1116. package/packages/shared-skills/skills/programming/scripts/scaffolders.test.ts +96 -0
  1117. package/packages/shared-skills/skills/programming/scripts/shared/run-tool.ts +19 -0
  1118. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +5 -4
  1119. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +2 -2
  1120. package/packages/shared-skills/skills/ultimate-browsing/engine/__main__.py +9 -6
  1121. package/packages/shared-skills/skills/ultimate-browsing/engine/summary.py +1 -1
  1122. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  1123. package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +4 -2
  1124. package/packages/shared-skills/skills/ulw-research/AGENTS.md +8 -4
  1125. package/packages/shared-skills/skills/ulw-research/SKILL.md +7 -316
  1126. package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +23 -21
  1127. package/packages/shared-skills/skills/ulw-research/references/fact-ledger-grammar.md +7 -3
  1128. package/packages/shared-skills/skills/ulw-research/references/fact-ledger.md +42 -8
  1129. package/packages/shared-skills/skills/ulw-research/references/fidelity-claim-kinds.md +1 -1
  1130. package/packages/shared-skills/skills/ulw-research/references/markdown-blocks.md +12 -0
  1131. package/packages/shared-skills/skills/ulw-research/references/report-gates.md +12 -5
  1132. package/packages/shared-skills/skills/ulw-research/references/research-collection.md +195 -0
  1133. package/packages/shared-skills/skills/ulw-research/references/research-delivery.md +123 -0
  1134. package/packages/shared-skills/skills/ulw-research/scripts/claim-kinds.mjs +33 -5
  1135. package/packages/shared-skills/skills/ulw-research/scripts/claim-kinds.test.ts +37 -2
  1136. package/packages/shared-skills/skills/ulw-research/scripts/claim-prefix.test.ts +76 -0
  1137. package/packages/shared-skills/skills/ulw-research/scripts/contracts-validation.test.ts +83 -0
  1138. package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +13 -4
  1139. package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +6 -110
  1140. package/packages/shared-skills/skills/ulw-research/scripts/conversion-altered.test.ts +154 -0
  1141. package/packages/shared-skills/skills/ulw-research/scripts/conversion-originals.test.ts +297 -0
  1142. package/packages/shared-skills/skills/ulw-research/scripts/conversion-probe-classes.test.ts +361 -0
  1143. package/packages/shared-skills/skills/ulw-research/scripts/conversion-probe.mjs +229 -0
  1144. package/packages/shared-skills/skills/ulw-research/scripts/conversion-probe.test.ts +218 -0
  1145. package/packages/shared-skills/skills/ulw-research/scripts/copy-returns-polish.test.ts +4 -3
  1146. package/packages/shared-skills/skills/ulw-research/scripts/css-hiding.mjs +158 -0
  1147. package/packages/shared-skills/skills/ulw-research/scripts/css-lite.mjs +4 -2
  1148. package/packages/shared-skills/skills/ulw-research/scripts/delivery-barrier-meaning.test.ts +186 -0
  1149. package/packages/shared-skills/skills/ulw-research/scripts/delivery-barrier.test.ts +40 -87
  1150. package/packages/shared-skills/skills/ulw-research/scripts/entities.mjs +13 -4
  1151. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-fill.mjs +11 -1
  1152. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-meaning.mjs +13 -9
  1153. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-polish.mjs +40 -18
  1154. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands-verify.mjs +25 -8
  1155. package/packages/shared-skills/skills/ulw-research/scripts/fact-commands.mjs +35 -16
  1156. package/packages/shared-skills/skills/ulw-research/scripts/fact-derive-2.test.ts +149 -0
  1157. package/packages/shared-skills/skills/ulw-research/scripts/fact-derive.mjs +7 -2
  1158. package/packages/shared-skills/skills/ulw-research/scripts/fact-derive.test.ts +7 -192
  1159. package/packages/shared-skills/skills/ulw-research/scripts/fact-fill.mjs +6 -4
  1160. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-kinds.mjs +6 -7
  1161. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-kinds.test.ts +2 -1
  1162. package/packages/shared-skills/skills/ulw-research/scripts/fact-ledger-legacy.test.ts +2 -1
  1163. package/packages/shared-skills/skills/ulw-research/scripts/fact-locate.mjs +15 -9
  1164. package/packages/shared-skills/skills/ulw-research/scripts/fact-unit-dimensions-2.test.ts +149 -0
  1165. package/packages/shared-skills/skills/ulw-research/scripts/fact-unit-dimensions.test.ts +4 -168
  1166. package/packages/shared-skills/skills/ulw-research/scripts/fact-unit-rules.test.ts +3 -229
  1167. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-claims.mjs +4 -3
  1168. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-csv.mjs +32 -0
  1169. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-lexicon.mjs +1 -1
  1170. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-originals.mjs +161 -0
  1171. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-policy.mjs +4 -4
  1172. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-records.mjs +81 -14
  1173. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-snapshot-readability.mjs +49 -0
  1174. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-sources.mjs +76 -0
  1175. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-trace.mjs +25 -11
  1176. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-value-unit.mjs +202 -0
  1177. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-values.mjs +40 -39
  1178. package/packages/shared-skills/skills/ulw-research/scripts/fidelity-values.test.ts +8 -29
  1179. package/packages/shared-skills/skills/ulw-research/scripts/gates-fidelity.mjs +8 -6
  1180. package/packages/shared-skills/skills/ulw-research/scripts/gates-static-headings.test.ts +17 -0
  1181. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.mjs +10 -1
  1182. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.mjs +6 -2
  1183. package/packages/shared-skills/skills/ulw-research/scripts/html-markup.mjs +2 -2
  1184. package/packages/shared-skills/skills/ulw-research/scripts/html-text-map.mjs +140 -0
  1185. package/packages/shared-skills/skills/ulw-research/scripts/html-text-map.test.ts +148 -0
  1186. package/packages/shared-skills/skills/ulw-research/scripts/markdown-closers.mjs +126 -0
  1187. package/packages/shared-skills/skills/ulw-research/scripts/md-lite-boundaries.test.ts +46 -0
  1188. package/packages/shared-skills/skills/ulw-research/scripts/md-lite.mjs +1 -1
  1189. package/packages/shared-skills/skills/ulw-research/scripts/number-grammar.mjs +33 -0
  1190. package/packages/shared-skills/skills/ulw-research/scripts/number-grammar.test.ts +36 -0
  1191. package/packages/shared-skills/skills/ulw-research/scripts/numerals.mjs +18 -7
  1192. package/packages/shared-skills/skills/ulw-research/scripts/numerals.test.ts +3 -0
  1193. package/packages/shared-skills/skills/ulw-research/scripts/outcome-start.mjs +66 -0
  1194. package/packages/shared-skills/skills/ulw-research/scripts/outcome-start.test.ts +109 -0
  1195. package/packages/shared-skills/skills/ulw-research/scripts/outcome.mjs +11 -22
  1196. package/packages/shared-skills/skills/ulw-research/scripts/page-source-locator.test.ts +187 -0
  1197. package/packages/shared-skills/skills/ulw-research/scripts/placeholder.mjs +18 -6
  1198. package/packages/shared-skills/skills/ulw-research/scripts/polish-apply.mjs +3 -2
  1199. package/packages/shared-skills/skills/ulw-research/scripts/polish-markup.test.ts +15 -1
  1200. package/packages/shared-skills/skills/ulw-research/scripts/polish-partial.test.ts +42 -0
  1201. package/packages/shared-skills/skills/ulw-research/scripts/raw-decode.mjs +110 -0
  1202. package/packages/shared-skills/skills/ulw-research/scripts/raw-locator.mjs +47 -0
  1203. package/packages/shared-skills/skills/ulw-research/scripts/raw-snapshot.test.ts +139 -0
  1204. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-2.test.ts +233 -0
  1205. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-3.test.ts +141 -0
  1206. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-4.test.ts +135 -0
  1207. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-5.test.ts +231 -0
  1208. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-commands.mjs +1 -1
  1209. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.mjs +7 -1
  1210. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +5 -800
  1211. package/packages/shared-skills/skills/ulw-research/scripts/snapshot-readability.test.ts +116 -0
  1212. package/packages/shared-skills/skills/ulw-research/scripts/source-commands.mjs +79 -26
  1213. package/packages/shared-skills/skills/ulw-research/scripts/source-integrity.test.ts +243 -0
  1214. package/packages/shared-skills/skills/ulw-research/scripts/source-refresh.mjs +82 -0
  1215. package/packages/shared-skills/skills/ulw-research/scripts/source-snapshot.mjs +73 -69
  1216. package/packages/shared-skills/skills/ulw-research/scripts/source-snapshot.test.ts +7 -4
  1217. package/packages/shared-skills/skills/ulw-research/scripts/source-view.mjs +89 -0
  1218. package/packages/shared-skills/skills/ulw-research/scripts/sources-citation.mjs +203 -0
  1219. package/packages/shared-skills/skills/ulw-research/scripts/sources-citation.test.ts +236 -0
  1220. package/packages/shared-skills/skills/ulw-research/scripts/tests/contracts-support.ts +147 -0
  1221. package/packages/shared-skills/skills/ulw-research/scripts/tests/delivery-barrier-session.ts +59 -0
  1222. package/packages/shared-skills/skills/ulw-research/scripts/tests/derive-clock.ts +4 -0
  1223. package/packages/shared-skills/skills/ulw-research/scripts/tests/fact-derive-support.ts +65 -0
  1224. package/packages/shared-skills/skills/ulw-research/scripts/tests/fact-unit-dimensions-support.ts +41 -0
  1225. package/packages/shared-skills/skills/ulw-research/scripts/tests/fact-unit-rules-support.ts +241 -0
  1226. package/packages/shared-skills/skills/ulw-research/scripts/tests/fidelity-values-support.ts +30 -0
  1227. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/conversion-probe.html +14 -0
  1228. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/sources-shapes.html +20 -0
  1229. package/packages/shared-skills/skills/ulw-research/scripts/tests/numeral-classes.ts +196 -0
  1230. package/packages/shared-skills/skills/ulw-research/scripts/tests/report-tools-support.ts +182 -0
  1231. package/packages/shared-skills/skills/ulw-research/scripts/tests/value-mode-support.ts +48 -0
  1232. package/packages/shared-skills/skills/ulw-research/scripts/units.mjs +14 -3
  1233. package/packages/shared-skills/skills/ulw-research/scripts/units.test.ts +10 -0
  1234. package/packages/shared-skills/skills/ulw-research/scripts/value-mode-unit-classes.test.ts +255 -0
  1235. package/packages/shared-skills/skills/ulw-research/scripts/value-mode-unit.test.ts +179 -0
  1236. package/packages/shared-skills/skills/ulw-research/scripts/value-rules-cli.test.ts +157 -0
  1237. package/packages/shared-skills/skills/ulw-research/scripts/value-rules-followups.test.ts +72 -0
  1238. package/packages/shared-skills/skills/ulw-research/scripts/value-rules-priority.test.ts +80 -0
  1239. package/packages/shared-skills/skills/visual-qa/SKILL.md +12 -1
  1240. package/dist/agents/gpt-prompt-identity.d.ts +0 -3
  1241. package/dist/agents/hephaestus/gpt-5-4.d.ts +0 -24
  1242. package/dist/agents/hephaestus/gpt-5-5.d.ts +0 -2
  1243. package/dist/agents/hephaestus/gpt-5-6.d.ts +0 -2
  1244. package/dist/agents/kimi-tool-loop-guard.d.ts +0 -1
  1245. package/dist/agents/sisyphus/claude-fable-5.d.ts +0 -19
  1246. package/dist/agents/sisyphus/claude-opus-4-7.d.ts +0 -22
  1247. package/dist/agents/sisyphus/claude-opus-4-8.d.ts +0 -19
  1248. package/dist/agents/sisyphus/claude-opus-5.d.ts +0 -33
  1249. package/dist/agents/sisyphus/gemini.d.ts +0 -20
  1250. package/dist/agents/sisyphus/glm-5-2.d.ts +0 -4
  1251. package/dist/agents/sisyphus/gpt-5-4.d.ts +0 -26
  1252. package/dist/agents/sisyphus/gpt-5-5.d.ts +0 -6
  1253. package/dist/agents/sisyphus/gpt-task-system-guide.d.ts +0 -1
  1254. package/dist/agents/sisyphus/grok-4.d.ts +0 -21
  1255. package/dist/agents/sisyphus/index.d.ts +0 -31
  1256. package/dist/agents/sisyphus/kimi-k2-6.d.ts +0 -32
  1257. package/dist/agents/sisyphus/kimi-k2-7.d.ts +0 -17
  1258. package/dist/agents/sisyphus/kimi-k3-1.d.ts +0 -9
  1259. package/dist/agents/sisyphus/kimi-k3.d.ts +0 -19
  1260. package/dist/agents/sisyphus-dynamic-prompt-builder.d.ts +0 -2
  1261. package/dist/agents/sisyphus-dynamic-prompt-execution.d.ts +0 -2
  1262. package/dist/agents/sisyphus-dynamic-prompt-exploration.d.ts +0 -2
  1263. package/dist/agents/sisyphus-dynamic-prompt-role.d.ts +0 -2
  1264. package/dist/agents/sisyphus-dynamic-prompt-sections.d.ts +0 -18
  1265. package/dist/agents/sisyphus-dynamic-prompt-style.d.ts +0 -2
  1266. package/dist/agents/sisyphus-dynamic-prompt.d.ts +0 -3
  1267. package/dist/agents/sisyphus-gemini-fallback-overrides.d.ts +0 -1
  1268. package/dist/agents/sisyphus-junior/gemini.d.ts +0 -10
  1269. package/dist/agents/sisyphus-junior/glm-5-2.d.ts +0 -1
  1270. package/dist/agents/sisyphus-junior/gpt-5-4.d.ts +0 -11
  1271. package/dist/agents/sisyphus-junior/gpt-5-5.d.ts +0 -5
  1272. package/dist/agents/sisyphus-junior/gpt.d.ts +0 -9
  1273. package/dist/agents/sisyphus-junior/kimi-k2-6.d.ts +0 -13
  1274. package/dist/agents/sisyphus-junior/kimi-k2-7.d.ts +0 -11
  1275. package/dist/agents/sisyphus-junior/kimi-k3-1.d.ts +0 -6
  1276. package/dist/agents/sisyphus-junior/kimi-k3.d.ts +0 -12
  1277. package/dist/features/claude-code-agent-loader/opencode-config-agents-reader.d.ts +0 -1
  1278. package/dist/features/claude-code-command-loader/loader-cache.d.ts +0 -1
  1279. package/dist/features/claude-code-command-loader/loader.d.ts +0 -1
  1280. package/dist/features/opencode-skill-loader/config-source-discovery.d.ts +0 -1
  1281. package/dist/features/opencode-skill-loader/merger/config-skill-entry-loader.d.ts +0 -1
  1282. package/dist/features/opencode-skill-loader/opencode-config-skills-reader.d.ts +0 -1
  1283. package/dist/features/team-mode/team-layout-tmux/resolve-caller-tmux-session.d.ts +0 -1
  1284. package/dist/features/team-mode/team-registry/team-spec-input-normalizer.d.ts +0 -1
  1285. package/dist/shared/git-worktree/collect-git-diff-stats.d.ts +0 -1
  1286. package/dist/shared/git-worktree/parse-status-porcelain-line.d.ts +0 -1
  1287. package/dist/shared/migration/agent-names.d.ts +0 -1
  1288. package/dist/shared/migration/migrations-sidecar.d.ts +0 -1
  1289. package/dist/shared/skill-path-resolver.d.ts +0 -1
  1290. package/dist/shared/zip-entry-listing/powershell-zip-entry-listing.d.ts +0 -1
  1291. package/dist/shared/zip-entry-listing/zipinfo-zip-entry-listing.d.ts +0 -1
  1292. package/dist/skills/programming/scripts/go/new-project.py +0 -138
  1293. package/dist/skills/programming/scripts/python/new-project.py +0 -172
  1294. package/dist/skills/programming/scripts/python/new-script.py +0 -116
  1295. package/dist/skills/programming/scripts/rust/new-project.py +0 -178
  1296. package/packages/omo-codex/plugin/skills/programming/scripts/go/new-project.py +0 -138
  1297. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-project.py +0 -172
  1298. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-script.py +0 -116
  1299. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +0 -178
  1300. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +0 -7
  1301. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +0 -19
  1302. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +0 -1
  1303. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +0 -1128
  1304. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_fetch_chain.py +0 -77
  1305. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +0 -86
  1306. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +0 -279
  1307. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate.py +0 -252
  1308. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +0 -78
  1309. package/packages/shared-skills/skills/programming/scripts/go/new-project.py +0 -138
  1310. package/packages/shared-skills/skills/programming/scripts/python/new-project.py +0 -172
  1311. package/packages/shared-skills/skills/programming/scripts/python/new-script.py +0 -116
  1312. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +0 -178
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // omo-codex-install:59bc5768b3b3ef6732c97bec7583a523952e5e1d9fdf5d8e5fb245658043bfca:fadb66139b4d0de34630f6b4bddc87783374d2be2659a207a4bb01c2c2f852d0
2
+ // omo-codex-install:e78a4d254be2f789dccd78fb8c4c74a2919db32cd569848b6cd44245e83983d2:8c68d5ed287e088dd088a9a5c38fd78cbe258de7a7d3a31e09bd8e1f1ff90250
3
3
  var __esm = (fn, res, err) => () => {
4
4
  if (fn)
5
5
  try {
@@ -108,9 +108,9 @@ var init_atomic_write = __esm(() => {
108
108
 
109
109
  // packages/telemetry-core/src/day-claim.ts
110
110
  import { closeSync as closeSync2, mkdirSync as mkdirSync2, openSync as openSync2, readdirSync, rmSync as rmSync2 } from "node:fs";
111
- import { join as join34 } from "node:path";
111
+ import { join as join35 } from "node:path";
112
112
  function getTelemetryDayClaimFilePath(stateDir, dayUTC) {
113
- return join34(stateDir, `${CLAIM_PREFIX}${dayUTC}${CLAIM_SUFFIX}`);
113
+ return join35(stateDir, `${CLAIM_PREFIX}${dayUTC}${CLAIM_SUFFIX}`);
114
114
  }
115
115
  function claimUtcDay(stateDir, dayUTC) {
116
116
  try {
@@ -136,7 +136,7 @@ function pruneSupersededClaims(stateDir, dayUTC) {
136
136
  if (!entry.startsWith(CLAIM_PREFIX) || !entry.endsWith(CLAIM_SUFFIX))
137
137
  continue;
138
138
  try {
139
- rmSync2(join34(stateDir, entry), { force: true });
139
+ rmSync2(join35(stateDir, entry), { force: true });
140
140
  } catch {}
141
141
  }
142
142
  }
@@ -145,20 +145,20 @@ var init_day_claim = () => {};
145
145
 
146
146
  // packages/telemetry-core/src/activity-state.ts
147
147
  import { existsSync as existsSync5, mkdirSync as mkdirSync3, readFileSync as readFileSync3 } from "node:fs";
148
- import { basename as basename6, join as join35 } from "node:path";
148
+ import { basename as basename6, join as join36 } from "node:path";
149
149
  function resolveTelemetryStateDir(product, options = {}) {
150
150
  const dataDir = resolveXdgDataDir(product.cacheDirName, {
151
151
  env: options.env,
152
152
  osProvider: options.osProvider
153
153
  });
154
- const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join35(options.env.XDG_DATA_HOME, product.cacheDirName);
154
+ const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join36(options.env.XDG_DATA_HOME, product.cacheDirName);
155
155
  if (dataDir === xdgStateDir || xdgStateDir === undefined && basename6(dataDir) === product.cacheDirName) {
156
156
  return dataDir;
157
157
  }
158
- return join35(dataDir, product.cacheDirName);
158
+ return join36(dataDir, product.cacheDirName);
159
159
  }
160
160
  function getTelemetryActivityStateFilePath(stateDir) {
161
- return join35(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
161
+ return join36(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
162
162
  }
163
163
  function getDailyActiveCaptureState(input) {
164
164
  const dayUTC = getUtcDayString(input.now ?? new Date);
@@ -242,9 +242,9 @@ var DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com", DEFAULT_POSTHOG_API_KEY =
242
242
 
243
243
  // packages/telemetry-core/src/diagnostics.ts
244
244
  import { appendFileSync, existsSync as existsSync6, mkdirSync as mkdirSync4, readFileSync as readFileSync4 } from "node:fs";
245
- import { join as join36 } from "node:path";
245
+ import { join as join37 } from "node:path";
246
246
  function getTelemetryDiagnosticsFilePath(diagnosticsDir) {
247
- return join36(diagnosticsDir, DIAGNOSTICS_FILE_NAME);
247
+ return join37(diagnosticsDir, DIAGNOSTICS_FILE_NAME);
248
248
  }
249
249
  function writeTelemetryDiagnostic(input, options) {
250
250
  const now = options.now ?? new Date;
@@ -453,16 +453,43 @@ var init_event_id = __esm(() => {
453
453
  });
454
454
 
455
455
  // packages/telemetry-core/src/machine-id.ts
456
- import { createHash as createHash5 } from "node:crypto";
457
456
  import os2 from "node:os";
458
457
  function getDefaultTelemetryOsProvider() {
459
458
  return os2;
460
459
  }
461
- function getTelemetryDistinctId(machineIdPrefix, osProvider = getDefaultTelemetryOsProvider()) {
462
- return createHash5("sha256").update(`${machineIdPrefix}${osProvider.hostname()}`).digest("hex");
463
- }
464
460
  var init_machine_id = () => {};
465
461
 
462
+ // packages/telemetry-core/src/terminal-program.ts
463
+ function isKnownTerminalProgram(value) {
464
+ return KNOWN_TERMINAL_PROGRAMS.some((known) => known === value);
465
+ }
466
+ function toTelemetryTerminalProgram(termProgram) {
467
+ if (termProgram === undefined || termProgram === "")
468
+ return;
469
+ return isKnownTerminalProgram(termProgram) ? termProgram : "other";
470
+ }
471
+ var KNOWN_TERMINAL_PROGRAMS;
472
+ var init_terminal_program = __esm(() => {
473
+ KNOWN_TERMINAL_PROGRAMS = [
474
+ "Apple_Terminal",
475
+ "iTerm.app",
476
+ "vscode",
477
+ "cursor",
478
+ "windsurf",
479
+ "zed",
480
+ "WezTerm",
481
+ "ghostty",
482
+ "tmux",
483
+ "Hyper",
484
+ "WarpTerminal",
485
+ "kitty",
486
+ "alacritty",
487
+ "Tabby",
488
+ "rio",
489
+ "mintty"
490
+ ];
491
+ });
492
+
466
493
  // packages/telemetry-core/src/injected-client.ts
467
494
  function isTelemetryClientEnabled(input) {
468
495
  const env = input.env ?? process.env;
@@ -565,12 +592,16 @@ function getSharedProperties(input) {
565
592
  total_memory_gb: Math.round(osProvider.totalmem() / 1024 / 1024 / 1024),
566
593
  locale: Intl.DateTimeFormat().resolvedOptions().locale,
567
594
  timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
568
- shell: process.env.SHELL,
595
+ shell: getShellName(process.env.SHELL),
569
596
  ci: Boolean(process.env.CI),
570
- terminal: process.env.TERM_PROGRAM,
597
+ terminal: toTelemetryTerminalProgram(process.env.TERM_PROGRAM),
571
598
  ...input.product.additionalProperties
572
599
  };
573
600
  }
601
+ function getShellName(shellPath) {
602
+ const name = shellPath?.split(/[\\/]/).pop()?.replace(/\.exe$/i, "");
603
+ return name ? name : undefined;
604
+ }
574
605
  function getSafeCpuInfo(osProvider, input) {
575
606
  try {
576
607
  const cpuInfo = osProvider.cpus();
@@ -595,6 +626,7 @@ var NO_OP_CLIENT;
595
626
  var init_injected_client = __esm(() => {
596
627
  init_env();
597
628
  init_machine_id();
629
+ init_terminal_program();
598
630
  NO_OP_CLIENT = {
599
631
  enabled: false,
600
632
  trackActive: () => {
@@ -610,7 +642,7 @@ var init_injected_client = __esm(() => {
610
642
  });
611
643
 
612
644
  // node_modules/.bun/posthog-node@5.52.4/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/module.node.mjs
613
- import { dirname as dirname11, posix as posix3, sep as sep7 } from "node:path";
645
+ import { dirname as dirname11, posix as posix3, sep as sep8 } from "node:path";
614
646
  function createModulerModifier() {
615
647
  const getModuleFromFileName = createGetModuleFromFilename();
616
648
  return async (frames) => {
@@ -619,7 +651,7 @@ function createModulerModifier() {
619
651
  return frames;
620
652
  };
621
653
  }
622
- function createGetModuleFromFilename(basePath = process.argv[1] ? dirname11(process.argv[1]) : process.cwd(), isWindows = sep7 === "\\") {
654
+ function createGetModuleFromFilename(basePath = process.argv[1] ? dirname11(process.argv[1]) : process.cwd(), isWindows = sep8 === "\\") {
623
655
  const normalizedBase = isWindows ? normalizeWindowsPath(basePath) : basePath;
624
656
  return (filename) => {
625
657
  if (!filename)
@@ -6979,16 +7011,16 @@ var init_context_lines_node = __esm(() => {
6979
7011
  });
6980
7012
 
6981
7013
  // node_modules/.bun/posthog-node@5.52.4/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/relative-path.node.mjs
6982
- import { isAbsolute as isAbsolute8, relative as relative4, sep as sep8 } from "node:path";
7014
+ import { isAbsolute as isAbsolute8, relative as relative5, sep as sep9 } from "node:path";
6983
7015
  function createRelativePathModifier(basePath = process.cwd()) {
6984
- const isWindows = sep8 === "\\";
7016
+ const isWindows = sep9 === "\\";
6985
7017
  const toUnix = (p) => isWindows ? p.replace(/\\/g, "/") : p;
6986
7018
  const normalizedBase = toUnix(basePath);
6987
7019
  return async (frames) => {
6988
7020
  for (const frame of frames)
6989
7021
  if (!(!frame.filename || frame.filename.startsWith("node:") || frame.filename.startsWith("data:"))) {
6990
7022
  if (isAbsolute8(frame.filename))
6991
- frame.filename = toUnix(relative4(normalizedBase, toUnix(frame.filename)));
7023
+ frame.filename = toUnix(relative5(normalizedBase, toUnix(frame.filename)));
6992
7024
  }
6993
7025
  return frames;
6994
7026
  };
@@ -10086,6 +10118,55 @@ var init_posthog_transport = __esm(() => {
10086
10118
  // packages/telemetry-core/src/events.ts
10087
10119
  var init_events = () => {};
10088
10120
 
10121
+ // packages/telemetry-core/src/install-id.ts
10122
+ import { createHash as createHash5, randomBytes } from "node:crypto";
10123
+ import { mkdirSync as mkdirSync5, readFileSync as readFileSync5, writeFileSync as writeFileSync2 } from "node:fs";
10124
+ import { dirname as dirname12, join as join38 } from "node:path";
10125
+ function getTelemetryInstallDistinctId(stateDir) {
10126
+ return createHash5("sha256").update(readOrCreateInstallId(join38(stateDir, TELEMETRY_INSTALL_ID_FILE_NAME))).digest("hex");
10127
+ }
10128
+ function readOrCreateInstallId(path) {
10129
+ const persisted = readInstallId(path);
10130
+ if (persisted !== undefined)
10131
+ return persisted;
10132
+ const installId = randomBytes(32).toString("hex");
10133
+ try {
10134
+ mkdirSync5(dirname12(path), { recursive: true });
10135
+ writeFileSync2(path, `${installId}
10136
+ `, { flag: "wx", mode: 384 });
10137
+ fallbackInstallIds.delete(path);
10138
+ return installId;
10139
+ } catch {
10140
+ const concurrentlyCreated = readInstallId(path);
10141
+ if (concurrentlyCreated !== undefined)
10142
+ return concurrentlyCreated;
10143
+ try {
10144
+ writeFileSync2(path, `${installId}
10145
+ `, { flag: "w", mode: 384 });
10146
+ fallbackInstallIds.delete(path);
10147
+ return installId;
10148
+ } catch {}
10149
+ const fallback = fallbackInstallIds.get(path);
10150
+ if (fallback !== undefined)
10151
+ return fallback;
10152
+ fallbackInstallIds.set(path, installId);
10153
+ return installId;
10154
+ }
10155
+ }
10156
+ function readInstallId(path) {
10157
+ try {
10158
+ const value = readFileSync5(path, "utf8").trim();
10159
+ return INSTALL_ID_PATTERN.test(value) ? value : undefined;
10160
+ } catch {
10161
+ return;
10162
+ }
10163
+ }
10164
+ var TELEMETRY_INSTALL_ID_FILE_NAME = "install-id", INSTALL_ID_PATTERN, fallbackInstallIds;
10165
+ var init_install_id = __esm(() => {
10166
+ INSTALL_ID_PATTERN = /^[0-9a-f]{64}$/;
10167
+ fallbackInstallIds = new Map;
10168
+ });
10169
+
10089
10170
  // packages/telemetry-core/src/posthog-client.ts
10090
10171
  function createTelemetryClient2(input) {
10091
10172
  return createTelemetryClient({ ...input, transportFactory: input.transportFactory ?? createDefaultPostHogTransport });
@@ -10112,6 +10193,7 @@ var init_src = __esm(() => {
10112
10193
  init_env();
10113
10194
  init_event_id();
10114
10195
  init_events();
10196
+ init_install_id();
10115
10197
  init_machine_id();
10116
10198
  init_posthog_client();
10117
10199
  init_record_daily_active();
@@ -10123,7 +10205,7 @@ var package_default;
10123
10205
  var init_package = __esm(() => {
10124
10206
  package_default = {
10125
10207
  name: "@oh-my-opencode/omo-codex",
10126
- version: "5.1.48",
10208
+ version: "5.1.54",
10127
10209
  type: "module",
10128
10210
  private: true,
10129
10211
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -10159,7 +10241,7 @@ var init_package = __esm(() => {
10159
10241
  "@oh-my-opencode/utils": "workspace:*"
10160
10242
  },
10161
10243
  devDependencies: {
10162
- "bun-types": "1.4.3"
10244
+ "bun-types": "1.4.4"
10163
10245
  }
10164
10246
  };
10165
10247
  });
@@ -10174,7 +10256,6 @@ function createCodexTelemetryProductConfig(packageVersion = getProductVersion(),
10174
10256
  defaultApiKey: DEFAULT_POSTHOG_API_KEY,
10175
10257
  defaultHost: DEFAULT_POSTHOG_HOST,
10176
10258
  eventName: EVENT_NAME,
10177
- machineIdPrefix: MACHINE_ID_PREFIX,
10178
10259
  packageName: PACKAGE_NAME,
10179
10260
  packageVersion,
10180
10261
  platform: "omo-codex",
@@ -10189,7 +10270,7 @@ function createCodexTelemetryProductConfig(packageVersion = getProductVersion(),
10189
10270
  additionalProperties
10190
10271
  };
10191
10272
  }
10192
- var PRODUCT_NAME = "omo-codex", PACKAGE_NAME = "@oh-my-opencode/omo-codex", CACHE_DIR_NAME = "omo-codex", EVENT_NAME = "omo_codex_daily_active", PRODUCT_ENV_PREFIX = "OMO_CODEX", MACHINE_ID_PREFIX = "omo-codex:";
10273
+ var PRODUCT_NAME = "omo-codex", PACKAGE_NAME = "@oh-my-opencode/omo-codex", CACHE_DIR_NAME = "omo-codex", EVENT_NAME = "omo_codex_daily_active", PRODUCT_ENV_PREFIX = "OMO_CODEX";
10193
10274
  var init_product_identity = __esm(() => {
10194
10275
  init_src();
10195
10276
  init_package();
@@ -10267,7 +10348,7 @@ function createPostHogClient(source, options = {}) {
10267
10348
  }
10268
10349
  const activityStateProvider = resolveActivityStateProvider(options);
10269
10350
  return {
10270
- trackActive: (distinctId, reason) => {
10351
+ trackActive: (reason) => {
10271
10352
  const activityState = options.stateDir === undefined ? activityStateProvider() : getDailyActiveCaptureState({
10272
10353
  diagnostics: writeTelemetryDiagnostic2,
10273
10354
  now: options.now,
@@ -10278,7 +10359,7 @@ function createPostHogClient(source, options = {}) {
10278
10359
  }
10279
10360
  client.trackActive({
10280
10361
  dayUTC: activityState.dayUTC,
10281
- distinctId,
10362
+ distinctId: getTelemetryInstallDistinctId(options.stateDir ?? getActivityStateDir()),
10282
10363
  reason
10283
10364
  });
10284
10365
  },
@@ -10287,15 +10368,13 @@ function createPostHogClient(source, options = {}) {
10287
10368
  }
10288
10369
  };
10289
10370
  }
10290
- function getPostHogDistinctId() {
10291
- return getTelemetryDistinctId(MACHINE_ID_PREFIX, resolveOsProvider());
10292
- }
10293
10371
  function createInstallPostHog() {
10294
10372
  return createPostHogClient("install");
10295
10373
  }
10296
10374
  var osProviderOverride2 = null, activityStateProviderOverride = null, transportFactoryOverride = null, NO_OP_POSTHOG;
10297
10375
  var init_posthog = __esm(() => {
10298
10376
  init_src();
10377
+ init_data_path();
10299
10378
  init_diagnostics2();
10300
10379
  init_posthog_activity_state();
10301
10380
  init_product_identity();
@@ -10316,9 +10395,18 @@ var init_telemetry = __esm(() => {
10316
10395
 
10317
10396
  // packages/omo-codex/src/install/install-local-cli.ts
10318
10397
  import { readFile as readFile26 } from "node:fs/promises";
10319
- import { dirname as dirname13, join as join41, resolve as resolve11 } from "node:path";
10398
+ import { dirname as dirname14, join as join43, resolve as resolve11 } from "node:path";
10320
10399
  import { fileURLToPath as fileURLToPath2 } from "node:url";
10321
10400
 
10401
+ // packages/telemetry-core/src/install-disclosure.ts
10402
+ var TELEMETRY_PRIVACY_POLICY_URL = "https://github.com/code-yeongyu/oh-my-openagent/blob/dev/docs/legal/privacy-policy.md";
10403
+ var TELEMETRY_INSTALL_DISCLOSURE_LINES = [
10404
+ "OmO sends anonymous usage telemetry (no prompts, code, file paths, or account data) to improve the product.",
10405
+ "The data goes to PostHog in the United States.",
10406
+ "Turn it off with DO_NOT_TRACK=1 (or OMO_DISABLE_TELEMETRY=1).",
10407
+ `Details: ${TELEMETRY_PRIVACY_POLICY_URL}`
10408
+ ];
10409
+
10322
10410
  // packages/utils/src/runtime/spawn.ts
10323
10411
  import {
10324
10412
  spawn as nodeSpawn,
@@ -10587,7 +10675,7 @@ var defaultRunCommand = async (command, args, options) => {
10587
10675
  };
10588
10676
 
10589
10677
  // packages/omo-codex/src/install/install-codex.ts
10590
- import { join as join37, resolve as resolve10 } from "node:path";
10678
+ import { join as join39, resolve as resolve10 } from "node:path";
10591
10679
  import { existsSync as existsSync7 } from "node:fs";
10592
10680
  import { homedir as homedir2 } from "node:os";
10593
10681
 
@@ -11141,8 +11229,8 @@ async function existingNonSymlink(path) {
11141
11229
  }
11142
11230
  }
11143
11231
  // packages/omo-codex/src/install/codex-cache-install.ts
11144
- import { cp as cp2, mkdir as mkdir3, readFile as readFile8, readdir as readdir4, rename, rm as rm4 } from "node:fs/promises";
11145
- import { basename as basename2, dirname as dirname4, join as join10, sep as sep5 } from "node:path";
11232
+ import { cp as cp3, mkdir as mkdir3, readFile as readFile8, readdir as readdir5, rename as rename2, rm as rm5 } from "node:fs/promises";
11233
+ import { basename as basename2, dirname as dirname4, join as join11, sep as sep6 } from "node:path";
11146
11234
 
11147
11235
  // packages/omo-codex/src/install/codex-cache-bundled-mcps.ts
11148
11236
  import { cp, mkdir as mkdir2, readFile as readFile4, stat as stat3 } from "node:fs/promises";
@@ -11494,9 +11582,66 @@ async function rewriteCachedManifestRoot(pluginRoot, fromRoot, toRoot) {
11494
11582
  `);
11495
11583
  }
11496
11584
 
11585
+ // packages/omo-codex/src/install/codex-cache-payload.ts
11586
+ import { cp as cp2, lstat as lstat5, mkdtemp, readdir as readdir4, rename, rm as rm4 } from "node:fs/promises";
11587
+ import { join as join9, relative as relative4, sep as sep4 } from "node:path";
11588
+ var NPM_BIN_PATH_SEGMENT = `${sep4}node_modules${sep4}.bin${sep4}`;
11589
+ async function finalizeCachedPluginPayload(pluginRoot) {
11590
+ await materializeDirectory(pluginRoot);
11591
+ const unsupported = await unsupportedEntries(pluginRoot, pluginRoot);
11592
+ if (unsupported.length > 0) {
11593
+ throw new Error(`Codex plugin contains unsupported entry types: ${unsupported.sort().join(", ")}`);
11594
+ }
11595
+ }
11596
+ async function materializeDirectory(directory) {
11597
+ for (const name of await readdir4(directory)) {
11598
+ const path = join9(directory, name);
11599
+ let entry = await lstat5(path);
11600
+ if (path.includes(NPM_BIN_PATH_SEGMENT) && !entry.isFile() && !entry.isDirectory()) {
11601
+ await rm4(path, { recursive: true, force: true });
11602
+ continue;
11603
+ }
11604
+ if (entry.isSymbolicLink()) {
11605
+ const staging = await mkdtemp(join9(directory, ".omo-materialize-"));
11606
+ try {
11607
+ const copyPath = join9(staging, "entry");
11608
+ await cp2(path, copyPath, {
11609
+ recursive: true,
11610
+ dereference: true,
11611
+ filter: async (source) => {
11612
+ if (!source.includes(NPM_BIN_PATH_SEGMENT))
11613
+ return true;
11614
+ const sourceEntry = await lstat5(source);
11615
+ return sourceEntry.isFile() || sourceEntry.isDirectory();
11616
+ }
11617
+ });
11618
+ await rm4(path, { force: true, recursive: true });
11619
+ await rename(copyPath, path);
11620
+ } finally {
11621
+ await rm4(staging, { recursive: true, force: true });
11622
+ }
11623
+ entry = await lstat5(path);
11624
+ }
11625
+ if (entry.isDirectory())
11626
+ await materializeDirectory(path);
11627
+ }
11628
+ }
11629
+ async function unsupportedEntries(root, directory) {
11630
+ const unsupported = [];
11631
+ for (const name of await readdir4(directory)) {
11632
+ const path = join9(directory, name);
11633
+ const entry = await lstat5(path);
11634
+ if (entry.isDirectory())
11635
+ unsupported.push(...await unsupportedEntries(root, path));
11636
+ else if (!entry.isFile())
11637
+ unsupported.push(relative4(root, path));
11638
+ }
11639
+ return unsupported;
11640
+ }
11641
+
11497
11642
  // packages/omo-codex/src/install/codex-hook-targets.ts
11498
11643
  import { readFile as readFile7 } from "node:fs/promises";
11499
- import { join as join9, sep as sep4 } from "node:path";
11644
+ import { join as join10, sep as sep5 } from "node:path";
11500
11645
  var PLUGIN_ROOT_TARGET_PATTERN = /\$\{PLUGIN_ROOT\}[\\/]+([^"']+)/g;
11501
11646
  async function findMissingHookCommandTargets(pluginRoot) {
11502
11647
  const commands = [];
@@ -11513,7 +11658,7 @@ async function findMissingHookCommandTargets(pluginRoot) {
11513
11658
  const targetSuffix = match[1];
11514
11659
  if (targetSuffix === undefined)
11515
11660
  continue;
11516
- const target = join9(pluginRoot, ...targetSuffix.split(/[\\/]+/));
11661
+ const target = join10(pluginRoot, ...targetSuffix.split(/[\\/]+/));
11517
11662
  if (seen.has(target))
11518
11663
  continue;
11519
11664
  seen.add(target);
@@ -11524,17 +11669,17 @@ async function findMissingHookCommandTargets(pluginRoot) {
11524
11669
  return missing;
11525
11670
  }
11526
11671
  async function hookManifestPaths(pluginRoot) {
11527
- const pluginManifestPath = join9(pluginRoot, ".codex-plugin", "plugin.json");
11672
+ const pluginManifestPath = join10(pluginRoot, ".codex-plugin", "plugin.json");
11528
11673
  if (!await fileExistsStrict(pluginManifestPath))
11529
- return [join9(pluginRoot, "hooks", "hooks.json")];
11674
+ return [join10(pluginRoot, "hooks", "hooks.json")];
11530
11675
  const parsed = JSON.parse(await readFile7(pluginManifestPath, "utf8"));
11531
11676
  if (!isPlainRecord(parsed))
11532
11677
  return [];
11533
11678
  if (typeof parsed.hooks === "string" && parsed.hooks.trim() !== "") {
11534
- return [join9(pluginRoot, stripDotSlash(parsed.hooks))];
11679
+ return [join10(pluginRoot, stripDotSlash(parsed.hooks))];
11535
11680
  }
11536
11681
  if (Array.isArray(parsed.hooks)) {
11537
- return parsed.hooks.filter((hookPath) => typeof hookPath === "string" && hookPath.trim() !== "").map((hookPath) => join9(pluginRoot, stripDotSlash(hookPath)));
11682
+ return parsed.hooks.filter((hookPath) => typeof hookPath === "string" && hookPath.trim() !== "").map((hookPath) => join10(pluginRoot, stripDotSlash(hookPath)));
11538
11683
  }
11539
11684
  return [];
11540
11685
  }
@@ -11545,7 +11690,7 @@ async function assertHookCommandTargets(pluginRoot) {
11545
11690
  const missing = await findMissingHookCommandTargets(pluginRoot);
11546
11691
  if (missing.length === 0)
11547
11692
  return;
11548
- const relativeMissing = missing.map((path) => path.split(`${pluginRoot}${sep4}`).join("").split(sep4).join("/"));
11693
+ const relativeMissing = missing.map((path) => path.split(`${pluginRoot}${sep5}`).join("").split(sep5).join("/"));
11549
11694
  throw new Error(`Plugin payload is missing ${missing.length} hook command target(s) referenced by hooks.json: ${relativeMissing.join(", ")}. ` + "The previous plugin cache was left untouched; this payload was not activated.");
11550
11695
  }
11551
11696
  function collectCommands(value, commands) {
@@ -11572,9 +11717,9 @@ async function installCachedPlugin(input) {
11572
11717
  await maybeRunNpmInstall(input.sourcePath, input.runCommand, npmInstallEnv);
11573
11718
  await maybeRunNpmBuild(input.sourcePath, input.runCommand, env);
11574
11719
  }
11575
- const targetPath = join10(input.codexHome, "plugins", "cache", input.marketplaceName, input.name, input.version);
11720
+ const targetPath = join11(input.codexHome, "plugins", "cache", input.marketplaceName, input.name, input.version);
11576
11721
  const tempPath = createTempSiblingPath(targetPath);
11577
- await rm4(tempPath, { recursive: true, force: true });
11722
+ await rm5(tempPath, { recursive: true, force: true });
11578
11723
  try {
11579
11724
  await copyDirectory(input.sourcePath, tempPath);
11580
11725
  const rewroteLocalFileDependencies = await rewriteCachedPackageLocalFileDependencies(tempPath, input.sourcePath);
@@ -11590,30 +11735,31 @@ async function installCachedPlugin(input) {
11590
11735
  await rewriteCachedMcpManifest(tempPath, input.sourcePath);
11591
11736
  await rewriteCachedManifestRoot(tempPath, tempPath, targetPath);
11592
11737
  await assertHookCommandTargets(tempPath);
11593
- await promoteDirectory(tempPath, targetPath, input.renameDirectory ?? rename);
11594
- const versions = await readdir4(dirname4(targetPath), { withFileTypes: true });
11738
+ await finalizeCachedPluginPayload(tempPath);
11739
+ await promoteDirectory(tempPath, targetPath, input.renameDirectory ?? rename2);
11740
+ const versions = await readdir5(dirname4(targetPath), { withFileTypes: true });
11595
11741
  for (const entry of versions) {
11596
11742
  if (!entry.isDirectory() || entry.name === input.version || entry.name.startsWith("."))
11597
11743
  continue;
11598
11744
  if (!/^[a-zA-Z0-9_+-][a-zA-Z0-9._+-]*$/.test(entry.name))
11599
11745
  continue;
11600
- await rm4(join10(dirname4(targetPath), entry.name), { recursive: true, force: true });
11746
+ await rm5(join11(dirname4(targetPath), entry.name), { recursive: true, force: true });
11601
11747
  }
11602
11748
  } catch (error) {
11603
- await rm4(tempPath, { recursive: true, force: true });
11749
+ await rm5(tempPath, { recursive: true, force: true });
11604
11750
  throw error;
11605
11751
  }
11606
11752
  return { name: input.name, version: input.version, path: targetPath };
11607
11753
  }
11608
11754
  async function maybeRunNpmInstall(cwd, runCommand, env, args = ["install"]) {
11609
- if (!await fileExistsStrict(join10(cwd, "package.json")))
11755
+ if (!await fileExistsStrict(join11(cwd, "package.json")))
11610
11756
  return;
11611
11757
  await runCommand("npm", args, { cwd, env });
11612
11758
  }
11613
11759
  async function maybeRunNpmBuild(cwd, runCommand, env) {
11614
- if (!await fileExistsStrict(join10(cwd, "package.json")))
11760
+ if (!await fileExistsStrict(join11(cwd, "package.json")))
11615
11761
  return;
11616
- const packageJson = JSON.parse(await readFile8(join10(cwd, "package.json"), "utf8"));
11762
+ const packageJson = JSON.parse(await readFile8(join11(cwd, "package.json"), "utf8"));
11617
11763
  if (!isPlainRecord(packageJson))
11618
11764
  return;
11619
11765
  const scripts = packageJson.scripts;
@@ -11622,9 +11768,9 @@ async function maybeRunNpmBuild(cwd, runCommand, env) {
11622
11768
  await runCommand("npm", ["run", "build"], { cwd, env });
11623
11769
  }
11624
11770
  async function maybeRunNpmSyncSkills(cwd, runCommand, env) {
11625
- if (!await fileExistsStrict(join10(cwd, "package.json")))
11771
+ if (!await fileExistsStrict(join11(cwd, "package.json")))
11626
11772
  return;
11627
- const packageJson = JSON.parse(await readFile8(join10(cwd, "package.json"), "utf8"));
11773
+ const packageJson = JSON.parse(await readFile8(join11(cwd, "package.json"), "utf8"));
11628
11774
  if (!isPlainRecord(packageJson))
11629
11775
  return;
11630
11776
  const scripts = packageJson.scripts;
@@ -11636,18 +11782,18 @@ function sanitizeNpmInstallEnv(env) {
11636
11782
  return Object.fromEntries(Object.entries(env).filter(([key]) => key.toLowerCase() !== "npm_config_allow_scripts"));
11637
11783
  }
11638
11784
  function createTempSiblingPath(targetPath) {
11639
- return join10(dirname4(targetPath), `.tmp-${basename2(targetPath)}-${process.pid}-${Date.now()}`);
11785
+ return join11(dirname4(targetPath), `.tmp-${basename2(targetPath)}-${process.pid}-${Date.now()}`);
11640
11786
  }
11641
11787
  function createBackupSiblingPath(targetPath) {
11642
- return join10(dirname4(targetPath), `.backup-${basename2(targetPath)}-${process.pid}-${Date.now()}`);
11788
+ return join11(dirname4(targetPath), `.backup-${basename2(targetPath)}-${process.pid}-${Date.now()}`);
11643
11789
  }
11644
11790
  async function copyDirectory(sourcePath, targetPath) {
11645
11791
  await mkdir3(dirname4(targetPath), { recursive: true });
11646
- await cp2(sourcePath, targetPath, { recursive: true, filter: (source) => shouldCopyPluginPath(source, sourcePath) });
11792
+ await cp3(sourcePath, targetPath, { recursive: true, filter: (source) => shouldCopyPluginPath(source, sourcePath) });
11647
11793
  }
11648
11794
  async function promoteDirectory(tempPath, targetPath, renameDirectory) {
11649
11795
  const backupPath = createBackupSiblingPath(targetPath);
11650
- await rm4(backupPath, { recursive: true, force: true });
11796
+ await rm5(backupPath, { recursive: true, force: true });
11651
11797
  let backupMoved = false;
11652
11798
  try {
11653
11799
  if (await fileExistsStrict(targetPath)) {
@@ -11661,19 +11807,19 @@ async function promoteDirectory(tempPath, targetPath, renameDirectory) {
11661
11807
  throw error;
11662
11808
  }
11663
11809
  if (backupMoved)
11664
- await rm4(backupPath, { recursive: true, force: true });
11810
+ await rm5(backupPath, { recursive: true, force: true });
11665
11811
  }
11666
11812
  async function restoreBackupDirectory(backupPath, targetPath, renameDirectory) {
11667
11813
  if (!await fileExistsStrict(backupPath))
11668
11814
  return;
11669
- await rm4(targetPath, { recursive: true, force: true });
11815
+ await rm5(targetPath, { recursive: true, force: true });
11670
11816
  await renameDirectory(backupPath, targetPath);
11671
11817
  }
11672
11818
  function shouldCopyPluginPath(path, root) {
11673
- const relative = path === root ? "" : path.slice(root.length + sep5.length);
11819
+ const relative = path === root ? "" : path.slice(root.length + sep6.length);
11674
11820
  if (relative === "")
11675
11821
  return true;
11676
- const parts = relative.split(sep5);
11822
+ const parts = relative.split(sep6);
11677
11823
  if (parts.some((part) => part === ".git" || part === "node_modules"))
11678
11824
  return false;
11679
11825
  return !isNestedComponentMcpManifest(parts);
@@ -11687,18 +11833,18 @@ var removedSparkshellPromptSurfaceFiles = new Set(["directive.md", "plugin.json"
11687
11833
  var removedSparkshellTextFilePattern = /\.(?:json|md|toml|ya?ml)$/i;
11688
11834
  async function assertNoRemovedSparkshellPromptReferences(pluginRoot) {
11689
11835
  for (const filePath of await listRemovedSparkshellPromptSurfaceFiles(pluginRoot, "")) {
11690
- const content = await readFile8(join10(pluginRoot, filePath), "utf8");
11836
+ const content = await readFile8(join11(pluginRoot, filePath), "utf8");
11691
11837
  if (!removedSparkshellReferencePattern.test(content))
11692
11838
  continue;
11693
11839
  throw new Error(`removed sparkshell reference found in Codex plugin prompt surface: ${filePath}`);
11694
11840
  }
11695
11841
  }
11696
11842
  async function listRemovedSparkshellPromptSurfaceFiles(pluginRoot, relativeDirectory) {
11697
- const directory = relativeDirectory === "" ? pluginRoot : join10(pluginRoot, relativeDirectory);
11698
- const entries = await readdir4(directory, { withFileTypes: true });
11843
+ const directory = relativeDirectory === "" ? pluginRoot : join11(pluginRoot, relativeDirectory);
11844
+ const entries = await readdir5(directory, { withFileTypes: true });
11699
11845
  const files = [];
11700
11846
  for (const entry of entries) {
11701
- const relativePath = relativeDirectory === "" ? entry.name : join10(relativeDirectory, entry.name);
11847
+ const relativePath = relativeDirectory === "" ? entry.name : join11(relativeDirectory, entry.name);
11702
11848
  if (entry.isDirectory()) {
11703
11849
  if (shouldDescendIntoRemovedSparkshellPromptSurface(relativePath)) {
11704
11850
  files.push(...await listRemovedSparkshellPromptSurfaceFiles(pluginRoot, relativePath));
@@ -11711,7 +11857,7 @@ async function listRemovedSparkshellPromptSurfaceFiles(pluginRoot, relativeDirec
11711
11857
  return files.sort();
11712
11858
  }
11713
11859
  function shouldDescendIntoRemovedSparkshellPromptSurface(relativePath) {
11714
- const parts = relativePath.split(sep5);
11860
+ const parts = relativePath.split(sep6);
11715
11861
  if (parts.some((part) => part === ".git" || part === "dist" || part === "node_modules"))
11716
11862
  return false;
11717
11863
  if (parts[0] === "components") {
@@ -11724,7 +11870,7 @@ function shouldDescendIntoRemovedSparkshellPromptSurface(relativePath) {
11724
11870
  function shouldCheckRemovedSparkshellPromptFile(relativePath) {
11725
11871
  if (!removedSparkshellTextFilePattern.test(relativePath))
11726
11872
  return false;
11727
- const parts = relativePath.split(sep5);
11873
+ const parts = relativePath.split(sep6);
11728
11874
  const fileName = parts.at(-1) ?? "";
11729
11875
  if (parts[0] === "components") {
11730
11876
  if (parts.length === 3)
@@ -11738,25 +11884,25 @@ async function copyRootRuntimeDists(input) {
11738
11884
  if (repoRoot === null)
11739
11885
  return;
11740
11886
  for (const runtimePath of ["dist/cli", "dist/cli-node"]) {
11741
- const sourcePath = join10(repoRoot, runtimePath);
11742
- if (!await fileExistsStrict(join10(sourcePath, "index.js")))
11887
+ const sourcePath = join11(repoRoot, runtimePath);
11888
+ if (!await fileExistsStrict(join11(sourcePath, "index.js")))
11743
11889
  continue;
11744
- await mkdir3(dirname4(join10(input.pluginRoot, runtimePath)), { recursive: true });
11745
- await cp2(sourcePath, join10(input.pluginRoot, runtimePath), { recursive: true });
11890
+ await mkdir3(dirname4(join11(input.pluginRoot, runtimePath)), { recursive: true });
11891
+ await cp3(sourcePath, join11(input.pluginRoot, runtimePath), { recursive: true });
11746
11892
  }
11747
11893
  }
11748
- var canonicalPromptRelativePaths = [join10("packages", "prompts-core", "prompts", "ultrawork", "codex.md")];
11894
+ var canonicalPromptRelativePaths = [join11("packages", "prompts-core", "prompts", "ultrawork", "codex.md")];
11749
11895
  async function copyCanonicalPromptSources(input) {
11750
11896
  const repoRoot = repoRootForCodexPluginSource(input.sourcePath);
11751
11897
  if (repoRoot === null)
11752
11898
  return;
11753
11899
  for (const relativePath of canonicalPromptRelativePaths) {
11754
- const sourceFile = join10(repoRoot, relativePath);
11900
+ const sourceFile = join11(repoRoot, relativePath);
11755
11901
  if (!await fileExistsStrict(sourceFile))
11756
11902
  continue;
11757
- const targetFile = join10(input.pluginRoot, relativePath);
11903
+ const targetFile = join11(input.pluginRoot, relativePath);
11758
11904
  await mkdir3(dirname4(targetFile), { recursive: true });
11759
- await cp2(sourceFile, targetFile);
11905
+ await cp3(sourceFile, targetFile);
11760
11906
  }
11761
11907
  }
11762
11908
  function repoRootForCodexPluginSource(sourcePath) {
@@ -11771,10 +11917,10 @@ function repoRootForCodexPluginSource(sourcePath) {
11771
11917
  return dirname4(packagesRoot);
11772
11918
  }
11773
11919
  // packages/omo-codex/src/install/codex-cache-prune.ts
11774
- import { lstat as lstat5, readdir as readdir5, rm as rm5, stat as stat4 } from "node:fs/promises";
11775
- import { join as join11 } from "node:path";
11920
+ import { lstat as lstat6, readdir as readdir6, rm as rm6, stat as stat4 } from "node:fs/promises";
11921
+ import { join as join12 } from "node:path";
11776
11922
  async function pruneMarketplaceCache(input) {
11777
- const cacheRoot = join11(input.codexHome, "plugins", "cache", input.marketplaceName);
11923
+ const cacheRoot = join12(input.codexHome, "plugins", "cache", input.marketplaceName);
11778
11924
  if (!await fileExistsStrict(cacheRoot))
11779
11925
  return;
11780
11926
  const keep = new Set(input.keepPluginNames);
@@ -11782,28 +11928,28 @@ async function pruneMarketplaceCache(input) {
11782
11928
  for (const entry of entries) {
11783
11929
  if (!entry.isDirectory() || keep.has(entry.name))
11784
11930
  continue;
11785
- await rm5(join11(cacheRoot, entry.name), { recursive: true, force: true });
11931
+ await rm6(join12(cacheRoot, entry.name), { recursive: true, force: true });
11786
11932
  }
11787
11933
  }
11788
11934
  async function pruneMarketplacePluginCaches(input) {
11789
- const cacheRoot = join11(input.codexHome, "plugins", "cache", input.marketplaceName);
11935
+ const cacheRoot = join12(input.codexHome, "plugins", "cache", input.marketplaceName);
11790
11936
  if (!await fileExistsStrict(cacheRoot))
11791
11937
  return;
11792
11938
  for (const pluginName of input.pluginNames) {
11793
- await rm5(join11(cacheRoot, pluginName), { recursive: true, force: true });
11939
+ await rm6(join12(cacheRoot, pluginName), { recursive: true, force: true });
11794
11940
  }
11795
11941
  const remainingEntries = await readCacheEntryNames(cacheRoot);
11796
11942
  if (remainingEntries.length === 0) {
11797
- await rm5(cacheRoot, { recursive: true, force: true });
11943
+ await rm6(cacheRoot, { recursive: true, force: true });
11798
11944
  }
11799
11945
  }
11800
11946
  async function readCacheEntries(path) {
11801
11947
  const emptyEntries = [];
11802
- return readCacheRoot(path, () => readdir5(path, { withFileTypes: true }), emptyEntries);
11948
+ return readCacheRoot(path, () => readdir6(path, { withFileTypes: true }), emptyEntries);
11803
11949
  }
11804
11950
  async function readCacheEntryNames(path) {
11805
11951
  const emptyNames = [];
11806
- return readCacheRoot(path, () => readdir5(path), emptyNames);
11952
+ return readCacheRoot(path, () => readdir6(path), emptyNames);
11807
11953
  }
11808
11954
  async function readCacheRoot(path, readEntries, fallback) {
11809
11955
  try {
@@ -11818,7 +11964,7 @@ async function readCacheRoot(path, readEntries, fallback) {
11818
11964
  }
11819
11965
  async function isBrokenCacheSymlink(path) {
11820
11966
  try {
11821
- const entry = await lstat5(path);
11967
+ const entry = await lstat6(path);
11822
11968
  if (!entry.isSymbolicLink())
11823
11969
  return false;
11824
11970
  } catch (error) {
@@ -11836,18 +11982,18 @@ async function isBrokenCacheSymlink(path) {
11836
11982
  }
11837
11983
  }
11838
11984
  // packages/omo-codex/src/install/codex-cached-marketplace-manifest.ts
11839
- import { mkdir as mkdir4, rename as rename2, rm as rm6, stat as stat5, writeFile as writeFile4 } from "node:fs/promises";
11840
- import { join as join12 } from "node:path";
11985
+ import { mkdir as mkdir4, rename as rename3, rm as rm7, stat as stat5, writeFile as writeFile4 } from "node:fs/promises";
11986
+ import { join as join13 } from "node:path";
11841
11987
  async function writeCachedMarketplaceManifest(input) {
11842
- const marketplaceDir = join12(input.marketplaceRoot, ".agents", "plugins");
11988
+ const marketplaceDir = join13(input.marketplaceRoot, ".agents", "plugins");
11843
11989
  await mkdir4(marketplaceDir, { recursive: true });
11844
11990
  for (const plugin of input.plugins) {
11845
- const pluginPath = join12(input.marketplaceRoot, plugin.name, plugin.version);
11991
+ const pluginPath = join13(input.marketplaceRoot, plugin.name, plugin.version);
11846
11992
  if (!await isDirectory2(pluginPath))
11847
11993
  throw new Error(`Cannot write cached marketplace manifest: ${pluginPath} does not exist`);
11848
11994
  }
11849
- const manifestPath = join12(marketplaceDir, "marketplace.json");
11850
- const tempPath = join12(marketplaceDir, `.marketplace.json.tmp-${process.pid}-${Date.now()}`);
11995
+ const manifestPath = join13(marketplaceDir, "marketplace.json");
11996
+ const tempPath = join13(marketplaceDir, `.marketplace.json.tmp-${process.pid}-${Date.now()}`);
11851
11997
  try {
11852
11998
  await writeFile4(tempPath, `${JSON.stringify({
11853
11999
  name: input.marketplaceName,
@@ -11857,9 +12003,9 @@ async function writeCachedMarketplaceManifest(input) {
11857
12003
  }))
11858
12004
  }, null, "\t")}
11859
12005
  `);
11860
- await rename2(tempPath, manifestPath);
12006
+ await rename3(tempPath, manifestPath);
11861
12007
  } catch (error) {
11862
- await rm6(tempPath, { force: true });
12008
+ await rm7(tempPath, { force: true });
11863
12009
  throw error;
11864
12010
  }
11865
12011
  }
@@ -11876,7 +12022,7 @@ async function isDirectory2(path) {
11876
12022
  // packages/omo-codex/src/install/codex-package-layout.ts
11877
12023
  import { existsSync as existsSync2 } from "node:fs";
11878
12024
  import { readFile as readFile9 } from "node:fs/promises";
11879
- import { join as join13 } from "node:path";
12025
+ import { join as join14 } from "node:path";
11880
12026
  var PACKAGED_CODEX_INSTALLER_NAMES = new Set([
11881
12027
  "@code-yeongyu/lazycodex",
11882
12028
  "@code-yeongyu/lazycodex-ai",
@@ -11886,9 +12032,9 @@ var PACKAGED_CODEX_INSTALLER_NAMES = new Set([
11886
12032
  "oh-my-openagent"
11887
12033
  ]);
11888
12034
  async function shouldBuildSourcePackages(repoRoot) {
11889
- if (existsSync2(join13(repoRoot, "packages", "omo-opencode", "src", "index.ts")))
12035
+ if (existsSync2(join14(repoRoot, "packages", "omo-opencode", "src", "index.ts")))
11890
12036
  return true;
11891
- const packageJsonPath = join13(repoRoot, "package.json");
12037
+ const packageJsonPath = join14(repoRoot, "package.json");
11892
12038
  if (!existsSync2(packageJsonPath))
11893
12039
  return true;
11894
12040
  const packageJson = JSON.parse(await readFile9(packageJsonPath, "utf8"));
@@ -12495,13 +12641,13 @@ function tomlKeySegment(value) {
12495
12641
  }
12496
12642
 
12497
12643
  // packages/omo-codex/src/install/codex-config-atomic-write.ts
12498
- import { lstat as lstat6, readlink as readlink4, realpath, rename as rename3, unlink, writeFile as writeFile5 } from "node:fs/promises";
12499
- import { basename as basename3, dirname as dirname5, isAbsolute as isAbsolute5, join as join14, resolve as resolve6 } from "node:path";
12644
+ import { lstat as lstat7, readlink as readlink4, realpath, rename as rename4, unlink, writeFile as writeFile5 } from "node:fs/promises";
12645
+ import { basename as basename3, dirname as dirname5, isAbsolute as isAbsolute5, join as join15, resolve as resolve6 } from "node:path";
12500
12646
  var RENAME_RETRY_DELAYS_MS = [10, 25, 50];
12501
12647
  var RETRIABLE_RENAME_CODES = new Set(["EPERM", "EBUSY"]);
12502
12648
  async function writeFileAtomic(targetPath, data) {
12503
12649
  const writeTarget = await resolveSymlinkTarget(targetPath);
12504
- const temporaryPath = join14(dirname5(writeTarget), `.tmp-${basename3(writeTarget)}-${process.pid}-${Date.now()}`);
12650
+ const temporaryPath = join15(dirname5(writeTarget), `.tmp-${basename3(writeTarget)}-${process.pid}-${Date.now()}`);
12505
12651
  await writeFile5(temporaryPath, data);
12506
12652
  try {
12507
12653
  await renameWithRetry(temporaryPath, writeTarget);
@@ -12516,7 +12662,7 @@ async function writeFileAtomic(targetPath, data) {
12516
12662
  }
12517
12663
  async function resolveSymlinkTarget(targetPath) {
12518
12664
  try {
12519
- const linkStats = await lstat6(targetPath);
12665
+ const linkStats = await lstat7(targetPath);
12520
12666
  if (!linkStats.isSymbolicLink())
12521
12667
  return targetPath;
12522
12668
  } catch (error) {
@@ -12536,7 +12682,7 @@ async function resolveSymlinkTarget(targetPath) {
12536
12682
  async function renameWithRetry(fromPath, toPath) {
12537
12683
  for (let attempt = 0;; attempt += 1) {
12538
12684
  try {
12539
- await rename3(fromPath, toPath);
12685
+ await rename4(fromPath, toPath);
12540
12686
  return;
12541
12687
  } catch (error) {
12542
12688
  if (!isRetriableRenameError(error) || attempt >= RENAME_RETRY_DELAYS_MS.length) {
@@ -13001,7 +13147,7 @@ function isRootSetting(line, key) {
13001
13147
 
13002
13148
  // packages/omo-codex/src/install/codex-model-catalog.ts
13003
13149
  import { readFile as readFile10 } from "node:fs/promises";
13004
- import { join as join15 } from "node:path";
13150
+ import { join as join16 } from "node:path";
13005
13151
 
13006
13152
  // packages/model-core/src/latest-models.ts
13007
13153
  var LATEST_MODEL_BY_FAMILY = {
@@ -13015,7 +13161,8 @@ var LATEST_MODEL_BY_FAMILY = {
13015
13161
  gptLunaFast: "gpt-6-luna-fast",
13016
13162
  glm: "glm-5.3",
13017
13163
  glmFlash: "glm-5.3-flash",
13018
- kimi: "kimi-k3",
13164
+ kimi: "kimi-k3.1-pro",
13165
+ kimiK3: "kimi-k3",
13019
13166
  geminiPro: "gemini-4-argon"
13020
13167
  };
13021
13168
 
@@ -13050,7 +13197,7 @@ var FALLBACK_CODEX_MODEL_CATALOG = {
13050
13197
  ]
13051
13198
  };
13052
13199
  async function readCodexModelCatalog(codexPackageRoot) {
13053
- const catalogPath = join15(codexPackageRoot, "plugin", "model-catalog.json");
13200
+ const catalogPath = join16(codexPackageRoot, "plugin", "model-catalog.json");
13054
13201
  try {
13055
13202
  const parsed = JSON.parse(await readFile10(catalogPath, "utf8"));
13056
13203
  return parseCodexModelCatalog(parsed) ?? FALLBACK_CODEX_MODEL_CATALOG;
@@ -13134,7 +13281,7 @@ function isRootSetting2(line, key) {
13134
13281
 
13135
13282
  // packages/omo-codex/src/install/codex-multi-agent-v2-config.ts
13136
13283
  import { readFileSync } from "node:fs";
13137
- import { dirname as dirname6, isAbsolute as isAbsolute6, join as join16 } from "node:path";
13284
+ import { dirname as dirname6, isAbsolute as isAbsolute6, join as join17 } from "node:path";
13138
13285
  var CODEX_AGENTS_HEADER = "agents";
13139
13286
  var CODEX_MULTI_AGENT_V2_HEADER = "features.multi_agent_v2";
13140
13287
  function ensureCodexMultiAgentV2Config(config, options = {}) {
@@ -13162,8 +13309,8 @@ function resolveCodexMultiAgentVersion(config, configPath) {
13162
13309
  }
13163
13310
  function resolveCatalogPath(configuredPath, configPath) {
13164
13311
  if (configuredPath === null)
13165
- return join16(dirname6(configPath), "models_cache.json");
13166
- return isAbsolute6(configuredPath) ? configuredPath : join16(dirname6(configPath), configuredPath);
13312
+ return join17(dirname6(configPath), "models_cache.json");
13313
+ return isAbsolute6(configuredPath) ? configuredPath : join17(dirname6(configPath), configuredPath);
13167
13314
  }
13168
13315
  function readCatalogMultiAgentVersion(model, cachePath) {
13169
13316
  let raw;
@@ -13326,7 +13473,7 @@ function isMissingFileError(error) {
13326
13473
  // packages/omo-codex/src/install/codex-hook-trust.ts
13327
13474
  import { createHash } from "node:crypto";
13328
13475
  import { readFile as readFile12 } from "node:fs/promises";
13329
- import { join as join17 } from "node:path";
13476
+ import { join as join18 } from "node:path";
13330
13477
  var EVENT_LABELS = new Map([
13331
13478
  ["PreToolUse", "pre_tool_use"],
13332
13479
  ["PermissionRequest", "permission_request"],
@@ -13340,7 +13487,7 @@ var EVENT_LABELS = new Map([
13340
13487
  ["Stop", "stop"]
13341
13488
  ]);
13342
13489
  async function trustedHookStatesForPlugin(input) {
13343
- const manifestPath = join17(input.pluginRoot, ".codex-plugin", "plugin.json");
13490
+ const manifestPath = join18(input.pluginRoot, ".codex-plugin", "plugin.json");
13344
13491
  if (!await exists(manifestPath))
13345
13492
  return [];
13346
13493
  const manifest = JSON.parse(await readFile12(manifestPath, "utf8"));
@@ -13348,7 +13495,7 @@ async function trustedHookStatesForPlugin(input) {
13348
13495
  return [];
13349
13496
  const states = [];
13350
13497
  for (const hookPath of hookManifestPaths2(manifest.hooks)) {
13351
- const hooksPath = join17(input.pluginRoot, hookPath);
13498
+ const hooksPath = join18(input.pluginRoot, hookPath);
13352
13499
  if (!await exists(hooksPath))
13353
13500
  continue;
13354
13501
  const parsed = JSON.parse(await readFile12(hooksPath, "utf8"));
@@ -19742,8 +19889,8 @@ var OmoMemoryWriteNoticeLayerSchema = object({
19742
19889
  enabled: boolean2().optional()
19743
19890
  }).strict();
19744
19891
  var OmoMemoryProjectionSchema = object({
19745
- max_entries_per_directory: number2().int().min(0).default(40),
19746
- max_bytes: number2().int().min(0).default(24576)
19892
+ max_entries_per_directory: number2().int().min(0).default(0),
19893
+ max_bytes: number2().int().min(0).default(40960)
19747
19894
  }).strict();
19748
19895
  var OmoMemoryProjectionLayerSchema = object({
19749
19896
  max_entries_per_directory: number2().int().min(0).optional(),
@@ -19807,7 +19954,7 @@ var OmoMemorySettingsSchema = object({
19807
19954
  query_expansion: false
19808
19955
  }),
19809
19956
  project_scope: OmoMemoryProjectScopeSchema.default({ nudge: true, recall: true }),
19810
- projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 40, max_bytes: 24576 }),
19957
+ projection: OmoMemoryProjectionSchema.default({ max_entries_per_directory: 0, max_bytes: 40960 }),
19811
19958
  compile_warn_tokens: number2().int().positive().default(30000),
19812
19959
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
19813
19960
  }).strict();
@@ -19848,6 +19995,17 @@ var OmoModelCatalogEntryLayerInputSchema = OmoModelCatalogEntryInputSchema.parti
19848
19995
  var OmoModelCatalogEntryLayerSchema = preprocess((value) => isRecord5(value) ? normalizeLegacyModelFields(value) : value, OmoModelCatalogEntryLayerInputSchema);
19849
19996
  var OmoModelCatalogLayerSchema = record(string2(), OmoModelCatalogEntryLayerSchema);
19850
19997
 
19998
+ // packages/omo-config-core/src/schema/model-pad.ts
19999
+ var OmoModelPadLabelsSchema = object({
20000
+ daily: string2().optional(),
20001
+ geeky: string2().optional(),
20002
+ normal: string2().optional(),
20003
+ heavy: string2().optional()
20004
+ }).strict();
20005
+ var OmoModelPadSchema = object({
20006
+ labels: OmoModelPadLabelsSchema.optional()
20007
+ }).strict();
20008
+
19851
20009
  // packages/omo-config-core/src/schema/model-profile.ts
19852
20010
  function isRecord6(value) {
19853
20011
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -20145,6 +20303,7 @@ var OmoTypedHarnessConfigSchema = object({
20145
20303
  models: OmoModelCatalogLayerSchema.optional(),
20146
20304
  model_profiles: OmoModelProfilesLayerSchema.optional(),
20147
20305
  model_profile: string2().optional(),
20306
+ model_pad: OmoModelPadSchema.optional(),
20148
20307
  memory: OmoMemorySettingsLayerSchema.optional(),
20149
20308
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
20150
20309
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
@@ -20163,6 +20322,7 @@ var OmoConfigProfileSchema = object({
20163
20322
  models: OmoModelCatalogLayerSchema.optional(),
20164
20323
  model_profiles: OmoModelProfilesLayerSchema.optional(),
20165
20324
  model_profile: string2().optional(),
20325
+ model_pad: OmoModelPadSchema.optional(),
20166
20326
  memory: OmoMemorySettingsLayerSchema.optional(),
20167
20327
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
20168
20328
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
@@ -20186,6 +20346,7 @@ var OmoConfigSchema = object({
20186
20346
  models: OmoModelCatalogSchema.optional(),
20187
20347
  model_profiles: OmoModelProfilesSchema.optional(),
20188
20348
  model_profile: string2().optional(),
20349
+ model_pad: OmoModelPadSchema.optional(),
20189
20350
  memory: OmoMemorySettingsSchema.optional(),
20190
20351
  telemetry: OmoTelemetrySettingsSchema.optional(),
20191
20352
  side_panel: OmoSidePanelSettingsSchema.optional(),
@@ -20212,6 +20373,7 @@ var OmoConfigLayerSchema = object({
20212
20373
  models: OmoModelCatalogLayerSchema.optional(),
20213
20374
  model_profiles: OmoModelProfilesLayerSchema.optional(),
20214
20375
  model_profile: string2().optional(),
20376
+ model_pad: OmoModelPadSchema.optional(),
20215
20377
  memory: OmoMemorySettingsLayerSchema.optional(),
20216
20378
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
20217
20379
  side_panel: OmoSidePanelSettingsLayerSchema.optional(),
@@ -21524,7 +21686,7 @@ function validateConfigLayer(path, data) {
21524
21686
 
21525
21687
  // packages/omo-config-core/src/loader/paths.ts
21526
21688
  import { userInfo } from "node:os";
21527
- import { dirname as dirname8, join as join18, posix, resolve as resolve7 } from "node:path";
21689
+ import { dirname as dirname8, join as join19, posix, resolve as resolve7 } from "node:path";
21528
21690
 
21529
21691
  // packages/omo-config-core/src/internal/posix-path.ts
21530
21692
  function toPosixPath2(path) {
@@ -21539,14 +21701,14 @@ function resolveHomeDir(env = process.env) {
21539
21701
  return homeDir.startsWith("/") ? posix.resolve(homeDir) : toPosixPath2(resolve7(homeDir));
21540
21702
  }
21541
21703
  function resolveUserOmoConfigDirectory(env = process.env) {
21542
- return join18(resolveHomeDir(env), ".omo");
21704
+ return join19(resolveHomeDir(env), ".omo");
21543
21705
  }
21544
21706
  function detectUserOmoJsonPath(env, fileSystem) {
21545
21707
  const configDir = resolveUserOmoConfigDirectory(env);
21546
- const jsoncPath = join18(configDir, "omo.jsonc");
21708
+ const jsoncPath = join19(configDir, "omo.jsonc");
21547
21709
  if (fileSystem.existsSync(jsoncPath))
21548
21710
  return jsoncPath;
21549
- const jsonPath = join18(configDir, "omo.json");
21711
+ const jsonPath = join19(configDir, "omo.json");
21550
21712
  return fileSystem.existsSync(jsonPath) ? jsonPath : jsoncPath;
21551
21713
  }
21552
21714
  function isSymlinkedProjectPath(path, fileSystem) {
@@ -21564,13 +21726,13 @@ function isLoadableProjectConfigFile(path, fileSystem) {
21564
21726
  return fileSystem.existsSync(path) && !isSymlinkedProjectPath(path, fileSystem);
21565
21727
  }
21566
21728
  function detectOmoJsonPath(dir, fileSystem) {
21567
- const omoDir = join18(dir, ".omo");
21729
+ const omoDir = join19(dir, ".omo");
21568
21730
  if (isSymlinkedProjectPath(omoDir, fileSystem))
21569
21731
  return null;
21570
- const jsoncPath = join18(omoDir, "omo.jsonc");
21732
+ const jsoncPath = join19(omoDir, "omo.jsonc");
21571
21733
  if (isLoadableProjectConfigFile(jsoncPath, fileSystem))
21572
21734
  return jsoncPath;
21573
- const jsonPath = join18(omoDir, "omo.json");
21735
+ const jsonPath = join19(omoDir, "omo.json");
21574
21736
  return isLoadableProjectConfigFile(jsonPath, fileSystem) ? jsonPath : null;
21575
21737
  }
21576
21738
  function realpathOrSelf(path, fileSystem) {
@@ -21890,8 +22052,8 @@ function recordAt(value, key) {
21890
22052
  }
21891
22053
 
21892
22054
  // packages/omo-codex/src/install/codex-marketplace-snapshot.ts
21893
- import { cp as cp3, mkdir as mkdir6, rename as rename4, rm as rm7, writeFile as writeFile6 } from "node:fs/promises";
21894
- import { join as join19, sep as sep6 } from "node:path";
22055
+ import { cp as cp4, mkdir as mkdir6, rename as rename5, rm as rm8, writeFile as writeFile6 } from "node:fs/promises";
22056
+ import { join as join20, sep as sep7 } from "node:path";
21895
22057
  var INSTALLED_MARKETPLACES_DIR = ".tmp/marketplaces";
21896
22058
  async function writeInstalledMarketplaceSnapshot(input) {
21897
22059
  const marketplaceRoot = installedMarketplaceRoot(input.codexHome, input.marketplace.name);
@@ -21904,51 +22066,51 @@ async function writeInstalledMarketplaceSnapshot(input) {
21904
22066
  return snapshotPlugins;
21905
22067
  }
21906
22068
  function installedMarketplaceRoot(codexHome, marketplaceName) {
21907
- return join19(codexHome, INSTALLED_MARKETPLACES_DIR, marketplaceName);
22069
+ return join20(codexHome, INSTALLED_MARKETPLACES_DIR, marketplaceName);
21908
22070
  }
21909
22071
  async function writeMarketplaceManifest(marketplaceRoot, marketplace) {
21910
- const manifestDir = join19(marketplaceRoot, ".agents", "plugins");
22072
+ const manifestDir = join20(marketplaceRoot, ".agents", "plugins");
21911
22073
  await mkdir6(manifestDir, { recursive: true });
21912
- const tempPath = join19(manifestDir, `.marketplace-${process.pid}-${Date.now()}.json.tmp`);
22074
+ const tempPath = join20(manifestDir, `.marketplace-${process.pid}-${Date.now()}.json.tmp`);
21913
22075
  await writeFile6(tempPath, `${JSON.stringify(marketplace, null, "\t")}
21914
22076
  `);
21915
- await rename4(tempPath, join19(manifestDir, "marketplace.json"));
22077
+ await rename5(tempPath, join20(manifestDir, "marketplace.json"));
21916
22078
  }
21917
22079
  async function writeSnapshotPlugin(marketplaceRoot, plugin) {
21918
- const pluginsDir = join19(marketplaceRoot, "plugins");
22080
+ const pluginsDir = join20(marketplaceRoot, "plugins");
21919
22081
  await mkdir6(pluginsDir, { recursive: true });
21920
- const targetPath = join19(pluginsDir, plugin.name);
21921
- const tempPath = join19(pluginsDir, `.tmp-${plugin.name}-${process.pid}-${Date.now()}`);
21922
- await rm7(tempPath, { recursive: true, force: true });
21923
- await cp3(plugin.sourcePath, tempPath, {
22082
+ const targetPath = join20(pluginsDir, plugin.name);
22083
+ const tempPath = join20(pluginsDir, `.tmp-${plugin.name}-${process.pid}-${Date.now()}`);
22084
+ await rm8(tempPath, { recursive: true, force: true });
22085
+ await cp4(plugin.sourcePath, tempPath, {
21924
22086
  recursive: true,
21925
22087
  filter: (source) => shouldCopyMarketplaceSourcePath(source, plugin.sourcePath)
21926
22088
  });
21927
22089
  await copyBundledMcpRuntimeDists({ pluginRoot: tempPath, sourceRoot: plugin.sourcePath });
21928
- await rm7(targetPath, { recursive: true, force: true });
21929
- await rename4(tempPath, targetPath);
22090
+ await rm8(targetPath, { recursive: true, force: true });
22091
+ await rename5(tempPath, targetPath);
21930
22092
  await rewriteCachedMcpManifest(targetPath, plugin.sourcePath);
21931
22093
  return { name: plugin.name, path: targetPath };
21932
22094
  }
21933
22095
  function shouldCopyMarketplaceSourcePath(path, root) {
21934
- const relative = path === root ? "" : path.slice(root.length + sep6.length);
22096
+ const relative = path === root ? "" : path.slice(root.length + sep7.length);
21935
22097
  if (relative === "")
21936
22098
  return true;
21937
- const parts = relative.split(sep6);
22099
+ const parts = relative.split(sep7);
21938
22100
  return !parts.some((part) => part === ".git" || part === "node_modules");
21939
22101
  }
21940
22102
 
21941
22103
  // packages/omo-codex/src/install/link-cached-plugin-agents.ts
21942
- import { copyFile, lstat as lstat10, mkdir as mkdir7, readdir as readdir7, readFile as readFile17, rm as rm11, writeFile as writeFile9 } from "node:fs/promises";
21943
- import { basename as basename4, join as join24 } from "node:path";
22104
+ import { copyFile, lstat as lstat11, mkdir as mkdir7, readdir as readdir8, readFile as readFile17, rm as rm12, writeFile as writeFile9 } from "node:fs/promises";
22105
+ import { basename as basename4, join as join25 } from "node:path";
21944
22106
 
21945
22107
  // packages/omo-codex/src/install/agent-model-overrides.ts
21946
- import { readFile as readFile14, rm as rm8, writeFile as writeFile8 } from "node:fs/promises";
21947
- import { join as join21 } from "node:path";
22108
+ import { readFile as readFile14, rm as rm9, writeFile as writeFile8 } from "node:fs/promises";
22109
+ import { join as join22 } from "node:path";
21948
22110
 
21949
22111
  // packages/omo-codex/src/install/preserved-agent-settings.ts
21950
- import { lstat as lstat7, readFile as readFile13, readdir as readdir6, writeFile as writeFile7 } from "node:fs/promises";
21951
- import { join as join20 } from "node:path";
22112
+ import { lstat as lstat8, readFile as readFile13, readdir as readdir7, writeFile as writeFile7 } from "node:fs/promises";
22113
+ import { join as join21 } from "node:path";
21952
22114
 
21953
22115
  // packages/omo-codex/src/install/managed-agent-reasoning-defaults.ts
21954
22116
  var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
@@ -22141,15 +22303,15 @@ function resolveManagedAgentReasoning(input) {
22141
22303
 
22142
22304
  // packages/omo-codex/src/install/preserved-agent-settings.ts
22143
22305
  async function capturePreservedAgentReasoning(input) {
22144
- const agentsDir = join20(input.codexHome, "agents");
22306
+ const agentsDir = join21(input.codexHome, "agents");
22145
22307
  if (!await exists2(agentsDir))
22146
22308
  return new Map;
22147
22309
  const preserved = new Map;
22148
- const agentEntries = await readdir6(agentsDir, { withFileTypes: true });
22310
+ const agentEntries = await readdir7(agentsDir, { withFileTypes: true });
22149
22311
  for (const entry of agentEntries) {
22150
22312
  if (!entry.name.endsWith(".toml"))
22151
22313
  continue;
22152
- const content = await readTextIfExists(join20(agentsDir, entry.name));
22314
+ const content = await readTextIfExists(join21(agentsDir, entry.name));
22153
22315
  if (content === null)
22154
22316
  continue;
22155
22317
  const effort = extractReasoningEffort(content);
@@ -22163,15 +22325,15 @@ async function capturePreservedAgentReasoning(input) {
22163
22325
  return preserved;
22164
22326
  }
22165
22327
  async function capturePreservedAgentServiceTier(input) {
22166
- const agentsDir = join20(input.codexHome, "agents");
22328
+ const agentsDir = join21(input.codexHome, "agents");
22167
22329
  if (!await exists2(agentsDir))
22168
22330
  return new Map;
22169
22331
  const preserved = new Map;
22170
- const agentEntries = await readdir6(agentsDir, { withFileTypes: true });
22332
+ const agentEntries = await readdir7(agentsDir, { withFileTypes: true });
22171
22333
  for (const entry of agentEntries) {
22172
22334
  if (!entry.name.endsWith(".toml"))
22173
22335
  continue;
22174
- const content = await readTextIfExists(join20(agentsDir, entry.name));
22336
+ const content = await readTextIfExists(join21(agentsDir, entry.name));
22175
22337
  if (content === null)
22176
22338
  continue;
22177
22339
  preserved.set(agentNameFromToml(entry.name), extractServiceTier(content));
@@ -22300,7 +22462,7 @@ function agentNameFromToml(fileName) {
22300
22462
  }
22301
22463
  async function exists2(path) {
22302
22464
  try {
22303
- await lstat7(path);
22465
+ await lstat8(path);
22304
22466
  return true;
22305
22467
  } catch (error) {
22306
22468
  if (nodeErrorCode(error) !== "ENOENT")
@@ -22339,7 +22501,7 @@ async function readAgentModelReceipts(codexHome) {
22339
22501
  async function writeAgentModelReceipts(codexHome, receipts) {
22340
22502
  const path = receiptPath(codexHome);
22341
22503
  if (receipts.size === 0) {
22342
- await rm8(path, { force: true });
22504
+ await rm9(path, { force: true });
22343
22505
  return;
22344
22506
  }
22345
22507
  await writeFile8(path, `${JSON.stringify(Object.fromEntries(receipts), null, "\t")}
@@ -22360,7 +22522,7 @@ async function applyAgentOverride(input) {
22360
22522
  await writeFile8(input.linkPath, content);
22361
22523
  }
22362
22524
  function receiptPath(codexHome) {
22363
- return join21(codexHome, "agents", RECEIPT_FILE);
22525
+ return join22(codexHome, "agents", RECEIPT_FILE);
22364
22526
  }
22365
22527
  function parseJson(content) {
22366
22528
  try {
@@ -22392,8 +22554,8 @@ function handEditedAgentModel(installedModel, receipt) {
22392
22554
  }
22393
22555
 
22394
22556
  // packages/omo-codex/src/install/retired-managed-agent-purge.ts
22395
- import { lstat as lstat8, readFile as readFile15, rm as rm9 } from "node:fs/promises";
22396
- import { join as join22 } from "node:path";
22557
+ import { lstat as lstat9, readFile as readFile15, rm as rm10 } from "node:fs/promises";
22558
+ import { join as join23 } from "node:path";
22397
22559
  var RETIRED_MANAGED_AGENT_FILES = [
22398
22560
  {
22399
22561
  fileName: "codex-ultrawork-reviewer.toml",
@@ -22405,20 +22567,20 @@ var RETIRED_MANAGED_AGENT_FILES = [
22405
22567
  }
22406
22568
  ];
22407
22569
  async function purgeRetiredManagedAgentFiles(input) {
22408
- const agentsDir = join22(input.codexHome, "agents");
22570
+ const agentsDir = join23(input.codexHome, "agents");
22409
22571
  if (!await exists3(agentsDir))
22410
22572
  return;
22411
22573
  for (const retiredAgent of RETIRED_MANAGED_AGENT_FILES) {
22412
- const agentPath = join22(agentsDir, retiredAgent.fileName);
22574
+ const agentPath = join23(agentsDir, retiredAgent.fileName);
22413
22575
  if (!await exists3(agentPath))
22414
22576
  continue;
22415
- const agentStat = await lstat8(agentPath);
22577
+ const agentStat = await lstat9(agentPath);
22416
22578
  if (agentStat.isDirectory() && !agentStat.isSymbolicLink())
22417
22579
  continue;
22418
22580
  const content = await readTextIfExists2(agentPath);
22419
22581
  if (content === null || !hasRequiredMarkers(content, retiredAgent.requiredMarkers))
22420
22582
  continue;
22421
- await rm9(agentPath, { force: true });
22583
+ await rm10(agentPath, { force: true });
22422
22584
  }
22423
22585
  }
22424
22586
  function hasRequiredMarkers(content, markers) {
@@ -22435,7 +22597,7 @@ async function readTextIfExists2(path) {
22435
22597
  }
22436
22598
  async function exists3(path) {
22437
22599
  try {
22438
- await lstat8(path);
22600
+ await lstat9(path);
22439
22601
  return true;
22440
22602
  } catch (error) {
22441
22603
  if (nodeErrorCode2(error) !== "ENOENT")
@@ -22451,15 +22613,15 @@ function nodeErrorCode2(error) {
22451
22613
 
22452
22614
  // packages/omo-codex/src/install/default-agent-role.ts
22453
22615
  import { createHash as createHash3 } from "node:crypto";
22454
- import { lstat as lstat9, readFile as readFile16, rm as rm10 } from "node:fs/promises";
22455
- import { join as join23 } from "node:path";
22616
+ import { lstat as lstat10, readFile as readFile16, rm as rm11 } from "node:fs/promises";
22617
+ import { join as join24 } from "node:path";
22456
22618
  var REGISTRATION = { name: "default", configFile: "./agents/default.toml" };
22457
22619
  async function installDefaultAgentRole(input) {
22458
- const target = join23(input.codexHome, "agents", "default.toml");
22459
- const receipt = join23(input.codexHome, "agents", ".lazycodex-default.sha256");
22460
- const configPath = join23(input.codexHome, "config.toml");
22620
+ const target = join24(input.codexHome, "agents", "default.toml");
22621
+ const receipt = join24(input.codexHome, "agents", ".lazycodex-default.sha256");
22622
+ const configPath = join24(input.codexHome, "config.toml");
22461
22623
  const config = await readIfPresent(configPath);
22462
- const entry = await lstat9(target).catch((error) => {
22624
+ const entry = await lstat10(target).catch((error) => {
22463
22625
  if (error instanceof Error && "code" in error && error.code === "ENOENT")
22464
22626
  return null;
22465
22627
  throw error;
@@ -22480,8 +22642,8 @@ async function installDefaultAgentRole(input) {
22480
22642
  if (next !== config)
22481
22643
  await writeFileAtomic(configPath, next);
22482
22644
  }
22483
- await rm10(target);
22484
- await rm10(receipt);
22645
+ await rm11(target);
22646
+ await rm11(receipt);
22485
22647
  }
22486
22648
  return null;
22487
22649
  }
@@ -22518,7 +22680,7 @@ async function linkCachedPluginAgents(input) {
22518
22680
  await writeManifest(input.pluginRoot, []);
22519
22681
  return [];
22520
22682
  }
22521
- const agentsDir = join24(input.codexHome, "agents");
22683
+ const agentsDir = join25(input.codexHome, "agents");
22522
22684
  await mkdir7(agentsDir, { recursive: true });
22523
22685
  const previousReceipts = await readAgentModelReceipts(input.codexHome);
22524
22686
  const receipts = new Map;
@@ -22526,7 +22688,7 @@ async function linkCachedPluginAgents(input) {
22526
22688
  for (const agentPath of bundledAgents) {
22527
22689
  const agentFileName = basename4(agentPath);
22528
22690
  const agentName = agentNameFromToml2(agentFileName);
22529
- const linkPath = join24(agentsDir, agentFileName);
22691
+ const linkPath = join25(agentsDir, agentFileName);
22530
22692
  receipts.set(agentName, await syncAgentFile({ ...input, agentName, agentPath, linkPath, previousReceipt: previousReceipts.get(agentName) }));
22531
22693
  linked.push({ name: agentFileName, path: linkPath, target: agentPath });
22532
22694
  }
@@ -22566,22 +22728,22 @@ async function syncAgentFile(input) {
22566
22728
  };
22567
22729
  }
22568
22730
  async function discoverBundledAgents(pluginRoot) {
22569
- const componentsRoot = join24(pluginRoot, "components");
22731
+ const componentsRoot = join25(pluginRoot, "components");
22570
22732
  if (!await exists4(componentsRoot))
22571
22733
  return [];
22572
- const componentEntries = await readdir7(componentsRoot, { withFileTypes: true });
22734
+ const componentEntries = await readdir8(componentsRoot, { withFileTypes: true });
22573
22735
  const agents = [];
22574
22736
  for (const entry of componentEntries) {
22575
22737
  if (!entry.isDirectory())
22576
22738
  continue;
22577
- const agentsRoot = join24(componentsRoot, entry.name, "agents");
22739
+ const agentsRoot = join25(componentsRoot, entry.name, "agents");
22578
22740
  if (!await exists4(agentsRoot))
22579
22741
  continue;
22580
- const agentEntries = await readdir7(agentsRoot, { withFileTypes: true });
22742
+ const agentEntries = await readdir8(agentsRoot, { withFileTypes: true });
22581
22743
  for (const file of agentEntries) {
22582
22744
  if (!file.isFile() || !file.name.endsWith(".toml"))
22583
22745
  continue;
22584
- agents.push(join24(agentsRoot, file.name));
22746
+ agents.push(join25(agentsRoot, file.name));
22585
22747
  }
22586
22748
  }
22587
22749
  agents.sort();
@@ -22594,14 +22756,14 @@ async function replaceWithCopy(linkPath, target) {
22594
22756
  async function prepareReplacement(linkPath) {
22595
22757
  if (!await exists4(linkPath))
22596
22758
  return;
22597
- const entryStat = await lstat10(linkPath);
22759
+ const entryStat = await lstat11(linkPath);
22598
22760
  if (entryStat.isDirectory() && !entryStat.isSymbolicLink()) {
22599
22761
  throw new Error(`${linkPath} already exists and is a directory; refusing to replace`);
22600
22762
  }
22601
- await rm11(linkPath, { force: true });
22763
+ await rm12(linkPath, { force: true });
22602
22764
  }
22603
22765
  async function writeManifest(pluginRoot, agentPaths) {
22604
- const manifestPath = join24(pluginRoot, MANIFEST_FILE);
22766
+ const manifestPath = join25(pluginRoot, MANIFEST_FILE);
22605
22767
  const payload = { agents: [...agentPaths].sort() };
22606
22768
  await writeFile9(manifestPath, `${JSON.stringify(payload, null, "\t")}
22607
22769
  `);
@@ -22611,7 +22773,7 @@ function agentNameFromToml2(fileName) {
22611
22773
  }
22612
22774
  async function exists4(path) {
22613
22775
  try {
22614
- await lstat10(path);
22776
+ await lstat11(path);
22615
22777
  return true;
22616
22778
  } catch (error) {
22617
22779
  if (nodeErrorCode3(error) !== "ENOENT")
@@ -22673,10 +22835,10 @@ function agentNameFromToml3(fileName) {
22673
22835
 
22674
22836
  // packages/omo-codex/src/install/codex-marketplace.ts
22675
22837
  import { readFile as readFile18 } from "node:fs/promises";
22676
- import { join as join25 } from "node:path";
22838
+ import { join as join26 } from "node:path";
22677
22839
  var DEFAULT_MARKETPLACE_PATH = "packages/omo-codex/marketplace.json";
22678
22840
  async function readMarketplace(repoRoot, options) {
22679
- const marketplacePath = options?.marketplacePath ?? join25(repoRoot, DEFAULT_MARKETPLACE_PATH);
22841
+ const marketplacePath = options?.marketplacePath ?? join26(repoRoot, DEFAULT_MARKETPLACE_PATH);
22680
22842
  const raw = await readFile18(marketplacePath, "utf8");
22681
22843
  const parsed = JSON.parse(raw);
22682
22844
  if (!isPlainRecord(parsed))
@@ -22695,10 +22857,10 @@ async function readMarketplace(repoRoot, options) {
22695
22857
  function resolvePluginSource(repoRoot, plugin, options) {
22696
22858
  const sourcePath = localSourcePath(options?.pathOverride ?? plugin.source);
22697
22859
  const relativePath = sourcePath.slice(2);
22698
- return join25(repoRoot, ...relativePath.split(/[\\/]/));
22860
+ return join26(repoRoot, ...relativePath.split(/[\\/]/));
22699
22861
  }
22700
22862
  async function readPluginManifest(pluginRoot) {
22701
- const raw = await readFile18(join25(pluginRoot, ".codex-plugin", "plugin.json"), "utf8");
22863
+ const raw = await readFile18(join26(pluginRoot, ".codex-plugin", "plugin.json"), "utf8");
22702
22864
  const parsed = JSON.parse(raw);
22703
22865
  if (!isPlainRecord(parsed))
22704
22866
  throw new Error(`${pluginRoot} plugin.json must be an object`);
@@ -22779,11 +22941,11 @@ function validateLocalSourcePath(path) {
22779
22941
  }
22780
22942
 
22781
22943
  // packages/omo-codex/src/install/lazycodex-version-stamp.ts
22782
- import { readdir as readdir8, readFile as readFile19, writeFile as writeFile10 } from "node:fs/promises";
22783
- import { join as join26 } from "node:path";
22944
+ import { readdir as readdir9, readFile as readFile19, writeFile as writeFile10 } from "node:fs/promises";
22945
+ import { join as join27 } from "node:path";
22784
22946
  async function readDistributionManifest(repoRoot) {
22785
22947
  try {
22786
- const parsed = JSON.parse(await readFile19(join26(repoRoot, "package.json"), "utf8"));
22948
+ const parsed = JSON.parse(await readFile19(join27(repoRoot, "package.json"), "utf8"));
22787
22949
  if (!isPlainRecord(parsed) || typeof parsed.version !== "string" || parsed.version.trim().length === 0)
22788
22950
  return;
22789
22951
  return {
@@ -22807,19 +22969,19 @@ function resolveLazyCodexPluginVersion(input) {
22807
22969
  return input.manifestVersion ?? "local";
22808
22970
  }
22809
22971
  async function stampLazyCodexPluginVersion(input) {
22810
- const manifestPath = join26(input.pluginRoot, ".codex-plugin", "plugin.json");
22972
+ const manifestPath = join27(input.pluginRoot, ".codex-plugin", "plugin.json");
22811
22973
  const hookPaths = await readPluginHookPaths(manifestPath);
22812
22974
  await stampJsonVersion(manifestPath, input.version);
22813
- await stampJsonVersion(join26(input.pluginRoot, "package.json"), input.version);
22975
+ await stampJsonVersion(join27(input.pluginRoot, "package.json"), input.version);
22814
22976
  for (const hookPath of hookPaths) {
22815
- await stampHookStatusMessages(join26(input.pluginRoot, hookPath), input.version);
22977
+ await stampHookStatusMessages(join27(input.pluginRoot, hookPath), input.version);
22816
22978
  }
22817
22979
  await stampComponentVersions(input);
22818
22980
  }
22819
22981
  async function writeLazyCodexInstallSnapshot(input) {
22820
22982
  if (input.distributionManifest === undefined)
22821
22983
  return;
22822
- await writeFile10(join26(input.pluginRoot, "lazycodex-install.json"), `${JSON.stringify({
22984
+ await writeFile10(join27(input.pluginRoot, "lazycodex-install.json"), `${JSON.stringify({
22823
22985
  packageName: input.distributionManifest.name,
22824
22986
  version: input.distributionManifest.version
22825
22987
  }, null, "\t")}
@@ -22876,16 +23038,16 @@ async function stampHookStatusMessages(path, version) {
22876
23038
  async function stampComponentVersions(input) {
22877
23039
  let entries;
22878
23040
  try {
22879
- entries = await readdir8(join26(input.pluginRoot, "components"));
23041
+ entries = await readdir9(join27(input.pluginRoot, "components"));
22880
23042
  } catch (error) {
22881
23043
  if (error instanceof Error)
22882
23044
  return;
22883
23045
  throw error;
22884
23046
  }
22885
23047
  for (const entry of entries) {
22886
- const componentRoot = join26(input.pluginRoot, "components", entry);
22887
- await stampJsonVersion(join26(componentRoot, "package.json"), input.version);
22888
- await stampHookStatusMessages(join26(componentRoot, "hooks", "hooks.json"), input.version);
23048
+ const componentRoot = join27(input.pluginRoot, "components", entry);
23049
+ await stampJsonVersion(join27(componentRoot, "package.json"), input.version);
23050
+ await stampHookStatusMessages(join27(componentRoot, "hooks", "hooks.json"), input.version);
22889
23051
  }
22890
23052
  }
22891
23053
  function stampHookGroups(hooks, version) {
@@ -22914,8 +23076,8 @@ function normalizeHookStatusVersion(version) {
22914
23076
  }
22915
23077
 
22916
23078
  // packages/omo-codex/src/install/codex-project-local-cleanup.ts
22917
- import { copyFile as copyFile2, lstat as lstat11, readFile as readFile20, writeFile as writeFile11 } from "node:fs/promises";
22918
- import { dirname as dirname9, join as join27, resolve as resolve8 } from "node:path";
23079
+ import { copyFile as copyFile2, lstat as lstat12, readFile as readFile20, writeFile as writeFile11 } from "node:fs/promises";
23080
+ import { dirname as dirname9, join as join28, resolve as resolve8 } from "node:path";
22919
23081
  var LEGACY_AGENT_CONFLICT_KEYS = ["max_threads"];
22920
23082
  var PROJECT_LOCAL_ARTIFACT_PATHS = [
22921
23083
  ".codex/hooks.json",
@@ -23018,17 +23180,17 @@ async function findProjectLocalCodexConfigs(startDirectory, codexHome) {
23018
23180
  if (startDirectoryStat !== null && !startDirectoryStat.isDirectory()) {
23019
23181
  throw new ProjectLocalCleanupStartDirectoryError(startDirectory);
23020
23182
  }
23021
- const codexHomeConfigPath = codexHome === undefined ? null : join27(resolve8(codexHome), "config.toml");
23183
+ const codexHomeConfigPath = codexHome === undefined ? null : join28(resolve8(codexHome), "config.toml");
23022
23184
  let current = resolve8(startDirectory);
23023
23185
  const configPathsFromCwd = [];
23024
23186
  while (true) {
23025
- const configPath = join27(current, ".codex", "config.toml");
23187
+ const configPath = join28(current, ".codex", "config.toml");
23026
23188
  if (await isRegularProjectLocalConfig(current, configPath)) {
23027
23189
  if (codexHomeConfigPath === null || resolve8(configPath) !== codexHomeConfigPath) {
23028
23190
  configPathsFromCwd.push(configPath);
23029
23191
  }
23030
23192
  }
23031
- if (await exists5(join27(current, ".git"))) {
23193
+ if (await exists5(join28(current, ".git"))) {
23032
23194
  return configPathsFromCwd.length === 0 ? null : {
23033
23195
  projectRoot: current,
23034
23196
  configPaths: [...configPathsFromCwd].reverse(),
@@ -23048,7 +23210,7 @@ async function findProjectLocalCodexConfigs(startDirectory, codexHome) {
23048
23210
  }
23049
23211
  }
23050
23212
  async function isRegularProjectLocalConfig(directory, configPath) {
23051
- const codexDirStat = await maybeLstat(join27(directory, ".codex"));
23213
+ const codexDirStat = await maybeLstat(join28(directory, ".codex"));
23052
23214
  if (codexDirStat === null || !codexDirStat.isDirectory() || codexDirStat.isSymbolicLink())
23053
23215
  return false;
23054
23216
  const configStat = await maybeLstat(configPath);
@@ -23068,7 +23230,7 @@ async function collectProjectLocalArtifacts(projectRoots) {
23068
23230
  const seenPaths = new Set;
23069
23231
  for (const projectRoot of projectRoots) {
23070
23232
  for (const relativePath of PROJECT_LOCAL_ARTIFACT_PATHS) {
23071
- const artifactPath = join27(projectRoot, relativePath);
23233
+ const artifactPath = join28(projectRoot, relativePath);
23072
23234
  if (seenPaths.has(artifactPath))
23073
23235
  continue;
23074
23236
  const entryStat = await maybeLstat(artifactPath);
@@ -23102,7 +23264,7 @@ function formatBackupTimestamp(date) {
23102
23264
  }
23103
23265
  async function maybeLstat(path) {
23104
23266
  try {
23105
- return await lstat11(path);
23267
+ return await lstat12(path);
23106
23268
  } catch (error) {
23107
23269
  if (nodeErrorCode4(error) === "ENOENT")
23108
23270
  return null;
@@ -23144,13 +23306,13 @@ function formatUnknownError(error) {
23144
23306
 
23145
23307
  // packages/omo-codex/src/install/lsp-daemon-reaper.ts
23146
23308
  import { createHash as createHash4 } from "node:crypto";
23147
- import { lstat as lstat12, readFile as readFile22, readdir as readdir10, rm as rm12 } from "node:fs/promises";
23309
+ import { lstat as lstat13, readFile as readFile22, readdir as readdir11, rm as rm13 } from "node:fs/promises";
23148
23310
  import { tmpdir } from "node:os";
23149
- import { join as join28, posix as posix2 } from "node:path";
23311
+ import { join as join29, posix as posix2 } from "node:path";
23150
23312
 
23151
23313
  // packages/omo-codex/src/install/lsp-daemon-reaper-attestation.ts
23152
23314
  import { execFile } from "node:child_process";
23153
- import { readFile as readFile21, readdir as readdir9, readlink as readlink5 } from "node:fs/promises";
23315
+ import { readFile as readFile21, readdir as readdir10, readlink as readlink5 } from "node:fs/promises";
23154
23316
  import { connect } from "node:net";
23155
23317
  import { basename as basename5 } from "node:path";
23156
23318
  var PROBE_TIMEOUT_MS = 500;
@@ -23193,7 +23355,7 @@ async function attestLegacyDaemonOwnership(input, deps = {}) {
23193
23355
  }
23194
23356
  async function attestLinuxOwnership(input, deps) {
23195
23357
  const readFileImpl = deps.readFile ?? readFile21;
23196
- const readDirImpl = deps.readDir ?? readdir9;
23358
+ const readDirImpl = deps.readDir ?? readdir10;
23197
23359
  const readLinkImpl = deps.readLink ?? readlink5;
23198
23360
  const procNetUnix = await readText(readFileImpl, "/proc/net/unix");
23199
23361
  if (procNetUnix === null)
@@ -23319,17 +23481,17 @@ async function readBinary(readFileImpl, path) {
23319
23481
  var LEGACY_EXIT_WAIT_TIMEOUT_MS = 5000;
23320
23482
  var LEGACY_VERSION_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/;
23321
23483
  async function reapLspDaemons(codexHome, deps = {}) {
23322
- const daemonRoot = join28(codexHome, "codex-lsp", "daemon");
23484
+ const daemonRoot = join29(codexHome, "codex-lsp", "daemon");
23323
23485
  const platform = deps.platform ?? process.platform;
23324
23486
  const tmpDir = deps.tmpDir ?? tmpdir();
23325
23487
  const probe = deps.probeLegacyJsonRpc ?? probeLegacyJsonRpcEndpoint;
23326
23488
  const attest = deps.attestLegacyDaemonOwnership ?? ((input) => attestLegacyDaemonOwnership(input));
23327
23489
  const killProcess = deps.killProcess ?? sendSigterm;
23328
23490
  const waitForProcessExit = deps.waitForProcessExit ?? defaultWaitForProcessExit;
23329
- const entries = await readdir10(daemonRoot, { withFileTypes: true }).catch(() => []);
23491
+ const entries = await readdir11(daemonRoot, { withFileTypes: true }).catch(() => []);
23330
23492
  const results = [];
23331
23493
  for (const entry of [...entries].sort((left, right) => left.name.localeCompare(right.name))) {
23332
- const versionPath = join28(daemonRoot, entry.name);
23494
+ const versionPath = join29(daemonRoot, entry.name);
23333
23495
  const parsedVersion = parseVersionEntry(entry.name);
23334
23496
  if (parsedVersion === null || !entry.isDirectory()) {
23335
23497
  await removeVersionDir(versionPath);
@@ -23377,7 +23539,7 @@ function parseVersionEntry(entryName) {
23377
23539
  return LEGACY_VERSION_PATTERN.test(version) ? version : null;
23378
23540
  }
23379
23541
  async function readLegacyMetadata(input) {
23380
- const pidText = await readRegularTrimmedFile(join28(input.versionPath, "daemon.pid"));
23542
+ const pidText = await readRegularTrimmedFile(join29(input.versionPath, "daemon.pid"));
23381
23543
  if (pidText === "non_regular")
23382
23544
  return { kind: "remove", reason: "removed non-regular legacy daemon metadata" };
23383
23545
  if (pidText === null)
@@ -23385,7 +23547,7 @@ async function readLegacyMetadata(input) {
23385
23547
  const pid = Number.parseInt(pidText, 10);
23386
23548
  if (!Number.isInteger(pid) || pid <= 0)
23387
23549
  return { kind: "remove", reason: "removed malformed legacy daemon metadata" };
23388
- const endpointText = await readRegularTrimmedFile(join28(input.versionPath, "daemon.endpoint"));
23550
+ const endpointText = await readRegularTrimmedFile(join29(input.versionPath, "daemon.endpoint"));
23389
23551
  if (endpointText === "non_regular")
23390
23552
  return { kind: "remove", reason: "removed non-regular legacy daemon metadata" };
23391
23553
  if (endpointText === null)
@@ -23412,7 +23574,7 @@ function legacyEndpointCandidates(input) {
23412
23574
  return [natural, hashed];
23413
23575
  }
23414
23576
  async function readRegularTrimmedFile(path) {
23415
- const stats = await lstat12(path).catch(() => null);
23577
+ const stats = await lstat13(path).catch(() => null);
23416
23578
  if (stats === null)
23417
23579
  return null;
23418
23580
  if (!stats.isFile())
@@ -23424,7 +23586,7 @@ function shortDigest(value) {
23424
23586
  return createHash4("sha256").update(value).digest("hex").slice(0, 16);
23425
23587
  }
23426
23588
  async function removeVersionDir(path) {
23427
- await rm12(path, { recursive: true, force: true });
23589
+ await rm13(path, { recursive: true, force: true });
23428
23590
  }
23429
23591
  function removed(version, reason) {
23430
23592
  return { version, status: "removed", reason };
@@ -23464,7 +23626,7 @@ function processIsRunning(pid) {
23464
23626
 
23465
23627
  // packages/omo-codex/src/install/codex-installer-bin-dir.ts
23466
23628
  import { homedir } from "node:os";
23467
- import { join as join29, resolve as resolve9 } from "node:path";
23629
+ import { join as join30, resolve as resolve9 } from "node:path";
23468
23630
  function resolveCodexInstallerBinDir(input) {
23469
23631
  const explicitBinDir = input.binDir ?? input.env?.CODEX_LOCAL_BIN_DIR;
23470
23632
  if (explicitBinDir !== undefined && explicitBinDir.trim().length > 0)
@@ -23473,22 +23635,22 @@ function resolveCodexInstallerBinDir(input) {
23473
23635
  const defaultCodexHome = resolve9(homeDir, ".codex");
23474
23636
  const resolvedCodexHome = resolve9(input.codexHome);
23475
23637
  if (resolvedCodexHome !== defaultCodexHome)
23476
- return join29(resolvedCodexHome, "bin");
23638
+ return join30(resolvedCodexHome, "bin");
23477
23639
  return resolve9(homeDir, ".local", "bin");
23478
23640
  }
23479
23641
 
23480
23642
  // packages/omo-codex/src/install/codex-installed-bin-dir.ts
23481
- import { readFile as readFile23, readdir as readdir11, writeFile as writeFile12 } from "node:fs/promises";
23482
- import { join as join30 } from "node:path";
23643
+ import { readFile as readFile23, readdir as readdir12, writeFile as writeFile12 } from "node:fs/promises";
23644
+ import { join as join31 } from "node:path";
23483
23645
  var INSTALLED_BIN_DIR_MANIFEST = ".installed-bin-dir.json";
23484
23646
  async function writeInstalledCodexBinDir(input) {
23485
- await writeFile12(join30(input.pluginRoot, INSTALLED_BIN_DIR_MANIFEST), `${JSON.stringify({ binDir: input.binDir }, null, 2)}
23647
+ await writeFile12(join31(input.pluginRoot, INSTALLED_BIN_DIR_MANIFEST), `${JSON.stringify({ binDir: input.binDir }, null, 2)}
23486
23648
  `);
23487
23649
  }
23488
23650
 
23489
23651
  // packages/omo-codex/src/install/codex-git-bash-hooks.ts
23490
23652
  import { readFile as readFile24, writeFile as writeFile13 } from "node:fs/promises";
23491
- import { join as join31 } from "node:path";
23653
+ import { join as join32 } from "node:path";
23492
23654
  var WINDOWS_ONLY_GIT_BASH_HOOKS = new Set([
23493
23655
  "./hooks/pre-tool-use-recommending-git-bash-mcp.json",
23494
23656
  "./hooks/post-compact-resetting-git-bash-mcp-reminder.json"
@@ -23496,7 +23658,7 @@ var WINDOWS_ONLY_GIT_BASH_HOOKS = new Set([
23496
23658
  async function removeGitBashHooksOffWindows(input) {
23497
23659
  if (input.platform === "win32")
23498
23660
  return;
23499
- const manifestPath = join31(input.pluginRoot, ".codex-plugin", "plugin.json");
23661
+ const manifestPath = join32(input.pluginRoot, ".codex-plugin", "plugin.json");
23500
23662
  const parsed = JSON.parse(await readFile24(manifestPath, "utf8"));
23501
23663
  if (!isPlainRecord(parsed) || !Array.isArray(parsed.hooks))
23502
23664
  return;
@@ -23508,12 +23670,12 @@ async function removeGitBashHooksOffWindows(input) {
23508
23670
  }
23509
23671
 
23510
23672
  // packages/omo-codex/src/install/install-ast-grep-sg.ts
23511
- import { join as join33 } from "node:path";
23673
+ import { join as join34 } from "node:path";
23512
23674
 
23513
23675
  // packages/utils/src/ast-grep/install-script.ts
23514
23676
  import { spawn as spawn2 } from "node:child_process";
23515
23677
  import { existsSync as existsSync4 } from "node:fs";
23516
- import { join as join32 } from "node:path";
23678
+ import { join as join33 } from "node:path";
23517
23679
 
23518
23680
  // packages/utils/src/ast-grep/sg-manifest.ts
23519
23681
  function normalizeRuntimePlatform(platform = process.platform) {
@@ -23535,7 +23697,7 @@ var AST_GREP_BIN_DIR_ENV_KEY = "OMO_AST_GREP_BIN_DIR";
23535
23697
  var KILL_GRACE_MS = 1000;
23536
23698
  var AST_GREP_INSTALL_TIMEOUT_MS = 30000;
23537
23699
  function astGrepRuntimeDir(baseDir, platform = process.platform, arch = process.arch) {
23538
- return join32(baseDir, "runtime", "ast-grep", runtimeSlug(platform, arch));
23700
+ return join33(baseDir, "runtime", "ast-grep", runtimeSlug(platform, arch));
23539
23701
  }
23540
23702
  function isMissingExecutable(error) {
23541
23703
  if (!("code" in error))
@@ -23573,7 +23735,7 @@ function defaultSpawnProcess(command, args, options) {
23573
23735
  };
23574
23736
  }
23575
23737
  function scriptPathForPlatform(skillDir, platform) {
23576
- return join32(skillDir, platform === "win32" ? "install.ps1" : "install.sh");
23738
+ return join33(skillDir, platform === "win32" ? "install.ps1" : "install.sh");
23577
23739
  }
23578
23740
  function invocationsForPlatform(scriptPath, platform) {
23579
23741
  if (platform !== "win32")
@@ -23659,7 +23821,7 @@ async function installAstGrepForCodex(options) {
23659
23821
  return;
23660
23822
  const platform = options.platform ?? process.platform;
23661
23823
  const targetDir = astGrepRuntimeDir(options.codexHome, platform, options.arch ?? process.arch);
23662
- const skillDir = join33(plugin.path, "skills", "ast-grep");
23824
+ const skillDir = join34(plugin.path, "skills", "ast-grep");
23663
23825
  const installer = options.installer ?? runAstGrepSkillInstall;
23664
23826
  try {
23665
23827
  const result = await installer({ platform, skillDir, targetDir });
@@ -23677,7 +23839,7 @@ async function trackCodexInstallTelemetry() {
23677
23839
  try {
23678
23840
  await Promise.resolve().then(() => init_telemetry());
23679
23841
  const posthog = createInstallPostHog();
23680
- posthog.trackActive(getPostHogDistinctId(), "install_completed");
23842
+ posthog.trackActive("install_completed");
23681
23843
  await posthog.shutdown();
23682
23844
  } catch (error) {
23683
23845
  if (error instanceof Error)
@@ -23692,7 +23854,7 @@ async function runCodexInstaller(options = {}) {
23692
23854
  const env = options.env ?? process.env;
23693
23855
  const platform = options.platform ?? process.platform;
23694
23856
  const repoRoot = resolve10(options.repoRoot ?? findRepoRoot({ importerDir: import.meta.dir, env }));
23695
- const codexHome = resolve10(options.codexHome ?? env.CODEX_HOME ?? join37(homedir2(), ".codex"));
23857
+ const codexHome = resolve10(options.codexHome ?? env.CODEX_HOME ?? join39(homedir2(), ".codex"));
23696
23858
  const projectDirectory = resolve10(options.projectDirectory ?? env.OMO_CODEX_PROJECT ?? process.cwd());
23697
23859
  const binDir = resolveCodexInstallerBinDir({ binDir: options.binDir, codexHome, env });
23698
23860
  const runCommand = options.runCommand ?? defaultRunCommand;
@@ -23709,9 +23871,9 @@ async function runCodexInstaller(options = {}) {
23709
23871
  if (!gitBashResolution.found) {
23710
23872
  throw new Error(gitBashResolution.installHint);
23711
23873
  }
23712
- const codexPackageRoot = join37(repoRoot, "packages", "omo-codex");
23874
+ const codexPackageRoot = join39(repoRoot, "packages", "omo-codex");
23713
23875
  const marketplace = await readMarketplace(repoRoot, {
23714
- marketplacePath: join37(codexPackageRoot, "marketplace.json")
23876
+ marketplacePath: join39(codexPackageRoot, "marketplace.json")
23715
23877
  });
23716
23878
  const distributionManifest = await readDistributionManifest(repoRoot);
23717
23879
  const installed = [];
@@ -23756,7 +23918,7 @@ async function runCodexInstaller(options = {}) {
23756
23918
  if (runtimeLink !== null)
23757
23919
  log(`Linked ${runtimeLink.name} -> ${runtimeLink.target}`);
23758
23920
  else
23759
- log(`Warning: skipped the omo-agent-toolkit runtime wrapper because ${join37(repoRoot, "dist", "cli", "index.js")} is missing; omo-agent-toolkit ulw-loop commands will be unavailable until a package shipping dist/cli is installed`);
23921
+ log(`Warning: skipped the omo-agent-toolkit runtime wrapper because ${join39(repoRoot, "dist", "cli", "index.js")} is missing; omo-agent-toolkit ulw-loop commands will be unavailable until a package shipping dist/cli is installed`);
23760
23922
  }
23761
23923
  pluginSources.push({ name: entry.name, sourcePath });
23762
23924
  installed.push(plugin);
@@ -23806,13 +23968,13 @@ async function runCodexInstaller(options = {}) {
23806
23968
  continue;
23807
23969
  log(`Warning: deferred legacy Codex LSP daemon cleanup for v${cleanup.version}: ${cleanup.reason}`);
23808
23970
  }
23809
- const marketplaceRoot = join37(codexHome, "plugins", "cache", marketplace.name);
23971
+ const marketplaceRoot = join39(codexHome, "plugins", "cache", marketplace.name);
23810
23972
  await writeCachedMarketplaceManifest({
23811
23973
  marketplaceName: marketplace.name,
23812
23974
  marketplaceRoot,
23813
23975
  plugins: installed
23814
23976
  });
23815
- const configPath = join37(codexHome, "config.toml");
23977
+ const configPath = join39(codexHome, "config.toml");
23816
23978
  await updateCodexConfig({
23817
23979
  configPath,
23818
23980
  repoRoot: codexPackageRoot,
@@ -23857,7 +24019,7 @@ function findRepoRootFromImporter(importerDir) {
23857
24019
  for (let depth = 0;depth <= 7; depth += 1) {
23858
24020
  if (isRepoRootWithCodexPlugin(current))
23859
24021
  return current;
23860
- for (const wrapperPackageRoot of [join37(current, "node_modules", "oh-my-openagent"), join37(current, "oh-my-openagent")]) {
24022
+ for (const wrapperPackageRoot of [join39(current, "node_modules", "oh-my-openagent"), join39(current, "oh-my-openagent")]) {
23861
24023
  if (isRepoRootWithCodexPlugin(wrapperPackageRoot))
23862
24024
  return wrapperPackageRoot;
23863
24025
  }
@@ -23875,7 +24037,7 @@ function findRepoRoot(input) {
23875
24037
  return findRepoRootFromImporter(input.importerDir);
23876
24038
  }
23877
24039
  function isRepoRootWithCodexPlugin(repoRoot) {
23878
- return existsSync7(join37(repoRoot, "packages", "omo-codex", "plugin", ".codex-plugin", "plugin.json"));
24040
+ return existsSync7(join39(repoRoot, "packages", "omo-codex", "plugin", ".codex-plugin", "plugin.json"));
23879
24041
  }
23880
24042
  function codexMarketplaceSource(marketplaceRoot) {
23881
24043
  return { sourceType: "local", source: marketplaceRoot };
@@ -24187,13 +24349,13 @@ function shellQuote(value) {
24187
24349
 
24188
24350
  // packages/omo-codex/src/install/lazycodex-manual-update.ts
24189
24351
  import { spawn as spawn3, spawnSync as spawnSync2 } from "node:child_process";
24190
- import { readFileSync as readFileSync5 } from "node:fs";
24191
- import { dirname as dirname12, join as join39 } from "node:path";
24352
+ import { readFileSync as readFileSync6 } from "node:fs";
24353
+ import { dirname as dirname13, join as join41 } from "node:path";
24192
24354
  import { createInterface as createInterface2 } from "node:readline/promises";
24193
24355
  import { fileURLToPath } from "node:url";
24194
24356
 
24195
24357
  // packages/omo-codex/src/install/lazycodex-bun-global-paths.ts
24196
- import { join as join38 } from "node:path";
24358
+ import { join as join40 } from "node:path";
24197
24359
  function isBunGlobalEntrypointPath(invokedPath, env) {
24198
24360
  if (typeof invokedPath !== "string" || invokedPath.trim().length === 0)
24199
24361
  return false;
@@ -24204,8 +24366,8 @@ function resolveBunGlobalRoots(env) {
24204
24366
  const bunInstallRoot = env.BUN_INSTALL?.trim();
24205
24367
  const homeRoot = env.HOME?.trim();
24206
24368
  return [
24207
- ...bunInstallRoot ? [join38(bunInstallRoot, "bin"), join38(bunInstallRoot, "install", "global", "node_modules")] : [],
24208
- ...homeRoot ? [join38(homeRoot, ".bun", "bin"), join38(homeRoot, ".bun", "install", "global", "node_modules")] : []
24369
+ ...bunInstallRoot ? [join40(bunInstallRoot, "bin"), join40(bunInstallRoot, "install", "global", "node_modules")] : [],
24370
+ ...homeRoot ? [join40(homeRoot, ".bun", "bin"), join40(homeRoot, ".bun", "install", "global", "node_modules")] : []
24209
24371
  ].map(normalizePathForPrefix);
24210
24372
  }
24211
24373
  function normalizePathForPrefix(path) {
@@ -24297,8 +24459,8 @@ function resolveArgs(env) {
24297
24459
  function resolveCurrentVersion(env) {
24298
24460
  if (env.LAZYCODEX_CURRENT_VERSION?.trim())
24299
24461
  return env.LAZYCODEX_CURRENT_VERSION.trim();
24300
- const pluginRoot = dirname12(dirname12(fileURLToPath(import.meta.url)));
24301
- return readVersionManifest(resolveInstalledVersionPath(env, pluginRoot)) ?? readVersionManifest(join39(pluginRoot, "..", "..", "..", "package.json")) ?? readVersionManifest(join39(pluginRoot, ".codex-plugin", "plugin.json"));
24462
+ const pluginRoot = dirname13(dirname13(fileURLToPath(import.meta.url)));
24463
+ return readVersionManifest(resolveInstalledVersionPath(env, pluginRoot)) ?? readVersionManifest(join41(pluginRoot, "..", "..", "..", "package.json")) ?? readVersionManifest(join41(pluginRoot, ".codex-plugin", "plugin.json"));
24302
24464
  }
24303
24465
  function resolveLatestVersion(env) {
24304
24466
  if (env.LAZYCODEX_LATEST_VERSION?.trim())
@@ -24414,11 +24576,11 @@ function compareVersions(left, right) {
24414
24576
  function resolveInstalledVersionPath(env, pluginRoot) {
24415
24577
  if (env.LAZYCODEX_INSTALLED_VERSION_FILE?.trim())
24416
24578
  return env.LAZYCODEX_INSTALLED_VERSION_FILE.trim();
24417
- return join39(pluginRoot, INSTALLED_VERSION_FILE);
24579
+ return join41(pluginRoot, INSTALLED_VERSION_FILE);
24418
24580
  }
24419
24581
  function readVersionManifest(path) {
24420
24582
  try {
24421
- const parsed = JSON.parse(readFileSync5(path, "utf8"));
24583
+ const parsed = JSON.parse(readFileSync6(path, "utf8"));
24422
24584
  if (typeof parsed === "object" && parsed !== null && "version" in parsed && typeof parsed.version === "string") {
24423
24585
  return parsed.version;
24424
24586
  }
@@ -24431,10 +24593,10 @@ function readVersionManifest(path) {
24431
24593
  }
24432
24594
  // packages/omo-codex/src/install/codex-git-bash-mcp-env.ts
24433
24595
  import { readFile as readFile25, writeFile as writeFile14 } from "node:fs/promises";
24434
- import { join as join40 } from "node:path";
24596
+ import { join as join42 } from "node:path";
24435
24597
  var GIT_BASH_ENV_KEY2 = "OMO_CODEX_GIT_BASH_PATH";
24436
24598
  async function stampGitBashMcpEnv(input) {
24437
- const manifestPath = join40(input.pluginRoot, ".mcp.json");
24599
+ const manifestPath = join42(input.pluginRoot, ".mcp.json");
24438
24600
  if (!await fileExistsStrict(manifestPath))
24439
24601
  return false;
24440
24602
  const parsed = JSON.parse(await readFile25(manifestPath, "utf8"));
@@ -24465,7 +24627,7 @@ async function installMarketplaceLocally(options = {}) {
24465
24627
  return runCodexInstaller(options);
24466
24628
  }
24467
24629
  function resolveDefaultRepoRootForEntrypoint(entrypointPath) {
24468
- return resolve11(dirname13(entrypointPath), "..", "..", "..");
24630
+ return resolve11(dirname14(entrypointPath), "..", "..", "..");
24469
24631
  }
24470
24632
  function resolveDefaultRepoRoot() {
24471
24633
  return resolveDefaultRepoRootForEntrypoint(fileURLToPath2(import.meta.url));
@@ -24481,7 +24643,7 @@ async function runLazyCodexInstallLocalCli(input) {
24481
24643
  return 0;
24482
24644
  }
24483
24645
  if (parsed.kind === "version") {
24484
- const packageJson = JSON.parse(await readFile26(join41(input.defaultRepoRoot, "package.json"), "utf8"));
24646
+ const packageJson = JSON.parse(await readFile26(join43(input.defaultRepoRoot, "package.json"), "utf8"));
24485
24647
  const version = typeof packageJson.version === "string" ? packageJson.version : "unknown";
24486
24648
  input.log(`lazycodex-ai ${version}`);
24487
24649
  return 0;
@@ -24502,7 +24664,7 @@ async function runLazyCodexInstallLocalCli(input) {
24502
24664
  env: input.env,
24503
24665
  log: logWarning
24504
24666
  });
24505
- input.log(`Installed ${result.installed.length} plugin(s) from ${result.marketplaceName}.`);
24667
+ logInstalled(input.log, result);
24506
24668
  return 0;
24507
24669
  }
24508
24670
  return runLazyCodexManualUpdate({ env: input.env, dryRun: parsed.dryRun, log: input.log, invokedPath: input.invokedPath });
@@ -24514,9 +24676,15 @@ async function runLazyCodexInstallLocalCli(input) {
24514
24676
  env: input.env,
24515
24677
  log: logWarning
24516
24678
  });
24517
- input.log(`Installed ${result.installed.length} plugin(s) from ${result.marketplaceName}.`);
24679
+ logInstalled(input.log, result);
24518
24680
  return 0;
24519
24681
  }
24682
+ function logInstalled(log, result) {
24683
+ log(`Installed ${result.installed.length} plugin(s) from ${result.marketplaceName}.`);
24684
+ log("");
24685
+ for (const line of TELEMETRY_INSTALL_DISCLOSURE_LINES)
24686
+ log(line);
24687
+ }
24520
24688
  export {
24521
24689
  PASSTHROUGH_COMMANDS,
24522
24690
  assertHookCommandTargets,