oh-my-opencode 4.19.4 → 5.0.0-beta.10

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 (374) hide show
  1. package/.agents/command/publish.md +44 -16
  2. package/.agents/skills/publish/SKILL.md +44 -16
  3. package/.agents/skills/work-with-pr/SKILL.md +37 -23
  4. package/.opencode/command/publish.md +44 -16
  5. package/.opencode/skills/work-with-pr/SKILL.md +37 -23
  6. package/README.ja.md +1 -1
  7. package/README.ko.md +1 -1
  8. package/README.md +18 -6
  9. package/README.ru.md +1 -1
  10. package/README.zh-cn.md +1 -1
  11. package/bin/oh-my-opencode.js +14 -1
  12. package/bin/oh-my-opencode.test.ts +21 -0
  13. package/dist/agents/atlas/agent.d.ts +0 -1
  14. package/dist/agents/sisyphus/grok-4.d.ts +20 -0
  15. package/dist/agents/sisyphus/index.d.ts +2 -0
  16. package/dist/agents/sisyphus-agent-config.d.ts +6 -0
  17. package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
  18. package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +15 -4
  19. package/dist/agents/types.d.ts +2 -2
  20. package/dist/cli/index.js +1888 -807
  21. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  22. package/dist/cli-node/index.js +1888 -807
  23. package/dist/config/schema/agent-overrides.d.ts +528 -0
  24. package/dist/config/schema/oh-my-opencode-config.d.ts +495 -0
  25. package/dist/features/monitor/batcher.d.ts +3 -1
  26. package/dist/features/monitor/manager-internals.d.ts +1 -0
  27. package/dist/features/monitor/output-injector-types.d.ts +2 -0
  28. package/dist/features/monitor/output-injector.d.ts +6 -0
  29. package/dist/hooks/atlas/final-wave-approval-gate.test-support.d.ts +50 -0
  30. package/dist/hooks/atlas/system-reminder-templates.d.ts +0 -1
  31. package/dist/hooks/todo-continuation-enforcer/types.d.ts +1 -0
  32. package/dist/hooks/todo-continuation-enforcer/unrecoverable-request-error.d.ts +9 -0
  33. package/dist/hooks/tool-pair-validator/hook.test-support.d.ts +29 -0
  34. package/dist/hooks/tool-pair-validator/tool-part-ids.d.ts +14 -5
  35. package/dist/hooks/tool-pair-validator/tool-result-repair.d.ts +4 -3
  36. package/dist/hooks/tool-pair-validator/types.d.ts +5 -22
  37. package/dist/index.js +3139 -2232
  38. package/dist/mcp/lsp.d.ts +1 -0
  39. package/dist/oh-my-opencode.schema.json +1466 -131
  40. package/dist/shared/normalize-sdk-response.d.ts +1 -0
  41. package/dist/shared/shell-env.d.ts +1 -1
  42. package/dist/shared/tmux/constants.d.ts +1 -1
  43. package/dist/skills/ast-grep/SOURCE +1 -1
  44. package/dist/skills/ast-grep/install.ps1 +2 -2
  45. package/dist/skills/ast-grep/install.sh +1 -1
  46. package/dist/skills/ast-grep/references/install.md +2 -2
  47. package/dist/skills/ast-grep/tests/smoke.sh +1 -1
  48. package/dist/skills/coding-agent-sessions/SKILL.md +3 -2
  49. package/dist/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  50. package/dist/skills/coding-agent-sessions/references/senpi.md +4 -4
  51. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  52. package/dist/skills/frontend/SKILL.md +10 -7
  53. package/dist/skills/frontend/references/design/_INDEX.md +1 -0
  54. package/dist/skills/frontend/references/design/stylegallery.md +80 -0
  55. package/dist/skills/start-work/SKILL.md +54 -9
  56. package/dist/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  57. package/dist/skills/ultimate-browsing/SKILL.md +2 -2
  58. package/dist/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  59. package/dist/skills/ultimate-browsing/engine/__main__.py +8 -1
  60. package/dist/skills/ultimate-browsing/engine/bias_check.py +11 -0
  61. package/dist/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  62. package/dist/skills/ultimate-browsing/engine/result_schema.py +10 -1
  63. package/dist/skills/ultimate-browsing/engine/surrogate.py +214 -0
  64. package/dist/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  65. package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
  66. package/dist/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  67. package/dist/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  68. package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  69. package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  70. package/dist/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  71. package/dist/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  72. package/dist/skills/ultimate-browsing/engine/validators.py +46 -0
  73. package/dist/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  74. package/dist/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  75. package/dist/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  76. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  77. package/dist/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  78. package/dist/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  79. package/dist/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  80. package/dist/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  81. package/dist/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  82. package/dist/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  83. package/dist/skills/ulw-plan/SKILL.md +3 -3
  84. package/dist/skills/ulw-plan/references/full-workflow.md +30 -6
  85. package/dist/skills/ulw-plan/references/intent-clear.md +2 -1
  86. package/dist/skills/ulw-plan/references/intent-unclear.md +3 -3
  87. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  88. package/dist/skills/ulw-research/SKILL.md +15 -10
  89. package/dist/tui.js +477 -36
  90. package/docs/reference/web-terminal-visual-qa.md +1 -1
  91. package/package.json +34 -24
  92. package/packages/lsp-core/src/lsp/client-diagnostics-concurrency.integration.test.ts +44 -0
  93. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +0 -28
  94. package/packages/lsp-core/src/lsp/client-wrapper.test.ts +60 -7
  95. package/packages/lsp-core/src/lsp/client-wrapper.ts +69 -16
  96. package/packages/lsp-core/src/lsp/connection.ts +1 -1
  97. package/packages/lsp-core/src/lsp/workspace-edit-adversarial.test.ts +20 -1
  98. package/packages/lsp-core/src/tools/diagnostics.ts +3 -3
  99. package/packages/lsp-core/src/tools/navigation.ts +4 -2
  100. package/packages/lsp-core/src/tools/rename.ts +4 -2
  101. package/packages/lsp-core/src/tools/symbols.ts +1 -1
  102. package/packages/lsp-daemon/dist/cli.js +108 -40
  103. package/packages/lsp-daemon/dist/client.js +123 -55
  104. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +1 -0
  105. package/packages/lsp-daemon/dist/ensure-daemon.js +18 -5
  106. package/packages/lsp-daemon/dist/index.js +111 -43
  107. package/packages/lsp-tools-mcp/dist/cli.js +77 -23
  108. package/packages/lsp-tools-mcp/dist/lsp/manager.js +1 -1
  109. package/packages/lsp-tools-mcp/dist/mcp.js +77 -23
  110. package/packages/lsp-tools-mcp/dist/tools.js +77 -23
  111. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  112. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +268 -92
  113. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  114. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  115. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -7
  116. package/packages/omo-codex/plugin/components/bootstrap/src/worker.ts +3 -0
  117. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +220 -10
  118. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +220 -10
  119. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  120. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  121. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  122. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  123. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  124. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  125. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  126. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +3 -17
  127. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  128. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +135 -67
  129. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  130. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  131. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  132. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  133. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  134. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +16 -23
  135. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  136. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  137. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  138. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  139. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  140. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +37 -69
  141. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  142. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +1 -15
  143. package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +4 -2
  144. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +5 -1
  145. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +2 -1
  146. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +18 -0
  147. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  148. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  149. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +21 -0
  150. package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +0 -3
  151. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +107 -16
  152. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  153. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  154. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +3 -9
  155. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +24 -12
  156. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +24 -12
  157. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  158. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  159. package/packages/omo-codex/plugin/components/ultrawork/CHANGELOG.md +2 -0
  160. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  161. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  162. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  163. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  164. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  165. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  166. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  167. package/packages/omo-codex/plugin/components/ultrawork/directive.md +9 -2
  168. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  169. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  170. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +9 -2
  171. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +3 -3
  172. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +30 -6
  173. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
  174. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +3 -3
  175. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  176. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  177. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  178. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
  179. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
  180. package/packages/omo-codex/plugin/components/ulw-loop/README.md +11 -11
  181. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +9 -2
  182. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +1 -1
  183. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  184. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +9 -9
  185. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +1 -1
  186. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +66 -66
  187. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +4 -4
  188. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +1 -1
  189. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -1
  190. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +1 -1
  191. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +1 -1
  192. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +2 -2
  193. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  194. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  195. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +5 -4
  196. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +108 -0
  197. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +23 -25
  198. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +1 -1
  199. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +9 -9
  200. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +1 -1
  201. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +1 -1
  202. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +4 -4
  203. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +1 -1
  204. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -1
  205. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +1 -1
  206. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +1 -1
  207. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +2 -2
  208. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  209. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -2
  210. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +1 -1
  211. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-helpers.test.ts +2 -2
  212. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-kind-guidance.test.ts +1 -1
  213. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
  214. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +2 -5
  215. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +1 -1
  216. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +7 -40
  217. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +1 -1
  218. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +1 -1
  219. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +1 -1
  220. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  221. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +4 -5
  222. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  223. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  224. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  225. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  226. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  227. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  228. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  229. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  230. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  231. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  232. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  233. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  234. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  235. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  236. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  237. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  238. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  239. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  240. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  241. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  242. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  243. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  244. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  245. package/packages/omo-codex/plugin/package-lock.json +20 -20
  246. package/packages/omo-codex/plugin/package.json +1 -1
  247. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +4 -4
  248. package/packages/omo-codex/plugin/skills/ast-grep/SOURCE +1 -1
  249. package/packages/omo-codex/plugin/skills/ast-grep/install.ps1 +2 -2
  250. package/packages/omo-codex/plugin/skills/ast-grep/install.sh +1 -1
  251. package/packages/omo-codex/plugin/skills/ast-grep/references/install.md +2 -2
  252. package/packages/omo-codex/plugin/skills/ast-grep/tests/smoke.sh +1 -1
  253. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +3 -2
  254. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  255. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +4 -4
  256. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  257. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +10 -7
  258. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  259. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
  260. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +54 -9
  261. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  262. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -2
  263. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  264. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__main__.py +8 -1
  265. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/bias_check.py +11 -0
  266. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  267. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/result_schema.py +10 -1
  268. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogate.py +214 -0
  269. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  270. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  271. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  272. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  273. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  274. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  275. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  276. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  277. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/validators.py +46 -0
  278. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  279. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  280. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  281. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  282. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  283. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  284. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  285. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  286. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  287. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  288. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +9 -2
  289. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +5 -4
  290. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +108 -0
  291. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +23 -25
  292. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +3 -3
  293. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +30 -6
  294. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
  295. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +3 -3
  296. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  297. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +15 -10
  298. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  299. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +4 -24
  300. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  301. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  302. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  303. package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +12 -12
  304. package/packages/omo-codex/plugin/test/bootstrap-orchestration.test.mjs +36 -4
  305. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  306. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  307. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
  308. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +4 -4
  309. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +1 -119
  310. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  311. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  312. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  313. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  314. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  315. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +0 -3
  316. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  317. package/packages/omo-codex/scripts/install-bin-links.test.mjs +56 -2
  318. package/packages/omo-codex/scripts/install-delegated-command.test.mjs +6 -6
  319. package/packages/omo-codex/scripts/install-dist/install-local.mjs +170 -78
  320. package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +7 -2
  321. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +4 -4
  322. package/packages/omo-codex/scripts/install-local.test.mjs +5 -2
  323. package/packages/shared-skills/index.mjs +19 -1
  324. package/packages/shared-skills/skills/ast-grep/SOURCE +1 -1
  325. package/packages/shared-skills/skills/ast-grep/install.ps1 +2 -2
  326. package/packages/shared-skills/skills/ast-grep/install.sh +1 -1
  327. package/packages/shared-skills/skills/ast-grep/references/install.md +2 -2
  328. package/packages/shared-skills/skills/ast-grep/tests/smoke.sh +1 -1
  329. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +3 -2
  330. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  331. package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +4 -4
  332. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  333. package/packages/shared-skills/skills/frontend/SKILL.md +10 -7
  334. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  335. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
  336. package/packages/shared-skills/skills/start-work/SKILL.md +54 -9
  337. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  338. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -2
  339. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +179 -0
  340. package/packages/shared-skills/skills/ultimate-browsing/engine/__main__.py +8 -1
  341. package/packages/shared-skills/skills/ultimate-browsing/engine/bias_check.py +11 -0
  342. package/packages/shared-skills/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  343. package/packages/shared-skills/skills/ultimate-browsing/engine/result_schema.py +10 -1
  344. package/packages/shared-skills/skills/ultimate-browsing/engine/surrogate.py +214 -0
  345. package/packages/shared-skills/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  346. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  347. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  348. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  349. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  350. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  351. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  352. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  353. package/packages/shared-skills/skills/ultimate-browsing/engine/validators.py +46 -0
  354. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  355. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  356. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  357. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  358. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  359. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  360. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  361. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  362. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  363. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  364. package/packages/shared-skills/skills/ulw-plan/SKILL.md +3 -3
  365. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +30 -6
  366. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
  367. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +3 -3
  368. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  369. package/packages/shared-skills/skills/ulw-research/SKILL.md +15 -10
  370. package/postinstall.mjs +6 -0
  371. package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
  372. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  373. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  374. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
