oh-my-opencode 4.5.1 → 4.6.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 (668) hide show
  1. package/.agents/skills/opencode-qa/SKILL.md +194 -0
  2. package/.agents/skills/opencode-qa/references/cli-commands.md +188 -0
  3. package/.agents/skills/opencode-qa/references/db-investigation.md +197 -0
  4. package/.agents/skills/opencode-qa/references/events-hooks.md +110 -0
  5. package/.agents/skills/opencode-qa/references/sdk.md +96 -0
  6. package/.agents/skills/opencode-qa/references/server-api.md +200 -0
  7. package/.agents/skills/opencode-qa/references/testing-harness.md +218 -0
  8. package/.agents/skills/opencode-qa/references/tui-tmux.md +52 -0
  9. package/.agents/skills/opencode-qa/scripts/db-session-by-id.sh +53 -0
  10. package/.agents/skills/opencode-qa/scripts/db-session-by-name.sh +57 -0
  11. package/.agents/skills/opencode-qa/scripts/db-session-by-text.sh +158 -0
  12. package/.agents/skills/opencode-qa/scripts/export-roundtrip.sh +57 -0
  13. package/.agents/skills/opencode-qa/scripts/lib/common.sh +216 -0
  14. package/.agents/skills/opencode-qa/scripts/server-smoke.sh +64 -0
  15. package/.agents/skills/opencode-qa/scripts/sse-hook-probe.sh +106 -0
  16. package/.agents/skills/opencode-qa/scripts/tui-smoke.sh +89 -0
  17. package/README.ja.md +43 -18
  18. package/README.ko.md +43 -18
  19. package/README.md +92 -24
  20. package/README.ru.md +43 -18
  21. package/README.zh-cn.md +55 -24
  22. package/bin/oh-my-opencode.js +49 -3
  23. package/bin/oh-my-opencode.test.ts +202 -0
  24. package/bin/platform.d.ts +7 -1
  25. package/bin/platform.js +23 -4
  26. package/bin/platform.test.ts +97 -10
  27. package/dist/cli/cleanup-command.d.ts +4 -0
  28. package/dist/cli/cleanup.d.ts +11 -0
  29. package/dist/cli/cli-program.d.ts +19 -0
  30. package/dist/cli/index.js +30085 -26385
  31. package/dist/cli/install-codex/codex-cache-bundled-mcps.d.ts +5 -0
  32. package/dist/cli/install-codex/codex-cache-command-shim.d.ts +1 -0
  33. package/dist/cli/install-codex/codex-cache-legacy-bins.d.ts +3 -0
  34. package/dist/cli/install-codex/codex-cache-local-dependencies.d.ts +1 -0
  35. package/dist/cli/install-codex/codex-cache-paths.d.ts +2 -0
  36. package/dist/cli/install-codex/codex-cache.d.ts +32 -0
  37. package/dist/cli/install-codex/codex-cleanup-config.d.ts +6 -0
  38. package/dist/cli/install-codex/codex-cleanup.d.ts +21 -0
  39. package/dist/cli/install-codex/codex-config-mcp.d.ts +1 -0
  40. package/dist/cli/install-codex/codex-config-permissions.d.ts +1 -0
  41. package/dist/cli/install-codex/codex-config-reasoning.d.ts +1 -0
  42. package/dist/cli/install-codex/codex-config-toml.d.ts +12 -0
  43. package/dist/cli/install-codex/codex-hook-trust.d.ts +6 -0
  44. package/dist/cli/install-codex/codex-installation-detection.d.ts +36 -0
  45. package/dist/cli/install-codex/codex-marketplace-snapshot.d.ts +15 -0
  46. package/dist/cli/install-codex/codex-marketplace.d.ts +9 -0
  47. package/dist/cli/install-codex/codex-multi-agent-v2-config.d.ts +1 -0
  48. package/dist/cli/install-codex/codex-package-layout.d.ts +1 -0
  49. package/dist/cli/install-codex/codex-process.d.ts +2 -0
  50. package/dist/cli/install-codex/codex-project-local-cleanup-best-effort.d.ts +7 -0
  51. package/dist/cli/install-codex/codex-project-local-cleanup.d.ts +35 -0
  52. package/dist/cli/install-codex/git-bash.d.ts +35 -0
  53. package/dist/cli/install-codex/index.d.ts +11 -0
  54. package/dist/cli/install-codex/install-codex.d.ts +17 -0
  55. package/dist/cli/install-codex/link-cached-plugin-agents.d.ts +12 -0
  56. package/dist/cli/install-codex/toml-section-editor.d.ts +11 -0
  57. package/dist/cli/install-codex/types.d.ts +76 -0
  58. package/dist/cli/run/event-state.d.ts +1 -0
  59. package/dist/cli/run/poll-for-completion.d.ts +1 -0
  60. package/dist/cli/run/prompt-start.d.ts +7 -0
  61. package/dist/cli/star-request.d.ts +11 -0
  62. package/dist/cli/tui-install-prompts.d.ts +3 -2
  63. package/dist/cli/types.d.ts +8 -0
  64. package/dist/config/schema/agent-names.d.ts +4 -1
  65. package/dist/config/schema/commands.d.ts +1 -2
  66. package/dist/config/schema/hooks.d.ts +0 -1
  67. package/dist/config/schema/oh-my-opencode-config.d.ts +5 -3
  68. package/dist/create-hooks.d.ts +0 -1
  69. package/dist/create-managers.d.ts +1 -0
  70. package/dist/features/background-agent/parent-wake-message-activity.d.ts +23 -0
  71. package/dist/features/background-agent/parent-wake-notifier.d.ts +0 -1
  72. package/dist/features/boulder-state/storage.d.ts +1 -1
  73. package/dist/features/builtin-commands/templates/refactor.d.ts +1 -1
  74. package/dist/features/builtin-commands/templates/remove-ai-slops.d.ts +2 -2
  75. package/dist/features/builtin-commands/types.d.ts +1 -1
  76. package/dist/features/builtin-skills/skill-file-loader.d.ts +4 -0
  77. package/dist/features/builtin-skills/skills/debugging.d.ts +2 -0
  78. package/dist/features/builtin-skills/skills/index.d.ts +5 -1
  79. package/dist/features/builtin-skills/skills/init-deep.d.ts +2 -0
  80. package/dist/features/builtin-skills/skills/remove-ai-slops.d.ts +2 -0
  81. package/dist/features/builtin-skills/skills/security-research.d.ts +2 -0
  82. package/dist/features/builtin-skills/skills/security-review.d.ts +2 -0
  83. package/dist/features/opencode-runtime-skills/index.d.ts +2 -0
  84. package/dist/features/opencode-runtime-skills/runtime-skill-config.d.ts +17 -0
  85. package/dist/features/opencode-runtime-skills/skill-markdown.d.ts +7 -0
  86. package/dist/features/opencode-runtime-skills/source-server.d.ts +8 -0
  87. package/dist/hooks/claude-code-hooks/hook-text.d.ts +2 -0
  88. package/dist/hooks/index.d.ts +0 -1
  89. package/dist/hooks/session-recovery/storage/latest-assistant-message.d.ts +5 -0
  90. package/dist/hooks/session-recovery/storage/thinking-prepend.d.ts +3 -0
  91. package/dist/hooks/thinking-block-validator/hook.d.ts +0 -18
  92. package/dist/hooks/todo-continuation-enforcer/pending-question-detection.d.ts +4 -0
  93. package/dist/index.js +1949 -1913
  94. package/dist/oh-my-opencode.schema.json +4 -2
  95. package/dist/plugin/hooks/create-core-hooks.d.ts +0 -1
  96. package/dist/plugin/hooks/create-session-hooks.d.ts +1 -2
  97. package/dist/plugin/messages-transform.d.ts +8 -1
  98. package/dist/plugin/user-abort-interrupted-recovery-guard.d.ts +6 -0
  99. package/dist/plugin-handlers/config-handler.d.ts +2 -1
  100. package/dist/shared/external-plugin-detector.d.ts +8 -0
  101. package/dist/shared/prompt-async-gate/message-inspection-error.d.ts +1 -0
  102. package/dist/shared/prompt-async-gate/pending-tool-turn.d.ts +1 -0
  103. package/dist/shared/prompt-async-gate/prompt-message-state.d.ts +8 -0
  104. package/dist/shared/prompt-async-gate/recent-dispatches.d.ts +14 -0
  105. package/dist/shared/prompt-async-gate/semantic-dedupe.d.ts +7 -0
  106. package/dist/shared/prompt-async-gate/session-idle-dispatch.d.ts +1 -0
  107. package/dist/shared/prompt-async-gate/timing.d.ts +1 -0
  108. package/dist/shared/prompt-async-gate/types.d.ts +2 -0
  109. package/dist/shared/prompt-async-gate.d.ts +1 -1
  110. package/dist/shared/prompt-timeout-context.d.ts +2 -0
  111. package/dist/testing/create-plugin-module.d.ts +5 -1
  112. package/dist/tools/delegate-task/sync-prompt-sender.d.ts +2 -2
  113. package/package.json +38 -18
  114. package/packages/ast-grep-mcp/dist/cli.js +245 -40
  115. package/packages/git-bash-mcp/dist/cli.js +367 -0
  116. package/packages/lsp-tools-mcp/dist/cli.js +1 -1
  117. package/packages/omo-codex/marketplace.json +17 -0
  118. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +35 -0
  119. package/packages/omo-codex/plugin/.mcp.json +25 -0
  120. package/packages/omo-codex/plugin/README.md +13 -0
  121. package/packages/omo-codex/plugin/components/comment-checker/.gitattributes +13 -0
  122. package/packages/omo-codex/plugin/components/comment-checker/.github/CODEOWNERS +12 -0
  123. package/packages/omo-codex/plugin/components/comment-checker/.github/ISSUE_TEMPLATE/bug.yml +40 -0
  124. package/packages/omo-codex/plugin/components/comment-checker/.github/ISSUE_TEMPLATE/feature.yml +27 -0
  125. package/packages/omo-codex/plugin/components/comment-checker/.github/branch-ruleset.json +45 -0
  126. package/packages/omo-codex/plugin/components/comment-checker/.github/dependabot.yml +16 -0
  127. package/packages/omo-codex/plugin/components/comment-checker/.github/pull_request_template.md +19 -0
  128. package/packages/omo-codex/plugin/components/comment-checker/.github/workflows/ci.yml +47 -0
  129. package/packages/omo-codex/plugin/components/comment-checker/.github/workflows/publish.yml +51 -0
  130. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +35 -0
  131. package/packages/omo-codex/plugin/components/comment-checker/CHANGELOG.md +33 -0
  132. package/packages/omo-codex/plugin/components/comment-checker/LICENSE +21 -0
  133. package/packages/omo-codex/plugin/components/comment-checker/NOTICE +6 -0
  134. package/packages/omo-codex/plugin/components/comment-checker/README.md +87 -0
  135. package/packages/omo-codex/plugin/components/comment-checker/biome.json +48 -0
  136. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +17 -0
  137. package/packages/omo-codex/plugin/components/comment-checker/package.json +57 -0
  138. package/packages/omo-codex/plugin/components/comment-checker/skills/comment-checker/SKILL.md +16 -0
  139. package/packages/omo-codex/plugin/components/comment-checker/src/cli.ts +12 -0
  140. package/packages/omo-codex/plugin/components/comment-checker/src/codex-hook.ts +205 -0
  141. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +361 -0
  142. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +195 -0
  143. package/packages/omo-codex/plugin/components/comment-checker/test/codex-hook-newline.test.ts +52 -0
  144. package/packages/omo-codex/plugin/components/comment-checker/test/codex-hook.test.ts +368 -0
  145. package/packages/omo-codex/plugin/components/comment-checker/test/fixtures/post-tool-use.json +15 -0
  146. package/packages/omo-codex/plugin/components/comment-checker/test/package-smoke.test.ts +93 -0
  147. package/packages/omo-codex/plugin/components/comment-checker/test/runner.test.ts +66 -0
  148. package/packages/omo-codex/plugin/components/comment-checker/tsconfig.build.json +12 -0
  149. package/packages/omo-codex/plugin/components/comment-checker/tsconfig.json +27 -0
  150. package/packages/omo-codex/plugin/components/comment-checker/vitest.config.ts +9 -0
  151. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +29 -0
  152. package/packages/omo-codex/plugin/components/git-bash/package.json +23 -0
  153. package/packages/omo-codex/plugin/components/git-bash/src/cli.ts +33 -0
  154. package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +180 -0
  155. package/packages/omo-codex/plugin/components/git-bash/src/index.ts +10 -0
  156. package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +195 -0
  157. package/packages/omo-codex/plugin/components/git-bash/tsconfig.build.json +13 -0
  158. package/packages/omo-codex/plugin/components/git-bash/tsconfig.json +25 -0
  159. package/packages/omo-codex/plugin/components/lsp/.gitattributes +13 -0
  160. package/packages/omo-codex/plugin/components/lsp/.github/CODEOWNERS +1 -0
  161. package/packages/omo-codex/plugin/components/lsp/.github/ISSUE_TEMPLATE/bug.yml +26 -0
  162. package/packages/omo-codex/plugin/components/lsp/.github/ISSUE_TEMPLATE/feature.yml +19 -0
  163. package/packages/omo-codex/plugin/components/lsp/.github/branch-ruleset.json +45 -0
  164. package/packages/omo-codex/plugin/components/lsp/.github/dependabot.yml +11 -0
  165. package/packages/omo-codex/plugin/components/lsp/.github/pull_request_template.md +11 -0
  166. package/packages/omo-codex/plugin/components/lsp/.github/workflows/ci.yml +56 -0
  167. package/packages/omo-codex/plugin/components/lsp/.github/workflows/publish.yml +60 -0
  168. package/packages/omo-codex/plugin/components/lsp/.mcp.json +9 -0
  169. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +25 -0
  170. package/packages/omo-codex/plugin/components/lsp/CHANGELOG.md +25 -0
  171. package/packages/omo-codex/plugin/components/lsp/LICENSE +21 -0
  172. package/packages/omo-codex/plugin/components/lsp/NOTICE +3 -0
  173. package/packages/omo-codex/plugin/components/lsp/README.md +148 -0
  174. package/packages/omo-codex/plugin/components/lsp/biome.json +48 -0
  175. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +17 -0
  176. package/packages/omo-codex/plugin/components/lsp/package.json +64 -0
  177. package/packages/omo-codex/plugin/components/lsp/scripts/build-lsp-tools.mjs +46 -0
  178. package/packages/omo-codex/plugin/components/lsp/scripts/build-lsp-tools.test.mjs +104 -0
  179. package/packages/omo-codex/plugin/components/lsp/scripts/clean-dist.mjs +5 -0
  180. package/packages/omo-codex/plugin/components/lsp/scripts/test.mjs +8 -0
  181. package/packages/omo-codex/plugin/components/lsp/skills/lsp/SKILL.md +35 -0
  182. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +44 -0
  183. package/packages/omo-codex/plugin/components/lsp/src/codex-hook-cli.ts +33 -0
  184. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +277 -0
  185. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-cli.test.ts +28 -0
  186. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-errors.test.ts +55 -0
  187. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +358 -0
  188. package/packages/omo-codex/plugin/components/lsp/test/fixtures/broken.py +1 -0
  189. package/packages/omo-codex/plugin/components/lsp/test/fixtures/post-tool-use.json +15 -0
  190. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +155 -0
  191. package/packages/omo-codex/plugin/components/lsp/tsconfig.build.json +12 -0
  192. package/packages/omo-codex/plugin/components/lsp/tsconfig.json +27 -0
  193. package/packages/omo-codex/plugin/components/lsp/vitest.config.ts +9 -0
  194. package/packages/omo-codex/plugin/components/rules/.codex-plugin/plugin.json +3 -0
  195. package/packages/omo-codex/plugin/components/rules/.gitattributes +13 -0
  196. package/packages/omo-codex/plugin/components/rules/.github/CODEOWNERS +12 -0
  197. package/packages/omo-codex/plugin/components/rules/.github/ISSUE_TEMPLATE/bug.yml +49 -0
  198. package/packages/omo-codex/plugin/components/rules/.github/ISSUE_TEMPLATE/feature.yml +27 -0
  199. package/packages/omo-codex/plugin/components/rules/.github/branch-ruleset.json +45 -0
  200. package/packages/omo-codex/plugin/components/rules/.github/dependabot.yml +16 -0
  201. package/packages/omo-codex/plugin/components/rules/.github/pull_request_template.md +20 -0
  202. package/packages/omo-codex/plugin/components/rules/.github/workflows/ci.yml +47 -0
  203. package/packages/omo-codex/plugin/components/rules/.github/workflows/publish.yml +51 -0
  204. package/packages/omo-codex/plugin/components/rules/AGENTS.md +34 -0
  205. package/packages/omo-codex/plugin/components/rules/CHANGELOG.md +19 -0
  206. package/packages/omo-codex/plugin/components/rules/LICENSE +21 -0
  207. package/packages/omo-codex/plugin/components/rules/NOTICE +15 -0
  208. package/packages/omo-codex/plugin/components/rules/README.md +124 -0
  209. package/packages/omo-codex/plugin/components/rules/biome.json +48 -0
  210. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus.md +209 -0
  211. package/packages/omo-codex/plugin/components/rules/bundled-rules/windows-git-bash.md +10 -0
  212. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +54 -0
  213. package/packages/omo-codex/plugin/components/rules/package.json +62 -0
  214. package/packages/omo-codex/plugin/components/rules/scripts/bench-codex-rules.mjs +268 -0
  215. package/packages/omo-codex/plugin/components/rules/skills/rules/SKILL.md +34 -0
  216. package/packages/omo-codex/plugin/components/rules/src/cli.ts +143 -0
  217. package/packages/omo-codex/plugin/components/rules/src/codex-hook-options.ts +4 -0
  218. package/packages/omo-codex/plugin/components/rules/src/codex-hook.ts +238 -0
  219. package/packages/omo-codex/plugin/components/rules/src/config.ts +107 -0
  220. package/packages/omo-codex/plugin/components/rules/src/context-pressure.ts +26 -0
  221. package/packages/omo-codex/plugin/components/rules/src/debug-log.ts +65 -0
  222. package/packages/omo-codex/plugin/components/rules/src/dynamic-target-fingerprints.ts +98 -0
  223. package/packages/omo-codex/plugin/components/rules/src/hook-output.ts +19 -0
  224. package/packages/omo-codex/plugin/components/rules/src/path-utils.ts +29 -0
  225. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +234 -0
  226. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +104 -0
  227. package/packages/omo-codex/plugin/components/rules/src/post-compact-claim.ts +13 -0
  228. package/packages/omo-codex/plugin/components/rules/src/post-compact-state.ts +45 -0
  229. package/packages/omo-codex/plugin/components/rules/src/rules/cache.ts +64 -0
  230. package/packages/omo-codex/plugin/components/rules/src/rules/constants.ts +115 -0
  231. package/packages/omo-codex/plugin/components/rules/src/rules/engine.ts +535 -0
  232. package/packages/omo-codex/plugin/components/rules/src/rules/errors.ts +13 -0
  233. package/packages/omo-codex/plugin/components/rules/src/rules/finder-cache.ts +73 -0
  234. package/packages/omo-codex/plugin/components/rules/src/rules/finder-paths.ts +47 -0
  235. package/packages/omo-codex/plugin/components/rules/src/rules/finder-sources.ts +50 -0
  236. package/packages/omo-codex/plugin/components/rules/src/rules/finder.ts +207 -0
  237. package/packages/omo-codex/plugin/components/rules/src/rules/formatter.ts +123 -0
  238. package/packages/omo-codex/plugin/components/rules/src/rules/matcher.ts +142 -0
  239. package/packages/omo-codex/plugin/components/rules/src/rules/ordering.ts +33 -0
  240. package/packages/omo-codex/plugin/components/rules/src/rules/parser.ts +326 -0
  241. package/packages/omo-codex/plugin/components/rules/src/rules/plugin-root.ts +55 -0
  242. package/packages/omo-codex/plugin/components/rules/src/rules/project-root.ts +30 -0
  243. package/packages/omo-codex/plugin/components/rules/src/rules/scanner.ts +162 -0
  244. package/packages/omo-codex/plugin/components/rules/src/rules/truncator.ts +67 -0
  245. package/packages/omo-codex/plugin/components/rules/src/rules/types.ts +141 -0
  246. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +24 -0
  247. package/packages/omo-codex/plugin/components/rules/src/session-state-lock.ts +47 -0
  248. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +56 -0
  249. package/packages/omo-codex/plugin/components/rules/src/tool-paths.ts +192 -0
  250. package/packages/omo-codex/plugin/components/rules/src/transcript-rule-filter.ts +44 -0
  251. package/packages/omo-codex/plugin/components/rules/src/transcript-search.ts +108 -0
  252. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +107 -0
  253. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +268 -0
  254. package/packages/omo-codex/plugin/components/rules/test/codex-hook-context-pressure.test.ts +243 -0
  255. package/packages/omo-codex/plugin/components/rules/test/codex-hook-performance.test.ts +99 -0
  256. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +132 -0
  257. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +156 -0
  258. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +299 -0
  259. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-lock.test.ts +46 -0
  260. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-process.test.ts +83 -0
  261. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +667 -0
  262. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +192 -0
  263. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +102 -0
  264. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +168 -0
  265. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +42 -0
  266. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +206 -0
  267. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +153 -0
  268. package/packages/omo-codex/plugin/components/rules/test/persistent-cache.test.ts +63 -0
  269. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +172 -0
  270. package/packages/omo-codex/plugin/components/rules/test/post-compact-test-fixture.ts +196 -0
  271. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +63 -0
  272. package/packages/omo-codex/plugin/components/rules/test/tool-paths.test.ts +198 -0
  273. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +97 -0
  274. package/packages/omo-codex/plugin/components/rules/tsconfig.build.json +12 -0
  275. package/packages/omo-codex/plugin/components/rules/tsconfig.json +27 -0
  276. package/packages/omo-codex/plugin/components/rules/vitest.config.ts +8 -0
  277. package/packages/omo-codex/plugin/components/start-work-continuation/.gitattributes +13 -0
  278. package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +43 -0
  279. package/packages/omo-codex/plugin/components/start-work-continuation/CHANGELOG.md +5 -0
  280. package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +21 -0
  281. package/packages/omo-codex/plugin/components/start-work-continuation/NOTICE +5 -0
  282. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +55 -0
  283. package/packages/omo-codex/plugin/components/start-work-continuation/biome.json +48 -0
  284. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +52 -0
  285. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +28 -0
  286. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +53 -0
  287. package/packages/omo-codex/plugin/components/start-work-continuation/src/boulder-reader.ts +167 -0
  288. package/packages/omo-codex/plugin/components/start-work-continuation/src/cli.ts +52 -0
  289. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +66 -0
  290. package/packages/omo-codex/plugin/components/start-work-continuation/src/directive.ts +6 -0
  291. package/packages/omo-codex/plugin/components/start-work-continuation/src/index.ts +5 -0
  292. package/packages/omo-codex/plugin/components/start-work-continuation/src/types.ts +23 -0
  293. package/packages/omo-codex/plugin/components/start-work-continuation/test/boulder-reader.test.ts +63 -0
  294. package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +124 -0
  295. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +182 -0
  296. package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/boulder-completed.json +19 -0
  297. package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/boulder-mixed-platforms.json +27 -0
  298. package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/boulder-single-codex-work.json +19 -0
  299. package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/plan-all-done.md +5 -0
  300. package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/plan-with-nested-checkboxes.md +11 -0
  301. package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/plan-with-unchecked.md +6 -0
  302. package/packages/omo-codex/plugin/components/start-work-continuation/tsconfig.build.json +12 -0
  303. package/packages/omo-codex/plugin/components/start-work-continuation/tsconfig.json +27 -0
  304. package/packages/omo-codex/plugin/components/start-work-continuation/vitest.config.ts +10 -0
  305. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +37 -0
  306. package/packages/omo-codex/plugin/components/telemetry/README.md +102 -0
  307. package/packages/omo-codex/plugin/components/telemetry/biome.json +48 -0
  308. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +16 -0
  309. package/packages/omo-codex/plugin/components/telemetry/package.json +56 -0
  310. package/packages/omo-codex/plugin/components/telemetry/src/atomic-write.ts +22 -0
  311. package/packages/omo-codex/plugin/components/telemetry/src/cli.ts +69 -0
  312. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +49 -0
  313. package/packages/omo-codex/plugin/components/telemetry/src/data-path.ts +45 -0
  314. package/packages/omo-codex/plugin/components/telemetry/src/env-flags.ts +43 -0
  315. package/packages/omo-codex/plugin/components/telemetry/src/posthog-activity-state.ts +81 -0
  316. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +165 -0
  317. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +35 -0
  318. package/packages/omo-codex/plugin/components/telemetry/test/codex-hook.test.ts +270 -0
  319. package/packages/omo-codex/plugin/components/telemetry/tsconfig.build.json +12 -0
  320. package/packages/omo-codex/plugin/components/telemetry/tsconfig.json +27 -0
  321. package/packages/omo-codex/plugin/components/telemetry/vitest.config.ts +8 -0
  322. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +41 -0
  323. package/packages/omo-codex/plugin/components/ultrawork/CHANGELOG.md +25 -0
  324. package/packages/omo-codex/plugin/components/ultrawork/LICENSE +21 -0
  325. package/packages/omo-codex/plugin/components/ultrawork/NOTICE +5 -0
  326. package/packages/omo-codex/plugin/components/ultrawork/README.md +60 -0
  327. package/packages/omo-codex/plugin/components/ultrawork/agents/codex-ultrawork-reviewer.toml +18 -0
  328. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +82 -0
  329. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +222 -0
  330. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +65 -0
  331. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +69 -0
  332. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +164 -0
  333. package/packages/omo-codex/plugin/components/ultrawork/biome.json +48 -0
  334. package/packages/omo-codex/plugin/components/ultrawork/directive.md +290 -0
  335. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +16 -0
  336. package/packages/omo-codex/plugin/components/ultrawork/package.json +54 -0
  337. package/packages/omo-codex/plugin/components/ultrawork/src/cli.ts +50 -0
  338. package/packages/omo-codex/plugin/components/ultrawork/src/codex-hook.ts +84 -0
  339. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +3 -0
  340. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +275 -0
  341. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +103 -0
  342. package/packages/omo-codex/plugin/components/ultrawork/tsconfig.build.json +12 -0
  343. package/packages/omo-codex/plugin/components/ultrawork/tsconfig.json +27 -0
  344. package/packages/omo-codex/plugin/components/ulw-loop/.gitattributes +13 -0
  345. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +48 -0
  346. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +7 -0
  347. package/packages/omo-codex/plugin/components/ulw-loop/LICENSE +21 -0
  348. package/packages/omo-codex/plugin/components/ulw-loop/NOTICE +6 -0
  349. package/packages/omo-codex/plugin/components/ulw-loop/README.md +74 -0
  350. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +48 -0
  351. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +29 -0
  352. package/packages/omo-codex/plugin/components/ulw-loop/package.json +55 -0
  353. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/.gitkeep +0 -0
  354. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +44 -0
  355. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/agents/openai.yaml +6 -0
  356. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +230 -0
  357. package/packages/omo-codex/plugin/components/ulw-loop/src/.gitkeep +0 -0
  358. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +155 -0
  359. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +95 -0
  360. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +156 -0
  361. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +63 -0
  362. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +94 -0
  363. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +40 -0
  364. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +129 -0
  365. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +139 -0
  366. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +177 -0
  367. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +122 -0
  368. package/packages/omo-codex/plugin/components/ulw-loop/src/goal-status.ts +88 -0
  369. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +73 -0
  370. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +113 -0
  371. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +124 -0
  372. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +102 -0
  373. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +81 -0
  374. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +270 -0
  375. package/packages/omo-codex/plugin/components/ulw-loop/src/types.ts +277 -0
  376. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +213 -0
  377. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +375 -0
  378. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-helpers.test.ts +250 -0
  379. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering.test.ts +407 -0
  380. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +169 -0
  381. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +156 -0
  382. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +275 -0
  383. package/packages/omo-codex/plugin/components/ulw-loop/test/evidence-criteria-gate.test.ts +100 -0
  384. package/packages/omo-codex/plugin/components/ulw-loop/test/evidence.test.ts +263 -0
  385. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/.gitkeep +0 -0
  386. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/codex-goal-snapshot.json +1 -0
  387. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/sample-brief.md +5 -0
  388. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/sample-plan.json +108 -0
  389. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/sample-quality-gate.json +18 -0
  390. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/steering-proposal.json +8 -0
  391. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/user-prompt-submit.json +10 -0
  392. package/packages/omo-codex/plugin/components/ulw-loop/test/goal-status.test.ts +327 -0
  393. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +261 -0
  394. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +62 -0
  395. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-crud.test.ts +256 -0
  396. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +239 -0
  397. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +203 -0
  398. package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +180 -0
  399. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +353 -0
  400. package/packages/omo-codex/plugin/components/ulw-loop/test/types.test.ts +79 -0
  401. package/packages/omo-codex/plugin/components/ulw-loop/tsconfig.build.json +12 -0
  402. package/packages/omo-codex/plugin/components/ulw-loop/tsconfig.json +27 -0
  403. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +10 -0
  404. package/packages/omo-codex/plugin/hooks/hooks.json +160 -0
  405. package/packages/omo-codex/plugin/package-lock.json +1769 -0
  406. package/packages/omo-codex/plugin/package.json +28 -0
  407. package/packages/omo-codex/plugin/scripts/build-bundled-mcp-runtimes.mjs +65 -0
  408. package/packages/omo-codex/plugin/scripts/build-components.mjs +24 -0
  409. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +46 -0
  410. package/packages/omo-codex/plugin/scripts/sync-hook-status-messages.mjs +87 -0
  411. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +75 -0
  412. package/packages/omo-codex/plugin/skills/comment-checker/SKILL.md +16 -0
  413. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +116 -0
  414. package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +108 -0
  415. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +130 -0
  416. package/packages/omo-codex/plugin/skills/debugging/references/methodology/04-oracle-triple.md +136 -0
  417. package/packages/omo-codex/plugin/skills/debugging/references/methodology/05-escalate.md +69 -0
  418. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +116 -0
  419. package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +94 -0
  420. package/packages/omo-codex/plugin/skills/debugging/references/methodology/09-cleanup.md +164 -0
  421. package/packages/omo-codex/plugin/skills/debugging/references/methodology/partial-runtime-evidence.md +229 -0
  422. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/bundled-js-binary.md +415 -0
  423. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +252 -0
  424. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +484 -0
  425. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +260 -0
  426. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +248 -0
  427. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +234 -0
  428. package/packages/omo-codex/plugin/skills/debugging/references/tools/ghidra.md +212 -0
  429. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +194 -0
  430. package/packages/omo-codex/plugin/skills/debugging/references/tools/pwndbg.md +263 -0
  431. package/packages/omo-codex/plugin/skills/debugging/references/tools/pwntools.md +265 -0
  432. package/packages/omo-codex/plugin/skills/frontend-ui-ux/SKILL.md +77 -0
  433. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +325 -0
  434. package/packages/omo-codex/plugin/skills/lsp/SKILL.md +35 -0
  435. package/packages/omo-codex/plugin/skills/programming/SKILL.md +463 -0
  436. package/packages/omo-codex/plugin/skills/programming/references/go/README.md +90 -0
  437. package/packages/omo-codex/plugin/skills/programming/references/go/backend-stack.md +641 -0
  438. package/packages/omo-codex/plugin/skills/programming/references/go/bootstrap.md +328 -0
  439. package/packages/omo-codex/plugin/skills/programming/references/go/bubbletea-v2.md +360 -0
  440. package/packages/omo-codex/plugin/skills/programming/references/go/cobra-stack.md +468 -0
  441. package/packages/omo-codex/plugin/skills/programming/references/go/concurrency.md +362 -0
  442. package/packages/omo-codex/plugin/skills/programming/references/go/data-modeling.md +329 -0
  443. package/packages/omo-codex/plugin/skills/programming/references/go/error-handling.md +359 -0
  444. package/packages/omo-codex/plugin/skills/programming/references/go/golangci-strict.md +236 -0
  445. package/packages/omo-codex/plugin/skills/programming/references/go/grpc-connect.md +375 -0
  446. package/packages/omo-codex/plugin/skills/programming/references/go/libraries.md +337 -0
  447. package/packages/omo-codex/plugin/skills/programming/references/go/one-liners.md +202 -0
  448. package/packages/omo-codex/plugin/skills/programming/references/go/sqlc-pgx.md +471 -0
  449. package/packages/omo-codex/plugin/skills/programming/references/go/testing.md +467 -0
  450. package/packages/omo-codex/plugin/skills/programming/references/go/type-patterns.md +298 -0
  451. package/packages/omo-codex/plugin/skills/programming/references/python/README.md +314 -0
  452. package/packages/omo-codex/plugin/skills/programming/references/python/async-anyio.md +442 -0
  453. package/packages/omo-codex/plugin/skills/programming/references/python/data-modeling.md +233 -0
  454. package/packages/omo-codex/plugin/skills/programming/references/python/data-processing.md +133 -0
  455. package/packages/omo-codex/plugin/skills/programming/references/python/error-handling.md +218 -0
  456. package/packages/omo-codex/plugin/skills/programming/references/python/fastapi-stack.md +316 -0
  457. package/packages/omo-codex/plugin/skills/programming/references/python/httpx2-optimization.md +360 -0
  458. package/packages/omo-codex/plugin/skills/programming/references/python/libraries.md +307 -0
  459. package/packages/omo-codex/plugin/skills/programming/references/python/one-liners.md +268 -0
  460. package/packages/omo-codex/plugin/skills/programming/references/python/orjson-stack.md +378 -0
  461. package/packages/omo-codex/plugin/skills/programming/references/python/pydantic-ai.md +285 -0
  462. package/packages/omo-codex/plugin/skills/programming/references/python/pyproject-strict.md +232 -0
  463. package/packages/omo-codex/plugin/skills/programming/references/python/textual-tui.md +201 -0
  464. package/packages/omo-codex/plugin/skills/programming/references/python/type-patterns.md +176 -0
  465. package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +317 -0
  466. package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +299 -0
  467. package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +467 -0
  468. package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +317 -0
  469. package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +409 -0
  470. package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +375 -0
  471. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +439 -0
  472. package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +291 -0
  473. package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +429 -0
  474. package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +354 -0
  475. package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +250 -0
  476. package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +527 -0
  477. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/README.md +289 -0
  478. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +411 -0
  479. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +269 -0
  480. package/packages/omo-codex/plugin/skills/programming/references/typescript/README.md +195 -0
  481. package/packages/omo-codex/plugin/skills/programming/references/typescript/backend-hono.md +672 -0
  482. package/packages/omo-codex/plugin/skills/programming/references/typescript/bootstrap.md +199 -0
  483. package/packages/omo-codex/plugin/skills/programming/references/typescript/data-modeling.md +202 -0
  484. package/packages/omo-codex/plugin/skills/programming/references/typescript/error-handling.md +169 -0
  485. package/packages/omo-codex/plugin/skills/programming/references/typescript/tsconfig-strict.md +152 -0
  486. package/packages/omo-codex/plugin/skills/programming/references/typescript/type-patterns.md +196 -0
  487. package/packages/omo-codex/plugin/skills/programming/scripts/go/check-no-excuse-rules.sh +173 -0
  488. package/packages/omo-codex/plugin/skills/programming/scripts/go/new-project.py +138 -0
  489. package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/.editorconfig +13 -0
  490. package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/.golangci.yml +95 -0
  491. package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/AGENTS.md.tmpl +24 -0
  492. package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/README.md.tmpl +12 -0
  493. package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/Taskfile.yml +40 -0
  494. package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/ci.yml +37 -0
  495. package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/config.go +24 -0
  496. package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/gitignore +15 -0
  497. package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/main.go.tmpl +22 -0
  498. package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/run.go +15 -0
  499. package/packages/omo-codex/plugin/skills/programming/scripts/python/check-no-excuse-rules.py +687 -0
  500. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-project.py +172 -0
  501. package/packages/omo-codex/plugin/skills/programming/scripts/python/new-script.py +116 -0
  502. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +296 -0
  503. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +158 -0
  504. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +175 -0
  505. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-no-excuse-rules.ts +282 -0
  506. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/new-project.ts +177 -0
  507. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +779 -0
  508. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +333 -0
  509. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +574 -0
  510. package/packages/omo-codex/plugin/skills/rules/SKILL.md +34 -0
  511. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +149 -0
  512. package/packages/omo-codex/plugin/skills/ulw-loop/.gitkeep +0 -0
  513. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +44 -0
  514. package/packages/omo-codex/plugin/skills/ulw-loop/agents/openai.yaml +6 -0
  515. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +230 -0
  516. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +399 -0
  517. package/packages/omo-codex/plugin/test/aggregate.test.mjs +345 -0
  518. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +66 -0
  519. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +195 -0
  520. package/packages/omo-codex/plugin/test/install-time-build-runtime.test.mjs +34 -0
  521. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +21 -0
  522. package/packages/omo-codex/plugin/test/node-install-surface.test.mjs +48 -0
  523. package/packages/omo-codex/plugin/test/subagent-guidance.test.mjs +76 -0
  524. package/packages/omo-codex/plugin/test/sync-hook-status-messages.test.mjs +66 -0
  525. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +229 -0
  526. package/packages/omo-codex/scripts/install/agents.mjs +84 -0
  527. package/packages/omo-codex/scripts/install/cache.mjs +247 -0
  528. package/packages/omo-codex/scripts/install/cli-args.mjs +112 -0
  529. package/packages/omo-codex/scripts/install/command-shim.mjs +1 -0
  530. package/packages/omo-codex/scripts/install/config.mjs +264 -0
  531. package/packages/omo-codex/scripts/install/delegated-command.mjs +25 -0
  532. package/packages/omo-codex/scripts/install/git-bash.mjs +99 -0
  533. package/packages/omo-codex/scripts/install/git-bash.test.mjs +174 -0
  534. package/packages/omo-codex/scripts/install/hook-trust.mjs +84 -0
  535. package/packages/omo-codex/scripts/install/legacy-bins.mjs +57 -0
  536. package/packages/omo-codex/scripts/install/marketplace.mjs +104 -0
  537. package/packages/omo-codex/scripts/install/mcp-runtime-cache.mjs +81 -0
  538. package/packages/omo-codex/scripts/install/multi-agent-v2-config.mjs +38 -0
  539. package/packages/omo-codex/scripts/install/permissions.d.mts +1 -0
  540. package/packages/omo-codex/scripts/install/permissions.mjs +26 -0
  541. package/packages/omo-codex/scripts/install/process.mjs +19 -0
  542. package/packages/omo-codex/scripts/install/project-local-cleanup.mjs +229 -0
  543. package/packages/omo-codex/scripts/install/reasoning-config.mjs +14 -0
  544. package/packages/omo-codex/scripts/install/snapshot.mjs +54 -0
  545. package/packages/omo-codex/scripts/install/source-package-build.mjs +20 -0
  546. package/packages/omo-codex/scripts/install/toml-editor.mjs +64 -0
  547. package/packages/omo-codex/scripts/install/utils.mjs +15 -0
  548. package/packages/omo-codex/scripts/install-agent-links.test.mjs +104 -0
  549. package/packages/omo-codex/scripts/install-bin-links.test.mjs +123 -0
  550. package/packages/omo-codex/scripts/install-cache-copy.test.mjs +30 -0
  551. package/packages/omo-codex/scripts/install-cli-args.test.mjs +146 -0
  552. package/packages/omo-codex/scripts/install-config-autonomous.test.mjs +48 -0
  553. package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +62 -0
  554. package/packages/omo-codex/scripts/install-config.test.mjs +324 -0
  555. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +129 -0
  556. package/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs +145 -0
  557. package/packages/omo-codex/scripts/install-local.mjs +275 -0
  558. package/packages/omo-codex/scripts/install-local.test.mjs +394 -0
  559. package/packages/omo-codex/scripts/install-mcp-runtime.test.mjs +233 -0
  560. package/packages/omo-codex/scripts/install-packaged-local.test.mjs +67 -0
  561. package/packages/omo-codex/scripts/install-project-local-cleanup.test.mjs +277 -0
  562. package/packages/omo-codex/scripts/install-test-fixtures.mjs +58 -0
  563. package/packages/omo-codex/scripts/sync-telemetry-component.mjs +115 -0
  564. package/packages/omo-codex/scripts/sync-telemetry-component.test.mjs +94 -0
  565. package/packages/shared-skills/index.mjs +5 -0
  566. package/packages/shared-skills/package.json +14 -0
  567. package/packages/shared-skills/skills/debugging/SKILL.md +116 -0
  568. package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +108 -0
  569. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +130 -0
  570. package/packages/shared-skills/skills/debugging/references/methodology/04-oracle-triple.md +136 -0
  571. package/packages/shared-skills/skills/debugging/references/methodology/05-escalate.md +69 -0
  572. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +116 -0
  573. package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +94 -0
  574. package/packages/shared-skills/skills/debugging/references/methodology/09-cleanup.md +164 -0
  575. package/packages/shared-skills/skills/debugging/references/methodology/partial-runtime-evidence.md +229 -0
  576. package/packages/shared-skills/skills/debugging/references/runtimes/bundled-js-binary.md +415 -0
  577. package/packages/shared-skills/skills/debugging/references/runtimes/go.md +252 -0
  578. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +484 -0
  579. package/packages/shared-skills/skills/debugging/references/runtimes/node.md +260 -0
  580. package/packages/shared-skills/skills/debugging/references/runtimes/python.md +248 -0
  581. package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +234 -0
  582. package/packages/shared-skills/skills/debugging/references/tools/ghidra.md +212 -0
  583. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +194 -0
  584. package/packages/shared-skills/skills/debugging/references/tools/pwndbg.md +263 -0
  585. package/packages/shared-skills/skills/debugging/references/tools/pwntools.md +265 -0
  586. package/packages/shared-skills/skills/frontend-ui-ux/SKILL.md +77 -0
  587. package/packages/shared-skills/skills/init-deep/SKILL.md +309 -0
  588. package/packages/shared-skills/skills/programming/SKILL.md +463 -0
  589. package/packages/shared-skills/skills/programming/references/go/README.md +90 -0
  590. package/packages/shared-skills/skills/programming/references/go/backend-stack.md +641 -0
  591. package/packages/shared-skills/skills/programming/references/go/bootstrap.md +328 -0
  592. package/packages/shared-skills/skills/programming/references/go/bubbletea-v2.md +360 -0
  593. package/packages/shared-skills/skills/programming/references/go/cobra-stack.md +468 -0
  594. package/packages/shared-skills/skills/programming/references/go/concurrency.md +362 -0
  595. package/packages/shared-skills/skills/programming/references/go/data-modeling.md +329 -0
  596. package/packages/shared-skills/skills/programming/references/go/error-handling.md +359 -0
  597. package/packages/shared-skills/skills/programming/references/go/golangci-strict.md +236 -0
  598. package/packages/shared-skills/skills/programming/references/go/grpc-connect.md +375 -0
  599. package/packages/shared-skills/skills/programming/references/go/libraries.md +337 -0
  600. package/packages/shared-skills/skills/programming/references/go/one-liners.md +202 -0
  601. package/packages/shared-skills/skills/programming/references/go/sqlc-pgx.md +471 -0
  602. package/packages/shared-skills/skills/programming/references/go/testing.md +467 -0
  603. package/packages/shared-skills/skills/programming/references/go/type-patterns.md +298 -0
  604. package/packages/shared-skills/skills/programming/references/python/README.md +314 -0
  605. package/packages/shared-skills/skills/programming/references/python/async-anyio.md +442 -0
  606. package/packages/shared-skills/skills/programming/references/python/data-modeling.md +233 -0
  607. package/packages/shared-skills/skills/programming/references/python/data-processing.md +133 -0
  608. package/packages/shared-skills/skills/programming/references/python/error-handling.md +218 -0
  609. package/packages/shared-skills/skills/programming/references/python/fastapi-stack.md +316 -0
  610. package/packages/shared-skills/skills/programming/references/python/httpx2-optimization.md +360 -0
  611. package/packages/shared-skills/skills/programming/references/python/libraries.md +307 -0
  612. package/packages/shared-skills/skills/programming/references/python/one-liners.md +268 -0
  613. package/packages/shared-skills/skills/programming/references/python/orjson-stack.md +378 -0
  614. package/packages/shared-skills/skills/programming/references/python/pydantic-ai.md +285 -0
  615. package/packages/shared-skills/skills/programming/references/python/pyproject-strict.md +232 -0
  616. package/packages/shared-skills/skills/programming/references/python/textual-tui.md +201 -0
  617. package/packages/shared-skills/skills/programming/references/python/type-patterns.md +176 -0
  618. package/packages/shared-skills/skills/programming/references/rust/README.md +317 -0
  619. package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +299 -0
  620. package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +467 -0
  621. package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +317 -0
  622. package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +409 -0
  623. package/packages/shared-skills/skills/programming/references/rust/concurrency.md +375 -0
  624. package/packages/shared-skills/skills/programming/references/rust/libraries.md +439 -0
  625. package/packages/shared-skills/skills/programming/references/rust/one-liners.md +291 -0
  626. package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +429 -0
  627. package/packages/shared-skills/skills/programming/references/rust/type-state.md +354 -0
  628. package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +250 -0
  629. package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +527 -0
  630. package/packages/shared-skills/skills/programming/references/rust-ub/README.md +289 -0
  631. package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +411 -0
  632. package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +269 -0
  633. package/packages/shared-skills/skills/programming/references/typescript/README.md +195 -0
  634. package/packages/shared-skills/skills/programming/references/typescript/backend-hono.md +672 -0
  635. package/packages/shared-skills/skills/programming/references/typescript/bootstrap.md +199 -0
  636. package/packages/shared-skills/skills/programming/references/typescript/data-modeling.md +202 -0
  637. package/packages/shared-skills/skills/programming/references/typescript/error-handling.md +169 -0
  638. package/packages/shared-skills/skills/programming/references/typescript/tsconfig-strict.md +152 -0
  639. package/packages/shared-skills/skills/programming/references/typescript/type-patterns.md +196 -0
  640. package/packages/shared-skills/skills/programming/scripts/go/check-no-excuse-rules.sh +173 -0
  641. package/packages/shared-skills/skills/programming/scripts/go/new-project.py +138 -0
  642. package/packages/shared-skills/skills/programming/scripts/go/templates/.editorconfig +13 -0
  643. package/packages/shared-skills/skills/programming/scripts/go/templates/.golangci.yml +95 -0
  644. package/packages/shared-skills/skills/programming/scripts/go/templates/AGENTS.md.tmpl +24 -0
  645. package/packages/shared-skills/skills/programming/scripts/go/templates/README.md.tmpl +12 -0
  646. package/packages/shared-skills/skills/programming/scripts/go/templates/Taskfile.yml +40 -0
  647. package/packages/shared-skills/skills/programming/scripts/go/templates/ci.yml +37 -0
  648. package/packages/shared-skills/skills/programming/scripts/go/templates/config.go +24 -0
  649. package/packages/shared-skills/skills/programming/scripts/go/templates/gitignore +15 -0
  650. package/packages/shared-skills/skills/programming/scripts/go/templates/main.go.tmpl +22 -0
  651. package/packages/shared-skills/skills/programming/scripts/go/templates/run.go +15 -0
  652. package/packages/shared-skills/skills/programming/scripts/python/check-no-excuse-rules.py +687 -0
  653. package/packages/shared-skills/skills/programming/scripts/python/new-project.py +172 -0
  654. package/packages/shared-skills/skills/programming/scripts/python/new-script.py +116 -0
  655. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +296 -0
  656. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +158 -0
  657. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +175 -0
  658. package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.ts +282 -0
  659. package/packages/shared-skills/skills/programming/scripts/typescript/new-project.ts +177 -0
  660. package/packages/shared-skills/skills/refactor/SKILL.md +763 -0
  661. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +317 -0
  662. package/packages/shared-skills/skills/review-work/SKILL.md +574 -0
  663. package/packages/shared-skills/skills/start-work/SKILL.md +149 -0
  664. package/packages/shared-skills/skills/ulw-plan/SKILL.md +383 -0
  665. package/postinstall.mjs +6 -2
  666. package/dist/features/builtin-commands/templates/init-deep.d.ts +0 -1
  667. package/dist/features/builtin-skills/skills/ai-slop-remover.d.ts +0 -2
  668. package/dist/hooks/context-window-monitor.d.ts +0 -19
