oh-my-opencode 5.0.0-beta.31 → 5.0.0-beta.32

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 (227) hide show
  1. package/dist/cli/index.js +136 -44
  2. package/dist/cli-node/index.js +136 -44
  3. package/dist/features/background-agent/parent-wake-notifier-types.d.ts +1 -1
  4. package/dist/features/background-agent/parent-wake-prompt-dispatch.d.ts +1 -1
  5. package/dist/features/background-agent/parent-wake-session-inspector.d.ts +1 -1
  6. package/dist/features/monitor/manager-internals.d.ts +1 -1
  7. package/dist/features/monitor/output-injector-types.d.ts +1 -1
  8. package/dist/features/team-mode/tools/messaging-live-delivery-recipient.d.ts +1 -0
  9. package/dist/features/team-mode/tools/messaging-runtime.d.ts +1 -0
  10. package/dist/hooks/anthropic-context-window-limit-recovery/tool-result-storage.d.ts +11 -0
  11. package/dist/index.js +286 -99
  12. package/dist/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  13. package/dist/tools/session-manager/directory-filter.d.ts +2 -0
  14. package/dist/tui.js +109 -23
  15. package/package.json +16 -15
  16. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +47 -19
  17. package/packages/lsp-core/src/lsp/client-diagnostics-pull-timeout.test.ts +64 -0
  18. package/packages/lsp-core/src/lsp/client.ts +6 -3
  19. package/packages/lsp-core/src/lsp/controlled-clock-test-support.ts +61 -0
  20. package/packages/lsp-core/src/lsp/fixtures/workspace-edit-server.mjs +10 -3
  21. package/packages/lsp-core/src/lsp/timer-provider.ts +13 -0
  22. package/packages/lsp-core/src/lsp/transport-request-timeout.test.ts +73 -0
  23. package/packages/lsp-core/src/lsp/transport.ts +7 -2
  24. package/packages/lsp-core/src/lsp/workspace-document-state.test.ts +84 -1
  25. package/packages/lsp-core/src/lsp/workspace-document-state.ts +30 -11
  26. package/packages/lsp-core/src/tools/parameters.test.ts +51 -0
  27. package/packages/lsp-daemon/dist/cli.js +41 -16
  28. package/packages/lsp-daemon/dist/client.js +41 -16
  29. package/packages/lsp-daemon/dist/index.js +41 -16
  30. package/packages/lsp-tools-mcp/dist/cli.js +41 -16
  31. package/packages/lsp-tools-mcp/dist/lsp/manager.js +41 -16
  32. package/packages/lsp-tools-mcp/dist/mcp.js +41 -16
  33. package/packages/lsp-tools-mcp/dist/tools.js +41 -16
  34. package/packages/lsp-tools-mcp/package.json +1 -1
  35. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  36. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  37. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +3 -17
  39. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +3 -17
  40. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  42. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  43. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  44. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  45. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  46. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  47. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  48. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +39 -16
  49. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  50. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  51. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  52. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  53. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  54. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  55. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  56. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  57. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +5 -4
  58. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +489 -4
  59. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  60. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -2
  61. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  62. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  63. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  64. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  65. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  66. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +2 -2
  67. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  68. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +4 -2
  69. package/packages/omo-codex/plugin/components/ulw-loop/README.md +1 -0
  70. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +9 -0
  71. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +14 -0
  72. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +10 -1
  73. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +8 -0
  74. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +113 -0
  75. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +7 -5
  76. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +2 -1
  77. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  78. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +1 -0
  79. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +2 -0
  80. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +775 -312
  81. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +18 -0
  82. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +13 -0
  83. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +14 -0
  84. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +17 -9
  85. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +17 -2
  86. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +13 -0
  87. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +19 -0
  88. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +2 -0
  89. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +53 -0
  90. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +9 -0
  91. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +85 -0
  92. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +1 -1
  93. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +41 -99
  94. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +4 -2
  95. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +184 -14
  96. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +6 -0
  97. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +33 -0
  98. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +3 -0
  99. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +15 -0
  100. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  101. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  102. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +17 -0
  103. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +7 -0
  104. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +25 -1
  105. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +127 -0
  106. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +8 -12
  107. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +2 -1
  108. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +1 -0
  109. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +2 -0
  110. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +18 -0
  111. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +23 -0
  112. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +19 -9
  113. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +18 -3
  114. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +27 -0
  115. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +57 -0
  116. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +103 -0
  117. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +1 -1
  118. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +50 -116
  119. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +4 -2
  120. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +186 -12
  121. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +36 -0
  122. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +22 -0
  123. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +66 -3
  124. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +92 -0
  125. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +183 -0
  126. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +13 -3
  127. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +105 -0
  128. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate.test.ts +101 -0
  129. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +16 -15
  130. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  131. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +5 -0
  132. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +300 -3
  133. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +9 -3
  134. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  135. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  136. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  137. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  138. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  139. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  140. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  141. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  142. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  143. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  144. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  145. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  146. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  147. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  148. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  149. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  150. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  151. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  152. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +1 -1
  153. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  154. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  155. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  156. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  157. package/packages/omo-codex/plugin/package-lock.json +13 -13
  158. package/packages/omo-codex/plugin/package.json +1 -1
  159. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +31 -2
  160. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  161. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +17 -0
  162. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +11 -1
  163. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +13 -0
  164. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -2
  165. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  166. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  167. package/dist/features/builtin-skills/index.d.ts +0 -1
  168. package/dist/features/builtin-skills/skill-file-loader.d.ts +0 -1
  169. package/dist/features/builtin-skills/skills/agent-browser-skill.d.ts +0 -1
  170. package/dist/features/builtin-skills/skills/agent-browser-template.d.ts +0 -1
  171. package/dist/features/builtin-skills/skills/debugging.d.ts +0 -1
  172. package/dist/features/builtin-skills/skills/dev-browser.d.ts +0 -1
  173. package/dist/features/builtin-skills/skills/frontend.d.ts +0 -1
  174. package/dist/features/builtin-skills/skills/git-master-sections/commit-atomic-planning.d.ts +0 -1
  175. package/dist/features/builtin-skills/skills/git-master-sections/commit-context-analysis.d.ts +0 -1
  176. package/dist/features/builtin-skills/skills/git-master-sections/commit-execution-verification.d.ts +0 -1
  177. package/dist/features/builtin-skills/skills/git-master-sections/commit-workflow.d.ts +0 -1
  178. package/dist/features/builtin-skills/skills/git-master-sections/history-search-workflow.d.ts +0 -1
  179. package/dist/features/builtin-skills/skills/git-master-sections/overview.d.ts +0 -1
  180. package/dist/features/builtin-skills/skills/git-master-sections/quick-reference.d.ts +0 -1
  181. package/dist/features/builtin-skills/skills/git-master-sections/rebase-workflow.d.ts +0 -1
  182. package/dist/features/builtin-skills/skills/git-master-skill-metadata.d.ts +0 -1
  183. package/dist/features/builtin-skills/skills/git-master.d.ts +0 -1
  184. package/dist/features/builtin-skills/skills/index.d.ts +0 -1
  185. package/dist/features/builtin-skills/skills/init-deep.d.ts +0 -1
  186. package/dist/features/builtin-skills/skills/playwright-cli.d.ts +0 -1
  187. package/dist/features/builtin-skills/skills/playwright-mcp-skill.d.ts +0 -1
  188. package/dist/features/builtin-skills/skills/playwright.d.ts +0 -1
  189. package/dist/features/builtin-skills/skills/remove-ai-slops.d.ts +0 -1
  190. package/dist/features/builtin-skills/skills/review-work.d.ts +0 -1
  191. package/dist/features/builtin-skills/skills/security-research.d.ts +0 -1
  192. package/dist/features/builtin-skills/skills/security-review.d.ts +0 -1
  193. package/dist/features/builtin-skills/skills/team-mode.d.ts +0 -1
  194. package/dist/features/builtin-skills/skills/visual-qa.d.ts +0 -1
  195. package/dist/features/builtin-skills/skills.d.ts +0 -1
  196. package/dist/features/builtin-skills/types.d.ts +0 -1
  197. package/dist/features/claude-code-plugin-loader/agent-loader.d.ts +0 -1
  198. package/dist/features/claude-code-plugin-loader/command-loader.d.ts +0 -1
  199. package/dist/features/claude-code-plugin-loader/discovery-core.d.ts +0 -1
  200. package/dist/features/claude-code-plugin-loader/discovery-paths.d.ts +0 -1
  201. package/dist/features/claude-code-plugin-loader/discovery.d.ts +0 -1
  202. package/dist/features/claude-code-plugin-loader/hook-loader.d.ts +0 -1
  203. package/dist/features/claude-code-plugin-loader/index.d.ts +0 -1
  204. package/dist/features/claude-code-plugin-loader/install-path-resolver.d.ts +0 -1
  205. package/dist/features/claude-code-plugin-loader/installed-plugin-database.d.ts +0 -1
  206. package/dist/features/claude-code-plugin-loader/loaded-plugin.d.ts +0 -1
  207. package/dist/features/claude-code-plugin-loader/loader.d.ts +0 -1
  208. package/dist/features/claude-code-plugin-loader/mcp-server-loader.d.ts +0 -1
  209. package/dist/features/claude-code-plugin-loader/plugin-key.d.ts +0 -1
  210. package/dist/features/claude-code-plugin-loader/plugin-manifest.d.ts +0 -1
  211. package/dist/features/claude-code-plugin-loader/plugin-path-resolver.d.ts +0 -1
  212. package/dist/features/claude-code-plugin-loader/plugin-settings.d.ts +0 -1
  213. package/dist/features/claude-code-plugin-loader/scope-filter.d.ts +0 -1
  214. package/dist/features/claude-code-plugin-loader/skill-loader.d.ts +0 -1
  215. package/dist/features/claude-code-plugin-loader/types.d.ts +0 -1
  216. package/dist/shared/prompt-async-gate/message-inspection-error.d.ts +0 -1
  217. package/dist/shared/prompt-async-gate/pending-tool-turn.d.ts +0 -1
  218. package/dist/shared/prompt-async-gate/prompt-message-state.d.ts +0 -1
  219. package/dist/shared/prompt-async-gate/queue.d.ts +0 -1
  220. package/dist/shared/prompt-async-gate/recent-dispatches.d.ts +0 -1
  221. package/dist/shared/prompt-async-gate/reservations.d.ts +0 -1
  222. package/dist/shared/prompt-async-gate/semantic-dedupe.d.ts +0 -1
  223. package/dist/shared/prompt-async-gate/session-idle-dispatch.d.ts +0 -1
  224. package/dist/shared/prompt-async-gate/timing.d.ts +0 -1
  225. package/dist/shared/prompt-async-gate/types.d.ts +0 -1
  226. package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -483
  227. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +0 -490