package/dist/tui.js CHANGED
@@ -15197,7 +15197,7 @@ function finalize(ctx, schema) {
15197
15197
  result.$schema = "http://json-schema.org/draft-07/schema#";
15198
15198
  } else if (ctx.target === "draft-04") {
15199
15199
  result.$schema = "http://json-schema.org/draft-04/schema#";
15200
- } else if (ctx.target === "openapi-3.0") {} else {}
15200
+ } else if (ctx.target === "openapi-3.0") {}
15201
15201
  if (ctx.external?.uri) {
15202
15202
  const id = ctx.external.registry.get(schema)?.id;
15203
15203
  if (!id)
@@ -15458,7 +15458,7 @@ var formatMap, stringProcessor = (schema, ctx, _json, _params) => {
15458
15458
  if (val === undefined) {
15459
15459
  if (ctx.unrepresentable === "throw") {
15460
15460
  throw new Error("Literal `undefined` cannot be represented in JSON Schema");
15461
- } else {}
15461
+ }
15462
15462
  } else if (typeof val === "bigint") {
15463
15463
  if (ctx.unrepresentable === "throw") {
15464
15464
  throw new Error("BigInt literals cannot be represented in JSON Schema");
@@ -18836,6 +18836,155 @@ var init_codegraph = __esm(() => {
18836
18836
  }).strict();
18837
18837
  });
18838
18838
 
18839
+ // packages/omo-config-core/src/schema/memory.ts
18840
+ var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
18841
+ var init_memory = __esm(() => {
18842
+ init_zod();
18843
+ OmoMemoryReflectionTriggerSchema = object({
18844
+ step_count: number2().int().nonnegative().default(25),
18845
+ on_compaction: boolean2().default(true)
18846
+ }).strict();
18847
+ OmoMemoryReflectionSchema = object({
18848
+ enabled: boolean2().default(true),
18849
+ trigger: OmoMemoryReflectionTriggerSchema.default({ step_count: 25, on_compaction: true }),
18850
+ merge: _enum2(["auto", "integration"]).default("auto"),
18851
+ category: string2().min(1).default("quick"),
18852
+ timeout_minutes: number2().int().positive().default(15),
18853
+ sandbox: _enum2(["auto", "required", "off"]).default("auto")
18854
+ }).strict();
18855
+ OmoMemorySyncSchema = object({
18856
+ remote: string2().min(1).optional(),
18857
+ enabled: boolean2().default(true)
18858
+ }).strict();
18859
+ OmoMemorySearchSchema = object({
18860
+ enabled: boolean2().default(true)
18861
+ }).strict();
18862
+ OmoMemoryNudgeSchema = object({
18863
+ enabled: boolean2().default(true),
18864
+ every_user_turns: number2().int().min(1).default(10)
18865
+ }).strict();
18866
+ OmoMemoryFactsSchema = object({
18867
+ enabled: boolean2().default(true),
18868
+ debounce_settles: number2().int().min(1).default(4)
18869
+ }).strict();
18870
+ OmoMemoryDreamSchema = object({
18871
+ enabled: boolean2().default(true),
18872
+ idle_minutes: number2().int().min(0).default(30),
18873
+ min_hours_between: number2().int().min(1).default(24),
18874
+ shutdown_launch: boolean2().default(true),
18875
+ auto_select_max: number2().int().min(1).max(10).default(5),
18876
+ auto_select_max_chars: number2().int().min(1e4).default(150000)
18877
+ }).strict();
18878
+ OmoMemoryPeopleSchema = object({
18879
+ enabled: boolean2().default(true),
18880
+ max_entries: number2().int().min(1).max(100).default(40),
18881
+ max_entry_chars: number2().int().min(50).max(500).default(200)
18882
+ }).strict();
18883
+ OmoMemorySoulSchema = object({
18884
+ edit_notice: boolean2().default(true)
18885
+ }).strict();
18886
+ OmoMemoryReflectionTriggerLayerSchema = object({
18887
+ step_count: number2().int().nonnegative().optional(),
18888
+ on_compaction: boolean2().optional()
18889
+ }).strict();
18890
+ OmoMemoryReflectionLayerSchema = object({
18891
+ enabled: boolean2().optional(),
18892
+ trigger: OmoMemoryReflectionTriggerLayerSchema.optional(),
18893
+ merge: _enum2(["auto", "integration"]).optional(),
18894
+ category: string2().min(1).optional(),
18895
+ timeout_minutes: number2().int().positive().optional(),
18896
+ sandbox: _enum2(["auto", "required", "off"]).optional()
18897
+ }).strict();
18898
+ OmoMemorySyncLayerSchema = object({
18899
+ remote: string2().min(1).optional(),
18900
+ enabled: boolean2().optional()
18901
+ }).strict();
18902
+ OmoMemorySearchLayerSchema = object({
18903
+ enabled: boolean2().optional()
18904
+ }).strict();
18905
+ OmoMemoryNudgeLayerSchema = object({
18906
+ enabled: boolean2().optional(),
18907
+ every_user_turns: number2().int().min(1).optional()
18908
+ }).strict();
18909
+ OmoMemoryFactsLayerSchema = object({
18910
+ enabled: boolean2().optional(),
18911
+ debounce_settles: number2().int().min(1).optional()
18912
+ }).strict();
18913
+ OmoMemoryDreamLayerSchema = object({
18914
+ enabled: boolean2().optional(),
18915
+ idle_minutes: number2().int().min(0).optional(),
18916
+ min_hours_between: number2().int().min(1).optional(),
18917
+ shutdown_launch: boolean2().optional(),
18918
+ auto_select_max: number2().int().min(1).max(10).optional(),
18919
+ auto_select_max_chars: number2().int().min(1e4).optional()
18920
+ }).strict();
18921
+ OmoMemoryPeopleLayerSchema = object({
18922
+ enabled: boolean2().optional(),
18923
+ max_entries: number2().int().min(1).max(100).optional(),
18924
+ max_entry_chars: number2().int().min(50).max(500).optional()
18925
+ }).strict();
18926
+ OmoMemorySoulLayerSchema = object({
18927
+ edit_notice: boolean2().optional()
18928
+ }).strict();
18929
+ OmoMemoryAgentOverridesSchema = object({
18930
+ enabled: boolean2().optional(),
18931
+ agent: string2().min(1).optional(),
18932
+ reflection: OmoMemoryReflectionLayerSchema.optional(),
18933
+ nudge: OmoMemoryNudgeLayerSchema.optional(),
18934
+ facts: OmoMemoryFactsLayerSchema.optional(),
18935
+ dream: OmoMemoryDreamLayerSchema.optional(),
18936
+ people: OmoMemoryPeopleLayerSchema.optional(),
18937
+ soul: OmoMemorySoulLayerSchema.optional(),
18938
+ sync: OmoMemorySyncLayerSchema.optional(),
18939
+ search: OmoMemorySearchLayerSchema.optional(),
18940
+ compile_warn_tokens: number2().int().positive().optional()
18941
+ }).strict();
18942
+ OmoMemorySettingsSchema = object({
18943
+ enabled: boolean2().default(true),
18944
+ agent: string2().min(1).default("auto"),
18945
+ tool_exposure: _enum2(["direct", "search"]).default("direct"),
18946
+ reflection: OmoMemoryReflectionSchema.default({
18947
+ enabled: true,
18948
+ trigger: { step_count: 25, on_compaction: true },
18949
+ merge: "auto",
18950
+ category: "quick",
18951
+ timeout_minutes: 15,
18952
+ sandbox: "auto"
18953
+ }),
18954
+ nudge: OmoMemoryNudgeSchema.default({ enabled: true, every_user_turns: 10 }),
18955
+ facts: OmoMemoryFactsSchema.default({ enabled: true, debounce_settles: 4 }),
18956
+ dream: OmoMemoryDreamSchema.default({
18957
+ enabled: true,
18958
+ idle_minutes: 30,
18959
+ min_hours_between: 24,
18960
+ shutdown_launch: true,
18961
+ auto_select_max: 5,
18962
+ auto_select_max_chars: 150000
18963
+ }),
18964
+ people: OmoMemoryPeopleSchema.default({ enabled: true, max_entries: 40, max_entry_chars: 200 }),
18965
+ soul: OmoMemorySoulSchema.default({ edit_notice: true }),
18966
+ sync: OmoMemorySyncSchema.default({ enabled: true }),
18967
+ search: OmoMemorySearchSchema.default({ enabled: true }),
18968
+ compile_warn_tokens: number2().int().positive().default(30000),
18969
+ agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
18970
+ }).strict();
18971
+ OmoMemorySettingsLayerSchema = object({
18972
+ enabled: boolean2().optional(),
18973
+ agent: string2().min(1).optional(),
18974
+ tool_exposure: _enum2(["direct", "search"]).optional(),
18975
+ reflection: OmoMemoryReflectionLayerSchema.optional(),
18976
+ nudge: OmoMemoryNudgeLayerSchema.optional(),
18977
+ facts: OmoMemoryFactsLayerSchema.optional(),
18978
+ dream: OmoMemoryDreamLayerSchema.optional(),
18979
+ people: OmoMemoryPeopleLayerSchema.optional(),
18980
+ soul: OmoMemorySoulLayerSchema.optional(),
18981
+ sync: OmoMemorySyncLayerSchema.optional(),
18982
+ search: OmoMemorySearchLayerSchema.optional(),
18983
+ compile_warn_tokens: number2().int().positive().optional(),
18984
+ agents: record(string2(), OmoMemoryAgentOverridesSchema).optional()
18985
+ }).strict();
18986
+ });
18987
+
18839
18988
  // packages/omo-config-core/src/schema/model-catalog.ts
18840
18989
  function isRecord5(value) {
18841
18990
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -18859,9 +19008,18 @@ var init_model_catalog = __esm(() => {
18859
19008
  });
18860
19009
 
18861
19010
  // packages/omo-config-core/src/schema/task.ts
18862
- var OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, OmoTaskSettingsSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
19011
+ import { availableParallelism } from "os";
19012
+ function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism) {
19013
+ const record2 = record(string2(), unknown()).parse(input);
19014
+ return OmoTaskSettingsSchema.parse({
19015
+ ...record2,
19016
+ residency_max_children: record2["residency_max_children"] ?? Math.max(8, resolveParallelism() * 3)
19017
+ });
19018
+ }
19019
+ var ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
18863
19020
  var init_task = __esm(() => {
18864
19021
  init_zod();
19022
+ ResidencyMaxChildrenInputSchema = union([number2().int().positive(), literal("unlimited")]);
18865
19023
  OmoTaskWaitSchema = object({
18866
19024
  min_ms: number2().int().positive().default(5000),
18867
19025
  default_ms: number2().int().positive().default(60000),
@@ -18875,23 +19033,45 @@ var init_task = __esm(() => {
18875
19033
  OmoTaskWarningsSchema = object({
18876
19034
  unavailable_categories: boolean2().default(true)
18877
19035
  }).strict();
19036
+ OmoTaskDagSettingsSchema = object({
19037
+ max_nodes_per_run: number2().int().positive().default(64),
19038
+ max_runs_per_session: number2().int().positive().default(16),
19039
+ subscriber_ring: number2().int().positive().default(1000),
19040
+ heartbeat_ms: number2().int().positive().default(15000),
19041
+ history_default_limit: number2().int().positive().default(256),
19042
+ history_max_limit: number2().int().positive().default(1000),
19043
+ retention_days: number2().int().positive().default(7),
19044
+ max_prompt_bytes: number2().int().positive().default(262144)
19045
+ }).strict();
18878
19046
  OmoTaskSettingsSchema = object({
18879
19047
  default_execution_mode: _enum2(["in-process", "process"]).default("in-process"),
18880
19048
  default_concurrency: number2().int().positive().default(5),
18881
19049
  provider_concurrency: record(string2(), number2().int().positive()).optional(),
18882
19050
  model_concurrency: record(string2(), number2().int().positive()).optional(),
18883
19051
  max_depth: number2().int().nonnegative().default(1),
18884
- residency_max_children: number2().int().positive().default(8),
19052
+ residency_max_children: ResidencyMaxChildrenInputSchema.default(8),
18885
19053
  ttl_ms: number2().int().positive().default(86400000),
18886
19054
  state_dir: string2().optional(),
18887
19055
  reattach_on_reconcile: boolean2().optional(),
19056
+ resume_children: boolean2().default(true),
18888
19057
  warnings: OmoTaskWarningsSchema.default({ unavailable_categories: true }),
18889
19058
  wait: OmoTaskWaitSchema.default({ min_ms: 5000, default_ms: 60000, max_ms: 600000 }),
18890
19059
  team: OmoTaskTeamSettingsSchema.default({
18891
19060
  max_members: 8,
18892
19061
  max_parallel_members: 4,
18893
19062
  max_wall_clock_minutes: 120
18894
- })
19063
+ }),
19064
+ dag: OmoTaskDagSettingsSchema.optional()
19065
+ }).strict();
19066
+ OmoTaskDagSettingsLayerSchema = object({
19067
+ max_nodes_per_run: number2().int().positive().optional(),
19068
+ max_runs_per_session: number2().int().positive().optional(),
19069
+ subscriber_ring: number2().int().positive().optional(),
19070
+ heartbeat_ms: number2().int().positive().optional(),
19071
+ history_default_limit: number2().int().positive().optional(),
19072
+ history_max_limit: number2().int().positive().optional(),
19073
+ retention_days: number2().int().positive().optional(),
19074
+ max_prompt_bytes: number2().int().positive().optional()
18895
19075
  }).strict();
18896
19076
  OmoTaskWaitLayerSchema = object({
18897
19077
  min_ms: number2().int().positive().optional(),
@@ -18912,13 +19092,15 @@ var init_task = __esm(() => {
18912
19092
  provider_concurrency: record(string2(), number2().int().positive()).optional(),
18913
19093
  model_concurrency: record(string2(), number2().int().positive()).optional(),
18914
19094
  max_depth: number2().int().nonnegative().optional(),
18915
- residency_max_children: number2().int().positive().optional(),
19095
+ residency_max_children: ResidencyMaxChildrenInputSchema.optional(),
18916
19096
  ttl_ms: number2().int().positive().optional(),
18917
19097
  state_dir: string2().optional(),
18918
19098
  reattach_on_reconcile: boolean2().optional(),
19099
+ resume_children: boolean2().optional(),
18919
19100
  warnings: OmoTaskWarningsLayerSchema.optional(),
18920
19101
  wait: OmoTaskWaitLayerSchema.optional(),
18921
- team: OmoTaskTeamSettingsLayerSchema.optional()
19102
+ team: OmoTaskTeamSettingsLayerSchema.optional(),
19103
+ dag: OmoTaskDagSettingsLayerSchema.optional()
18922
19104
  }).strict();
18923
19105
  });
18924
19106
 
@@ -18973,6 +19155,19 @@ var init_team = __esm(() => {
18973
19155
  OmoTeamsConfigLayerSchema = record(string2(), OmoTeamSpecLayerSchema);
18974
19156
  });
18975
19157
 
19158
+ // packages/omo-config-core/src/schema/telemetry.ts
19159
+ var OmoTelemetrySettingsShape, OmoTelemetrySettingsLayerSchema, OmoTelemetrySettingsSchema;
19160
+ var init_telemetry = __esm(() => {
19161
+ init_zod();
19162
+ OmoTelemetrySettingsShape = {
19163
+ enabled: boolean2()
19164
+ };
19165
+ OmoTelemetrySettingsLayerSchema = object(OmoTelemetrySettingsShape).partial().strict();
19166
+ OmoTelemetrySettingsSchema = OmoTelemetrySettingsLayerSchema.extend({
19167
+ enabled: boolean2().default(true)
19168
+ }).strict();
19169
+ });
19170
+
18976
19171
  // packages/omo-config-core/src/schema/config.ts
18977
19172
  var OmoOpenCodeHarnessConfigSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
18978
19173
  var init_config = __esm(() => {
@@ -18980,9 +19175,11 @@ var init_config = __esm(() => {
18980
19175
  init_agent();
18981
19176
  init_category();
18982
19177
  init_codegraph();
19178
+ init_memory();
18983
19179
  init_model_catalog();
18984
19180
  init_task();
18985
19181
  init_team();
19182
+ init_telemetry();
18986
19183
  OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
18987
19184
  OmoTypedHarnessConfigSchema = object({
18988
19185
  categories: OmoCategoriesConfigSchema.optional(),
@@ -18990,7 +19187,9 @@ var init_config = __esm(() => {
18990
19187
  codegraph: OmoCodegraphSettingsLayerSchema.optional(),
18991
19188
  task: OmoTaskSettingsLayerSchema.optional(),
18992
19189
  teams: OmoTeamsConfigLayerSchema.optional(),
18993
- models: OmoModelCatalogLayerSchema.optional()
19190
+ models: OmoModelCatalogLayerSchema.optional(),
19191
+ memory: OmoMemorySettingsLayerSchema.optional(),
19192
+ telemetry: OmoTelemetrySettingsLayerSchema.optional()
18994
19193
  }).strict();
18995
19194
  OmoConfigProfileSchema = object({
18996
19195
  categories: OmoCategoriesConfigSchema.optional(),
@@ -18999,6 +19198,8 @@ var init_config = __esm(() => {
18999
19198
  task: OmoTaskSettingsLayerSchema.optional(),
19000
19199
  teams: OmoTeamsConfigLayerSchema.optional(),
19001
19200
  models: OmoModelCatalogLayerSchema.optional(),
19201
+ memory: OmoMemorySettingsLayerSchema.optional(),
19202
+ telemetry: OmoTelemetrySettingsLayerSchema.optional(),
19002
19203
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
19003
19204
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
19004
19205
  "[codex]": OmoTypedHarnessConfigSchema.optional()
@@ -19011,6 +19212,8 @@ var init_config = __esm(() => {
19011
19212
  task: OmoTaskSettingsSchema.optional(),
19012
19213
  teams: OmoTeamsConfigSchema.optional(),
19013
19214
  models: OmoModelCatalogSchema.optional(),
19215
+ memory: OmoMemorySettingsSchema.optional(),
19216
+ telemetry: OmoTelemetrySettingsSchema.optional(),
19014
19217
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
19015
19218
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
19016
19219
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
@@ -19026,6 +19229,8 @@ var init_config = __esm(() => {
19026
19229
  task: OmoTaskSettingsLayerSchema.optional(),
19027
19230
  teams: OmoTeamsConfigLayerSchema.optional(),
19028
19231
  models: OmoModelCatalogLayerSchema.optional(),
19232
+ memory: OmoMemorySettingsLayerSchema.optional(),
19233
+ telemetry: OmoTelemetrySettingsLayerSchema.optional(),
19029
19234
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
19030
19235
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
19031
19236
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
@@ -19043,10 +19248,12 @@ var init_schema = __esm(() => {
19043
19248
  init_config();
19044
19249
  init_fallback_models();
19045
19250
  init_harness();
19251
+ init_memory();
19046
19252
  init_model_catalog();
19047
19253
  init_model_ref();
19048
19254
  init_task();
19049
19255
  init_team();
19256
+ init_telemetry();
19050
19257
  });
19051
19258
 
19052
19259
  // packages/omo-config-core/src/loader/merge.ts
@@ -19404,7 +19611,7 @@ var init_loader = __esm(() => {
19404
19611
  agents: {},
19405
19612
  categories: {},
19406
19613
  codegraph: OmoCodegraphSettingsSchema.parse({}),
19407
- task: OmoTaskSettingsSchema.parse({}),
19614
+ task: resolveOmoTaskSettings({}),
19408
19615
  teams: {}
19409
19616
  };
19410
19617
  });
@@ -19674,17 +19881,31 @@ var init_archive_entry_validator = () => {};
19674
19881
  // packages/utils/src/ast-grep/sg-manifest.ts
19675
19882
  var init_sg_manifest = () => {};
19676
19883
 
19884
+ // packages/utils/src/ast-grep/install-script.ts
19885
+ var init_install_script = () => {};
19886
+
19887
+ // packages/utils/src/ast-grep/types.ts
19888
+ var SG_PATH_ENV_KEY = "OMO_AST_GREP_SG_PATH";
19889
+
19890
+ // packages/utils/src/ast-grep/sg-candidates.ts
19891
+ var init_sg_candidates = () => {};
19892
+
19893
+ // packages/utils/src/ast-grep/sg-install-hints.ts
19894
+ var ENV_OVERRIDE_HINT;
19895
+ var init_sg_install_hints = __esm(() => {
19896
+ ENV_OVERRIDE_HINT = `Or point ${SG_PATH_ENV_KEY} at an existing ast-grep binary`;
19897
+ });
19898
+
19677
19899
  // packages/utils/src/ast-grep/sg-provisioner.ts
19678
19900
  var init_sg_provisioner = () => {};
19679
19901
 
19680
19902
  // packages/utils/src/ast-grep/sg-resolver.ts
19681
19903
  var init_sg_resolver = () => {};
19682
19904
 
19683
- // packages/utils/src/ast-grep/install-script.ts
19684
- var init_install_script = () => {};
19685
-
19686
19905
  // packages/utils/src/ast-grep/index.ts
19687
19906
  var init_ast_grep = __esm(() => {
19907
+ init_sg_candidates();
19908
+ init_sg_install_hints();
19688
19909
  init_sg_manifest();
19689
19910
  init_sg_provisioner();
19690
19911
  init_sg_resolver();
@@ -20859,10 +21080,10 @@ var init_category_model_requirements = __esm(() => {
20859
21080
  quick: {
20860
21081
  fallbackChain: [
20861
21082
  { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed" },
20862
- { providers: ["quotio-openai"], model: "gpt-5.6-luna-fast", variant: "low" },
21083
+ { providers: ["openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
20863
21084
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "off" },
20864
21085
  {
20865
- providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan", "opencode-go", "vercel"],
21086
+ providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan", "vercel"],
20866
21087
  model: "qwen3.6-flash",
20867
21088
  variant: "low"
20868
21089
  },
@@ -20878,6 +21099,11 @@ var init_category_model_requirements = __esm(() => {
20878
21099
  },
20879
21100
  "unspecified-low": {
20880
21101
  fallbackChain: [
21102
+ {
21103
+ providers: ["xai", "github-copilot", "opencode", "vercel"],
21104
+ model: "grok-4.6",
21105
+ variant: "xhigh"
21106
+ },
20881
21107
  {
20882
21108
  providers: ["openai", "quotio-openai", "github-copilot", "opencode", "vercel"],
20883
21109
  model: "gpt-5.6-terra",
@@ -21050,9 +21276,71 @@ function normalizeModelID(modelID) {
21050
21276
  return modelID.replace(/\.(\d+)/g, "-$1");
21051
21277
  }
21052
21278
 
21279
+ // packages/model-core/src/reasoning-level.ts
21280
+ function isReasoningLevelOrAuto(value) {
21281
+ return REASONING_LEVEL_OR_AUTO_SET2.has(value);
21282
+ }
21283
+ function splitReasoningSuffix2(model, options) {
21284
+ if (typeof model !== "string")
21285
+ return { base: "" };
21286
+ const trimmed = model.trim();
21287
+ if (!trimmed)
21288
+ return { base: "" };
21289
+ const separatorIndex = trimmed.lastIndexOf(":");
21290
+ if (separatorIndex === -1)
21291
+ return { base: trimmed };
21292
+ const base = trimmed.slice(0, separatorIndex).trim();
21293
+ const token = trimmed.slice(separatorIndex + 1).trim().toLowerCase();
21294
+ if (!base || !isReasoningLevelOrAuto(token))
21295
+ return { base: trimmed };
21296
+ if (token === "max" && !(options?.allowMaxSuffix ?? base.includes("/")))
21297
+ return { base: trimmed };
21298
+ return { base, level: token };
21299
+ }
21300
+ var REASONING_LEVELS2, REASONING_AUTO2 = "auto", REASONING_LEVEL_SET2, REASONING_LEVEL_OR_AUTO_SET2;
21301
+ var init_reasoning_level = __esm(() => {
21302
+ REASONING_LEVELS2 = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
21303
+ REASONING_LEVEL_SET2 = new Set(REASONING_LEVELS2);
21304
+ REASONING_LEVEL_OR_AUTO_SET2 = new Set([...REASONING_LEVELS2, REASONING_AUTO2]);
21305
+ });
21306
+
21307
+ // packages/model-core/src/model-string-parser.ts
21308
+ function parseVariantFromModelID(rawModelID, options) {
21309
+ if (typeof rawModelID !== "string") {
21310
+ return { modelID: "" };
21311
+ }
21312
+ const trimmedModelID = rawModelID.trim();
21313
+ if (!trimmedModelID) {
21314
+ return { modelID: "" };
21315
+ }
21316
+ const parenthesizedVariant = trimmedModelID.match(/^(.*)\(([^()]+)\)\s*$/);
21317
+ if (parenthesizedVariant) {
21318
+ const modelID = parenthesizedVariant[1]?.trim() ?? "";
21319
+ const variant = parenthesizedVariant[2]?.trim();
21320
+ return variant ? { modelID, variant } : { modelID };
21321
+ }
21322
+ const suffixedModel = splitReasoningSuffix2(trimmedModelID, options);
21323
+ if (suffixedModel.level) {
21324
+ return { modelID: suffixedModel.base, variant: suffixedModel.level };
21325
+ }
21326
+ const spaceVariant = trimmedModelID.match(/^(.*\S)\s+([a-z][a-z0-9_-]*)$/i);
21327
+ if (spaceVariant) {
21328
+ const modelID = spaceVariant[1]?.trim() ?? "";
21329
+ const variant = spaceVariant[2]?.trim().toLowerCase();
21330
+ if (variant) {
21331
+ return { modelID, variant };
21332
+ }
21333
+ }
21334
+ return { modelID: trimmedModelID };
21335
+ }
21336
+ var init_model_string_parser = __esm(() => {
21337
+ init_reasoning_level();
21338
+ });
21339
+
21053
21340
  // packages/model-core/src/model-capability-heuristics.ts
21054
21341
  function detectHeuristicModelFamily(modelID) {
21055
- const normalizedModelID = normalizeModelID(modelID).toLowerCase();
21342
+ const parsedModel = parseVariantFromModelID(modelID, { allowMaxSuffix: true });
21343
+ const normalizedModelID = normalizeModelID(parsedModel.modelID).toLowerCase();
21056
21344
  for (const definition of HEURISTIC_MODEL_FAMILY_REGISTRY) {
21057
21345
  if (definition.pattern?.test(normalizedModelID)) {
21058
21346
  return definition;
@@ -21065,6 +21353,7 @@ function detectHeuristicModelFamily(modelID) {
21065
21353
  }
21066
21354
  var HEURISTIC_MODEL_FAMILY_REGISTRY;
21067
21355
  var init_model_capability_heuristics = __esm(() => {
21356
+ init_model_string_parser();
21068
21357
  HEURISTIC_MODEL_FAMILY_REGISTRY = [
21069
21358
  {
21070
21359
  family: "claude-opus",
@@ -21078,11 +21367,19 @@ var init_model_capability_heuristics = __esm(() => {
21078
21367
  variants: ["low", "medium", "high"],
21079
21368
  supportsThinking: true
21080
21369
  },
21370
+ {
21371
+ family: "openai-deep-research",
21372
+ includes: ["o3-deep-research", "o4-mini-deep-research"],
21373
+ variants: ["low", "medium", "high"],
21374
+ reasoningEfforts: ["none", "minimal", "low", "medium", "high"],
21375
+ supportsTemperature: true
21376
+ },
21081
21377
  {
21082
21378
  family: "openai-reasoning",
21083
21379
  pattern: /(?:^|\/)o\d(?:$|-)/,
21084
21380
  variants: ["low", "medium", "high"],
21085
- reasoningEfforts: ["none", "minimal", "low", "medium", "high"]
21381
+ reasoningEfforts: ["none", "minimal", "low", "medium", "high"],
21382
+ supportsTemperature: false
21086
21383
  },
21087
21384
  {
21088
21385
  family: "gpt-5",
@@ -21126,7 +21423,13 @@ var init_model_capability_heuristics = __esm(() => {
21126
21423
  {
21127
21424
  family: "glm",
21128
21425
  includes: ["glm"],
21129
- variants: ["low", "medium", "high"]
21426
+ variants: ["low", "medium", "high", "max"],
21427
+ reasoningEfforts: ["high", "max"],
21428
+ reasoningEffortAliases: {
21429
+ low: "high",
21430
+ medium: "high",
21431
+ xhigh: "max"
21432
+ }
21130
21433
  },
21131
21434
  {
21132
21435
  family: "minimax",
@@ -21161,14 +21464,6 @@ var init_model_capability_heuristics = __esm(() => {
21161
21464
  // packages/model-core/src/model-capability-guardrails.ts
21162
21465
  var init_model_capability_guardrails = () => {};
21163
21466
 
21164
- // packages/model-core/src/reasoning-level.ts
21165
- var REASONING_LEVELS2, REASONING_AUTO2 = "auto", REASONING_LEVEL_SET2, REASONING_LEVEL_OR_AUTO_SET2;
21166
- var init_reasoning_level = __esm(() => {
21167
- REASONING_LEVELS2 = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
21168
- REASONING_LEVEL_SET2 = new Set(REASONING_LEVELS2);
21169
- REASONING_LEVEL_OR_AUTO_SET2 = new Set([...REASONING_LEVELS2, REASONING_AUTO2]);
21170
- });
21171
-
21172
21467
  // packages/model-core/src/model-settings-compatibility.ts
21173
21468
  var init_model_settings_compatibility = () => {};
21174
21469
 
@@ -21182,9 +21477,6 @@ function normalizeFallbackModels(models2) {
21182
21477
  }
21183
21478
  var init_model_resolver = () => {};
21184
21479
 
21185
- // packages/model-core/src/model-string-parser.ts
21186
- var init_model_string_parser = () => {};
21187
-
21188
21480
  // packages/model-core/src/fallback-chain-from-models.ts
21189
21481
  var init_fallback_chain_from_models = () => {};
21190
21482
 
@@ -21500,14 +21792,89 @@ function getProviderOverride(providerID, modelID) {
21500
21792
  return;
21501
21793
  return GITHUB_COPILOT_GPT5_MODEL.test(normalizeLookupModelID2(modelID)) ? GITHUB_COPILOT_GPT5_OVERRIDE : undefined;
21502
21794
  }
21795
+ function stripSameProviderPrefix(providerID, modelID) {
21796
+ const prefix = `${providerID.trim()}/`;
21797
+ return prefix !== "/" && modelID.slice(0, prefix.length).toLowerCase() === prefix.toLowerCase() ? modelID.slice(prefix.length) : undefined;
21798
+ }
21799
+ function buildLookupCandidates(providerID, modelID) {
21800
+ const bareModelID = parseVariantFromModelID(modelID, { allowMaxSuffix: true }).modelID;
21801
+ const candidates = [
21802
+ modelID,
21803
+ stripSameProviderPrefix(providerID, modelID),
21804
+ bareModelID,
21805
+ stripSameProviderPrefix(providerID, bareModelID)
21806
+ ];
21807
+ const uniqueCandidates = [];
21808
+ const seen = new Set;
21809
+ for (const candidate of candidates) {
21810
+ if (!candidate || seen.has(candidate))
21811
+ continue;
21812
+ seen.add(candidate);
21813
+ uniqueCandidates.push(candidate);
21814
+ }
21815
+ return uniqueCandidates;
21816
+ }
21817
+ function findProviderMetadata(providerCache, providerID, modelID) {
21818
+ if (!providerCache)
21819
+ return;
21820
+ for (const candidate of buildLookupCandidates(providerID, modelID)) {
21821
+ const match = providerCache.findProviderModelMetadata(providerID, candidate);
21822
+ if (match)
21823
+ return match;
21824
+ }
21825
+ return;
21826
+ }
21827
+ function findSnapshotEntry(snapshot, providerID, modelIDs) {
21828
+ if (!snapshot)
21829
+ return;
21830
+ const normalizedProviderID = providerID.trim();
21831
+ const providerSpecificCandidates = [];
21832
+ const generalCandidates = [];
21833
+ for (const modelID of modelIDs) {
21834
+ const strippedModelID = stripSameProviderPrefix(providerID, modelID);
21835
+ const unqualifiedModelID = strippedModelID ?? (modelID.includes("/") ? undefined : modelID);
21836
+ if (!unqualifiedModelID) {
21837
+ generalCandidates.push(...buildLookupCandidates(providerID, modelID));
21838
+ continue;
21839
+ }
21840
+ const bareModelID = parseVariantFromModelID(unqualifiedModelID, { allowMaxSuffix: true }).modelID;
21841
+ if (normalizedProviderID) {
21842
+ providerSpecificCandidates.push(`${normalizedProviderID}/${unqualifiedModelID}`, `${normalizedProviderID}/${bareModelID}`);
21843
+ }
21844
+ generalCandidates.push(unqualifiedModelID, bareModelID);
21845
+ }
21846
+ const seen = new Set;
21847
+ for (const candidate of [...providerSpecificCandidates, ...generalCandidates]) {
21848
+ if (seen.has(candidate))
21849
+ continue;
21850
+ seen.add(candidate);
21851
+ const entry = snapshot.models[candidate];
21852
+ if (entry)
21853
+ return entry;
21854
+ }
21855
+ return;
21856
+ }
21857
+ function resolveCapabilityModelAlias(modelID, providerID) {
21858
+ const direct = resolveModelIDAlias(modelID, providerID);
21859
+ if (direct.source !== "canonical")
21860
+ return direct;
21861
+ const bareModelID = parseVariantFromModelID(modelID, { allowMaxSuffix: true }).modelID;
21862
+ if (bareModelID === modelID)
21863
+ return direct;
21864
+ const bareAlias = resolveModelIDAlias(bareModelID, providerID);
21865
+ return bareAlias.source === "canonical" ? direct : { ...bareAlias, requestedModelID: modelID };
21866
+ }
21503
21867
  function getModelCapabilities(input) {
21504
- const canonicalization = resolveModelIDAlias(input.modelID, input.providerID);
21868
+ const canonicalization = resolveCapabilityModelAlias(input.modelID, input.providerID);
21505
21869
  const override = getOverride(input.modelID);
21506
21870
  const providerOverride = getProviderOverride(input.providerID, canonicalization.canonicalModelID);
21507
- const runtimeModel = readRuntimeModel(input.runtimeModel ?? input.providerCache?.findProviderModelMetadata(input.providerID, input.modelID));
21871
+ const runtimeModel = readRuntimeModel(input.runtimeModel ?? findProviderMetadata(input.providerCache, input.providerID, input.modelID));
21508
21872
  const runtimeSnapshot = input.runtimeSnapshot;
21509
21873
  const bundledSnapshot = input.bundledSnapshot;
21510
- const snapshotEntry = runtimeSnapshot?.models?.[canonicalization.canonicalModelID] ?? bundledSnapshot?.models?.[canonicalization.canonicalModelID];
21874
+ const snapshotModelIDs = canonicalization.source === "canonical" ? [input.modelID, canonicalization.canonicalModelID] : [canonicalization.canonicalModelID, input.modelID];
21875
+ const runtimeSnapshotEntry = findSnapshotEntry(runtimeSnapshot, input.providerID, snapshotModelIDs);
21876
+ const bundledSnapshotEntry = findSnapshotEntry(bundledSnapshot, input.providerID, snapshotModelIDs);
21877
+ const snapshotEntry = runtimeSnapshotEntry ?? bundledSnapshotEntry;
21511
21878
  const heuristicFamily = detectHeuristicModelFamily(canonicalization.canonicalModelID);
21512
21879
  const runtimeVariants = readRuntimeModelVariants(runtimeModel);
21513
21880
  const runtimeReasoning = readRuntimeModelReasoningSupport(runtimeModel);
@@ -21517,7 +21884,7 @@ function getModelCapabilities(input) {
21517
21884
  const runtimeMaxOutputTokens = readRuntimeModelLimitOutput(runtimeModel);
21518
21885
  const runtimeToolCall = readRuntimeModelToolCallSupport(runtimeModel);
21519
21886
  const runtimeModalities = readRuntimeModelModalities(runtimeModel);
21520
- const snapshotSource = runtimeSnapshot?.models?.[canonicalization.canonicalModelID] ? "runtime-snapshot" : bundledSnapshot?.models?.[canonicalization.canonicalModelID] ? "bundled-snapshot" : "none";
21887
+ const snapshotSource = runtimeSnapshotEntry ? "runtime-snapshot" : bundledSnapshotEntry ? "bundled-snapshot" : "none";
21521
21888
  const familySource = snapshotEntry?.family ? "snapshot" : heuristicFamily?.family ? "heuristic" : "none";
21522
21889
  const variantsSource = runtimeVariants ? "runtime" : providerOverride?.variants ? "override" : override?.variants ? "override" : heuristicFamily?.variants ? "heuristic" : "none";
21523
21890
  const reasoningEffortsSource = providerOverride?.reasoningEfforts ? "override" : override?.reasoningEfforts ? "override" : heuristicFamily?.reasoningEfforts ? "heuristic" : "none";
@@ -21566,6 +21933,7 @@ var MODEL_ID_OVERRIDES, GITHUB_COPILOT_GPT5_MODEL, GITHUB_COPILOT_GPT5_OVERRIDE;
21566
21933
  var init_get_model_capabilities = __esm(() => {
21567
21934
  init_model_capability_aliases();
21568
21935
  init_model_capability_heuristics();
21936
+ init_model_string_parser();
21569
21937
  MODEL_ID_OVERRIDES = {};
21570
21938
  GITHUB_COPILOT_GPT5_MODEL = /(?:^|\/)gpt-5(?:[.-]|$)/;
21571
21939
  GITHUB_COPILOT_GPT5_OVERRIDE = {
@@ -22169,7 +22537,7 @@ function recordFields(value, fields) {
22169
22537
  }
22170
22538
  function modelInput(view) {
22171
22539
  const agents = isPlainRecord(view.agents) ? Object.fromEntries(Object.entries(view.agents).flatMap(([name, definition]) => {
22172
- const fields = recordFields(definition, ["description", "prompt", "model", "variant", "reasoningEffort", "tools", "temperature", "disable"]);
22540
+ const fields = recordFields(definition, ["description", "prompt", "model", "models", "variant", "reasoningEffort", "tools", "temperature", "disable"]);
22173
22541
  return fields === undefined ? [] : [[name, fields]];
22174
22542
  })) : undefined;
22175
22543
  const categories = isPlainRecord(view.categories) ? Object.fromEntries(Object.entries(view.categories).flatMap(([name, definition]) => {
@@ -22452,6 +22820,7 @@ var init_agent_overrides = __esm(() => {
22452
22820
  init_permission();
22453
22821
  AgentOverrideConfigSchema = exports_external.object({
22454
22822
  model: exports_external.string().optional(),
22823
+ models: exports_external.array(exports_external.union([exports_external.string(), FallbackModelObjectSchema])).optional(),
22455
22824
  fallback_models: FallbackModelsSchema.optional(),
22456
22825
  reasoning: OmoReasoningSchema.optional(),
22457
22826
  variant: exports_external.string().optional(),
@@ -23370,6 +23739,37 @@ function protectUserFields(config4, userConfig) {
23370
23739
  }
23371
23740
  };
23372
23741
  }
23742
+ function materializeAgentModelChains(config4) {
23743
+ if (config4.agents === undefined)
23744
+ return config4;
23745
+ let changed = false;
23746
+ const agents = Object.fromEntries(Object.entries(config4.agents).map(([name, agent2]) => {
23747
+ if (agent2?.models === undefined)
23748
+ return [name, agent2];
23749
+ const [primary, ...fallbacks] = agent2.models;
23750
+ const {
23751
+ models: _models,
23752
+ model: _model,
23753
+ fallback_models: _fallbackModels,
23754
+ reasoning: _reasoning,
23755
+ variant: _variant,
23756
+ reasoningEffort: _reasoningEffort,
23757
+ temperature: _temperature,
23758
+ top_p: _topP,
23759
+ maxTokens: _maxTokens,
23760
+ thinking: _thinking,
23761
+ ...rest
23762
+ } = agent2;
23763
+ const primarySettings = primary === undefined ? {} : typeof primary === "string" ? { model: primary } : primary;
23764
+ changed = true;
23765
+ return [name, {
23766
+ ...rest,
23767
+ ...primarySettings,
23768
+ fallback_models: fallbacks
23769
+ }];
23770
+ }));
23771
+ return changed ? { ...config4, agents } : config4;
23772
+ }
23373
23773
  function migrateRalphLoopConfig(config4) {
23374
23774
  const legacy = config4.ralph_loop;
23375
23775
  if (legacy === undefined)
@@ -23397,7 +23797,7 @@ function validatePluginConfig(directory, environment2 = process.env) {
23397
23797
  const firstFailingView = views.find((view) => view.messages.length > 0);
23398
23798
  const firstView = views[0];
23399
23799
  const userConfig = parseConfig(chain.protectedUserView);
23400
- const config4 = applyDisabledProviders(protectUserFields(mergeViews(views), userConfig));
23800
+ const config4 = applyDisabledProviders(materializeAgentModelChains(protectUserFields(mergeViews(views), userConfig)));
23401
23801
  return {
23402
23802
  valid: messages.length === 0,
23403
23803
  messages,
@@ -77570,6 +77970,47 @@ var init_model_capabilities_generated = __esm(() => {
77570
77970
  input: 272000,
77571
77971
  output: 128000
77572
77972
  }
77973
+ },
77974
+ "grok-4.6": {
77975
+ id: "grok-4.6",
77976
+ family: "grok",
77977
+ reasoning: true,
77978
+ temperature: true,
77979
+ toolCall: true,
77980
+ modalities: {
77981
+ input: [
77982
+ "text",
77983
+ "image"
77984
+ ],
77985
+ output: [
77986
+ "text"
77987
+ ]
77988
+ },
77989
+ limit: {
77990
+ context: 500000,
77991
+ output: 500000
77992
+ }
77993
+ },
77994
+ "xai/grok-4.6": {
77995
+ id: "xai/grok-4.6",
77996
+ family: "grok",
77997
+ reasoning: true,
77998
+ temperature: true,
77999
+ toolCall: true,
78000
+ modalities: {
78001
+ input: [
78002
+ "text",
78003
+ "image",
78004
+ "pdf"
78005
+ ],
78006
+ output: [
78007
+ "text"
78008
+ ]
78009
+ },
78010
+ limit: {
78011
+ context: 500000,
78012
+ output: 500000
78013
+ }
77573
78014
  }
77574
78015
  }
77575
78016
  };
@@ -78068,7 +78509,7 @@ This is NOT a default choice - it's for genuinely unclassifiable moderate-effort
78068
78509
  </Category_Context>
78069
78510
 
78070
78511
  <Caller_Warning>
78071
- THIS CATEGORY USES A LIGHTWEIGHT MODEL (gpt-5.6-luna).
78512
+ THIS CATEGORY USES GROK 4.6 (xhigh).
78072
78513
 
78073
78514
  **PROVIDE CLEAR STRUCTURE:**
78074
78515
  1. MUST DO: Enumerate required actions explicitly
@@ -78100,7 +78541,7 @@ var init_openai_categories = __esm(() => {
78100
78541
  },
78101
78542
  {
78102
78543
  name: "unspecified-low",
78103
- config: { model: "openai/gpt-5.6-luna", variant: "xhigh" },
78544
+ config: { model: "xai/grok-4.6", variant: "xhigh" },
78104
78545
  description: "Tasks that don't fit other categories, low effort required",
78105
78546
  promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
78106
78547
  }