package/README.ru.md CHANGED
@@ -1,3 +1,13 @@
1
+ > [!NOTE]
2
+ > **🚀 Первый релиз для Codex: omo теперь доступен в Codex CLI**
3
+ >
4
+ > Никаких сложных JSON-конфигураций. Просто выполните:
5
+ > ```bash
6
+ > npx lazycodex-ai install
7
+ > ```
8
+ > Ваш Codex будет писать чистый код и завершать задачи с помощью встроенного computer-use QA.
9
+ > Подробности на [lazycodex.ai](https://lazycodex.ai).
10
+
1
11
  > [!NOTE]
2
12
  > **Рефакторинг в сторону мульти-harness агентной ОС**
3
13
  >
@@ -121,6 +131,8 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head
121
131
 
122
132
  Анонимная телеметрия включена по умолчанию для подсчёта активных установок (DAU/WAU/MAU). Не более одного события на машину за UTC-сутки, использует хешированный идентификатор установки, никогда не использует исходное имя хоста, и не создаёт PostHog person profile. Можно отключить через `OMO_SEND_ANONYMOUS_TELEMETRY=0` или `OMO_DISABLE_POSTHOG=1`. См. [Политику конфиденциальности](docs/legal/privacy-policy.md) и [Условия обслуживания](docs/legal/terms-of-service.md).
123
133
 
134
+ **Ultimate и Light:** oh-my-openagent поставляется в двух редакциях одного продукта. **Ultimate** (`bunx oh-my-openagent install` или `--platform=opencode`, по умолчанию) — полнофункциональная редакция поверх OpenCode: 11 агентов, 54+ хука, Team Mode, все MCP, все слэш-команды, режимы IntentGate. **Light** (`bunx oh-my-openagent install --platform=codex`) — только 5 компонентов omo, которые портируются в систему плагинов OpenAI Codex CLI: `rules`, `comment-checker`, `lsp`, `ultrawork`, `ulw-loop`. `bunx lazycodex-ai install` — это сокращённый псевдоним для `--platform=codex`. Чтобы установить обе редакции одной командой, используйте `--platform=both`. Телеметрию только для Codex можно отключить через `OMO_CODEX_DISABLE_POSTHOG=1` или `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0`.
135
+
124
136
  ------
125
137
 
126
138
  ## Пропустите этот README
@@ -149,24 +161,29 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
149
161
  - [Тариф GLM Coding ($10)](https://z.ai/subscribe)
150
162
  - Если у вас есть доступ к оплате за токены, использование моделей Kimi и Gemini обойдётся недорого.
151
163
 
152
- | | Функция | Что делает |
153
- | --- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
154
- | 🤖 | **Дисциплинированные агенты** | Sisyphus оркестрирует Hephaestus, Oracle, Librarian, Explore. Полноценная AI-команда разработки в параллельном режиме. |
155
- | 👥 | **Team Mode** (v4.0, opt-in) | Лид-агент + до 8 параллельных участников, визуализация в tmux в реальном времени, выделенные инструменты `team_*`. Питает `hyperplan` (5 враждебных критиков) и `security-research` (3 охотника + 2 PoC-инженера). [Документация →](docs/guide/team-mode.md) |
156
- | | **`ultrawork` / `ulw`** | Одно слово. Все агенты активируются. Не останавливается, пока задача не выполнена. |
157
- | 🚪 | **[IntentGate](https://factory.ai/news/terminal-bench)** | Анализирует истинное намерение пользователя перед классификацией и действием. Никакого буквального неверного толкования. |
158
- | 🔗 | **Инструмент правок на основе хэш-якорей** | Хэш содержимого `LINE#ID` проверяет каждое изменение. Ноль ошибок с устаревшими строками. Вдохновлено [oh-my-pi](https://github.com/can1357/oh-my-pi). [The Harness Problem →](https://blog.can.ac/2026/02/12/the-harness-problem/) |
159
- | 🛠️ | **LSP + AST-Grep** | Переименование в рабочем пространстве, диагностика перед сборкой, переписывание с учётом AST. Точность IDE для агентов. |
160
- | 🧠 | **Фоновые агенты** | Запускайте 5+ специалистов параллельно. Контекст остаётся компактным. Результаты когда готовы. |
161
- | 📚 | **Встроенные MCP** | Exa (веб-поиск), Context7 (официальная документация), Grep.app (поиск по GitHub). Всегда включены. |
162
- | 🔁 | **Ralph Loop / `/ulw-loop`** | Самореферентный цикл. Не останавливается, пока задача не выполнена на 100%. |
163
- | | **Todo Enforcer** | Агент завис? Система немедленно возвращает его в работу. Ваша задача будет выполнена, точка. |
164
- | 💬 | **Comment Checker** | Никакого AI-мусора в комментариях. Код читается так, словно его писал опытный разработчик. |
165
- | 🖥️ | **Интеграция с Tmux** | Полноценный интерактивный терминал. REPL, дебаггеры, TUI. Всё живое. |
166
- | 🔌 | **Совместимость с Claude Code** | Ваши хуки, команды, навыки, MCP и плагины? Всё работает без изменений. |
167
- | 🎯 | **MCP, встроенные в навыки** | Навыки несут собственные MCP-серверы. Никакого раздувания контекста. |
168
- | 📋 | **Prometheus Planner** | Стратегическое планирование в режиме интервью перед любым выполнением. |
169
- | 🔍 | **`/init-deep`** | Автоматически генерирует иерархические файлы `AGENTS.md` по всему проекту. Отлично работает на эффективность токенов и производительность агента. |
164
+ | | Функция | Editions | Что делает |
165
+ | --- | -------------------------------------------------------- | :------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
166
+ | 🤖 | **Дисциплинированные агенты** | Ultimate | Sisyphus оркестрирует Hephaestus, Oracle, Librarian, Explore. Полноценная AI-команда разработки в параллельном режиме. |
167
+ | 🧩 | **Codex CLI Light Edition** | Light | 5 компонентов omo, портированных в OpenAI Codex CLI (rules, comment-checker, LSP, ultrawork, ulw-loop). Установка: `bunx oh-my-openagent install --platform=codex`. |
168
+ | 👥 | **Team Mode** (v4.0, opt-in) | Ultimate | Лид-агент + до 8 параллельных участников, визуализация в tmux в реальном времени, выделенные инструменты `team_*`. Питает `hyperplan` (5 враждебных критиков) и `security-research` (3 охотника + 2 PoC-инженера). [Документация →](docs/guide/team-mode.md) |
169
+ | | **`ultrawork` / `ulw`** | Both | Одно слово. Все агенты (Ultimate) или Codex-компонент `ultrawork` (Light) активируются. Не останавливается, пока задача не выполнена. |
170
+ | 🚪 | **[IntentGate](https://factory.ai/news/terminal-bench)** | Ultimate | Анализирует истинное намерение пользователя перед классификацией и действием. Триггеры `search` / `analyze` / `team` / `hyperplan`. (Light хукает только `ulw` / `ultrawork`.) |
171
+ | 🔗 | **Инструмент правок на основе хэш-якорей** | Ultimate | Хэш содержимого `LINE#ID` проверяет каждое изменение. Ноль ошибок с устаревшими строками. Вдохновлено [oh-my-pi](https://github.com/can1357/oh-my-pi). [The Harness Problem →](https://blog.can.ac/2026/02/12/the-harness-problem/) (Codex использует собственный `apply_patch`.) |
172
+ | 🛠️ | **LSP + AST-Grep** | Ultimate | Переименование в рабочем пространстве, диагностика перед сборкой, переписывание с учётом AST. Точность IDE для агентов. (LSP также работает в Light через компонент `lsp`; AST-Grep только Ultimate.) |
173
+ | 🧠 | **Фоновые агенты** | Ultimate | Запускайте 5+ специалистов параллельно. Контекст остаётся компактным. Результаты — когда готовы. |
174
+ | 📚 | **Встроенные MCP** | Ultimate | Exa (веб-поиск), Context7 (официальная документация), Grep.app (поиск по GitHub). Всегда включены. (В Light только LSP MCP.) |
175
+ | 🔁 | **Ralph Loop / `/ulw-loop`** | Ultimate | Самореферентный цикл. Не останавливается, пока задача не выполнена на 100%. |
176
+ | | **Todo Enforcer** (Boulder) | Ultimate | Агент завис? Система немедленно возвращает его в работу. Ваша задача будет выполнена, точка. |
177
+ | 💬 | **Comment Checker** | Both | Никакого AI-мусора в комментариях. Тот же бинарник `@code-yeongyu/comment-checker` работает в обеих редакциях. |
178
+ | 📜 | **Rules Injection** | Both | Иерархическое внедрение контекста из `AGENTS.md` / `CLAUDE.md` / `.omo/rules/**`. В Ultimate это хук, в Light — компонент `rules`. |
179
+ | 🧬 | **Ulw Loop** | Light | Долговечная оркестрация нескольких целей с аудитом доказательств в `.omo/ulw-loop/`. Сейчас только в Codex; порт в сторону OpenCode в дорожной карте. |
180
+ | 🖥️ | **Интеграция с Tmux** | Ultimate | Полноценный интерактивный терминал. REPL, дебаггеры, TUI. Всё живое. |
181
+ | 🔌 | **Совместимость с Claude Code** | Ultimate | Ваши хуки, команды, навыки, MCP и плагины? Всё работает без изменений. Codex своя нативная плагин-система.) |
182
+ | 🎯 | **MCP, встроенные в навыки** | Ultimate | Навыки несут собственные MCP-серверы. Никакого раздувания контекста. |
183
+ | 📋 | **Prometheus Planner** | Ultimate | Стратегическое планирование в режиме интервью перед любым выполнением. |
184
+ | 🔍 | **`/init-deep`** | Ultimate | Автоматически генерирует иерархические файлы `AGENTS.md` по всему проекту. Отлично работает на эффективность токенов и производительность агента. |
185
+
186
+ > **Editions, легенда.** **Ultimate** = только OpenCode (`bunx oh-my-openagent install`). **Light** = только Codex CLI (`bunx oh-my-openagent install --platform=codex`). **Both** = поставляется в обеих редакциях, часто с немного отличающейся реализацией.
170
187
 
171
188
  ### Дисциплинированные агенты
172
189
 
@@ -338,6 +355,14 @@ project/
338
355
  # Плагин больше не должен загружаться
339
356
  ```
340
357
 
358
+ 4. **Удалите omo-codex (Codex CLI Light edition)**
359
+
360
+ ```bash
361
+ rm -rf ~/.codex/plugins/cache/sisyphuslabs
362
+ ```
363
+
364
+ Затем откройте `~/.codex/config.toml` и удалите блоки `[marketplaces.sisyphuslabs]`, `[plugins."omo@sisyphuslabs"]` и `[hooks.state."omo@sisyphuslabs:..."]`.
365
+
341
366
  ## Функции
342
367
 
343
368
  Функции, которые, как вы будете думать, должны были существовать всегда. Попробовав раз, вы не сможете вернуться назад.
package/README.zh-cn.md CHANGED
@@ -1,3 +1,13 @@
1
+ > [!NOTE]
2
+ > **🚀 首个 Codex 版本发布:omo 现已支持 Codex CLI**
3
+ >
4
+ > 无需再配置复杂的 JSON。直接运行:
5
+ > ```bash
6
+ > npx lazycodex-ai install
7
+ > ```
8
+ > 您的 Codex 将清晰编码,并通过内置 computer-use QA 完成任务。
9
+ > 了解更多请访问 [lazycodex.ai](https://lazycodex.ai)。
10
+
1
11
  > [!NOTE]
2
12
  > **正在进行多 Harness 代理操作系统重构**
3
13
  >
@@ -67,7 +77,7 @@
67
77
 
68
78
  ## 评价
69
79
 
70
- > "因为它,我取消了 Cursor 的订阅。开源社区正在发生令人难以置信的事情。" - [Arthur Guiot](https://x.com/arthur_guiot/status/2008736347092382053?s=20)
80
+ > "因为它,我取消了 Cursor 的订阅。令人震撼的事在开源社区发生了。" - [Arthur Guiot](https://x.com/arthur_guiot/status/2008736347092382053?s=20)
71
81
 
72
82
  > "如果人类需要 3 个月完成的事情 Claude Code 需要 7 天,那么 Sisyphus 只需要 1 小时。它会一直工作直到任务完成。它是一个极度自律的智能体。" <br/>- B, 量化研究员
73
83
 
@@ -93,7 +103,7 @@
93
103
 
94
104
  你同时折腾着 Claude Code、Codex、各种奇奇怪怪的开源模型。配工作流。给 Agent 调 Bug。
95
105
 
96
- 这些事我们替你做完了。全部测试过。只留下真正跑得起来的。
106
+ 这些事我们替你做完了。全部测试过。只留下真正跑得起来的代码。
97
107
 
98
108
  装上 oh-my-openagent。敲 `ultrawork`。就完事了。
99
109
 
@@ -109,7 +119,7 @@ Install and configure oh-my-openagent by following the instructions here:
109
119
  https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/heads/dev/docs/guide/installation.md
110
120
  ```
111
121
 
112
- 或者你也可以直接去读 [安装指南](docs/guide/installation.md),但说真的,让 Agent 去干吧。人类配环境总是容易敲错字母。
122
+ 或者你也可以直接去读 [安装指南](docs/guide/installation.md),但说真的,让 Agent 去干吧。人类在配置环境的时候,总是容易敲错字母。
113
123
 
114
124
  ### 给 LLM Agent 看的
115
125
 
@@ -123,6 +133,8 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head
123
133
 
124
134
  匿名遥测默认开启,用于统计活跃安装数(DAU/WAU/MAU)。每台机器每个 UTC 日最多发送一次事件,使用哈希化的安装标识符,绝不会使用原始主机名,且不会创建 PostHog person profile。可通过 `OMO_SEND_ANONYMOUS_TELEMETRY=0` 或 `OMO_DISABLE_POSTHOG=1` 禁用。详见 [隐私政策](docs/legal/privacy-policy.md) 和 [服务条款](docs/legal/terms-of-service.md)。
125
135
 
136
+ **Ultimate 与 Light:** oh-my-openagent 以同一产品的两个版本发布。**Ultimate 版本**(`bunx oh-my-openagent install` 或 `--platform=opencode`,默认值)在 OpenCode 上提供完整功能 —— 11 个智能体、54+ 个生命周期钩子、Team Mode、所有 MCP、所有斜杠命令、IntentGate 模式。**Light 版本**(`bunx oh-my-openagent install --platform=codex`)仅提供能够干净地移植到 OpenAI Codex CLI 插件系统的 5 个组件(`rules`、`comment-checker`、`lsp`、`ultrawork`、`ulw-loop`)。`bunx lazycodex-ai install` 是 `--platform=codex` 的快捷别名。要同时安装两个版本,使用 `--platform=both`。Codex 专用遥测可通过 `OMO_CODEX_DISABLE_POSTHOG=1` 或 `OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0` 禁用。
137
+
126
138
  ---
127
139
 
128
140
  ## 跳过这个 README 吧
@@ -133,6 +145,12 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/head
133
145
  Read this and tell me why it's not just another boilerplate: https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/refs/heads/dev/README.md
134
146
  ```
135
147
 
148
+ ## 路线图
149
+
150
+ 我们正在重构代码库以支持多个代理 harness(OpenCode、Codex、Pi、Claude Code 等)。当前最紧迫的任务是包分层重构:将纯 TypeScript 核心逻辑、MCP 服务器、技能和适配器 shim 分离到不同的层,以便跨 harness 复用而不产生重复。
151
+
152
+ 如果你有兴趣贡献,请先阅读 [ROADMAP](./ROADMAP.md)。与此重构相关的 PR 请使用 `ROADMAP` 标签,以便我们追踪。
153
+
136
154
 
137
155
  ## 核心亮点
138
156
 
@@ -150,24 +168,29 @@ Read this and tell me why it's not just another boilerplate: https://raw.githubu
150
168
  - [GLM Coding 套餐 ($10)](https://z.ai/subscribe)
151
169
  - 如果你能使用按 token 计费的方式,用 Kimi 和 Gemini 模型花不了多少钱。
152
170
 
153
- | | 特性 | 功能说明 |
154
- | :---: | :-------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
155
- | 🤖 | **自律军团 (Discipline Agents)** | Sisyphus 负责调度 Hephaestus、Oracle、Librarian 和 Explore。一支完整的 AI 开发团队并行工作。 |
156
- | 👥 | **Team Mode** (v4.0, 选择性启用) | 领导 Agent + 最多 8 个并行成员,实时 tmux 可视化,专用 `team_*` 工具家族。驱动 `hyperplan`(5 个敌对评论者) 和 `security-research`(3 个猎手 + 2 PoC 工程师)。[文档 →](docs/guide/team-mode.md) |
157
- | | **`ultrawork` / `ulw`** | 一键触发,所有智能体出动。任务完成前绝不罢休。 |
158
- | 🚪 | **[IntentGate 意图门](https://factory.ai/news/terminal-bench)** | 真正行动前,先分析用户的真实意图。彻底告别被字面意思误导的 AI 废话。 |
159
- | 🔗 | **基于哈希的编辑工具** | 每次修改都通过 `LINE#ID` 内容哈希验证、0% 错误修改。灵感来自 [oh-my-pi](https://github.com/can1357/oh-my-pi)。[The Harness Problem →](https://blog.can.ac/2026/02/12/the-harness-problem/) |
160
- | 🛠️ | **LSP + AST-Grep** | 工作区级别的重命名、构建前诊断、基于 AST 的重写。为 Agent 提供 IDE 级别的精度。 |
161
- | 🧠 | **后台智能体** | 同时发射 5+ 个专家并行工作。保持上下文干净,随时获取成果。 |
162
- | 📚 | **内置 MCP** | Exa(网络搜索)、Context7(官方文档)、Grep.app(GitHub 源码搜索)。默认开启。 |
163
- | 🔁 | **Ralph Loop / `/ulw-loop`** | 自我引用闭环。达不到 100% 完成度绝不停止。 |
164
- | | **Todo 强制执行** | Agent 想要摸鱼?系统直接揪着领子拽回来。你的任务,必须完成。 |
165
- | 💬 | **注释审查员** | 剔除带有浓烈 AI 味的冗余注释。写出的代码就像老练的高级工程师写的。 |
166
- | 🖥️ | **Tmux 集成** | 完整的交互式终端支持。跑 REPL、用调试器、用 TUI 工具,全都在实时会话中完成。 |
167
- | 🔌 | **Claude Code 兼容** | 你现有的 Hooks、命令、技能、MCP 和插件?全都能无缝迁移过来。 |
168
- | 🎯 | **技能内嵌 MCP** | 技能自带其所需的 MCP 服务器。按需开启,不会撑爆你的上下文窗口。 |
169
- | 📋 | **Prometheus 规划师** | 动手写代码前,先通过访谈模式做好战略规划。 |
170
- | 🔍 | **`/init-deep`** | 在整个项目目录层级中自动生成 `AGENTS.md`。不仅省 Token,还能大幅提升 Agent 理解力。 |
171
+ | | 特性 | Editions | 功能说明 |
172
+ | :---: | :-------------------------------------------------------------- | :------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
173
+ | 🤖 | **自律军团 (Discipline Agents)** | Ultimate | Sisyphus 负责调度 Hephaestus、Oracle、Librarian 和 Explore。一支完整的 AI 开发团队并行工作。 |
174
+ | 🧩 | **Codex CLI Light Edition** | Light | OpenAI Codex CLI 中运行的 omo 5 个可移植组件 (rules, comment-checker, LSP, ultrawork, ulw-loop)。安装: `bunx oh-my-openagent install --platform=codex`。 |
175
+ | 👥 | **Team Mode** (v4.0, 选择性启用) | Ultimate | 领导 Agent + 最多 8 个并行成员,实时 tmux 可视化,专用 `team_*` 工具家族。驱动 `hyperplan`(5 个敌对评论者) 和 `security-research`(3 个猎手 + 2 个 PoC 工程师)。[文档 →](docs/guide/team-mode.md) |
176
+ | | **`ultrawork` / `ulw`** | Both | 一键触发,所有智能体(Ultimate)或 Codex `ultrawork` 组件(Light)出动。任务完成前绝不罢休。 |
177
+ | 🚪 | **[IntentGate 意图门](https://factory.ai/news/terminal-bench)** | Ultimate | 真正行动前,先分析用户的真实意图。触发 `search` / `analyze` / `team` / `hyperplan`。(Light 仅 hook `ulw` / `ultrawork`。) |
178
+ | 🔗 | **基于哈希的编辑工具** | Ultimate | 每次修改都通过 `LINE#ID` 内容哈希验证、0% 错误修改。灵感来自 [oh-my-pi](https://github.com/can1357/oh-my-pi)。[The Harness Problem →](https://blog.can.ac/2026/02/12/the-harness-problem/) (Codex 使用其原生 `apply_patch`。) |
179
+ | 🛠️ | **LSP + AST-Grep** | Ultimate | 工作区级别的重命名、构建前诊断、基于 AST 的重写。为 Agent 提供 IDE 级别的精度。(LSP 在 Light 中也通过 `lsp` 组件提供; AST-Grep 仅 Ultimate。) |
180
+ | 🧠 | **后台智能体** | Ultimate | 同时发射 5+ 个专家并行工作。保持上下文干净,随时获取成果。 |
181
+ | 📚 | **内置 MCP** | Ultimate | Exa(网络搜索)、Context7(官方文档)、Grep.app(GitHub 源码搜索)。默认开启。(Light 仅 LSP MCP。) |
182
+ | 🔁 | **Ralph Loop / `/ulw-loop`** | Ultimate | 自我引用闭环。达不到 100% 完成度绝不停止。 |
183
+ | | **Todo 强制执行** (Boulder) | Ultimate | Agent 想要摸鱼?系统直接揪着领子拽回来。你的任务,必须完成。 |
184
+ | 💬 | **注释审查员** | Both | 剔除带有浓烈 AI 味的冗余注释。同一个 `@code-yeongyu/comment-checker` 二进制在两个版本中运行。 |
185
+ | 📜 | **Rules Injection** | Both | `AGENTS.md` / `CLAUDE.md` / `.omo/rules/**` 的分层上下文注入。Ultimate 中为 hook,Light 中为 `rules` 组件。 |
186
+ | 🧬 | **Ulw Loop** | Light | 基于 `.omo/ulw-loop/` 证据审计的持久化多目标编排。目前仅 Codex 可用; OpenCode 侧的移植在路线图上。 |
187
+ | 🖥️ | **Tmux 集成** | Ultimate | 完整的交互式终端支持。跑 REPL、用调试器、用 TUI 工具,全都在实时会话中完成。 |
188
+ | 🔌 | **Claude Code 兼容** | Ultimate | 你现有的 Hooks、命令、技能、MCP 和插件?全都能无缝迁移过来。(Codex 拥有其自己的原生插件系统。) |
189
+ | 🎯 | **技能内嵌 MCP** | Ultimate | 技能自带其所需的 MCP 服务器。按需开启,不会撑爆你的上下文窗口。 |
190
+ | 📋 | **Prometheus 规划师** | Ultimate | 动手写代码前,先通过访谈模式做好战略规划。 |
191
+ | 🔍 | **`/init-deep`** | Ultimate | 在整个项目目录层级中自动生成 `AGENTS.md`。不仅省 Token,还能大幅提升 Agent 理解力。 |
192
+
193
+ > **Editions 图例。** **Ultimate** = 仅 OpenCode (`bunx oh-my-openagent install`)。**Light** = 仅 Codex CLI (`bunx oh-my-openagent install --platform=codex`)。**Both** = 两个版本均提供 (内部实现可能略有不同)。
171
194
 
172
195
  ### 自律军团 (Discipline Agents)
173
196
 
@@ -339,6 +362,14 @@ Agent 会自动顺藤摸瓜加载对应的 Context,免去了你所有的手动
339
362
  # 这个时候就应该没有任何关于插件的输出信息了
340
363
  ```
341
364
 
365
+ 4. **移除 omo-codex(Codex CLI Light 版本)**
366
+
367
+ ```bash
368
+ rm -rf ~/.codex/plugins/cache/sisyphuslabs
369
+ ```
370
+
371
+ 然后打开 `~/.codex/config.toml`,删除 `[marketplaces.sisyphuslabs]`、`[plugins."omo@sisyphuslabs"]` 以及所有 `[hooks.state."omo@sisyphuslabs:..."]` 区块。
372
+
342
373
  ## Features
343
374
 
344
375
  那种"这个功能本来就该一直存在"的感觉。一用就回不去。
@@ -352,7 +383,7 @@ Agent 会自动顺藤摸瓜加载对应的 Context,免去了你所有的手动
352
383
  - **基于哈希的编辑工具**: `LINE#ID` 引用在应用每次修改前都会验证内容。外科手术级编辑,零陈旧行错误
353
384
  - **上下文注入**: 自动注入 AGENTS.md、README.md、条件规则
354
385
  - **Claude Code 兼容**: 完整的 Hook 系统、命令、技能、Agents、MCP
355
- - **内置 MCP**: websearch(Exa)、context7(文档)、grep_app(GitHub 检索)
386
+ - **内置 MCP**: websearch(Exa)、context7(文档)、grep_app(GitHub 检索) ——由插件在运行时注入,不会显示在 `opencode mcp list` 中(参见文档 [MCP docs](docs/reference/features.md#native-vs-plugin-injected-mcps))
356
387
  - **会话工具**: 列出、读取、搜索、分析会话历史
357
388
  - **效率功能**: Ralph Loop、Todo Enforcer、Comment Checker、Think Mode 等
358
389
  - **Doctor 命令**: 内置诊断(`bunx oh-my-opencode doctor`),验证插件注册、配置、模型和环境
@@ -368,7 +399,7 @@ Agent 会自动顺藤摸瓜加载对应的 Context,免去了你所有的手动
368
399
  详细内容见 [Configuration Documentation](docs/reference/configuration.md)。
369
400
 
370
401
  **简要概览:**
371
- - **配置文件位置**: 兼容性层同时识别 `oh-my-openagent.json[c]` 和旧的 `oh-my-opencode.json[c]` 插件配置文件。现有安装仍大多使用旧文件名。
402
+ - **配置文件位置**: 使用用户全局配置,同时会从当前目录向上查找 `.opencode/oh-my-openagent.json[c]`(查到 `$HOME` 为止),离当前目录越近的优先级越高。旧版 `oh-my-opencode.json[c]` 仍然有效。
372
403
  - **JSONC 支持**: 支持注释和尾逗号
373
404
  - **Agents**: 可对任意 Agent 覆盖模型、temperature、prompts 和权限
374
405
  - **内置技能**: `playwright`(浏览器自动化)、`git-master`(原子提交)
@@ -376,7 +407,7 @@ Agent 会自动顺藤摸瓜加载对应的 Context,免去了你所有的手动
376
407
  - **后台任务**: 按 provider/model 配置并发上限
377
408
  - **类别**: 按领域的任务委托(`visual`、`business-logic`、自定义)
378
409
  - **Hooks**: 54+ 内置生命周期 Hook(启用 Team Mode 时为 61 个),都可以通过 `disabled_hooks` 控制
379
- - **MCPs**: 内置 websearch(Exa)、context7(文档)、grep_app(GitHub 检索)
410
+ - **MCPs**: 内置 websearch(Exa)、context7(文档)、grep_app(GitHub 检索)——由插件在运行时注入,不会显示在 `opencode mcp list` 中
380
411
  - **LSP**: 包括重构工具的完整 LSP 支持
381
412
  - **Experimental**: 激进截断、自动 resume 等
382
413
 
@@ -5,7 +5,14 @@
5
5
  import { spawnSync } from "node:child_process";
6
6
  import { readFileSync } from "node:fs";
7
7
  import { createRequire } from "node:module";
8
- import { getPlatformPackageCandidates, getBinaryPath } from "./platform.js";
8
+ import { basename } from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ import {
11
+ getPlatformPackageCandidates,
12
+ getBinaryPath,
13
+ getPackageBareName,
14
+ resolvePlatformPackageBaseName,
15
+ } from "./platform.js";
9
16
 
10
17
  const require = createRequire(import.meta.url);
11
18
 
@@ -72,6 +79,10 @@ function getSignalExitCode(signal) {
72
79
  }
73
80
 
74
81
  function getPackageBaseName() {
82
+ return resolvePlatformPackageBaseName(getWrapperPackageName());
83
+ }
84
+
85
+ function getWrapperPackageName() {
75
86
  try {
76
87
  const packageJson = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
77
88
  return packageJson.name || "oh-my-opencode";
@@ -80,10 +91,38 @@ function getPackageBaseName() {
80
91
  }
81
92
  }
82
93
 
94
+ function getWrapperPackageRoot() {
95
+ return fileURLToPath(new URL("..", import.meta.url));
96
+ }
97
+
98
+ /**
99
+ * Determine which bin name the user invoked us with (oh-my-opencode, oh-my-openagent, omo, lazycodex).
100
+ * Propagated to the compiled CLI binary via OMO_INVOCATION_NAME so it can route accordingly
101
+ * (e.g. `lazycodex` defaults to the Codex install flow).
102
+ * @returns {string}
103
+ */
104
+ function getInvocationName(wrapperPackageName) {
105
+ if (process.env.OMO_INVOCATION_NAME) {
106
+ return process.env.OMO_INVOCATION_NAME;
107
+ }
108
+ const wrapperBareName = getPackageBareName(wrapperPackageName);
109
+ if (wrapperBareName === "lazycodex" || wrapperBareName === "lazycodex-ai") {
110
+ return wrapperBareName;
111
+ }
112
+ const argv1 = process.argv[1] ?? "";
113
+ if (!argv1) {
114
+ return "oh-my-opencode";
115
+ }
116
+ return basename(argv1, ".js").replace(/\.exe$/, "");
117
+ }
118
+
83
119
  function main() {
84
120
  const { platform, arch } = process;
85
121
  const libcFamily = getLibcFamily();
86
- const packageBaseName = getPackageBaseName();
122
+ const wrapperPackageName = getWrapperPackageName();
123
+ const invocationName = getInvocationName(wrapperPackageName);
124
+
125
+ const packageBaseName = resolvePlatformPackageBaseName(wrapperPackageName);
87
126
  const avx2Supported = supportsAvx2();
88
127
 
89
128
  let packageCandidates;
@@ -119,11 +158,18 @@ function main() {
119
158
  process.exit(1);
120
159
  }
121
160
 
161
+ const childEnv = {
162
+ ...process.env,
163
+ OMO_INVOCATION_NAME: invocationName,
164
+ OMO_WRAPPER_PACKAGE_ROOT: getWrapperPackageRoot(),
165
+ };
166
+
122
167
  for (let index = 0; index < resolvedBinaries.length; index += 1) {
123
168
  const currentBinary = resolvedBinaries[index];
124
169
  const hasFallback = index < resolvedBinaries.length - 1;
125
- const result = spawnSync(currentBinary.binPath, process.argv.slice(2), {
170
+ const result = spawnSync(process.execPath, [currentBinary.binPath, ...process.argv.slice(2)], {
126
171
  stdio: "inherit",
172
+ env: childEnv,
127
173
  });
128
174
 
129
175
  if (result.error) {
@@ -0,0 +1,202 @@
1
+ /// <reference types="bun-types" />
2
+
3
+ import { afterEach, describe, expect, test } from "bun:test";
4
+ import { spawnSync } from "node:child_process";
5
+ import { chmod, cp, mkdir, mkdtemp, readFile, realpath, rm, symlink, writeFile } from "node:fs/promises";
6
+ import { tmpdir } from "node:os";
7
+ import { dirname, join } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ import { getPlatformPackageCandidates } from "./platform.js";
10
+
11
+ const testRoots: string[] = [];
12
+
13
+ afterEach(async () => {
14
+ await Promise.all(testRoots.splice(0).map((path) => rm(path, { recursive: true, force: true })));
15
+ });
16
+
17
+ describe("lazycodex bin wrapper", () => {
18
+ test("runs the platform package launcher through Node", async () => {
19
+ // #given
20
+ const fixture = await createLazyCodexFixture();
21
+ const nodePath = Bun.which("node") ?? "node";
22
+
23
+ // #when
24
+ const result = spawnSync(nodePath, [fixture.lazycodexBin, "install", "--no-tui"], {
25
+ encoding: "utf8",
26
+ env: {
27
+ ...process.env,
28
+ CAPTURE_DIR: fixture.captureDir,
29
+ PATH: fixture.fakeBinDir,
30
+ },
31
+ });
32
+
33
+ // #then
34
+ expect(result.status).toBe(23);
35
+ expect((await readFile(join(fixture.captureDir, "env"), "utf8")).trim()).toBe("lazycodex");
36
+ expect(await canonicalizePackageRootCapture(fixture)).toBe(await realpath(fixture.root));
37
+ expect(await realpath((await readFile(join(fixture.captureDir, "exec-path"), "utf8")).trim())).toBe(await realpath(nodePath));
38
+ expect((await readFile(join(fixture.captureDir, "args"), "utf8")).trim().split("\n")).toEqual([
39
+ "install",
40
+ "--no-tui",
41
+ ]);
42
+ });
43
+
44
+ test("runs the platform binary when published under an npm scope", async () => {
45
+ // #given
46
+ const fixture = await createLazyCodexFixture({ packageName: "@code-yeongyu/lazycodex" });
47
+ const nodePath = Bun.which("node") ?? "node";
48
+
49
+ // #when
50
+ const result = spawnSync(nodePath, [fixture.lazycodexBin, "install", "--no-tui"], {
51
+ encoding: "utf8",
52
+ env: {
53
+ ...process.env,
54
+ CAPTURE_DIR: fixture.captureDir,
55
+ PATH: fixture.fakeBinDir,
56
+ },
57
+ });
58
+
59
+ // #then
60
+ expect(result.status).toBe(23);
61
+ expect((await readFile(join(fixture.captureDir, "env"), "utf8")).trim()).toBe("lazycodex");
62
+ expect(await canonicalizePackageRootCapture(fixture)).toBe(await realpath(fixture.root));
63
+ expect((await readFile(join(fixture.captureDir, "args"), "utf8")).trim().split("\n")).toEqual([
64
+ "install",
65
+ "--no-tui",
66
+ ]);
67
+ });
68
+
69
+ test("routes the lazycodex-ai package to the Codex installer via the oh-my-openagent platform family", async () => {
70
+ // #given
71
+ const fixture = await createLazyCodexFixture({ packageName: "lazycodex-ai", wrapperFileName: "lazycodex-ai" });
72
+ const nodePath = Bun.which("node") ?? "node";
73
+
74
+ // #when
75
+ const result = spawnSync(nodePath, [fixture.wrapperBin, "install", "--no-tui"], {
76
+ encoding: "utf8",
77
+ env: {
78
+ ...process.env,
79
+ CAPTURE_DIR: fixture.captureDir,
80
+ PATH: fixture.fakeBinDir,
81
+ },
82
+ });
83
+
84
+ // #then
85
+ expect(result.status).toBe(23);
86
+ expect((await readFile(join(fixture.captureDir, "env"), "utf8")).trim()).toBe("lazycodex-ai");
87
+ expect(await canonicalizePackageRootCapture(fixture)).toBe(await realpath(fixture.root));
88
+ expect((await readFile(join(fixture.captureDir, "args"), "utf8")).trim().split("\n")).toEqual([
89
+ "install",
90
+ "--no-tui",
91
+ ]);
92
+ });
93
+
94
+ test("routes npm shim execution from the lazycodex package to the Codex installer", async () => {
95
+ // #given
96
+ const fixture = await createLazyCodexFixture({ wrapperFileName: "oh-my-opencode.js" });
97
+ const nodePath = Bun.which("node") ?? "node";
98
+
99
+ // #when
100
+ const result = spawnSync(nodePath, [fixture.wrapperBin, "install", "--no-tui"], {
101
+ encoding: "utf8",
102
+ env: {
103
+ ...process.env,
104
+ CAPTURE_DIR: fixture.captureDir,
105
+ PATH: fixture.fakeBinDir,
106
+ },
107
+ });
108
+
109
+ // #then
110
+ expect(result.status).toBe(23);
111
+ expect((await readFile(join(fixture.captureDir, "env"), "utf8")).trim()).toBe("lazycodex");
112
+ expect(await canonicalizePackageRootCapture(fixture)).toBe(await realpath(fixture.root));
113
+ expect((await readFile(join(fixture.captureDir, "args"), "utf8")).trim().split("\n")).toEqual([
114
+ "install",
115
+ "--no-tui",
116
+ ]);
117
+ });
118
+ });
119
+
120
+ async function createLazyCodexFixture(options: { packageName?: string; wrapperFileName?: string } = {}) {
121
+ const root = await mkdtemp(join(tmpdir(), "lazycodex-bin-wrapper-"));
122
+ testRoots.push(root);
123
+
124
+ const binDir = join(root, "bin");
125
+ const distCli = join(root, "dist", "cli", "index.js");
126
+ const fakeBinDir = join(root, "fake-bin");
127
+ const captureDir = join(root, "capture");
128
+ await mkdir(binDir, { recursive: true });
129
+ await mkdir(dirname(distCli), { recursive: true });
130
+ await mkdir(fakeBinDir, { recursive: true });
131
+ await mkdir(captureDir, { recursive: true });
132
+
133
+ const wrapperFileName = options.wrapperFileName ?? "lazycodex";
134
+ const wrapperBin = join(binDir, wrapperFileName);
135
+ await cp(fileURLToPath(new URL("./oh-my-opencode.js", import.meta.url)), wrapperBin);
136
+ if (wrapperFileName !== "lazycodex") {
137
+ await symlink(wrapperFileName, join(binDir, "lazycodex"));
138
+ }
139
+ await cp(fileURLToPath(new URL("./platform.js", import.meta.url)), join(binDir, "platform.js"));
140
+ await writeFile(join(root, "package.json"), JSON.stringify({ name: options.packageName ?? "lazycodex", type: "module" }));
141
+ await writeFile(distCli, "#!/usr/bin/env bun\n");
142
+ await writePlatformPackages(root);
143
+
144
+ const fakeBun = join(fakeBinDir, "bun");
145
+ await writeFile(
146
+ fakeBun,
147
+ [
148
+ "#!/bin/sh",
149
+ "printf '%s\\n' \"$OMO_INVOCATION_NAME\" > \"$CAPTURE_DIR/env\"",
150
+ "printf '%s\\n' \"$@\" > \"$CAPTURE_DIR/args\"",
151
+ "exit 23",
152
+ "",
153
+ ].join("\n"),
154
+ );
155
+ await chmod(fakeBun, 0o755);
156
+
157
+ return {
158
+ bundledCli: distCli,
159
+ captureDir,
160
+ fakeBinDir,
161
+ lazycodexBin: join(binDir, "lazycodex"),
162
+ root,
163
+ wrapperBin,
164
+ };
165
+ }
166
+
167
+ async function canonicalizePackageRootCapture(fixture: { readonly captureDir: string }): Promise<string> {
168
+ return realpath((await readFile(join(fixture.captureDir, "wrapper-root"), "utf8")).trim());
169
+ }
170
+
171
+ async function writePlatformPackages(root: string): Promise<void> {
172
+ const packages = getPlatformPackageCandidates({
173
+ platform: process.platform,
174
+ arch: process.arch,
175
+ libcFamily: process.platform === "linux" ? "glibc" : undefined,
176
+ packageBaseName: "oh-my-openagent",
177
+ });
178
+ for (const packageName of packages) {
179
+ const binaryPath = join(root, "node_modules", packageName, "bin", "oh-my-opencode.js");
180
+ await mkdir(dirname(binaryPath), { recursive: true });
181
+ await writeFile(
182
+ binaryPath,
183
+ [
184
+ "#!/usr/bin/env node",
185
+ 'import { writeFileSync } from "node:fs";',
186
+ 'writeFileSync(`${process.env.CAPTURE_DIR}/env`, `${process.env.OMO_INVOCATION_NAME}\\n`);',
187
+ 'writeFileSync(`${process.env.CAPTURE_DIR}/wrapper-root`, `${process.env.OMO_WRAPPER_PACKAGE_ROOT}\\n`);',
188
+ 'writeFileSync(`${process.env.CAPTURE_DIR}/exec-path`, `${process.execPath}\\n`);',
189
+ 'writeFileSync(`${process.env.CAPTURE_DIR}/args`, `${process.argv.slice(2).join("\\n")}\\n`);',
190
+ "process.exit(23);",
191
+ "",
192
+ ].join("\n"),
193
+ );
194
+ await chmod(binaryPath, 0o755);
195
+ }
196
+
197
+ if (process.platform === "linux") {
198
+ const detectLibcPath = join(root, "node_modules", "detect-libc", "index.js");
199
+ await mkdir(dirname(detectLibcPath), { recursive: true });
200
+ await writeFile(detectLibcPath, 'exports.familySync = () => "glibc";\n');
201
+ }
202
+ }
package/bin/platform.d.ts CHANGED
@@ -2,6 +2,7 @@ export declare function getPlatformPackage(options: {
2
2
  platform: string;
3
3
  arch: string;
4
4
  libcFamily?: string | null;
5
+ packageBaseName?: string;
5
6
  }): string;
6
7
 
7
8
  export declare function getPlatformPackageCandidates(options: {
@@ -9,6 +10,11 @@ export declare function getPlatformPackageCandidates(options: {
9
10
  arch: string;
10
11
  libcFamily?: string | null;
11
12
  preferBaseline?: boolean;
13
+ packageBaseName?: string;
12
14
  }): string[];
13
15
 
14
- export declare function getBinaryPath(pkg: string, platform: string): string;
16
+ export declare function getBinaryPath(pkg: string, platform?: string): string;
17
+
18
+ export declare function getPackageBareName(packageName: string): string;
19
+
20
+ export declare function resolvePlatformPackageBaseName(wrapperPackageName: string): string;
package/bin/platform.js CHANGED
@@ -1,6 +1,26 @@
1
1
  // bin/platform.js
2
2
  // Shared platform detection module - used by wrapper and postinstall
3
3
 
4
+ const PLATFORM_PACKAGE_BASE_BY_WRAPPER_NAME = {
5
+ lazycodex: "oh-my-openagent",
6
+ "lazycodex-ai": "oh-my-openagent",
7
+ };
8
+
9
+ export function getPackageBareName(packageName) {
10
+ return packageName.split("/").pop() || packageName;
11
+ }
12
+
13
+ /**
14
+ * Resolve platform package base from a wrapper package name.
15
+ * Wrapper aliases can intentionally reuse an existing platform package family.
16
+ * @param {string} wrapperPackageName
17
+ * @returns {string}
18
+ */
19
+ export function resolvePlatformPackageBaseName(wrapperPackageName) {
20
+ const bareName = getPackageBareName(wrapperPackageName);
21
+ return PLATFORM_PACKAGE_BASE_BY_WRAPPER_NAME[bareName] ?? wrapperPackageName;
22
+ }
23
+
4
24
  /**
5
25
  * Get the platform-specific package name
6
26
  * @param {{ platform: string, arch: string, libcFamily?: string | null, packageBaseName?: string }} options
@@ -71,12 +91,11 @@ function getBaselinePlatformPackage({ platform, arch, libcFamily, packageBaseNam
71
91
  }
72
92
 
73
93
  /**
74
- * Get the path to the binary within a platform package
94
+ * Get the path to the launcher within a platform package
75
95
  * @param {string} pkg Package name
76
96
  * @param {string} platform Process platform
77
- * @returns {string} Relative path like "oh-my-opencode-darwin-arm64/bin/oh-my-opencode"
97
+ * @returns {string} Relative path like "oh-my-opencode-darwin-arm64/bin/oh-my-opencode.js"
78
98
  */
79
99
  export function getBinaryPath(pkg, platform) {
80
- const ext = platform === "win32" ? ".exe" : "";
81
- return `${pkg}/bin/oh-my-opencode${ext}`;
100
+ return `${pkg}/bin/oh-my-opencode.js`;
82
101
  }