lazycodex-ai 5.0.0-beta.9 → 5.0.0

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 (869) hide show
  1. package/README.ja.md +64 -69
  2. package/README.ko.md +65 -70
  3. package/README.md +108 -182
  4. package/README.ru.md +60 -68
  5. package/README.zh-cn.md +60 -69
  6. package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
  7. package/dist/cli/config-manager/refresh-opencode-plugin-sandbox.d.ts +31 -0
  8. package/dist/cli/doctor/checks/browser-provider.d.ts +2 -0
  9. package/dist/cli/doctor/checks/index.d.ts +2 -0
  10. package/dist/cli/doctor/checks/latest-version.d.ts +11 -0
  11. package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
  12. package/dist/cli/doctor/checks/tui-plugin-config.d.ts +11 -0
  13. package/dist/cli/doctor/framework/constants.d.ts +5 -0
  14. package/dist/cli/doctor/framework/types.d.ts +2 -0
  15. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  16. package/dist/cli/index.js +60340 -63161
  17. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  18. package/dist/cli/install-native/index.d.ts +12 -0
  19. package/dist/cli/install-native/legacy-omo-bin.d.ts +27 -0
  20. package/dist/cli/install-native/offer-native-setup.d.ts +31 -0
  21. package/dist/cli/install-native/omo-bin-test-fixtures.d.ts +35 -0
  22. package/dist/cli/install-native/plan.d.ts +21 -0
  23. package/dist/cli/install-native/repair-legacy-omo-bin.d.ts +26 -0
  24. package/dist/cli/install-native/run-native-install.d.ts +33 -0
  25. package/dist/cli/install-native/verify-omo-command.d.ts +22 -0
  26. package/dist/cli/install-native-dev/index.d.ts +4 -0
  27. package/dist/cli/native-dev-platform-flag.d.ts +5 -0
  28. package/dist/cli/native-edition-hint.d.ts +10 -0
  29. package/dist/cli/runtime-commands.d.ts +1 -1
  30. package/dist/cli/types.d.ts +3 -2
  31. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  32. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  33. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  34. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  35. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  36. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  37. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  38. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  39. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  40. package/dist/cli-node/index.js +61667 -64465
  41. package/package.json +15 -14
  42. package/packages/git-bash-mcp/dist/cli.js +6 -1
  43. package/packages/lsp-daemon/dist/cli.js +1421 -960
  44. package/packages/lsp-daemon/dist/client.d.ts +10 -0
  45. package/packages/lsp-daemon/dist/client.js +956 -498
  46. package/packages/lsp-daemon/dist/daemon-client.d.ts +3 -0
  47. package/packages/lsp-daemon/dist/daemon-client.js +23 -3
  48. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
  49. package/packages/lsp-daemon/dist/ensure-daemon.js +27 -5
  50. package/packages/lsp-daemon/dist/index.js +860 -407
  51. package/packages/lsp-daemon/dist/ownership.js +2 -2
  52. package/packages/lsp-daemon/dist/proxy.js +3 -0
  53. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  54. package/packages/lsp-daemon/package.json +5 -4
  55. package/packages/lsp-tools-mcp/dist/cli.js +764 -341
  56. package/packages/lsp-tools-mcp/dist/lsp/manager.js +274 -138
  57. package/packages/lsp-tools-mcp/dist/mcp.js +789 -368
  58. package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
  59. package/packages/lsp-tools-mcp/dist/tools.js +719 -302
  60. package/packages/lsp-tools-mcp/package.json +5 -4
  61. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
  62. package/packages/omo-codex/plugin/.mcp.json +0 -6
  63. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  64. package/packages/omo-codex/plugin/README.md +6 -2
  65. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +8504 -408
  66. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  67. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  68. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  69. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -1
  70. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  71. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  72. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  73. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  74. package/packages/omo-codex/plugin/components/comment-checker/package.json +6 -5
  75. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  76. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  77. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  78. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  79. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  80. package/packages/omo-codex/plugin/components/git-bash/dist/cli.js +1 -1
  81. package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.js +2 -1
  82. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  83. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  84. package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +2 -1
  85. package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +6 -7
  86. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
  87. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  88. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
  89. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +36 -29
  90. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +32 -26
  91. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
  92. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  93. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +6 -5
  94. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +32 -28
  95. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
  96. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
  97. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +134 -11
  98. package/packages/omo-codex/plugin/components/lcx/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  99. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +7 -5
  100. package/packages/omo-codex/plugin/components/lcx/skills/lcx-report-bug/SKILL.md +5 -5
  101. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  102. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  103. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  104. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +977 -545
  105. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  106. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  107. package/packages/omo-codex/plugin/components/lsp/package.json +6 -5
  108. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  109. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  110. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  111. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  112. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  113. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  114. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  115. package/packages/omo-codex/plugin/components/rules/README.md +2 -0
  116. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  117. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +5 -1
  118. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +127 -0
  119. package/packages/omo-codex/plugin/components/rules/dist/cli.js +103 -68
  120. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  121. package/packages/omo-codex/plugin/components/rules/package.json +8 -7
  122. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  123. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  124. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +27 -5
  125. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  126. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  127. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +1 -2
  128. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  129. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  130. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  131. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +2 -3
  132. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +38 -3
  133. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  134. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  135. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  136. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +29 -6
  137. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  138. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  139. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  140. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +1 -2
  141. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  142. package/packages/omo-codex/plugin/components/teammode/package.json +6 -5
  143. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +1 -1
  144. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  145. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  146. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +5328 -1382
  147. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +5524 -1579
  148. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  149. package/packages/omo-codex/plugin/components/telemetry/package.json +6 -5
  150. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  151. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  152. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  153. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  154. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
  155. package/packages/omo-codex/plugin/components/ultrawork/README.md +3 -1
  156. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  157. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
  158. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  159. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  160. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  161. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  162. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  163. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  164. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
  165. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
  166. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
  167. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +20 -7
  168. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  169. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +478 -4
  170. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  171. package/packages/omo-codex/plugin/components/ultrawork/package.json +6 -6
  172. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  173. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +9 -10
  174. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +17 -13
  175. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +5 -6
  176. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +4 -4
  177. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  178. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  179. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  180. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  181. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  182. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  183. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  184. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +4 -4
  185. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  186. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +6 -6
  187. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  188. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +13 -13
  189. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +16 -16
  190. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +16 -0
  191. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +13 -12
  192. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  193. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  194. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +4 -4
  195. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  196. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  197. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +1 -1
  198. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  199. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +4 -8
  200. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +22 -6
  201. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
  202. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +17 -1
  203. package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
  204. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  205. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +102 -107
  206. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +18 -0
  207. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +30 -0
  208. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +10 -4
  209. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +2 -5
  210. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +5 -78
  211. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +12 -0
  212. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +114 -0
  213. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +7 -1
  214. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +57 -46
  215. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +2 -2
  216. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +21 -8
  217. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
  218. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
  219. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
  220. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +40 -37
  221. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2205 -737
  222. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  223. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +28 -8
  224. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +8 -5
  225. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +35 -23
  226. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
  227. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
  228. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +25 -9
  229. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.d.ts +4 -0
  230. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.js +18 -0
  231. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.d.ts +1 -0
  232. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.js +37 -0
  233. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +1 -0
  234. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +24 -12
  235. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.d.ts +4 -0
  236. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.js +39 -0
  237. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +2 -0
  238. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +19 -4
  239. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.d.ts +19 -0
  240. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.js +108 -0
  241. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +6 -2
  242. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +54 -25
  243. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.d.ts +10 -3
  244. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.js +38 -31
  245. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +10 -7
  246. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +121 -100
  247. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.d.ts +16 -0
  248. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.js +115 -0
  249. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +18 -0
  250. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +41 -0
  251. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
  252. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
  253. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
  254. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
  255. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
  256. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
  257. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
  258. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  259. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +72 -117
  260. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +2 -0
  261. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +25 -13
  262. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.d.ts +2 -0
  263. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +157 -0
  264. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +381 -0
  265. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +127 -0
  266. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +130 -0
  267. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.js +1 -0
  268. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.d.ts +3 -0
  269. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.js +3 -0
  270. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.d.ts +5 -0
  271. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.js +67 -0
  272. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +7 -1
  273. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +190 -59
  274. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.d.ts +2 -0
  275. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.js +22 -0
  276. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +19 -0
  277. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +259 -0
  278. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +7 -0
  279. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +41 -0
  280. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.js +4 -4
  281. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +3 -2
  282. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +4 -4
  283. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +9 -1
  284. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +3 -2
  285. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +11 -11
  286. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +28 -23
  287. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.d.ts +9 -0
  288. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.js +41 -0
  289. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +21 -0
  290. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +100 -0
  291. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +18 -5
  292. package/packages/omo-codex/plugin/components/ulw-loop/package.json +7 -6
  293. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +7 -2
  294. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +2 -3
  295. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +34 -11
  296. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +52 -0
  297. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +8 -6
  298. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +5 -98
  299. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
  300. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +59 -77
  301. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +10 -4
  302. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +24 -8
  303. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
  304. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +52 -46
  305. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +8 -6
  306. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +35 -7
  307. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +51 -33
  308. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  309. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
  310. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +27 -9
  311. package/packages/omo-codex/plugin/components/ulw-loop/src/driver-objective-ack.ts +20 -0
  312. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence-artifacts.ts +45 -0
  313. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +23 -16
  314. package/packages/omo-codex/plugin/components/ulw-loop/src/ledger.ts +38 -0
  315. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +32 -4
  316. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-commit.ts +132 -0
  317. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +67 -54
  318. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts +63 -31
  319. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +140 -119
  320. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-log.ts +112 -0
  321. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +61 -0
  322. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
  323. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
  324. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +71 -15
  325. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
  326. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +92 -136
  327. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +38 -13
  328. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +218 -0
  329. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +156 -0
  330. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +143 -0
  331. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk.ts +3 -0
  332. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-budget-io.ts +59 -0
  333. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +201 -52
  334. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-role-guard.ts +22 -0
  335. package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +257 -0
  336. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +45 -0
  337. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts +4 -4
  338. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +5 -4
  339. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +13 -1
  340. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +12 -10
  341. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +27 -22
  342. package/packages/omo-codex/plugin/components/ulw-loop/src/success-criteria-input.ts +56 -0
  343. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +133 -0
  344. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +131 -82
  345. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +147 -0
  346. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +16 -22
  347. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
  348. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +31 -2
  349. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
  350. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
  351. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +35 -8
  352. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +38 -4
  353. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +27 -0
  354. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
  355. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +185 -0
  356. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
  357. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -0
  358. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +35 -0
  359. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +88 -11
  360. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/barrier.ts +13 -0
  361. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/cli-session.ts +4 -0
  362. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-child.ts +65 -0
  363. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-cli-qa.mjs +76 -0
  364. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-crash.ts +23 -0
  365. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-mutations.mjs +58 -0
  366. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-writer.ts +65 -0
  367. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/lease-clock.ts +23 -0
  368. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +9 -4
  369. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +67 -0
  370. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +3 -2
  371. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  372. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-log.test.ts +252 -0
  373. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-recovery.test.ts +190 -0
  374. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io-cross-process.test.ts +106 -0
  375. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +74 -25
  376. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-legacy-projection.test.ts +228 -0
  377. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-newest.test.ts +72 -0
  378. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
  379. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
  380. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-fields-messages.test.ts +98 -0
  381. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-lazycodex-surface.test.ts +93 -0
  382. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
  383. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +51 -2
  384. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  385. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
  386. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +58 -3
  387. package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +9 -7
  388. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-completed-plan.test.ts +43 -0
  389. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-contract.test.ts +137 -0
  390. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +174 -0
  391. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-dx.test.ts +219 -0
  392. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-session-context.test.ts +169 -0
  393. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard-native-reviewer.test.ts +207 -0
  394. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +452 -7
  395. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +113 -0
  396. package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +310 -0
  397. package/packages/omo-codex/plugin/components/ulw-loop/test/status-next-actions-surface.test.ts +133 -0
  398. package/packages/omo-codex/plugin/components/ulw-loop/test/steering-batch.test.ts +12 -12
  399. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +12 -6
  400. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  401. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +113 -0
  402. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +9 -3
  403. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  404. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  405. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  406. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  407. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  408. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  409. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  410. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  411. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +18 -0
  412. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  413. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  414. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  415. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  416. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  417. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  418. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  419. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  420. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  421. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  422. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  423. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  424. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  425. package/packages/omo-codex/plugin/model-catalog.json +16 -7
  426. package/packages/omo-codex/plugin/package-lock.json +992 -681
  427. package/packages/omo-codex/plugin/package.json +6 -3
  428. package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
  429. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
  430. package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
  431. package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
  432. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
  433. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +8 -2
  434. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
  435. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
  436. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +19 -90
  437. package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
  438. package/packages/omo-codex/plugin/scripts/sync-skills.d.mts +4 -0
  439. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +114 -67
  440. package/packages/omo-codex/plugin/shared/package.json +3 -4
  441. package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
  442. package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
  443. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
  444. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  445. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +13 -1
  446. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +37 -0
  447. package/packages/omo-codex/plugin/skills/browser/SKILL.md +109 -0
  448. package/packages/omo-codex/plugin/skills/browser/agents/openai.yaml +2 -0
  449. package/packages/omo-codex/plugin/skills/browser/references/commands.md +105 -0
  450. package/packages/omo-codex/plugin/skills/browser/references/install.md +97 -0
  451. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +62 -0
  452. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +52 -0
  453. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +61 -0
  454. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +62 -0
  455. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +61 -0
  456. package/packages/omo-codex/plugin/skills/browser/references/remote.md +25 -0
  457. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +1534 -0
  458. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +9 -0
  459. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  460. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +57 -0
  461. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +50 -0
  462. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +25 -0
  463. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  464. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
  465. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +99 -239
  466. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
  467. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
  468. package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
  469. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
  470. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
  471. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  472. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  473. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +5 -3
  474. package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
  475. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +26 -5
  476. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +3 -3
  477. package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +1 -1
  478. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
  479. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
  480. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
  481. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
  482. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
  483. package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
  484. package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  485. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +104 -0
  486. package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
  487. package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
  488. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +10 -0
  489. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +8 -3
  490. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +13 -4
  491. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  492. package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +146 -0
  493. package/packages/omo-codex/plugin/skills/frontend/references/design/aside.md +1 -1
  494. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
  495. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +30 -6
  496. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +19 -5
  497. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  498. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  499. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  500. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  501. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  502. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  503. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  504. package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +1 -0
  505. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  506. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
  507. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +20 -18
  508. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  509. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +7 -5
  510. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +5 -5
  511. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
  512. package/packages/omo-codex/plugin/skills/programming/SKILL.md +12 -18
  513. package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +43 -15
  514. package/packages/omo-codex/plugin/skills/programming/references/rust/api-design.md +81 -0
  515. package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +60 -28
  516. package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +1 -13
  517. package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +44 -8
  518. package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +8 -3
  519. package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +66 -52
  520. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +35 -25
  521. package/packages/omo-codex/plugin/skills/programming/references/rust/macros.md +63 -0
  522. package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +5 -3
  523. package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +8 -0
  524. package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +50 -12
  525. package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +34 -6
  526. package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +62 -52
  527. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  528. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  529. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  530. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +31 -28
  531. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +11 -9
  532. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +11 -9
  533. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +116 -424
  534. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +1 -82
  535. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +40 -28
  536. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +2 -1
  537. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +2 -2
  538. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  539. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  540. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  541. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  542. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +34 -111
  543. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +14 -7
  544. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +22 -36
  545. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  546. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +102 -107
  547. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +38 -39
  548. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  549. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +31 -2
  550. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +2 -3
  551. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +34 -11
  552. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +9 -10
  553. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +17 -13
  554. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +5 -6
  555. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +4 -4
  556. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  557. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  558. package/packages/omo-codex/plugin/skills/ulw-research/AGENTS.md +63 -0
  559. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +52 -33
  560. package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +187 -0
  561. package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +66 -0
  562. package/packages/omo-codex/plugin/skills/ulw-research/scripts/cli-support.mjs +102 -0
  563. package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +162 -0
  564. package/packages/omo-codex/plugin/skills/ulw-research/scripts/css-lite.mjs +204 -0
  565. package/packages/omo-codex/plugin/skills/ulw-research/scripts/design-spec.mjs +161 -0
  566. package/packages/omo-codex/plugin/skills/ulw-research/scripts/entities.mjs +39 -0
  567. package/packages/omo-codex/plugin/skills/ulw-research/scripts/entry-guard.mjs +21 -0
  568. package/packages/omo-codex/plugin/skills/ulw-research/scripts/format-extract-css.mjs +122 -0
  569. package/packages/omo-codex/plugin/skills/ulw-research/scripts/format-extract.mjs +229 -0
  570. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-figures.mjs +173 -0
  571. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-layout.mjs +146 -0
  572. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-static.mjs +167 -0
  573. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-structure.mjs +118 -0
  574. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-text.mjs +190 -0
  575. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-lite.mjs +239 -0
  576. package/packages/omo-codex/plugin/skills/ulw-research/scripts/layout-probe.mjs +83 -0
  577. package/packages/omo-codex/plugin/skills/ulw-research/scripts/outcome.mjs +250 -0
  578. package/packages/omo-codex/plugin/skills/ulw-research/scripts/repair-tracker.mjs +171 -0
  579. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools-commands.mjs +214 -0
  580. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools.mjs +61 -0
  581. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  582. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +10 -7
  583. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +77 -0
  584. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  585. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +12 -12
  586. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +13 -28
  587. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
  588. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
  589. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +14 -4
  590. package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -29
  591. package/packages/omo-codex/plugin/test/bootstrap-default-role.test.mjs +66 -0
  592. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
  593. package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
  594. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  595. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
  596. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +100 -2
  597. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +5 -6
  598. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
  599. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +35 -35
  600. package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
  601. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
  602. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +81 -3
  603. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +57 -26
  604. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +37 -0
  605. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -2
  606. package/packages/omo-codex/scripts/install-dist/install-local.mjs +16238 -4291
  607. package/packages/{omo-codex/plugin/components/ultrawork/directive.md → prompts-core/prompts/ultrawork/codex.md} +102 -107
  608. package/packages/shared-skills/package.json +7 -1
  609. package/packages/shared-skills/skill-source-filter.d.ts +16 -0
  610. package/packages/shared-skills/skill-source-filter.mjs +44 -0
  611. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  612. package/packages/shared-skills/skills/ast-grep/SKILL.md +13 -1
  613. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +37 -0
  614. package/packages/shared-skills/skills/browser/SKILL.md +109 -0
  615. package/packages/shared-skills/skills/browser/references/commands.md +105 -0
  616. package/packages/shared-skills/skills/browser/references/install.md +97 -0
  617. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +62 -0
  618. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +52 -0
  619. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +61 -0
  620. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +62 -0
  621. package/packages/shared-skills/skills/browser/references/recipes/1password.md +61 -0
  622. package/packages/shared-skills/skills/browser/references/remote.md +25 -0
  623. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +1534 -0
  624. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +9 -0
  625. package/packages/shared-skills/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  626. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +57 -0
  627. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +50 -0
  628. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +25 -0
  629. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  630. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
  631. package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
  632. package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
  633. package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
  634. package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
  635. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
  636. package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
  637. package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  638. package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  639. package/packages/shared-skills/skills/debugging/SKILL.md +5 -3
  640. package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
  641. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +26 -5
  642. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +3 -3
  643. package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +1 -1
  644. package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
  645. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
  646. package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
  647. package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
  648. package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
  649. package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
  650. package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
  651. package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  652. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +104 -0
  653. package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
  654. package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
  655. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +10 -0
  656. package/packages/shared-skills/skills/frontend/SKILL.md +8 -3
  657. package/packages/shared-skills/skills/frontend/references/design/README.md +13 -4
  658. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  659. package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +146 -0
  660. package/packages/shared-skills/skills/frontend/references/design/aside.md +1 -1
  661. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
  662. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +30 -6
  663. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +19 -5
  664. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  665. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  666. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  667. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  668. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  669. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  670. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  671. package/packages/shared-skills/skills/frontend/references/perfection/README.md +1 -0
  672. package/packages/shared-skills/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  673. package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
  674. package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
  675. package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
  676. package/packages/shared-skills/skills/programming/SKILL.md +12 -18
  677. package/packages/shared-skills/skills/programming/references/rust/README.md +43 -15
  678. package/packages/shared-skills/skills/programming/references/rust/api-design.md +81 -0
  679. package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +60 -28
  680. package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +1 -13
  681. package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +44 -8
  682. package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +8 -3
  683. package/packages/shared-skills/skills/programming/references/rust/concurrency.md +66 -52
  684. package/packages/shared-skills/skills/programming/references/rust/libraries.md +35 -25
  685. package/packages/shared-skills/skills/programming/references/rust/macros.md +63 -0
  686. package/packages/shared-skills/skills/programming/references/rust/one-liners.md +5 -3
  687. package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +8 -0
  688. package/packages/shared-skills/skills/programming/references/rust/type-state.md +50 -12
  689. package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +34 -6
  690. package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +62 -52
  691. package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  692. package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  693. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  694. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  695. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +31 -28
  696. package/packages/shared-skills/skills/refactor/SKILL.md +5 -5
  697. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +5 -5
  698. package/packages/shared-skills/skills/review-work/SKILL.md +101 -419
  699. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +1 -82
  700. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +40 -28
  701. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +2 -1
  702. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +2 -2
  703. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  704. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  705. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  706. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  707. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +34 -111
  708. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +14 -7
  709. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +22 -36
  710. package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  711. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +27 -25
  712. package/packages/shared-skills/skills/ulw-plan/SKILL.md +10 -11
  713. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +18 -13
  714. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +5 -6
  715. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +4 -4
  716. package/packages/shared-skills/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  717. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  718. package/packages/shared-skills/skills/ulw-research/AGENTS.md +63 -0
  719. package/packages/shared-skills/skills/ulw-research/SKILL.md +47 -30
  720. package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +187 -0
  721. package/packages/shared-skills/skills/ulw-research/references/report-gates.md +66 -0
  722. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.mjs +102 -0
  723. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.test.ts +88 -0
  724. package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +162 -0
  725. package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +177 -0
  726. package/packages/shared-skills/skills/ulw-research/scripts/css-lite.mjs +204 -0
  727. package/packages/shared-skills/skills/ulw-research/scripts/css-lite.test.ts +159 -0
  728. package/packages/shared-skills/skills/ulw-research/scripts/design-spec.mjs +161 -0
  729. package/packages/shared-skills/skills/ulw-research/scripts/design-spec.test.ts +162 -0
  730. package/packages/shared-skills/skills/ulw-research/scripts/entities.mjs +39 -0
  731. package/packages/shared-skills/skills/ulw-research/scripts/entry-guard.mjs +21 -0
  732. package/packages/shared-skills/skills/ulw-research/scripts/format-extract-css.mjs +122 -0
  733. package/packages/shared-skills/skills/ulw-research/scripts/format-extract.mjs +229 -0
  734. package/packages/shared-skills/skills/ulw-research/scripts/format-extract.test.ts +243 -0
  735. package/packages/shared-skills/skills/ulw-research/scripts/gates-figures.mjs +173 -0
  736. package/packages/shared-skills/skills/ulw-research/scripts/gates-layout.mjs +146 -0
  737. package/packages/shared-skills/skills/ulw-research/scripts/gates-layout.test.ts +236 -0
  738. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.mjs +167 -0
  739. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.test.ts +265 -0
  740. package/packages/shared-skills/skills/ulw-research/scripts/gates-structure.mjs +118 -0
  741. package/packages/shared-skills/skills/ulw-research/scripts/gates-text.mjs +190 -0
  742. package/packages/shared-skills/skills/ulw-research/scripts/glossary-vocabulary.test.ts +43 -0
  743. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.mjs +239 -0
  744. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.test.ts +191 -0
  745. package/packages/shared-skills/skills/ulw-research/scripts/layout-probe.mjs +83 -0
  746. package/packages/shared-skills/skills/ulw-research/scripts/layout-probe.test.ts +89 -0
  747. package/packages/shared-skills/skills/ulw-research/scripts/outcome.mjs +250 -0
  748. package/packages/shared-skills/skills/ulw-research/scripts/outcome.test.ts +281 -0
  749. package/packages/shared-skills/skills/ulw-research/scripts/repair-tracker.mjs +171 -0
  750. package/packages/shared-skills/skills/ulw-research/scripts/repair-tracker.test.ts +246 -0
  751. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-commands.mjs +214 -0
  752. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.mjs +61 -0
  753. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +213 -0
  754. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/assets/figure-1.svg +1 -0
  755. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/bad-report.html +44 -0
  756. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/boxes.json +90 -0
  757. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/design-spec.md +29 -0
  758. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/good-report.html +57 -0
  759. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/reference-report.html +86 -0
  760. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/reference.md +23 -0
  761. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  762. package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
  763. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +77 -0
  764. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  765. package/script/qa/xterm-live-terminal.mjs +18 -2
  766. package/dist/cli/install-senpi/index.d.ts +0 -1
  767. package/dist/cli/senpi-platform-flag.d.ts +0 -4
  768. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  769. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  770. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  771. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  772. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
  773. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
  774. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
  775. package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
  776. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12244
  777. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9842
  778. package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
  779. package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
  780. package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
  781. package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
  782. package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
  783. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
  784. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
  785. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
  786. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
  787. package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
  788. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
  789. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
  790. package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
  791. package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
  792. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
  793. package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
  794. package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
  795. package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
  796. package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
  797. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
  798. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
  799. package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
  800. package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
  801. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
  802. package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
  803. package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
  804. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
  805. package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
  806. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
  807. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
  808. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
  809. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
  810. package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
  811. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
  812. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
  813. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
  814. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
  815. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
  816. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
  817. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
  818. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
  819. package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
  820. package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
  821. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
  822. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
  823. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
  824. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
  825. package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
  826. package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
  827. package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
  828. package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
  829. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  830. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +0 -484
  831. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
  832. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
  833. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  834. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  835. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
  836. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
  837. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
  838. package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
  839. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
  840. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
  841. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
  842. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
  843. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +0 -194
  844. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  845. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  846. package/packages/omo-codex/plugin/skills/visual-qa/references/agent-browser-setup.md +0 -45
  847. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
  848. package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
  849. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
  850. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
  851. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
  852. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
  853. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +0 -194
  854. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  855. package/packages/shared-skills/skills/visual-qa/references/agent-browser-setup.md +0 -45
  856. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  857. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  858. /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
  859. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  860. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  861. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  862. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  863. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  864. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  865. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  866. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  867. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  868. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  869. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -0,0 +1,1395 @@