package/dist/index.js CHANGED
@@ -2816,10 +2816,11 @@ var init_js_yaml = __esm(() => {
2816
2816
  function parseFrontmatter(content, options = {}) {
2817
2817
  if (options.mode === "rule")
2818
2818
  return parseRuleFrontmatter(content);
2819
+ const normalized = stripBom(content);
2819
2820
  const frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n?---\r?\n([\s\S]*)$/;
2820
- const match = content.match(frontmatterRegex);
2821
+ const match = normalized.match(frontmatterRegex);
2821
2822
  if (!match) {
2822
- return { data: {}, body: content, hadFrontmatter: false, parseError: false };
2823
+ return { data: {}, body: normalized, hadFrontmatter: false, parseError: false };
2823
2824
  }
2824
2825
  const yamlContent = match[1];
2825
2826
  const body = match[2];
@@ -3064,17 +3065,20 @@ function findNearestExistingAncestor(resolvedPath) {
3064
3065
  }
3065
3066
  return candidatePath;
3066
3067
  }
3068
+ function realpathNativeOrFallback(pathToNormalize) {
3069
+ try {
3070
+ return realpathSync2.native(pathToNormalize);
3071
+ } catch {
3072
+ return pathToNormalize;
3073
+ }
3074
+ }
3067
3075
  function toCanonicalPath(pathToNormalize) {
3068
3076
  const resolvedPath = resolve(pathToNormalize);
3069
3077
  if (existsSync(resolvedPath)) {
3070
- try {
3071
- return normalize(realpathSync2.native(resolvedPath));
3072
- } catch {
3073
- return normalize(resolvedPath);
3074
- }
3078
+ return normalize(realpathNativeOrFallback(resolvedPath));
3075
3079
  }
3076
3080
  const nearestExistingAncestor = findNearestExistingAncestor(resolvedPath);
3077
- const canonicalAncestor = existsSync(nearestExistingAncestor) ? realpathSync2.native(nearestExistingAncestor) : nearestExistingAncestor;
3081
+ const canonicalAncestor = existsSync(nearestExistingAncestor) ? realpathNativeOrFallback(nearestExistingAncestor) : nearestExistingAncestor;
3078
3082
  const relativePathFromAncestor = relative(nearestExistingAncestor, resolvedPath);
3079
3083
  return normalize(join(canonicalAncestor, relativePathFromAncestor || basename(resolvedPath)));
3080
3084
  }
@@ -3153,7 +3157,7 @@ function transformToolName(toolName) {
3153
3157
  if (lower in SPECIAL_TOOL_MAPPINGS) {
3154
3158
  return SPECIAL_TOOL_MAPPINGS[lower];
3155
3159
  }
3156
- if (trimmed.includes("-") || trimmed.includes("_")) {
3160
+ if (/[-_\s]/.test(trimmed)) {
3157
3161
  return toPascalCase(trimmed);
3158
3162
  }
3159
3163
  return trimmed.charAt(0).toUpperCase() + trimmed.slice(1);
@@ -5472,11 +5476,7 @@ var init_memory = __esm(() => {
5472
5476
  }).strict();
5473
5477
  OmoMemoryRecallSchema = z8.object({
5474
5478
  enabled: z8.boolean().default(true),
5475
- max_items: z8.number().int().min(1).max(5).default(2),
5476
- budget_tokens: z8.number().int().positive().default(600),
5477
- excerpt_chars: z8.number().int().positive().default(200),
5478
- min_score: z8.number().optional(),
5479
- exclude: z8.array(z8.string()).default([])
5479
+ max_items: z8.number().int().min(1).max(5).default(2)
5480
5480
  }).strict();
5481
5481
  OmoMemoryNudgeSchema = z8.object({
5482
5482
  enabled: z8.boolean().default(true),
@@ -5526,11 +5526,7 @@ var init_memory = __esm(() => {
5526
5526
  }).strict();
5527
5527
  OmoMemoryRecallLayerSchema = z8.object({
5528
5528
  enabled: z8.boolean().optional(),
5529
- max_items: z8.number().int().min(1).max(5).optional(),
5530
- budget_tokens: z8.number().int().positive().optional(),
5531
- excerpt_chars: z8.number().int().positive().optional(),
5532
- min_score: z8.number().optional(),
5533
- exclude: z8.array(z8.string()).optional()
5529
+ max_items: z8.number().int().min(1).max(5).optional()
5534
5530
  }).strict();
5535
5531
  OmoMemoryNudgeLayerSchema = z8.object({
5536
5532
  enabled: z8.boolean().optional(),
@@ -5601,13 +5597,7 @@ var init_memory = __esm(() => {
5601
5597
  write_notice: OmoMemoryWriteNoticeSchema.default({ enabled: true }),
5602
5598
  sync: OmoMemorySyncSchema.default({ enabled: true }),
5603
5599
  search: OmoMemorySearchSchema.default({ enabled: true }),
5604
- recall: OmoMemoryRecallSchema.default({
5605
- enabled: true,
5606
- max_items: 2,
5607
- budget_tokens: 600,
5608
- excerpt_chars: 200,
5609
- exclude: []
5610
- }),
5600
+ recall: OmoMemoryRecallSchema.default({ enabled: true, max_items: 2 }),
5611
5601
  compile_warn_tokens: z8.number().int().positive().default(30000),
5612
5602
  agents: z8.record(z8.string(), OmoMemoryAgentOverridesSchema).default({})
5613
5603
  }).strict();
@@ -7913,12 +7903,15 @@ function normalizeInputPath(absolutePath) {
7913
7903
  function isUnderPath(normalizedPath, normalizedParentPath) {
7914
7904
  return normalizedPath === normalizedParentPath || normalizedPath.startsWith(`${normalizedParentPath}/`);
7915
7905
  }
7906
+ function isOneDriveSegment(segment) {
7907
+ const lowercaseSegment = segment.toLowerCase();
7908
+ return lowercaseSegment === "onedrive" || lowercaseSegment.startsWith("onedrive - ");
7909
+ }
7916
7910
  function classifyPathEnvironment(absolutePath) {
7917
7911
  if (absolutePath.length === 0)
7918
7912
  return "unknown";
7919
7913
  const normalizedPath = normalizeInputPath(absolutePath);
7920
- const lowercasePath = normalizedPath.toLowerCase();
7921
- if (lowercasePath.includes("/onedrive") || lowercasePath.includes("/onedrive/")) {
7914
+ if (normalizedPath.split("/").some(isOneDriveSegment)) {
7922
7915
  return "onedrive";
7923
7916
  }
7924
7917
  if (normalizedPath.includes("/Library/Mobile Documents/")) {
@@ -12184,7 +12177,7 @@ function validateParsedTarListing(totalLineCount, unparsedLines) {
12184
12177
  throw new Error(`zip entry listing failed: ${unparsedLines.length}/${totalLineCount} tar listing lines could not be parsed (fail-closed)`);
12185
12178
  }
12186
12179
  function parseTarListingOutput(stdout) {
12187
- const listingLines = stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
12180
+ const listingLines = stdout.split(/\r?\n/).filter((line) => line.trim().length > 0);
12188
12181
  if (listingLines.length === 0) {
12189
12182
  return [];
12190
12183
  }
@@ -19190,8 +19183,8 @@ var require_resolve = __commonJS(function(exports) {
19190
19183
  }
19191
19184
  return count;
19192
19185
  }
19193
- function getFullPath(resolver, id = "", normalize4) {
19194
- if (normalize4 !== false)
19186
+ function getFullPath(resolver, id = "", normalize5) {
19187
+ if (normalize5 !== false)
19195
19188
  id = normalizeId(id);
19196
19189
  const p = resolver.parse(id);
19197
19190
  return _getFullPath(resolver, p);
@@ -20534,25 +20527,25 @@ var require_schemes = __commonJS(function(exports, module) {
20534
20527
  var require_fast_uri = __commonJS(function(exports, module) {
20535
20528
  var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, escapePreservingEscapes, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils2();
20536
20529
  var { SCHEMES, getSchemeHandler } = require_schemes();
20537
- function normalize4(uri, options) {
20530
+ function normalize5(uri, options) {
20538
20531
  if (typeof uri === "string") {
20539
20532
  uri = normalizeString(uri, options);
20540
20533
  } else if (typeof uri === "object") {
20541
- uri = parse3(serialize(uri, options), options);
20534
+ uri = parse4(serialize(uri, options), options);
20542
20535
  }
20543
20536
  return uri;
20544
20537
  }
20545
20538
  function resolve41(baseURI, relativeURI, options) {
20546
20539
  const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
20547
- const resolved = resolveComponent(parse3(baseURI, schemelessOptions), parse3(relativeURI, schemelessOptions), schemelessOptions, true);
20540
+ const resolved = resolveComponent(parse4(baseURI, schemelessOptions), parse4(relativeURI, schemelessOptions), schemelessOptions, true);
20548
20541
  schemelessOptions.skipEscape = true;
20549
20542
  return serialize(resolved, schemelessOptions);
20550
20543
  }
20551
20544
  function resolveComponent(base, relative16, options, skipNormalization) {
20552
20545
  const target = {};
20553
20546
  if (!skipNormalization) {
20554
- base = parse3(serialize(base, options), options);
20555
- relative16 = parse3(serialize(relative16, options), options);
20547
+ base = parse4(serialize(base, options), options);
20548
+ relative16 = parse4(serialize(relative16, options), options);
20556
20549
  }
20557
20550
  options = options || {};
20558
20551
  if (!options.tolerant && relative16.scheme) {
@@ -20776,7 +20769,7 @@ var require_fast_uri = __commonJS(function(exports, module) {
20776
20769
  }
20777
20770
  return { parsed, malformedAuthorityOrPort };
20778
20771
  }
20779
- function parse3(uri, opts) {
20772
+ function parse4(uri, opts) {
20780
20773
  return parseWithStatus(uri, opts).parsed;
20781
20774
  }
20782
20775
  function normalizeString(uri, opts) {
@@ -20800,12 +20793,12 @@ var require_fast_uri = __commonJS(function(exports, module) {
20800
20793
  }
20801
20794
  var fastUri = {
20802
20795
  SCHEMES,
20803
- normalize: normalize4,
20796
+ normalize: normalize5,
20804
20797
  resolve: resolve41,
20805
20798
  resolveComponent,
20806
20799
  equal,
20807
20800
  serialize,
20808
- parse: parse3
20801
+ parse: parse4
20809
20802
  };
20810
20803
  module.exports = fastUri;
20811
20804
  module.exports.default = fastUri;
@@ -23616,7 +23609,7 @@ var require_content_type = __commonJS(function(exports) {
23616
23609
  var QUOTE_REGEXP = /([\\"])/g;
23617
23610
  var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
23618
23611
  exports.format = format2;
23619
- exports.parse = parse3;
23612
+ exports.parse = parse4;
23620
23613
  function format2(obj) {
23621
23614
  if (!obj || typeof obj !== "object") {
23622
23615
  throw new TypeError("argument obj is required");
@@ -23640,7 +23633,7 @@ var require_content_type = __commonJS(function(exports) {
23640
23633
  }
23641
23634
  return string17;
23642
23635
  }
23643
- function parse3(string17) {
23636
+ function parse4(string17) {
23644
23637
  if (!string17) {
23645
23638
  throw new TypeError("argument string is required");
23646
23639
  }
@@ -25444,7 +25437,11 @@ function normalizeModelFormat(model) {
25444
25437
  if (typeof model === "string") {
25445
25438
  const parts = model.split("/");
25446
25439
  if (parts.length >= 2) {
25447
- return { providerID: parts[0], modelID: parts.slice(1).join("/") };
25440
+ const providerID = parts[0];
25441
+ const modelID = parts.slice(1).join("/");
25442
+ if (providerID.trim() && modelID.trim()) {
25443
+ return { providerID, modelID };
25444
+ }
25448
25445
  }
25449
25446
  }
25450
25447
  return;
@@ -25775,7 +25772,12 @@ function isRecord9(value) {
25775
25772
  return typeof value === "object" && value !== null;
25776
25773
  }
25777
25774
  function getRecordValue(record11, key) {
25778
- return record11?.[key];
25775
+ try {
25776
+ return record11?.[key];
25777
+ } catch (cause) {
25778
+ if (!(cause instanceof Error)) {}
25779
+ return;
25780
+ }
25779
25781
  }
25780
25782
  function getNestedRecord(record11, key) {
25781
25783
  const value = getRecordValue(record11, key);
@@ -25885,8 +25887,41 @@ function isStatusCodeRetrySafe(code, retryOnErrors) {
25885
25887
  function isLocalizedQuotaExhaustionMessage(message) {
25886
25888
  return /\u9884\u6263\u8D39\u989D\u5EA6\u5931\u8D25/i.test(message) && /\u7528\u6237\u5269\u4F59\u989D\u5EA6/i.test(message) || /\u7528\u6237\u5269\u4F59\u989D\u5EA6/i.test(message) && /\u9700\u8981\u9884\u6263\u8D39\u989D\u5EA6/i.test(message);
25887
25889
  }
25890
+ function isUnknownRecord(value) {
25891
+ return typeof value === "object" && value !== null;
25892
+ }
25893
+ function getUnknownProperty(value, key) {
25894
+ if (!isUnknownRecord(value))
25895
+ return;
25896
+ try {
25897
+ return value[key];
25898
+ } catch (cause) {
25899
+ if (!(cause instanceof Error)) {}
25900
+ return;
25901
+ }
25902
+ }
25903
+ function getDetailErrorType(error) {
25904
+ const data = getUnknownProperty(error, "data");
25905
+ const detail = getUnknownProperty(error, "detail") ?? getUnknownProperty(data, "detail") ?? error;
25906
+ const detailError = getUnknownProperty(detail, "error") ?? detail;
25907
+ const type = getUnknownProperty(detailError, "type") ?? getUnknownProperty(detail, "type");
25908
+ return typeof type === "string" ? type.toLowerCase() : undefined;
25909
+ }
25910
+ function isTerminalQuotaMessage(message) {
25911
+ if (/\bnon[-\s]+terminal\s+quota\b/i.test(message) || /\bnon[-\s]+terminal\s+billing\s+limit\b/i.test(message)) {
25912
+ return false;
25913
+ }
25914
+ return /\bterminal\s+quota\b/i.test(message) || /\bterminal\s+billing\s+limit\b/i.test(message) || /\bhard\s+billing\s+limit\b/i.test(message);
25915
+ }
25888
25916
  function classifyRuntimeFallbackError(error) {
25917
+ const detailType = getDetailErrorType(error);
25918
+ if (detailType === "terminal_quota_exhausted") {
25919
+ return "abort";
25920
+ }
25889
25921
  const message = getRuntimeFallbackErrorMessage(error);
25922
+ if (isTerminalQuotaMessage(message)) {
25923
+ return "abort";
25924
+ }
25890
25925
  const errorName = getRuntimeFallbackErrorName(error)?.toLowerCase().replace(/[_-]/g, "");
25891
25926
  if (errorName?.includes("messageabortederror") || errorName?.includes("aborterror")) {
25892
25927
  return "abort";
@@ -26113,6 +26148,111 @@ var SUPPLEMENTAL_MODEL_CAPABILITIES = {
26113
26148
  input: 272000,
26114
26149
  output: 128000
26115
26150
  }
26151
+ },
26152
+ "grok-4.5": {
26153
+ id: "grok-4.5",
26154
+ family: "grok",
26155
+ reasoning: false,
26156
+ temperature: true,
26157
+ toolCall: true,
26158
+ modalities: {
26159
+ input: ["text", "image"],
26160
+ output: ["text"]
26161
+ },
26162
+ limit: {
26163
+ context: 500000,
26164
+ output: 32768
26165
+ }
26166
+ },
26167
+ "xai/grok-4.5": {
26168
+ id: "xai/grok-4.5",
26169
+ family: "grok",
26170
+ reasoning: false,
26171
+ temperature: true,
26172
+ toolCall: true,
26173
+ modalities: {
26174
+ input: ["text", "image"],
26175
+ output: ["text"]
26176
+ },
26177
+ limit: {
26178
+ context: 500000,
26179
+ output: 32768
26180
+ }
26181
+ },
26182
+ "x-ai/grok-4.5": {
26183
+ id: "x-ai/grok-4.5",
26184
+ family: "grok",
26185
+ reasoning: false,
26186
+ temperature: true,
26187
+ toolCall: true,
26188
+ modalities: {
26189
+ input: ["text", "image"],
26190
+ output: ["text"]
26191
+ },
26192
+ limit: {
26193
+ context: 500000,
26194
+ output: 32768
26195
+ }
26196
+ },
26197
+ "grok-4.6": {
26198
+ id: "grok-4.6",
26199
+ family: "grok",
26200
+ reasoning: false,
26201
+ temperature: true,
26202
+ toolCall: true,
26203
+ modalities: {
26204
+ input: ["text", "image"],
26205
+ output: ["text"]
26206
+ },
26207
+ limit: {
26208
+ context: 500000,
26209
+ output: 32768
26210
+ }
26211
+ },
26212
+ "xai/grok-4.6": {
26213
+ id: "xai/grok-4.6",
26214
+ family: "grok",
26215
+ reasoning: false,
26216
+ temperature: true,
26217
+ toolCall: true,
26218
+ modalities: {
26219
+ input: ["text", "image"],
26220
+ output: ["text"]
26221
+ },
26222
+ limit: {
26223
+ context: 500000,
26224
+ output: 32768
26225
+ }
26226
+ },
26227
+ "xai/grok-build-0.1": {
26228
+ id: "xai/grok-build-0.1",
26229
+ family: "grok",
26230
+ reasoning: false,
26231
+ temperature: true,
26232
+ toolCall: true,
26233
+ modalities: {
26234
+ input: ["text", "image"],
26235
+ output: ["text"]
26236
+ },
26237
+ limit: {
26238
+ context: 256000,
26239
+ output: 32768
26240
+ }
26241
+ },
26242
+ "x-ai/grok-build-0.1": {
26243
+ id: "x-ai/grok-build-0.1",
26244
+ family: "grok",
26245
+ reasoning: false,
26246
+ temperature: true,
26247
+ toolCall: true,
26248
+ modalities: {
26249
+ input: ["text", "image"],
26250
+ output: ["text"]
26251
+ },
26252
+ limit: {
26253
+ context: 256000,
26254
+ output: 32768
26255
+ }
26116
26256
  }
26117
26257
  };
26118
26258
 
@@ -85546,7 +85686,7 @@ var getUrl = ({ baseUrl, path: path7, query, querySerializer, url: _url }) => {
85546
85686
  };
85547
85687
 
85548
85688
  // node_modules/.bun/@opencode-ai+sdk@1.18.22/node_modules/@opencode-ai/sdk/dist/gen/client/utils.gen.js
85549
- var createQuerySerializer = ({ allowReserved, array: array8, object: object15 } = {}) => {
85689
+ var createQuerySerializer = ({ allowReserved, array: array7, object: object15 } = {}) => {
85550
85690
  const querySerializer = (queryParams) => {
85551
85691
  const search = [];
85552
85692
  if (queryParams && typeof queryParams === "object") {
@@ -85562,7 +85702,7 @@ var createQuerySerializer = ({ allowReserved, array: array8, object: object15 }
85562
85702
  name,
85563
85703
  style: "form",
85564
85704
  value,
85565
- ...array8
85705
+ ...array7
85566
85706
  });
85567
85707
  if (serializedArray)
85568
85708
  search.push(serializedArray);
@@ -89201,8 +89341,6 @@ function isCompactionGuardActive(state2, now) {
89201
89341
 
89202
89342
  // packages/omo-opencode/src/hooks/todo-continuation-enforcer/idle-event.ts
89203
89343
  init_logger2();
89204
-
89205
- // packages/omo-opencode/src/shared/prompt-async-gate/pending-tool-turn.ts
89206
89344
  init_pending_tool_turn();
89207
89345
 
89208
89346
  // packages/omo-opencode/src/hooks/todo-continuation-enforcer/abort-detection.ts
@@ -93060,7 +93198,7 @@ function incrementEmptyContentAttempt(autoCompactState, sessionID) {
93060
93198
  }
93061
93199
 
93062
93200
  // packages/omo-opencode/src/hooks/anthropic-context-window-limit-recovery/tool-result-storage.ts
93063
- import { existsSync as existsSync50, readdirSync as readdirSync15, readFileSync as readFileSync30, writeFileSync as writeFileSync10 } from "fs";
93201
+ import { existsSync as existsSync50, readdirSync as readdirSync15, readFileSync as readFileSync30, rmSync as rmSync4, writeFileSync as writeFileSync10 } from "fs";
93064
93202
  import { join as join67 } from "path";
93065
93203
 
93066
93204
  // packages/omo-opencode/src/hooks/anthropic-context-window-limit-recovery/message-storage-directory.ts
@@ -93134,6 +93272,10 @@ function truncateToolResult(partPath) {
93134
93272
  }
93135
93273
  const originalSize = part.state.output.length;
93136
93274
  const toolName = part.tool;
93275
+ const backupPath = `${partPath}.original`;
93276
+ try {
93277
+ writeFileSync10(backupPath, part.state.output);
93278
+ } catch {}
93137
93279
  part.truncated = true;
93138
93280
  part.originalSize = originalSize;
93139
93281
  part.state.output = TRUNCATION_MESSAGE;
@@ -98821,7 +98963,7 @@ function getCachedVersion(options = {}) {
98821
98963
  // package.json
98822
98964
  var package_default = {
98823
98965
  name: "oh-my-opencode",
98824
- version: "5.0.0-beta.31",
98966
+ version: "5.0.0-beta.32",
98825
98967
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
98826
98968
  main: "./dist/index.js",
98827
98969
  types: "dist/index.d.ts",
@@ -98934,6 +99076,7 @@ var package_default = {
98934
99076
  "install:codex-dev": "bun run script/build-codex-install.ts && bun run script/install-codex-dev.ts",
98935
99077
  "build:codex-plugin": "npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build",
98936
99078
  "build:senpi-plugin": "bun run build:lsp-daemon && bun run build:ast-grep-mcp && bun run build:senpi-plugin:stage",
99079
+ "build:senpi-plugin:native": "node packages/omo-senpi/plugin/scripts/stage-lsp-daemon-runtime.mjs && node packages/omo-senpi/plugin/scripts/stage-ast-grep-mcp-runtime.mjs && node packages/omo-senpi/plugin/scripts/stage-agent-toolkit.mjs && node packages/omo-senpi/plugin/scripts/build-extension.mjs && node packages/omo-senpi/plugin/scripts/sync-skills.mjs && node packages/omo-senpi/plugin/scripts/embed-directive.mjs --check && node packages/omo-senpi/plugin/scripts/build-install.mjs",
98937
99080
  "build:senpi-plugin:stage": "bun run build:materialize-frontend && node packages/omo-senpi/plugin/scripts/stage-lsp-daemon-runtime.mjs && node packages/omo-senpi/plugin/scripts/stage-ast-grep-mcp-runtime.mjs && node packages/omo-senpi/plugin/scripts/stage-agent-toolkit.mjs && node packages/omo-senpi/plugin/scripts/build-extension.mjs && node packages/omo-senpi/plugin/scripts/sync-skills.mjs && node packages/omo-senpi/plugin/scripts/embed-directive.mjs --check && node packages/omo-senpi/plugin/scripts/build-install.mjs",
98938
99081
  "build:materialize-frontend": "node packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs --strict",
98939
99082
  "build:shared-skills-assets": "bun run build:materialize-frontend && rm -rf dist/skills && cp -R packages/shared-skills/skills dist/skills",
@@ -99002,7 +99145,7 @@ var package_default = {
99002
99145
  zod: "^4.4.3"
99003
99146
  },
99004
99147
  devDependencies: {
99005
- "@code-yeongyu/senpi": "2026.8.31",
99148
+ "@code-yeongyu/senpi": "2026.9.2",
99006
99149
  "@oh-my-opencode/agents-md-core": "workspace:*",
99007
99150
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
99008
99151
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -99043,18 +99186,18 @@ var package_default = {
99043
99186
  typescript: "^7.0.2"
99044
99187
  },
99045
99188
  optionalDependencies: {
99046
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.31",
99047
- "oh-my-opencode-darwin-x64": "5.0.0-beta.31",
99048
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.31",
99049
- "oh-my-opencode-linux-arm64": "5.0.0-beta.31",
99050
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.31",
99051
- "oh-my-opencode-linux-x64": "5.0.0-beta.31",
99052
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.31",
99053
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.31",
99054
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.31",
99055
- "oh-my-opencode-windows-arm64": "5.0.0-beta.31",
99056
- "oh-my-opencode-windows-x64": "5.0.0-beta.31",
99057
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.31"
99189
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.32",
99190
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.32",
99191
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.32",
99192
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.32",
99193
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.32",
99194
+ "oh-my-opencode-linux-x64": "5.0.0-beta.32",
99195
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.32",
99196
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.32",
99197
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.32",
99198
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.32",
99199
+ "oh-my-opencode-windows-x64": "5.0.0-beta.32",
99200
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.32"
99058
99201
  },
99059
99202
  overrides: {
99060
99203
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -99072,7 +99215,7 @@ var package_default = {
99072
99215
  "@code-yeongyu/comment-checker"
99073
99216
  ],
99074
99217
  patchedDependencies: {
99075
- "@code-yeongyu/senpi@2026.8.31": "patches/@code-yeongyu%2Fsenpi@2026.8.31.patch"
99218
+ "@code-yeongyu/senpi@2026.9.2": "patches/@code-yeongyu%2Fsenpi@2026.9.2.patch"
99076
99219
  }
99077
99220
  };
99078
99221
 
@@ -107721,6 +107864,9 @@ function recoverToolMetadata(sessionID, source) {
107721
107864
  }
107722
107865
  return consumeToolMetadata(sessionID, callID);
107723
107866
  }
107867
+ // packages/omo-opencode/src/hooks/ralph-loop/oracle-verification-detector.ts
107868
+ var VERIFICATION_AGENTS = new Set(["oracle", "gate-verifier"]);
107869
+
107724
107870
  // packages/omo-opencode/src/hooks/ralph-loop/verification-failure-handler.ts
107725
107871
  init_logger2();
107726
107872
 
@@ -107737,6 +107883,7 @@ REQUIRED NOW:
107737
107883
  - Ask Oracle to verify whether the original task is actually complete
107738
107884
  - Include the original task in the Oracle request
107739
107885
  - Explicitly tell Oracle to review skeptically and critically, and to look for reasons the task may still be incomplete or wrong
107886
+ - If the Oracle spawn fails because its model/agent is unavailable, spawn a verifier with the identical verification instructions using task(category: "deep", load_skills=[], run_in_background=false, ...), then retry with category: "unspecified-high", then category: "unspecified-low" on the same failure; require its reply to end with the literal line \`Agent: gate-verifier\` immediately above the promise tag
107740
107887
  - The system will inspect the Oracle session directly for the verification result
107741
107888
  - If Oracle does not verify, continue fixing the task and do not consider it complete
107742
107889
 
@@ -107752,6 +107899,7 @@ REQUIRED NOW:
107752
107899
  - Do not claim completion early or argue with the failed verification
107753
107900
  - After fixing the remaining issues, request Oracle review again using task(subagent_type="oracle", load_skills=[], run_in_background=false, ...)
107754
107901
  - Include the original task in the Oracle request and tell Oracle to review skeptically and critically
107902
+ - If the Oracle spawn fails because its model/agent is unavailable, spawn a verifier with the identical verification instructions using task(category: "deep", load_skills=[], run_in_background=false, ...), then retry with category: "unspecified-high", then category: "unspecified-low" on the same failure; require its reply to end with the literal line \`Agent: gate-verifier\` immediately above the promise tag
107755
107903
  - Only when the work is ready for review again, output: <promise>{{PROMISE}}</promise>
107756
107904
 
107757
107905
  Original task:
@@ -109195,7 +109343,7 @@ $ARGUMENTS
109195
109343
  subtask: entry.subtask ?? fileMetadata.subtask,
109196
109344
  argumentHint: entry["argument-hint"] || fileMetadata["argument-hint"]
109197
109345
  };
109198
- const allowedTools = entry["allowed-tools"] || parseAllowedTools(fileMetadata["allowed-tools"]);
109346
+ const allowedTools = parseAllowedTools(entry["allowed-tools"]) || parseAllowedTools(fileMetadata["allowed-tools"]);
109199
109347
  return {
109200
109348
  name,
109201
109349
  path: sourcePath,
@@ -109213,7 +109361,8 @@ $ARGUMENTS
109213
109361
  init_src2();
109214
109362
  function mergeSkillDefinitions(base, patch) {
109215
109363
  const mergedMetadata = base.metadata || patch.metadata ? deepMerge(base.metadata || {}, patch.metadata || {}) : undefined;
109216
- const mergedTools = base.allowedTools || patch["allowed-tools"] ? [...base.allowedTools || [], ...patch["allowed-tools"] || []] : undefined;
109364
+ const patchAllowedTools = parseAllowedTools(patch["allowed-tools"]);
109365
+ const mergedTools = base.allowedTools || patchAllowedTools ? [...base.allowedTools || [], ...patchAllowedTools || []] : undefined;
109217
109366
  const description = patch.description || base.definition.description?.replace(/^\([^)]+\) /, "");
109218
109367
  return {
109219
109368
  ...base,
@@ -111414,7 +111563,7 @@ Use this skill to run a parallel security audit that separates real exploitabili
111414
111563
  Before starting, verify:
111415
111564
 
111416
111565
  1. \`team_*\` tools are available. If not, stop and tell the user:
111417
- \`security-research requires team-mode. Set team_mode.enabled: true in your oh-my-openagent config, restart opencode, then retry.\`
111566
+ \`security-research requires team-mode. Set team_mode.enabled: true in your .omo/omo.jsonc config, restart opencode, then retry.\`
111418
111567
  2. You are in the main session, not a background subagent.
111419
111568
  3. You have a concrete target: repository, diff range, PR, release candidate, path list, or threat surface.
111420
111569
 
@@ -123190,11 +123339,11 @@ class Diff {
123190
123339
  return left === right || !!options.ignoreCase && left.toLowerCase() === right.toLowerCase();
123191
123340
  }
123192
123341
  }
123193
- removeEmpty(array9) {
123342
+ removeEmpty(array8) {
123194
123343
  const ret = [];
123195
- for (let i = 0;i < array9.length; i++) {
123196
- if (array9[i]) {
123197
- ret.push(array9[i]);
123344
+ for (let i = 0;i < array8.length; i++) {
123345
+ if (array8[i]) {
123346
+ ret.push(array8[i]);
123198
123347
  }
123199
123348
  }
123200
123349
  return ret;
@@ -126745,6 +126894,23 @@ Has Transcript: Yes (234 entries)`;
126745
126894
  import { existsSync as existsSync94 } from "fs";
126746
126895
  import { readdir as readdir7, readFile as readFile10 } from "fs/promises";
126747
126896
  import { join as join118 } from "path";
126897
+
126898
+ // packages/omo-opencode/src/tools/session-manager/directory-filter.ts
126899
+ import { normalize as normalize4, parse as parse3, sep as sep3 } from "path";
126900
+ function toComparisonSeparators(path19) {
126901
+ return sep3 === "\\" ? path19.replace(/\\/g, "/") : path19;
126902
+ }
126903
+ function normalizeSessionDirectory(directory) {
126904
+ const normalized = normalize4(directory);
126905
+ const root = parse3(normalized).root;
126906
+ const withoutTrailing = normalized !== root && normalized.endsWith(sep3) ? normalized.slice(0, -1) : normalized;
126907
+ return toComparisonSeparators(withoutTrailing);
126908
+ }
126909
+ function sessionDirectoriesMatch(stored, filter) {
126910
+ return normalizeSessionDirectory(stored) === normalizeSessionDirectory(filter);
126911
+ }
126912
+
126913
+ // packages/omo-opencode/src/tools/session-manager/file-storage.ts
126748
126914
  function ignoreFileStorageError(error) {
126749
126915
  if (error instanceof Error)
126750
126916
  return;
@@ -126769,7 +126935,7 @@ async function getFileMainSessions(directory) {
126769
126935
  const meta = JSON.parse(content);
126770
126936
  if (meta.parentID)
126771
126937
  continue;
126772
- if (directory && meta.directory !== directory)
126938
+ if (directory && !sessionDirectoriesMatch(meta.directory, directory))
126773
126939
  continue;
126774
126940
  sessions.push(meta);
126775
126941
  } catch (error) {
@@ -127023,7 +127189,7 @@ async function getSdkMainSessions(client3, directory) {
127023
127189
  const sessions = normalizeSDKResponse(response, []);
127024
127190
  const mainSessions = sessions.filter((session) => !session.parentID);
127025
127191
  if (directory) {
127026
- return mainSessions.filter((session) => session.directory === directory).sort((a, b) => b.time.updated - a.time.updated);
127192
+ return mainSessions.filter((session) => sessionDirectoriesMatch(session.directory, directory)).sort((a, b) => b.time.updated - a.time.updated);
127027
127193
  }
127028
127194
  return mainSessions.sort((a, b) => b.time.updated - a.time.updated);
127029
127195
  }
@@ -128419,7 +128585,11 @@ Session ID: ${task2.sessionId}
128419
128585
 
128420
128586
  ---
128421
128587
 
128422
- (No new output since last check)`;
128588
+ (No new output since last check)
128589
+
128590
+ To retrieve the complete output, re-call this tool with:
128591
+ - background_output(task_id="${task2.id}", full_session=true) \u2014 re-fetches all messages, bypassing the incremental cursor
128592
+ - Or use session_read(session_id="${task2.sessionId}") to read the full child session transcript`;
128423
128593
  }
128424
128594
  const extractedContent = [];
128425
128595
  for (const message of newMessages) {
@@ -130033,7 +130203,7 @@ import { pathToFileURL } from "url";
130033
130203
 
130034
130204
  // packages/omo-opencode/src/tools/look-at/image-converter.ts
130035
130205
  import * as childProcess2 from "child_process";
130036
- import { existsSync as existsSync101, mkdtempSync, readFileSync as readFileSync65, rmSync as rmSync5, unlinkSync as unlinkSync15, writeFileSync as writeFileSync23 } from "fs";
130206
+ import { existsSync as existsSync101, mkdtempSync, readFileSync as readFileSync65, rmSync as rmSync6, unlinkSync as unlinkSync15, writeFileSync as writeFileSync23 } from "fs";
130037
130207
  import { tmpdir as tmpdir7 } from "os";
130038
130208
  import { dirname as dirname45, join as join126 } from "path";
130039
130209
  var SUPPORTED_FORMATS = new Set([
@@ -130142,7 +130312,7 @@ function cleanupConvertedImage(filePath) {
130142
130312
  log2(`[image-converter] Cleaned up temporary file: ${filePath}`);
130143
130313
  }
130144
130314
  if (existsSync101(tempDirectory)) {
130145
- rmSync5(tempDirectory, { recursive: true, force: true });
130315
+ rmSync6(tempDirectory, { recursive: true, force: true });
130146
130316
  log2(`[image-converter] Cleaned up temporary directory: ${tempDirectory}`);
130147
130317
  }
130148
130318
  } catch (error) {
@@ -135632,7 +135802,8 @@ async function deliverLiveToRecipient(input) {
135632
135802
  recipientMember,
135633
135803
  reservation,
135634
135804
  config: config3,
135635
- directory
135805
+ directory,
135806
+ settleMs
135636
135807
  } = input;
135637
135808
  const recipientSessionId = recipientMember.sessionId;
135638
135809
  if (recipientMember.pendingInjectedMessageIds.length > 0) {
@@ -135692,6 +135863,7 @@ async function deliverLiveToRecipient(input) {
135692
135863
  sessionID: recipientSessionId,
135693
135864
  source: "team-live-delivery",
135694
135865
  queueBehavior: "defer",
135866
+ settleMs,
135695
135867
  input: {
135696
135868
  path: { id: recipientSessionId },
135697
135869
  body: buildMemberPromptBody(recipientMember, envelope),
@@ -135826,7 +135998,8 @@ async function deliverLive(client3, message, teamRunId, deliveredTo, config3, di
135826
135998
  recipientMember,
135827
135999
  reservation,
135828
136000
  config: config3,
135829
- directory
136001
+ directory,
136002
+ settleMs: deps.liveDeliverySettleMs
135830
136003
  });
135831
136004
  }
135832
136005
  }
@@ -137152,10 +137325,13 @@ function mergeStoredMessages(messages, sessionID) {
137152
137325
  ...message.model.variant ? { variant: message.model.variant } : {}
137153
137326
  };
137154
137327
  }
137328
+ if (merged.model?.providerID && merged.model.modelID && !merged.model.variant && message.model?.providerID === merged.model.providerID && message.model.modelID === merged.model.modelID && message.model.variant) {
137329
+ merged.model.variant = message.model.variant;
137330
+ }
137155
137331
  if (!merged.tools && message.tools) {
137156
137332
  merged.tools = message.tools;
137157
137333
  }
137158
- if (hasFullAgentAndModel(merged) && merged.tools) {
137334
+ if (hasFullAgentAndModel(merged) && merged.tools && merged.model?.variant) {
137159
137335
  break;
137160
137336
  }
137161
137337
  }
@@ -137816,7 +137992,7 @@ class ParentWakeDispatchedTracker {
137816
137992
  }
137817
137993
  }
137818
137994
 
137819
- // packages/omo-opencode/src/shared/prompt-async-gate/prompt-message-state.ts
137995
+ // packages/omo-opencode/src/features/background-agent/parent-wake-history-state.ts
137820
137996
  init_prompt_message_state();
137821
137997
 
137822
137998
  // packages/omo-opencode/src/features/background-agent/parent-wake-message-activity.ts
@@ -138368,10 +138544,11 @@ class ParentWakePendingQueue {
138368
138544
  }
138369
138545
  }
138370
138546
 
138371
- // packages/omo-opencode/src/shared/prompt-async-gate/message-inspection-error.ts
138547
+ // packages/omo-opencode/src/features/background-agent/parent-wake-session-inspector.ts
138372
138548
  init_message_inspection_error();
138373
138549
 
138374
138550
  // packages/omo-opencode/src/features/background-agent/parent-wake-session-history.ts
138551
+ init_pending_tool_turn();
138375
138552
  function parentWakeUserMessageIsInProgress(input) {
138376
138553
  if (input.windowMs <= 0) {
138377
138554
  return false;
@@ -142635,6 +142812,7 @@ function formatStatus(record12, batch2) {
142635
142812
  }
142636
142813
 
142637
142814
  // packages/omo-opencode/src/features/monitor/output-injector-session-inspect.ts
142815
+ init_pending_tool_turn();
142638
142816
  async function loadMonitorSessionMessages(client3, directory, sessionID) {
142639
142817
  try {
142640
142818
  const messagesResp = await client3.session?.messages?.({
@@ -148261,6 +148439,7 @@ var SENSITIVE_PATTERNS = [
148261
148439
  /sk-[a-zA-Z0-9]{20,}/g,
148262
148440
  /gh[pousr]_[a-zA-Z0-9]{20,}/gi,
148263
148441
  /glpat-[a-zA-Z0-9_-]{20,}/gi,
148442
+ /xox[baprs]-[a-zA-Z0-9-]{10,}/gi,
148264
148443
  /[A-Za-z0-9_]{20,}-[A-Za-z0-9_]{10,}-[A-Za-z0-9_]{10,}/g
148265
148444
  ];
148266
148445
  var REDACTION_MARKER = "[REDACTED]";
@@ -148768,10 +148947,9 @@ class StdioClientTransport {
148768
148947
  // packages/mcp-client-core/src/skill-mcp-manager/env-cleaner.ts
148769
148948
  var EXCLUDED_ENV_PATTERNS = [
148770
148949
  /^NPM_CONFIG_/i,
148771
- /^npm_config_/,
148772
- /^YARN_/,
148773
- /^PNPM_/,
148774
- /^NO_UPDATE_NOTIFIER$/,
148950
+ /^YARN_/i,
148951
+ /^PNPM_/i,
148952
+ /^NO_UPDATE_NOTIFIER$/i,
148775
148953
  /^ANTHROPIC_API_KEY$/i,
148776
148954
  /^AWS_ACCESS_KEY_ID$/i,
148777
148955
  /^AWS_SECRET_ACCESS_KEY$/i,
@@ -153321,10 +153499,17 @@ async function createRuntimeSkillSourceServer(options, runtimeEnv = runtime6) {
153321
153499
  import { existsSync as existsSync112, readFileSync as readFileSync77 } from "fs";
153322
153500
  import { join as join142 } from "path";
153323
153501
  import { homedir as homedir36 } from "os";
153324
- function getMcpConfigPaths() {
153325
- const claudeConfigDir = getClaudeConfigDir3();
153326
- const homeDir = getHomeDir();
153327
- const cwd = process.cwd();
153502
+ function resolveMcpLoaderContext(options = {}) {
153503
+ const cwd = options.cwd ?? process.cwd();
153504
+ const homeDir = options.homeDir ?? getHomeDir();
153505
+ const claudeConfigDir = options.claudeConfigDir ?? (options.homeDir === undefined ? getClaudeConfigDir3() : join142(homeDir, ".claude"));
153506
+ return { cwd, homeDir, claudeConfigDir };
153507
+ }
153508
+ var mcpLoaderInternals = {
153509
+ resolveMcpLoaderContext
153510
+ };
153511
+ function getMcpConfigPaths(context) {
153512
+ const { claudeConfigDir, homeDir, cwd } = context;
153328
153513
  return [
153329
153514
  { path: join142(homeDir, ".claude.json"), scope: "user" },
153330
153515
  { path: join142(claudeConfigDir, ".mcp.json"), scope: "user" },
@@ -153351,10 +153536,11 @@ async function loadMcpConfigFile(filePath) {
153351
153536
  return null;
153352
153537
  }
153353
153538
  }
153354
- function getSystemMcpServerNames() {
153539
+ function getSystemMcpServerNames(options = {}) {
153355
153540
  const names = new Set;
153356
- const paths3 = getMcpConfigPaths();
153357
- const cwd = process.cwd();
153541
+ const context = mcpLoaderInternals.resolveMcpLoaderContext(options);
153542
+ const paths3 = getMcpConfigPaths(context);
153543
+ const { cwd } = context;
153358
153544
  for (const { path: path22 } of paths3) {
153359
153545
  if (!existsSync112(path22))
153360
153546
  continue;
@@ -153380,12 +153566,13 @@ function getSystemMcpServerNames() {
153380
153566
  }
153381
153567
  return names;
153382
153568
  }
153383
- async function loadMcpConfigs(disabledMcps = []) {
153569
+ async function loadMcpConfigs(disabledMcps = [], options = {}) {
153384
153570
  const servers = {};
153385
153571
  const loadedServers = [];
153386
- const paths3 = getMcpConfigPaths();
153572
+ const context = mcpLoaderInternals.resolveMcpLoaderContext(options);
153573
+ const paths3 = getMcpConfigPaths(context);
153387
153574
  const disabledSet = new Set(disabledMcps);
153388
- const cwd = process.cwd();
153575
+ const { cwd } = context;
153389
153576
  for (const { path: path22, scope } of paths3) {
153390
153577
  const config3 = await loadMcpConfigFile(path22);
153391
153578
  if (!config3?.mcpServers)
@@ -154079,7 +154266,7 @@ var opengateway_models_default = {
154079
154266
  cache_write: 0
154080
154267
  },
154081
154268
  limit: {
154082
- context: 1048576,
154269
+ context: 262144,
154083
154270
  output: 131072
154084
154271
  }
154085
154272
  },
@@ -176649,7 +176836,7 @@ function getTelemetryHost(env2 = process.env, defaultHost = DEFAULT_POSTHOG_HOST
176649
176836
  }
176650
176837
 
176651
176838
  // node_modules/.bun/posthog-node@5.51.1/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/module.node.mjs
176652
- import { dirname as dirname52, posix as posix12, sep as sep3 } from "path";
176839
+ import { dirname as dirname52, posix as posix12, sep as sep4 } from "path";
176653
176840
  function createModulerModifier() {
176654
176841
  const getModuleFromFileName = createGetModuleFromFilename();
176655
176842
  return async (frames) => {
@@ -176658,7 +176845,7 @@ function createModulerModifier() {
176658
176845
  return frames;
176659
176846
  };
176660
176847
  }
176661
- function createGetModuleFromFilename(basePath = process.argv[1] ? dirname52(process.argv[1]) : process.cwd(), isWindows2 = sep3 === "\\") {
176848
+ function createGetModuleFromFilename(basePath = process.argv[1] ? dirname52(process.argv[1]) : process.cwd(), isWindows2 = sep4 === "\\") {
176662
176849
  const normalizedBase = isWindows2 ? normalizeWindowsPath(basePath) : basePath;
176663
176850
  return (filename) => {
176664
176851
  if (!filename)
@@ -180674,9 +180861,9 @@ function snipLine(line, colno) {
180674
180861
  }
180675
180862
 
180676
180863
  // node_modules/.bun/posthog-node@5.51.1/node_modules/posthog-node/dist/extensions/error-tracking/modifiers/relative-path.node.mjs
180677
- import { isAbsolute as isAbsolute21, relative as relative16, sep as sep4 } from "path";
180864
+ import { isAbsolute as isAbsolute21, relative as relative16, sep as sep5 } from "path";
180678
180865
  function createRelativePathModifier(basePath = process.cwd()) {
180679
- const isWindows2 = sep4 === "\\";
180866
+ const isWindows2 = sep5 === "\\";
180680
180867
  const toUnix = (p) => isWindows2 ? p.replace(/\\/g, "/") : p;
180681
180868
  const normalizedBase = toUnix(basePath);
180682
180869
  return async (frames) => {