1
+ (function() {
2
+ const ROLE_MAP = {
3
+ a: "link",
4
+ button: "button",
5
+ iframe: "iframe",
6
+ select: "combobox",
7
+ textarea: "textbox",
8
+ h1: "heading",
9
+ h2: "heading",
10
+ h3: "heading",
11
+ h4: "heading",
12
+ h5: "heading",
13
+ h6: "heading",
14
+ canvas: "canvas",
15
+ svg: "image",
16
+ img: "image",
17
+ nav: "navigation",
18
+ main: "main",
19
+ header: "banner",
20
+ footer: "contentinfo",
21
+ section: "region",
22
+ article: "article",
23
+ aside: "complementary",
24
+ form: "form",
25
+ table: "table",
26
+ ul: "list",
27
+ ol: "list",
28
+ li: "listitem",
29
+ p: "paragraph",
30
+ label: "label"
31
+ };
32
+ const VALID_ARIA_ROLES = /* @__PURE__ */ new Set([
33
+ "alert",
34
+ "alertdialog",
35
+ "application",
36
+ "article",
37
+ "banner",
38
+ "blockquote",
39
+ "button",
40
+ "caption",
41
+ "cell",
42
+ "checkbox",
43
+ "code",
44
+ "columnheader",
45
+ "combobox",
46
+ "complementary",
47
+ "contentinfo",
48
+ "definition",
49
+ "deletion",
50
+ "dialog",
51
+ "directory",
52
+ "document",
53
+ "emphasis",
54
+ "feed",
55
+ "figure",
56
+ "form",
57
+ "generic",
58
+ "grid",
59
+ "gridcell",
60
+ "group",
61
+ "heading",
62
+ "img",
63
+ "insertion",
64
+ "link",
65
+ "list",
66
+ "listbox",
67
+ "listitem",
68
+ "log",
69
+ "main",
70
+ "mark",
71
+ "marquee",
72
+ "math",
73
+ "meter",
74
+ "menu",
75
+ "menubar",
76
+ "menuitem",
77
+ "menuitemcheckbox",
78
+ "menuitemradio",
79
+ "navigation",
80
+ "none",
81
+ "note",
82
+ "option",
83
+ "paragraph",
84
+ "presentation",
85
+ "progressbar",
86
+ "radio",
87
+ "radiogroup",
88
+ "region",
89
+ "row",
90
+ "rowgroup",
91
+ "rowheader",
92
+ "scrollbar",
93
+ "search",
94
+ "searchbox",
95
+ "separator",
96
+ "slider",
97
+ "spinbutton",
98
+ "status",
99
+ "strong",
100
+ "subscript",
101
+ "superscript",
102
+ "switch",
103
+ "tab",
104
+ "table",
105
+ "tablist",
106
+ "tabpanel",
107
+ "term",
108
+ "textbox",
109
+ "time",
110
+ "timer",
111
+ "toolbar",
112
+ "tooltip",
113
+ "tree",
114
+ "treegrid",
115
+ "treeitem"
116
+ ]);
117
+ function getExplicitAriaRole(element) {
118
+ return (element.getAttribute("role") || "").split(" ").map((role) => role.trim().toLowerCase()).filter(Boolean).find((role) => VALID_ARIA_ROLES.has(role)) || null;
119
+ }
120
+ function isContentEditableElement(element) {
121
+ if (!(element instanceof HTMLElement)) return false;
122
+ return element.contentEditable === "true" || element.contentEditable === "plaintext-only";
123
+ }
124
+ function getImplicitRole(element) {
125
+ const tag = element.tagName.toLowerCase();
126
+ const type = element.getAttribute("type");
127
+ if (isContentEditableElement(element)) return "textbox";
128
+ if (tag === "input") {
129
+ if (type === "submit" || type === "button") return "button";
130
+ if (type === "checkbox") return "checkbox";
131
+ if (type === "radio") return "radio";
132
+ if (type === "file") return "button";
133
+ return "textbox";
134
+ }
135
+ return ROLE_MAP[tag] || "generic";
136
+ }
137
+ function getRole(element) {
138
+ const explicitRole = getExplicitAriaRole(element);
139
+ if (!explicitRole) return getImplicitRole(element);
140
+ if (explicitRole === "presentation" || explicitRole === "none") return getImplicitRole(element);
141
+ return explicitRole;
142
+ }
143
+ const INTERACTIVE_TAGS = /* @__PURE__ */ new Set([
144
+ "a",
145
+ "button",
146
+ "input",
147
+ "select",
148
+ "textarea",
149
+ "details",
150
+ "summary"
151
+ ]);
152
+ const INTERACTIVE_REF_ROLES = /* @__PURE__ */ new Set([
153
+ "button",
154
+ "link",
155
+ "textbox",
156
+ "checkbox",
157
+ "radio",
158
+ "combobox",
159
+ "listbox",
160
+ "menuitem",
161
+ "menuitemcheckbox",
162
+ "menuitemradio",
163
+ "option",
164
+ "searchbox",
165
+ "slider",
166
+ "spinbutton",
167
+ "switch",
168
+ "tab",
169
+ "treeitem"
170
+ ]);
171
+ const CONTENT_REF_ROLES = /* @__PURE__ */ new Set([
172
+ "cell",
173
+ "gridcell",
174
+ "columnheader",
175
+ "rowheader",
176
+ "listitem",
177
+ "article",
178
+ "region",
179
+ "main",
180
+ "navigation"
181
+ ]);
182
+ const ARIA_LEVEL_ROLES = /* @__PURE__ */ new Set([
183
+ "heading",
184
+ "listitem",
185
+ "row",
186
+ "treeitem"
187
+ ]);
188
+ const ARIA_SELECTED_ROLES = /* @__PURE__ */ new Set([
189
+ "gridcell",
190
+ "option",
191
+ "row",
192
+ "tab",
193
+ "rowheader",
194
+ "columnheader",
195
+ "treeitem"
196
+ ]);
197
+ const ARIA_CHECKED_ROLES = /* @__PURE__ */ new Set([
198
+ "checkbox",
199
+ "radio",
200
+ "menuitemcheckbox",
201
+ "menuitemradio",
202
+ "switch"
203
+ ]);
204
+ /** Roles where `aria-readonly` is meaningful for editability checks. */
205
+ const ARIA_READONLY_ROLES = /* @__PURE__ */ new Set([
206
+ "checkbox",
207
+ "combobox",
208
+ "grid",
209
+ "gridcell",
210
+ "listbox",
211
+ "radiogroup",
212
+ "slider",
213
+ "spinbutton",
214
+ "textbox",
215
+ "columnheader",
216
+ "rowheader",
217
+ "searchbox",
218
+ "switch",
219
+ "treegrid"
220
+ ]);
221
+ const ARIA_DISABLED_ROLES = /* @__PURE__ */ new Set([
222
+ "application",
223
+ "button",
224
+ "composite",
225
+ "gridcell",
226
+ "group",
227
+ "input",
228
+ "link",
229
+ "menuitem",
230
+ "scrollbar",
231
+ "separator",
232
+ "tab",
233
+ "checkbox",
234
+ "columnheader",
235
+ "combobox",
236
+ "grid",
237
+ "listbox",
238
+ "menu",
239
+ "menubar",
240
+ "menuitemcheckbox",
241
+ "menuitemradio",
242
+ "option",
243
+ "radio",
244
+ "radiogroup",
245
+ "row",
246
+ "rowheader",
247
+ "searchbox",
248
+ "select",
249
+ "slider",
250
+ "spinbutton",
251
+ "switch",
252
+ "tablist",
253
+ "textbox",
254
+ "toolbar",
255
+ "tree",
256
+ "treegrid",
257
+ "treeitem"
258
+ ]);
259
+ const NATIVE_HEADING_LEVELS = {
260
+ h1: 1,
261
+ h2: 2,
262
+ h3: 3,
263
+ h4: 4,
264
+ h5: 5,
265
+ h6: 6
266
+ };
267
+ /** */
268
+ function getAriaLevel(element, role) {
269
+ if (!ARIA_LEVEL_ROLES.has(role)) return void 0;
270
+ const tag = element.tagName.toLowerCase();
271
+ if (role === "heading") {
272
+ const nativeLevel = NATIVE_HEADING_LEVELS[tag];
273
+ if (nativeLevel) return nativeLevel;
274
+ }
275
+ const ariaLevel = Number(element.getAttribute("aria-level"));
276
+ if (Number.isInteger(ariaLevel) && ariaLevel >= 1) return ariaLevel;
277
+ }
278
+ const LANDMARK_TAGS = /* @__PURE__ */ new Set([
279
+ "h1",
280
+ "h2",
281
+ "h3",
282
+ "h4",
283
+ "h5",
284
+ "h6",
285
+ "nav",
286
+ "main",
287
+ "header",
288
+ "footer",
289
+ "section",
290
+ "article",
291
+ "aside"
292
+ ]);
293
+ const SKIP_TAGS = /* @__PURE__ */ new Set([
294
+ "script",
295
+ "style",
296
+ "meta",
297
+ "link",
298
+ "title",
299
+ "noscript"
300
+ ]);
301
+ function getAriaBoolean(attr) {
302
+ if (attr === null) return void 0;
303
+ return attr.toLowerCase() === "true";
304
+ }
305
+ /** Escape double quotes and newlines in text. */
306
+ const escapeSnapshotText = (text) => text.replace(/"/g, "\\\"").replace(/\n/g, "\\n");
307
+ /** Replace consecutive whitespace characters with a single space and trim the result. */
308
+ const normalizeWhitespace = (text) => text.trim();
309
+ function shouldInsertSpaceBetween(left, right) {
310
+ const trimmedLeft = left.trimEnd();
311
+ const trimmedRight = right.trimStart();
312
+ if (!trimmedLeft || !trimmedRight) return false;
313
+ return /[\p{L}\p{N}]$/u.test(trimmedLeft) && /^[\p{L}\p{N}]/u.test(trimmedRight);
314
+ }
315
+ /** Merge adjacent strings with whitespace normalization and boundary-safe spacing. */
316
+ function mergeStringBuffer(buffer) {
317
+ let merged = "";
318
+ for (const part of buffer) {
319
+ if (!part) continue;
320
+ if (!merged) {
321
+ merged = part;
322
+ continue;
323
+ }
324
+ if (shouldInsertSpaceBetween(merged, part)) merged += " ";
325
+ merged += part;
326
+ }
327
+ return normalizeWhitespace(merged);
328
+ }
329
+ function getCSSContent(element, pseudo) {
330
+ try {
331
+ const style = window.getComputedStyle(element, pseudo);
332
+ if (!style) return "";
333
+ if (style.display === "none" || style.visibility === "hidden") return "";
334
+ const content = (style.content || "").trim();
335
+ if (!content || content === "none" || content === "normal") return "";
336
+ const matches = [...content.matchAll(/"((?:\\.|[^"\\])*)"|'((?:\\.|[^'\\])*)'/g)];
337
+ if (!matches.length) return "";
338
+ return matches.map((match) => match[1] ?? match[2] ?? "").map((text) => text.replace(/\\n/g, "\n").replace(/\\r/g, "\r").replace(/\\t/g, " ").replace(/\\f/g, "\f").replace(/\\(["'\\])/g, "$1")).join("");
339
+ } catch {
340
+ return "";
341
+ }
342
+ }
343
+ let _cache;
344
+ let _cacheHidden;
345
+ /** Start per-snapshot caching. Call at beginning of generateAccessibilityTree. */
346
+ function beginAccNameCaches() {
347
+ _cache = /* @__PURE__ */ new Map();
348
+ _cacheHidden = /* @__PURE__ */ new Map();
349
+ }
350
+ /** End per-snapshot caching. Call in finally block after generateAccessibilityTree. */
351
+ function endAccNameCaches() {
352
+ _cache = void 0;
353
+ _cacheHidden = void 0;
354
+ }
355
+ const NAME_FROM_CONTENT_ROLES = /* @__PURE__ */ new Set([
356
+ "button",
357
+ "link",
358
+ "heading",
359
+ "cell",
360
+ "columnheader",
361
+ "rowheader",
362
+ "tooltip",
363
+ "tab",
364
+ "menuitem",
365
+ "menuitemcheckbox",
366
+ "menuitemradio",
367
+ "treeitem",
368
+ "option",
369
+ "listitem",
370
+ "row",
371
+ "term"
372
+ ]);
373
+ const PROHIBITS_NAMING = /* @__PURE__ */ new Set([
374
+ "caption",
375
+ "code",
376
+ "definition",
377
+ "deletion",
378
+ "emphasis",
379
+ "generic",
380
+ "insertion",
381
+ "mark",
382
+ "paragraph",
383
+ "presentation",
384
+ "strong",
385
+ "subscript",
386
+ "superscript",
387
+ "term",
388
+ "time"
389
+ ]);
390
+ function getIdRefs(element, attrValue) {
391
+ if (!attrValue) return [];
392
+ const doc = element.ownerDocument;
393
+ return attrValue.split(/\s+/).filter(Boolean).map((id) => doc.getElementById(id)).filter(Boolean);
394
+ }
395
+ function isHiddenForAria(element) {
396
+ if (element.getAttribute("aria-hidden") === "true") return true;
397
+ try {
398
+ const style = window.getComputedStyle(element);
399
+ if (style.display === "none" || style.visibility === "hidden") return true;
400
+ } catch {}
401
+ return false;
402
+ }
403
+ function getLabels(element) {
404
+ const labels = [];
405
+ const id = element.getAttribute("id");
406
+ if (id) {
407
+ const forLabels = element.ownerDocument.querySelectorAll(`label[for="${id.replace(/"/g, "\\\"")}"]`);
408
+ labels.push(...Array.from(forLabels));
409
+ }
410
+ let parent = element.parentElement;
411
+ while (parent) {
412
+ if (parent.tagName.toLowerCase() === "label") {
413
+ labels.push(parent);
414
+ break;
415
+ }
416
+ parent = parent.parentElement;
417
+ }
418
+ return labels;
419
+ }
420
+ const MAX_ACCNAME_DEPTH = 10;
421
+ function getAccNameInternal(element, opts) {
422
+ if (opts.depth >= MAX_ACCNAME_DEPTH) return "";
423
+ if (opts.visitedElements.has(element)) return "";
424
+ opts.visitedElements.add(element);
425
+ if (!opts.includeHidden && !opts.inLabelledBy && !opts.inLabel) {
426
+ if (isHiddenForAria(element)) return "";
427
+ }
428
+ if (!opts.inLabelledBy) {
429
+ const refs = getIdRefs(element, element.getAttribute("aria-labelledby"));
430
+ if (refs.length) {
431
+ const name = refs.map((ref) => getAccNameInternal(ref, {
432
+ ...opts,
433
+ depth: opts.depth + 1,
434
+ visitedElements: new Set(opts.visitedElements),
435
+ inLabelledBy: true
436
+ })).join(" ").replace(/\s+/g, " ").trim();
437
+ if (name) return name;
438
+ }
439
+ }
440
+ const ariaLabel = element.getAttribute("aria-label")?.trim();
441
+ if (ariaLabel) return ariaLabel;
442
+ const role = getRole(element);
443
+ const tag = element.tagName.toLowerCase();
444
+ if ([
445
+ "input",
446
+ "textarea",
447
+ "select",
448
+ "meter",
449
+ "progress",
450
+ "output"
451
+ ].includes(tag) && !opts.inLabel && !opts.inLabelledBy) {
452
+ const labels = getLabels(element);
453
+ if (labels.length) {
454
+ const name = labels.map((lbl) => getAccNameInternal(lbl, {
455
+ ...opts,
456
+ depth: opts.depth + 1,
457
+ visitedElements: new Set(opts.visitedElements),
458
+ inLabel: true
459
+ })).join(" ").replace(/\s+/g, " ").trim();
460
+ if (name) return name;
461
+ }
462
+ }
463
+ if (tag === "area" || tag === "img" || tag === "input" && element.getAttribute("type") === "image") {
464
+ const alt = element.getAttribute("alt");
465
+ if (alt !== null) return alt.trim();
466
+ }
467
+ if (tag === "fieldset") {
468
+ const legend = element.querySelector(":scope > legend");
469
+ if (legend) return getAccNameInternal(legend, {
470
+ ...opts,
471
+ depth: opts.depth + 1,
472
+ visitedElements: new Set(opts.visitedElements)
473
+ });
474
+ }
475
+ if (tag === "figure") {
476
+ const figcaption = element.querySelector(":scope > figcaption");
477
+ if (figcaption) return getAccNameInternal(figcaption, {
478
+ ...opts,
479
+ depth: opts.depth + 1,
480
+ visitedElements: new Set(opts.visitedElements)
481
+ });
482
+ }
483
+ if (tag === "table") {
484
+ const caption = element.querySelector(":scope > caption");
485
+ if (caption) return getAccNameInternal(caption, {
486
+ ...opts,
487
+ depth: opts.depth + 1,
488
+ visitedElements: new Set(opts.visitedElements)
489
+ });
490
+ }
491
+ if (tag === "select") {
492
+ const sel = element;
493
+ const selected = sel.selectedIndex >= 0 ? sel.options[sel.selectedIndex] : null;
494
+ if (selected) return selected.textContent?.trim() || "";
495
+ }
496
+ if (NAME_FROM_CONTENT_ROLES.has(role) || opts.inLabelledBy || opts.inLabel) {
497
+ const parts = [];
498
+ const before = getCSSContent(element, "::before");
499
+ if (before) parts.push(before);
500
+ for (const child of element.childNodes) if (child.nodeType === Node.TEXT_NODE) {
501
+ const text = child.textContent || "";
502
+ if (text) parts.push(text);
503
+ } else if (child.nodeType === Node.ELEMENT_NODE) {
504
+ const childText = getAccNameInternal(child, {
505
+ ...opts,
506
+ depth: opts.depth + 1,
507
+ visitedElements: new Set(opts.visitedElements)
508
+ });
509
+ if (childText) parts.push(childText);
510
+ }
511
+ const after = getCSSContent(element, "::after");
512
+ if (after) parts.push(after);
513
+ const text = parts.join("").replace(/\s+/g, " ").trim();
514
+ if (text) return text;
515
+ }
516
+ if (tag === "input") {
517
+ const type = (element.getAttribute("type") || "text").toLowerCase();
518
+ if (type === "submit" || type === "button") {
519
+ const val = element.value;
520
+ if (val?.trim()) return val.trim();
521
+ }
522
+ }
523
+ const placeholder = element.getAttribute("placeholder")?.trim();
524
+ if (placeholder) return placeholder;
525
+ const title = element.getAttribute("title")?.trim();
526
+ if (title) return title;
527
+ return "";
528
+ }
529
+ /**
530
+ * Compute the W3C-compliant accessible name for an element.
531
+ * Cached within a snapshot call when used with beginAccNameCaches/endAccNameCaches.
532
+ */
533
+ function getAccessibleName(element, includeHidden = false) {
534
+ const cache = includeHidden ? _cacheHidden : _cache;
535
+ if (cache) {
536
+ const cached = cache.get(element);
537
+ if (cached !== void 0) return cached;
538
+ }
539
+ const role = getRole(element);
540
+ let name = "";
541
+ if (!PROHIBITS_NAMING.has(role)) name = getAccNameInternal(element, {
542
+ includeHidden,
543
+ visitedElements: /* @__PURE__ */ new Set(),
544
+ inLabelledBy: false,
545
+ inLabel: false,
546
+ depth: 0
547
+ });
548
+ name = name.replace(/\s+/g, " ").trim().substring(0, 300);
549
+ if (cache) cache.set(element, name);
550
+ return name;
551
+ }
552
+ let _registry = null;
553
+ let _refs = null;
554
+ let _signatureAssigned = null;
555
+ let _refCounter = 0;
556
+ let _visibilityCache = null;
557
+ const OMOWRIGHT_REF_SYMBOL = Symbol("omowright_ref");
558
+ const USER_PASSWORD_REDACTED = "[redacted]";
559
+ function getRefPrefix(ref) {
560
+ return ref.match(/^(f\d+)?e\d+$/)?.[1] ?? "";
561
+ }
562
+ const ROLE_SELECTOR_RE = /^\[role=["'](\w+)["']\]$/;
563
+ function querySelectorWithImplicitRole(selector) {
564
+ const match = selector.match(ROLE_SELECTOR_RE);
565
+ if (!match) return null;
566
+ const targetRole = match[1];
567
+ for (const el of Array.from(document.querySelectorAll("*"))) if (getRole(el) === targetRole) return el;
568
+ return null;
569
+ }
570
+ function getAriaDisabled(element, role) {
571
+ if (!ARIA_DISABLED_ROLES.has(role)) return false;
572
+ if ([
573
+ "button",
574
+ "input",
575
+ "select",
576
+ "textarea",
577
+ "option",
578
+ "optgroup"
579
+ ].includes(element.tagName.toLowerCase()) && element.matches(":disabled")) return true;
580
+ for (let current = element; current; current = getParentElementAcrossShadowBoundary(current)) if (getAriaBoolean(current.getAttribute("aria-disabled")) === true) return true;
581
+ return false;
582
+ }
583
+ function getAriaChecked(element, role) {
584
+ if (element instanceof HTMLInputElement && (element.type === "checkbox" || element.type === "radio")) return element.checked;
585
+ if (!ARIA_CHECKED_ROLES.has(role)) return false;
586
+ return getAriaBoolean(element.getAttribute("aria-checked")) === true;
587
+ }
588
+ function getAriaSelected(element, role) {
589
+ if (element.tagName.toLowerCase() === "option") return element.selected;
590
+ if (!ARIA_SELECTED_ROLES.has(role)) return false;
591
+ return getAriaBoolean(element.getAttribute("aria-selected")) === true;
592
+ }
593
+ function getTextboxValue(element) {
594
+ if (isContentEditableElement(element)) return element.innerText ?? element.textContent ?? "";
595
+ if (!(element instanceof HTMLInputElement) && !(element instanceof HTMLTextAreaElement)) return null;
596
+ if (element instanceof HTMLInputElement && [
597
+ "checkbox",
598
+ "radio",
599
+ "file"
600
+ ].includes(element.type)) return null;
601
+ if (element instanceof HTMLInputElement && element.type === "password") return element.value ? USER_PASSWORD_REDACTED : "";
602
+ return element.value;
603
+ }
604
+ function getAriaOwnedElements(element) {
605
+ const owns = element.getAttribute("aria-owns");
606
+ if (!owns) return [];
607
+ const ownedElements = [];
608
+ const seen = /* @__PURE__ */ new Set();
609
+ for (const id of owns.split(/\s+/)) {
610
+ if (!id) continue;
611
+ const owned = element.ownerDocument.getElementById(id);
612
+ if (!owned || owned === element || seen.has(owned)) continue;
613
+ seen.add(owned);
614
+ ownedElements.push(owned);
615
+ }
616
+ return ownedElements;
617
+ }
618
+ function normalizeName(name) {
619
+ return name.replace(/\s+/g, " ").trim().substring(0, 100);
620
+ }
621
+ function getLayoutSize(element) {
622
+ const layout = element;
623
+ return {
624
+ width: layout.offsetWidth ?? -1,
625
+ height: layout.offsetHeight ?? -1
626
+ };
627
+ }
628
+ function getContainingShadowHost(element) {
629
+ const root = typeof element.getRootNode === "function" ? element.getRootNode() : null;
630
+ if (typeof ShadowRoot !== "undefined" && root instanceof ShadowRoot) return root.host;
631
+ return null;
632
+ }
633
+ function getParentElementAcrossShadowBoundary(element) {
634
+ return element.parentElement ?? getContainingShadowHost(element);
635
+ }
636
+ function getLightAndShadowChildNodes(element) {
637
+ const nodes = Array.from(element.childNodes);
638
+ if (element.shadowRoot) nodes.push(...Array.from(element.shadowRoot.childNodes));
639
+ return nodes;
640
+ }
641
+ function hasClippedZeroSizeBox(element, style) {
642
+ const overflowClips = style.overflow === "hidden" || style.overflow === "clip" || style.overflowX === "hidden" || style.overflowX === "clip" || style.overflowY === "hidden" || style.overflowY === "clip";
643
+ const { width, height } = getLayoutSize(element);
644
+ return overflowClips && (width === 0 || height === 0);
645
+ }
646
+ /**
647
+ * Checks whether an element is rendered and visible to the user.
648
+ * Merges the ancestor walk for display:contents detection with the main
649
+ * visibility loop to avoid a redundant second traversal.
650
+ */
651
+ function isVisible(element) {
652
+ if (_visibilityCache) {
653
+ const cached = _visibilityCache.get(element);
654
+ if (cached !== void 0) return cached;
655
+ }
656
+ const result = isVisibleUncached(element);
657
+ if (_visibilityCache) _visibilityCache.set(element, result);
658
+ return result;
659
+ }
660
+ function isVisibleUncached(element) {
661
+ if (element.getAttribute("aria-hidden") === "true") return false;
662
+ const targetVisibility = window.getComputedStyle(element).visibility;
663
+ let hasContentsAncestor = false;
664
+ for (let current = element; current && current !== document.documentElement; current = getParentElementAcrossShadowBoundary(current)) {
665
+ const style = window.getComputedStyle(current);
666
+ if (style.display === "contents") {
667
+ hasContentsAncestor = true;
668
+ continue;
669
+ }
670
+ if (style.display === "none") return false;
671
+ if (hasClippedZeroSizeBox(current, style)) return false;
672
+ const { width, height } = getLayoutSize(current);
673
+ if (current.tagName === "IFRAME" && (width === 0 || height === 0)) return false;
674
+ if (style.visibility === "hidden" && targetVisibility !== "visible") return false;
675
+ if (Number.parseFloat(style.opacity) === 0) return false;
676
+ }
677
+ if (typeof element.checkVisibility === "function") {
678
+ if (!element.checkVisibility({
679
+ checkOpacity: true,
680
+ checkVisibilityCSS: true
681
+ }) && !hasContentsAncestor) return false;
682
+ }
683
+ if (element instanceof HTMLElement) {
684
+ const rect = element.getBoundingClientRect();
685
+ if (rect.width > 0 && rect.height > 0 && (rect.right <= 0 || rect.bottom <= 0)) {
686
+ const style = window.getComputedStyle(element);
687
+ if (style.overflowX !== "visible" && style.overflowY !== "visible") return false;
688
+ }
689
+ }
690
+ return true;
691
+ }
692
+ function getInteractivitySignals(element) {
693
+ const tag = element.tagName.toLowerCase();
694
+ const role = getExplicitAriaRole(element);
695
+ const tabIndex = element.getAttribute("tabindex");
696
+ const hasTabIndex = tabIndex !== null && tabIndex !== "-1";
697
+ const hasOnClick = element.hasAttribute("onclick");
698
+ const hasCursorPointer = window.getComputedStyle(element).cursor === "pointer";
699
+ const isInteractiveTag = INTERACTIVE_TAGS.has(tag);
700
+ const isRoleInteractive = role === "button" || role === "link";
701
+ const isContentEditable = element.getAttribute("contenteditable") === "true";
702
+ let hasPointerInteraction = hasCursorPointer;
703
+ if (hasCursorPointer && !hasOnClick && !hasTabIndex) {
704
+ const parent = element.parentElement;
705
+ if (parent && window.getComputedStyle(parent).cursor === "pointer") hasPointerInteraction = false;
706
+ }
707
+ const hints = [];
708
+ if (hasPointerInteraction) hints.push("cursor:pointer");
709
+ if (hasOnClick) hints.push("onclick");
710
+ if (hasTabIndex) hints.push("tabindex");
711
+ return {
712
+ interactive: isInteractiveTag || hasOnClick || hasTabIndex || isRoleInteractive || isContentEditable || hasPointerInteraction,
713
+ isInteractiveTag,
714
+ hints
715
+ };
716
+ }
717
+ function isInteractive(element) {
718
+ return getInteractivitySignals(element).interactive;
719
+ }
720
+ const SCROLLABLE_OVERFLOW_VALUES = /* @__PURE__ */ new Set([
721
+ "auto",
722
+ "scroll",
723
+ "overlay"
724
+ ]);
725
+ function isScrollable(element) {
726
+ const tag = element.tagName.toLowerCase();
727
+ if (tag === "html" || tag === "body") return false;
728
+ const style = window.getComputedStyle(element);
729
+ if (!SCROLLABLE_OVERFLOW_VALUES.has(style.overflowX) && !SCROLLABLE_OVERFLOW_VALUES.has(style.overflowY)) return false;
730
+ return element.scrollHeight > element.clientHeight + 1 || element.scrollWidth > element.clientWidth + 1;
731
+ }
732
+ function isLandmark(element) {
733
+ const tag = element.tagName.toLowerCase();
734
+ const explicitRole = getExplicitAriaRole(element);
735
+ return LANDMARK_TAGS.has(tag) || !!explicitRole && explicitRole !== "presentation" && explicitRole !== "none";
736
+ }
737
+ function shouldTraverse(element, options) {
738
+ const tag = element.tagName.toLowerCase();
739
+ if (SKIP_TAGS.has(tag)) return false;
740
+ if (element.getAttribute("aria-hidden") === "true" && element.children.length === 0) return false;
741
+ if (!options.showHidden && !isVisible(element)) {
742
+ if (tag === "input") {
743
+ const type = element.type;
744
+ if (type === "radio" || type === "checkbox") return true;
745
+ }
746
+ return false;
747
+ }
748
+ return true;
749
+ }
750
+ function shouldIncludeNode(element, options) {
751
+ const role = getRole(element);
752
+ if (options.interactive) return role === "canvas" || isInteractive(element) || isScrollable(element) || isLandmark(element);
753
+ if (isInteractive(element)) return true;
754
+ if (isScrollable(element)) return true;
755
+ if (isLandmark(element)) return true;
756
+ if (getAccessibleName(element).length > 0) return true;
757
+ return role !== "generic" && role !== "image";
758
+ }
759
+ function getOrCreateRefId(element, role, name, refPrefix = "") {
760
+ const writeRefMeta = (ref) => {
761
+ const metaRole = getRole(element);
762
+ const metaName = getAccessibleName(element).substring(0, 100);
763
+ const signature = `${metaRole}::${metaName}`;
764
+ const nth = _signatureAssigned.get(signature) ?? 0;
765
+ _signatureAssigned.set(signature, nth + 1);
766
+ _refs[ref] = {
767
+ role: metaRole,
768
+ name: metaName,
769
+ tagName: element.tagName,
770
+ inputType: element.type || void 0,
771
+ ariaLabel: element.getAttribute("aria-label") || void 0,
772
+ placeholder: element.getAttribute("placeholder") || void 0,
773
+ nthAmongSameSignature: nth
774
+ };
775
+ };
776
+ const cached = element[OMOWRIGHT_REF_SYMBOL];
777
+ if (cached && cached.role === role && cached.name === name && getRefPrefix(cached.ref) === refPrefix) {
778
+ _registry.set(cached.ref, element);
779
+ writeRefMeta(cached.ref);
780
+ return cached.ref;
781
+ }
782
+ const ref = refPrefix.length > 0 ? `${refPrefix}e${++_refCounter}` : "e" + ++_refCounter;
783
+ element[OMOWRIGHT_REF_SYMBOL] = {
784
+ role,
785
+ name,
786
+ ref
787
+ };
788
+ _registry.set(ref, element);
789
+ writeRefMeta(ref);
790
+ return ref;
791
+ }
792
+ function findDuplicateRefIds(rootNode) {
793
+ const refCounts = /* @__PURE__ */ new Map();
794
+ const visit = (node) => {
795
+ if (node.refId) refCounts.set(node.refId, (refCounts.get(node.refId) ?? 0) + 1);
796
+ for (const child of node.children) if (typeof child !== "string") visit(child);
797
+ };
798
+ visit(rootNode);
799
+ return [...refCounts.entries()].filter(([, count]) => count > 1).map(([refId]) => refId).sort();
800
+ }
801
+ function toSnapshotNode(element, refPrefix = "") {
802
+ const role = getRole(element);
803
+ const roleLower = role.toLowerCase();
804
+ const interactivity = getInteractivitySignals(element);
805
+ const name = normalizeName(getAccessibleName(element));
806
+ const hidden = !isVisible(element);
807
+ const scrollable = isScrollable(element);
808
+ const shouldHaveRef = roleLower === "iframe" || roleLower === "canvas" || scrollable || interactivity.interactive || INTERACTIVE_REF_ROLES.has(roleLower) || CONTENT_REF_ROLES.has(roleLower) && name.length > 0;
809
+ let nodeRefId;
810
+ if (shouldHaveRef) nodeRefId = getOrCreateRefId(element, role, name, refPrefix);
811
+ if (role === "generic" && !nodeRefId && !hidden) return null;
812
+ const hints = [];
813
+ if (interactivity.interactive && !interactivity.isInteractiveTag && interactivity.hints.length > 0) hints.push(...interactivity.hints);
814
+ const href = element.getAttribute("href");
815
+ const type = element.getAttribute("type");
816
+ const placeholder = element.getAttribute("placeholder");
817
+ const level = getAriaLevel(element, role);
818
+ const checked = getAriaChecked(element, roleLower);
819
+ const selected = getAriaSelected(element, roleLower);
820
+ const focused = element.ownerDocument.activeElement === element;
821
+ const disabled = getAriaDisabled(element, roleLower);
822
+ const textboxValue = getTextboxValue(element);
823
+ const rect = roleLower === "canvas" ? element.getBoundingClientRect() : null;
824
+ return {
825
+ role,
826
+ name,
827
+ level,
828
+ hidden: hidden || void 0,
829
+ scrollable: scrollable || void 0,
830
+ checked: checked || void 0,
831
+ selected: selected || void 0,
832
+ focused: focused || void 0,
833
+ disabled: disabled || void 0,
834
+ refId: nodeRefId,
835
+ hints,
836
+ href: href ?? void 0,
837
+ type: type ?? void 0,
838
+ placeholder: placeholder ?? void 0,
839
+ size: rect ? `${Math.round(rect.width)}x${Math.round(rect.height)}` : void 0,
840
+ element,
841
+ children: textboxValue !== null ? [textboxValue] : []
842
+ };
843
+ }
844
+ /** True when a node carries no semantic payload beyond its role — safe to unwrap or collapse. */
845
+ function isBareWrapper(node) {
846
+ return !node.name && !node.level && !node.hidden && !node.scrollable && !node.checked && !node.selected && !node.focused && !node.disabled && !node.refId && node.hints.length === 0 && !node.href && !node.type && !node.placeholder && !node.size;
847
+ }
848
+ function normalizeStringChildren(rootNode) {
849
+ const paragraphLeafToText = (node) => {
850
+ if (node.role !== "paragraph") return null;
851
+ if (!isBareWrapper(node)) return null;
852
+ if (node.children.some((child) => typeof child !== "string")) return null;
853
+ return mergeStringBuffer(node.children) || "";
854
+ };
855
+ const flushChildren = (buffer, normalizedChildren) => {
856
+ if (!buffer.length) return;
857
+ const text = mergeStringBuffer(buffer);
858
+ if (text) normalizedChildren.push(text);
859
+ buffer.length = 0;
860
+ };
861
+ const visit = (node) => {
862
+ const normalizedChildren = [];
863
+ const buffer = [];
864
+ for (const child of node.children) {
865
+ if (typeof child === "string") {
866
+ buffer.push(child);
867
+ continue;
868
+ }
869
+ visit(child);
870
+ const paragraphText = paragraphLeafToText(child);
871
+ if (paragraphText !== null) {
872
+ if (paragraphText) buffer.push(paragraphText);
873
+ continue;
874
+ }
875
+ flushChildren(buffer, normalizedChildren);
876
+ normalizedChildren.push(child);
877
+ }
878
+ flushChildren(buffer, normalizedChildren);
879
+ node.children = normalizedChildren.length ? normalizedChildren : [];
880
+ if (node.children.length === 1 && node.children[0] === node.name) node.children = [];
881
+ };
882
+ visit(rootNode);
883
+ }
884
+ function normalizeGenericRoles(node) {
885
+ const hasRefInSubtree = (children) => {
886
+ for (const child of children) {
887
+ if (typeof child === "string") continue;
888
+ if (child.refId) return true;
889
+ if (hasRefInSubtree(child.children)) return true;
890
+ }
891
+ return false;
892
+ };
893
+ const normalizeChildren = (current) => {
894
+ const result = [];
895
+ for (const child of current.children) {
896
+ if (typeof child === "string") {
897
+ result.push(child);
898
+ continue;
899
+ }
900
+ const normalized = normalizeChildren(child);
901
+ result.push(...normalized);
902
+ }
903
+ if (current.hidden && !current.refId && !hasRefInSubtree(result)) return [];
904
+ const singleChild = result.length === 1 && typeof result[0] !== "string" ? result[0] : null;
905
+ if (current.role === "paragraph" && isBareWrapper(current) && !!singleChild && singleChild.role === "paragraph") return singleChild ? [singleChild] : [];
906
+ if (current.role === "generic" && !current.hidden && !current.name && result.length <= 1 && result.every((child) => typeof child !== "string" && !!child.refId)) {
907
+ const flattened = [];
908
+ for (const child of result) if (typeof child !== "string") flattened.push(child);
909
+ return flattened;
910
+ }
911
+ current.children = result;
912
+ return [current];
913
+ };
914
+ normalizeChildren(node);
915
+ }
916
+ function withoutWhitespace(text) {
917
+ return normalizeWhitespace(text).replace(/\s+/g, "");
918
+ }
919
+ function mergeTextLeafChildren(node) {
920
+ const textLeafRoles = /* @__PURE__ */ new Set([
921
+ "generic",
922
+ "heading",
923
+ "paragraph",
924
+ "label"
925
+ ]);
926
+ const getLeafText = (child) => {
927
+ if (typeof child === "string") return normalizeWhitespace(child) || null;
928
+ if (!textLeafRoles.has(child.role)) return null;
929
+ if (child.hidden) return null;
930
+ if (!child.name || child.children.length > 0) return null;
931
+ return child.name;
932
+ };
933
+ const visit = (current) => {
934
+ for (const child of current.children) if (typeof child !== "string") visit(child);
935
+ if (current.hidden) return;
936
+ if (!current.refId || current.children.length === 0) return;
937
+ if (current.children.length > 3) return;
938
+ const texts = [];
939
+ for (const child of current.children) {
940
+ const text = getLeafText(child);
941
+ if (!text) return;
942
+ texts.push(text);
943
+ }
944
+ const merged = normalizeName(texts.join(" "));
945
+ if (!merged) return;
946
+ if (!current.name) {
947
+ current.name = merged;
948
+ current.children = [];
949
+ return;
950
+ }
951
+ if (withoutWhitespace(current.name) === withoutWhitespace(merged)) current.children = [];
952
+ };
953
+ visit(node);
954
+ }
955
+ function snapshotNodeToString(node) {
956
+ const parts = [node.role];
957
+ if (node.name) parts.push(`"${escapeSnapshotText(node.name)}"`);
958
+ if (node.refId) parts.push(`[ref=${node.refId}]`);
959
+ if (node.level && node.level > 0) parts.push(`[level=${node.level}]`);
960
+ if (node.hidden) parts.push("[hidden]");
961
+ if (node.scrollable) parts.push("[scrollable]");
962
+ if (node.checked) parts.push("[checked]");
963
+ if (node.disabled) parts.push("[disabled]");
964
+ if (node.focused) parts.push("[focused]");
965
+ if (node.selected) parts.push("[selected]");
966
+ if (node.placeholder) parts.push(`[placeholder="${escapeSnapshotText(node.placeholder)}"]`);
967
+ if (node.size) parts.push(`[size=${node.size}]`);
968
+ return parts.join(" ");
969
+ }
970
+ function renderSnapshotTree(node, depth, lines) {
971
+ const isRoot = node.role === "fragment";
972
+ const childDepth = isRoot ? depth : depth + 1;
973
+ const indent = " ".repeat(depth);
974
+ const childIndent = " ".repeat(childDepth);
975
+ if (!isRoot) {
976
+ const nodeString = snapshotNodeToString(node);
977
+ const textChildren = node.children.filter((child) => typeof child === "string");
978
+ const elementChildren = node.children.filter((child) => typeof child !== "string");
979
+ const hasSelectOptions = node.element?.tagName.toLowerCase() === "select";
980
+ if (textChildren.length === 1 && elementChildren.length === 0 && !hasSelectOptions) {
981
+ const text = normalizeWhitespace(textChildren[0] || "");
982
+ if (text) lines.push(`${indent}- ${nodeString}: "${escapeSnapshotText(text)}"`);
983
+ else lines.push(`${indent}- ${nodeString}`);
984
+ return;
985
+ }
986
+ const hasChildren = node.children.length > 0 || hasSelectOptions;
987
+ lines.push(`${indent}- ${nodeString}${hasChildren ? ":" : ""}`);
988
+ if (hasSelectOptions) {
989
+ const selectEl = node.element;
990
+ for (const option of Array.from(selectEl.options)) {
991
+ let optionLine = `${childIndent}- option`;
992
+ const optionText = option.textContent?.trim() || "";
993
+ if (optionText) {
994
+ const truncated = optionText.replace(/\s+/g, " ").substring(0, 100);
995
+ optionLine += ` "${escapeSnapshotText(truncated)}"`;
996
+ }
997
+ if (option.selected) optionLine += " (selected)";
998
+ if (option.value && option.value !== optionText) optionLine += ` value="${escapeSnapshotText(option.value)}"`;
999
+ lines.push(optionLine);
1000
+ }
1001
+ }
1002
+ }
1003
+ for (const child of node.children) {
1004
+ if (typeof child === "string") {
1005
+ const text = normalizeWhitespace(child);
1006
+ if (!text) continue;
1007
+ lines.push(`${childIndent}- text: "${escapeSnapshotText(text)}"`);
1008
+ continue;
1009
+ }
1010
+ renderSnapshotTree(child, childDepth, lines);
1011
+ }
1012
+ }
1013
+ const defaultOptions = {
1014
+ interactive: false,
1015
+ maxDepth: 50,
1016
+ showHidden: false,
1017
+ refPrefix: ""
1018
+ };
1019
+ /** Generate the YAML-like accessibility tree for the current page or a subtree. */
1020
+ function generateAccessibilityTree(elementRegistry, _options = {}) {
1021
+ _registry = elementRegistry;
1022
+ _refs = {};
1023
+ _signatureAssigned = /* @__PURE__ */ new Map();
1024
+ _visibilityCache = /* @__PURE__ */ new Map();
1025
+ beginAccNameCaches();
1026
+ try {
1027
+ const options = {
1028
+ ...defaultOptions,
1029
+ ..._options
1030
+ };
1031
+ const maxDepth = options.maxDepth ?? defaultOptions.maxDepth;
1032
+ const treeRoot = {
1033
+ role: "fragment",
1034
+ name: "",
1035
+ hints: [],
1036
+ children: []
1037
+ };
1038
+ const visited = /* @__PURE__ */ new Set();
1039
+ function traverse(element, currentDepth, parentNode) {
1040
+ if (currentDepth > options.maxDepth) return;
1041
+ if (!element?.tagName) return;
1042
+ if (visited.has(element)) return;
1043
+ visited.add(element);
1044
+ const traversable = shouldTraverse(element, options);
1045
+ const includeAsRoot = !options.refId && element === document.body;
1046
+ const hidden = !isVisible(element);
1047
+ const include = includeAsRoot || traversable && (shouldIncludeNode(element, options) || options.showHidden && hidden);
1048
+ if (!traversable && !includeAsRoot) return;
1049
+ let currentNode = null;
1050
+ let targetNode = parentNode;
1051
+ if (include) {
1052
+ currentNode = toSnapshotNode(element, options.refPrefix || "");
1053
+ if (currentNode) {
1054
+ parentNode.children.push(currentNode);
1055
+ targetNode = currentNode;
1056
+ }
1057
+ }
1058
+ if (!include && options.interactive && element.childNodes.length === 0) {
1059
+ const hoistedName = normalizeName(getAccessibleName(element));
1060
+ if (hoistedName && targetNode.role !== "fragment") targetNode.children.push(hoistedName);
1061
+ }
1062
+ if (currentDepth < maxDepth) {
1063
+ const beforeText = getCSSContent(element, "::before");
1064
+ if (beforeText) targetNode.children.push(beforeText);
1065
+ const nextDepth = include && currentNode ? currentDepth + 1 : currentDepth;
1066
+ for (const child of getLightAndShadowChildNodes(element)) {
1067
+ if (child.nodeType === Node.TEXT_NODE) {
1068
+ if (!child.nodeValue || targetNode.role === "textbox") continue;
1069
+ targetNode.children.push(child.nodeValue);
1070
+ continue;
1071
+ }
1072
+ if (child.nodeType === Node.ELEMENT_NODE) traverse(child, nextDepth, targetNode);
1073
+ }
1074
+ for (const child of getAriaOwnedElements(element)) traverse(child, nextDepth, targetNode);
1075
+ const afterText = getCSSContent(element, "::after");
1076
+ if (afterText) targetNode.children.push(afterText);
1077
+ }
1078
+ }
1079
+ if (options.refId) {
1080
+ const element = elementRegistry.get(options.refId);
1081
+ if (!element || !element.isConnected) return {
1082
+ error: `Element with ref_id '${options.refId}' not found. It may have been removed from the page. Use read_page without ref_id to get the current page state.`,
1083
+ tree: "",
1084
+ refs: {}
1085
+ };
1086
+ traverse(element, 0, treeRoot);
1087
+ } else if (options.selector) {
1088
+ const element = document.querySelector(options.selector) ?? querySelectorWithImplicitRole(options.selector);
1089
+ if (!element) return {
1090
+ error: `Element matching selector '${options.selector}' not found. It may have been removed from the page. Use read_page without selector to get the current page state.`,
1091
+ tree: "",
1092
+ refs: {}
1093
+ };
1094
+ traverse(element, 0, treeRoot);
1095
+ } else if (document.body) traverse(document.body, 0, treeRoot);
1096
+ normalizeStringChildren(treeRoot);
1097
+ normalizeGenericRoles(treeRoot);
1098
+ mergeTextLeafChildren(treeRoot);
1099
+ const duplicateRefs = findDuplicateRefIds(treeRoot);
1100
+ if (duplicateRefs.length > 0) return {
1101
+ error: `Snapshot produced duplicate refs: ${duplicateRefs.join(", ")}. Take a new snapshot and retry.`,
1102
+ tree: "",
1103
+ refs: {}
1104
+ };
1105
+ const lines = [];
1106
+ renderSnapshotTree(treeRoot, 0, lines);
1107
+ const tree = lines.join("\n");
1108
+ if (options.maxChars && tree.length > options.maxChars) {
1109
+ let errorMsg = `Output exceeds ${options.maxChars} character limit (${tree.length} characters). `;
1110
+ if (options.refId) errorMsg += "The specified element has too much content. Try specifying a smaller depth parameter or focus on a more specific child element.";
1111
+ else if (options.maxDepth) errorMsg += "Try specifying an even smaller depth parameter or use ref_id to focus on a specific element from the page.";
1112
+ else errorMsg += "Try specifying a depth parameter (e.g., depth: 5) or use ref_id to focus on a specific element from the page.";
1113
+ return {
1114
+ error: errorMsg,
1115
+ tree: "",
1116
+ refs: _refs
1117
+ };
1118
+ }
1119
+ return {
1120
+ tree,
1121
+ refs: _refs
1122
+ };
1123
+ } finally {
1124
+ _registry = null;
1125
+ _refs = null;
1126
+ _signatureAssigned = null;
1127
+ _visibilityCache = null;
1128
+ endAccNameCaches();
1129
+ }
1130
+ }
1131
+ (function setupOmOWrightWorld() {
1132
+ const elementRegistry = /* @__PURE__ */ new Map();
1133
+ let _lastRefs = {};
1134
+ function toElement(node) {
1135
+ if (node instanceof Element) return node;
1136
+ if (node && typeof node === "object" && "parentElement" in node) return node.parentElement;
1137
+ return null;
1138
+ }
1139
+ function takeSnapshot(options) {
1140
+ const rootElement = options?.refId ? elementRegistry.get(options.refId) : void 0;
1141
+ const previousRegistry = new Map(elementRegistry);
1142
+ elementRegistry.clear();
1143
+ if (rootElement && options?.refId) elementRegistry.set(options.refId, rootElement);
1144
+ try {
1145
+ const result = generateAccessibilityTree(elementRegistry, options);
1146
+ _lastRefs = result.refs;
1147
+ return result;
1148
+ } catch {
1149
+ elementRegistry.clear();
1150
+ for (const [key, value] of previousRegistry) elementRegistry.set(key, value);
1151
+ throw new Error("Snapshot failed");
1152
+ }
1153
+ }
1154
+ const DEREF_WALKER_BUDGET = 5e3;
1155
+ function deref(ref) {
1156
+ const el = elementRegistry.get(ref);
1157
+ if (el && el.isConnected) return el;
1158
+ const meta = _lastRefs[ref];
1159
+ if (!meta) return null;
1160
+ const candidates = [];
1161
+ const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);
1162
+ let node;
1163
+ let visited = 0;
1164
+ while (node = walker.nextNode()) {
1165
+ if (++visited > DEREF_WALKER_BUDGET) break;
1166
+ if (getRole(node) === meta.role && getAccessibleName(node) === meta.name) candidates.push(node);
1167
+ }
1168
+ if (candidates.length === 1) return candidates[0] ?? null;
1169
+ if (meta.nthAmongSameSignature < candidates.length) return candidates[meta.nthAmongSameSignature] ?? null;
1170
+ return null;
1171
+ }
1172
+ function retarget(element, behavior) {
1173
+ let el = toElement(element);
1174
+ if (!el) return null;
1175
+ if (behavior === "none") return el;
1176
+ if (!el.matches("input, textarea, select") && !el.isContentEditable) if (behavior === "button-link") el = el.closest("button, [role=button], a, [role=link]") || el;
1177
+ else el = el.closest("button, [role=button], [role=checkbox], [role=radio]") || el;
1178
+ if (behavior === "follow-label") {
1179
+ if (!el.matches("a, input, textarea, button, select, [role=link], [role=button], [role=checkbox], [role=radio]") && !el.isContentEditable) {
1180
+ const label = el.closest("label");
1181
+ if (label?.control) el = label.control;
1182
+ }
1183
+ }
1184
+ return el;
1185
+ }
1186
+ function resolvePointerTarget(element) {
1187
+ const el = toElement(element);
1188
+ if (!el) return null;
1189
+ if (el instanceof HTMLInputElement && (el.type === "checkbox" || el.type === "radio")) {
1190
+ const visibleLabel = Array.from(el.labels ?? []).find((label) => {
1191
+ const style = label.ownerDocument?.defaultView?.getComputedStyle?.(label);
1192
+ if (style && (style.display === "none" || style.visibility === "hidden")) return false;
1193
+ const rect = label.getBoundingClientRect();
1194
+ return rect.width > 0 && rect.height > 0;
1195
+ });
1196
+ if (visibleLabel) return visibleLabel;
1197
+ }
1198
+ const nativeFormTargetSelector = "input:not([type=\"hidden\"]), select, textarea";
1199
+ const nestedFormTargetSelector = [
1200
+ nativeFormTargetSelector,
1201
+ "[role=\"checkbox\"]",
1202
+ "[role=\"radio\"]",
1203
+ "[role=\"switch\"]"
1204
+ ].join(", ");
1205
+ const formControlHostSelector = [
1206
+ "label",
1207
+ "[role=\"checkbox\"]",
1208
+ "[role=\"radio\"]",
1209
+ "[role=\"switch\"]",
1210
+ "mat-checkbox",
1211
+ "mat-radio-button",
1212
+ "mat-slide-toggle"
1213
+ ].join(", ");
1214
+ const label = el.closest("label");
1215
+ if (label?.control) {
1216
+ const labelStyle = label.ownerDocument?.defaultView?.getComputedStyle?.(label);
1217
+ const labelRect = label.getBoundingClientRect();
1218
+ const controlRect = label.control.getBoundingClientRect();
1219
+ if ((!labelStyle || labelStyle.display !== "none" && labelStyle.visibility !== "hidden") && labelRect.width > 0 && labelRect.height > 0 && (controlRect.width === 0 || controlRect.height === 0)) return label;
1220
+ return label.control;
1221
+ }
1222
+ const formHost = el.closest(formControlHostSelector);
1223
+ const nestedFormTarget = formHost?.querySelector(nestedFormTargetSelector);
1224
+ if (nestedFormTarget && nestedFormTarget !== formHost) return nestedFormTarget;
1225
+ if (el.hasAttribute("aria-checked") || el.hasAttribute("aria-selected")) return el;
1226
+ if (!el.matches("li, [role=listitem], [role=menuitem], [role=option]")) return el;
1227
+ const selector = [
1228
+ nativeFormTargetSelector,
1229
+ "button",
1230
+ "a[href]",
1231
+ "summary",
1232
+ "[role=\"button\"]",
1233
+ "[role=\"checkbox\"]",
1234
+ "[role=\"radio\"]",
1235
+ "[role=\"switch\"]",
1236
+ "[aria-checked]",
1237
+ "[tabindex]:not([tabindex=\"-1\"])"
1238
+ ].join(", ");
1239
+ const candidates = Array.from(el.querySelectorAll(selector)).filter((candidate) => {
1240
+ const rect = candidate.getBoundingClientRect();
1241
+ return rect.width > 0 && rect.height > 0;
1242
+ });
1243
+ if (candidates.length === 0) return el;
1244
+ return candidates.find((candidate) => candidate.matches("input[type=\"checkbox\"], input[type=\"radio\"], [role=\"checkbox\"], [role=\"radio\"], [role=\"switch\"], [aria-checked]")) ?? candidates.find((candidate) => candidate.tabIndex >= 0) ?? candidates[0] ?? el;
1245
+ }
1246
+ function checkHitTarget(element, point) {
1247
+ const el = toElement(element);
1248
+ if (!el) return {
1249
+ ok: false,
1250
+ error: "Node is not an Element"
1251
+ };
1252
+ const isComposedDescendant = (candidate, ancestor) => {
1253
+ let current = candidate;
1254
+ while (current) {
1255
+ if (current === ancestor) return true;
1256
+ if (current instanceof ShadowRoot) {
1257
+ current = current.host;
1258
+ continue;
1259
+ }
1260
+ current = current.parentNode;
1261
+ }
1262
+ return false;
1263
+ };
1264
+ let root = el.ownerDocument;
1265
+ let hitElement = null;
1266
+ while (root) {
1267
+ const candidate = root.elementFromPoint(point.x, point.y);
1268
+ if (!candidate) break;
1269
+ hitElement = candidate;
1270
+ if (isComposedDescendant(candidate, el)) return { ok: true };
1271
+ root = candidate.shadowRoot;
1272
+ }
1273
+ if (!hitElement) {
1274
+ const rect = el.getBoundingClientRect();
1275
+ if (el.isConnected && rect.width > 0 && rect.height > 0) return { ok: true };
1276
+ return {
1277
+ ok: false,
1278
+ error: "Element is obscured at click point"
1279
+ };
1280
+ }
1281
+ if (isComposedDescendant(el, hitElement)) return { ok: true };
1282
+ return {
1283
+ ok: false,
1284
+ error: "Element is obscured by another element"
1285
+ };
1286
+ }
1287
+ async function waitForReady(element, checks, timeoutMs = 5e3) {
1288
+ const el = toElement(element);
1289
+ if (!el) return {
1290
+ ok: false,
1291
+ error: "Node is not an Element (text node or non-Element handle)"
1292
+ };
1293
+ const start = Date.now();
1294
+ while (Date.now() - start < timeoutMs) {
1295
+ if (checks.includes("attached") && !el.isConnected) return {
1296
+ ok: false,
1297
+ error: "Element is detached from the DOM"
1298
+ };
1299
+ if (checks.includes("visible")) {
1300
+ const rect = el.getBoundingClientRect();
1301
+ if (!(el.checkVisibility?.({
1302
+ checkOpacity: false,
1303
+ checkVisibilityCSS: true
1304
+ }) !== false && rect.width > 0 && rect.height > 0)) {
1305
+ await new Promise((r) => setTimeout(r, 16));
1306
+ continue;
1307
+ }
1308
+ }
1309
+ if (checks.includes("enabled") && isDisabled(el)) return {
1310
+ ok: false,
1311
+ error: "Element is disabled"
1312
+ };
1313
+ if (checks.includes("stable")) {
1314
+ const prev = el.getBoundingClientRect();
1315
+ await new Promise((r) => setTimeout(r, 32));
1316
+ const curr = el.getBoundingClientRect();
1317
+ if (prev.x !== curr.x || prev.y !== curr.y || prev.width !== curr.width || prev.height !== curr.height) {
1318
+ if (Date.now() - start + 32 >= timeoutMs) return {
1319
+ ok: false,
1320
+ error: "Element is moving"
1321
+ };
1322
+ continue;
1323
+ }
1324
+ }
1325
+ return { ok: true };
1326
+ }
1327
+ return {
1328
+ ok: false,
1329
+ error: "Timeout waiting for element to be ready"
1330
+ };
1331
+ }
1332
+ function checkEditable(element) {
1333
+ if (isDisabled(element)) return {
1334
+ ok: false,
1335
+ error: "Element is disabled"
1336
+ };
1337
+ const tag = element.tagName;
1338
+ if ([
1339
+ "INPUT",
1340
+ "TEXTAREA",
1341
+ "SELECT"
1342
+ ].includes(tag)) return element.hasAttribute("readonly") ? {
1343
+ ok: false,
1344
+ error: "Element is read-only"
1345
+ } : { ok: true };
1346
+ if (element.getAttribute("contenteditable") === "false") return {
1347
+ ok: false,
1348
+ error: "Element is not editable"
1349
+ };
1350
+ if (ARIA_READONLY_ROLES.has(getRole(element))) return element.getAttribute("aria-readonly") === "true" ? {
1351
+ ok: false,
1352
+ error: "Element is read-only (aria-readonly)"
1353
+ } : { ok: true };
1354
+ if (element.isContentEditable) return { ok: true };
1355
+ return {
1356
+ ok: false,
1357
+ error: "Element does not support editable state"
1358
+ };
1359
+ }
1360
+ function isDisabled(element) {
1361
+ if ([
1362
+ "BUTTON",
1363
+ "INPUT",
1364
+ "SELECT",
1365
+ "TEXTAREA",
1366
+ "OPTION",
1367
+ "OPTGROUP"
1368
+ ].includes(element.tagName)) {
1369
+ if (element.disabled) return true;
1370
+ const fieldset = element.closest("fieldset:disabled");
1371
+ if (fieldset) {
1372
+ const legend = fieldset.querySelector(":scope > legend");
1373
+ if (!legend || !legend.contains(element)) return true;
1374
+ }
1375
+ }
1376
+ let el = element;
1377
+ while (el) {
1378
+ if (el.getAttribute("aria-disabled") === "true") return true;
1379
+ el = el.parentElement;
1380
+ }
1381
+ return false;
1382
+ }
1383
+ globalThis.__omowright = {
1384
+ elementRegistry,
1385
+ snapshotEpoch: 0,
1386
+ takeSnapshot,
1387
+ deref,
1388
+ retarget,
1389
+ resolvePointerTarget,
1390
+ waitForReady,
1391
+ checkHitTarget,
1392
+ checkEditable
1393
+ };
1394
+ })();
1395
+ })();