oh-my-opencode 5.0.0-beta.46 → 5.0.0-beta.48

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 (109) hide show
  1. package/dist/cli/index.js +15 -15
  2. package/dist/cli-node/index.js +15 -15
  3. package/dist/features/team-mode/tools/messaging-fallback-wake.d.ts +2 -0
  4. package/dist/features/team-mode/tools/messaging-live-delivery-recipient.d.ts +2 -0
  5. package/dist/features/team-mode/tools/messaging-runtime.d.ts +6 -0
  6. package/dist/index.js +84 -56
  7. package/package.json +14 -14
  8. package/packages/lsp-daemon/dist/cli.js +6 -3
  9. package/packages/lsp-daemon/dist/client.js +6 -3
  10. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
  11. package/packages/lsp-daemon/dist/ensure-daemon.js +9 -2
  12. package/packages/lsp-daemon/dist/index.js +6 -3
  13. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  14. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  15. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  16. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  17. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  19. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  21. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  23. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +6 -3
  24. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  25. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  27. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  29. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  31. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  33. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +2 -2
  35. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +15 -7
  37. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  38. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +1 -1
  39. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +294 -96
  40. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
  41. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
  42. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +1 -0
  43. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +12 -3
  44. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +1 -0
  45. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +21 -6
  46. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +1 -0
  47. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +10 -0
  48. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +4 -1
  49. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +25 -57
  50. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +9 -0
  51. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +227 -0
  52. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +17 -3
  53. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  54. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  55. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +2 -1
  56. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +10 -7
  57. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +18 -7
  58. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +1 -1
  59. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
  60. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +24 -3
  61. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +25 -5
  62. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +11 -0
  63. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +34 -64
  64. package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +239 -0
  65. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +16 -3
  66. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +14 -4
  67. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
  68. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +4 -2
  69. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
  70. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
  71. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +10 -8
  72. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +12 -2
  73. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +2 -0
  74. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
  75. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +7 -5
  76. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
  77. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -0
  78. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/cli-session.ts +4 -0
  79. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +2 -1
  80. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io-cross-process.test.ts +106 -0
  81. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +36 -2
  82. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +37 -0
  83. package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +218 -0
  84. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  85. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  86. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  105. package/packages/omo-codex/plugin/package-lock.json +12 -12
  106. package/packages/omo-codex/plugin/package.json +1 -1
  107. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +2 -1
  108. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +10 -7
  109. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
package/dist/cli/index.js CHANGED
@@ -54,7 +54,7 @@ var package_default;
54
54
  var init_package = __esm(() => {
55
55
  package_default = {
56
56
  name: "oh-my-opencode",
57
- version: "5.0.0-beta.46",
57
+ version: "5.0.0-beta.48",
58
58
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
59
59
  main: "./dist/index.js",
60
60
  types: "dist/index.d.ts",
@@ -238,7 +238,7 @@ var init_package = __esm(() => {
238
238
  zod: "^4.4.3"
239
239
  },
240
240
  devDependencies: {
241
- "@code-yeongyu/senpi": "2026.9.7",
241
+ "@code-yeongyu/senpi": "2026.9.7-2",
242
242
  "@oh-my-opencode/agents-md-core": "workspace:*",
243
243
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
244
244
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -279,18 +279,18 @@ var init_package = __esm(() => {
279
279
  typescript: "^7.0.2"
280
280
  },
281
281
  optionalDependencies: {
282
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.46",
283
- "oh-my-opencode-darwin-x64": "5.0.0-beta.46",
284
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.46",
285
- "oh-my-opencode-linux-arm64": "5.0.0-beta.46",
286
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.46",
287
- "oh-my-opencode-linux-x64": "5.0.0-beta.46",
288
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.46",
289
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.46",
290
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.46",
291
- "oh-my-opencode-windows-arm64": "5.0.0-beta.46",
292
- "oh-my-opencode-windows-x64": "5.0.0-beta.46",
293
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.46"
282
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.48",
283
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.48",
284
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.48",
285
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.48",
286
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.48",
287
+ "oh-my-opencode-linux-x64": "5.0.0-beta.48",
288
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.48",
289
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.48",
290
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.48",
291
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.48",
292
+ "oh-my-opencode-windows-x64": "5.0.0-beta.48",
293
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.48"
294
294
  },
295
295
  overrides: {
296
296
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -94447,7 +94447,7 @@ var package_default2;
94447
94447
  var init_package2 = __esm(() => {
94448
94448
  package_default2 = {
94449
94449
  name: "@oh-my-opencode/omo-codex",
94450
- version: "5.0.0-beta.46",
94450
+ version: "5.0.0-beta.48",
94451
94451
  type: "module",
94452
94452
  private: true,
94453
94453
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -55,7 +55,7 @@ var package_default;
55
55
  var init_package = __esm(() => {
56
56
  package_default = {
57
57
  name: "oh-my-opencode",
58
- version: "5.0.0-beta.46",
58
+ version: "5.0.0-beta.48",
59
59
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
60
60
  main: "./dist/index.js",
61
61
  types: "dist/index.d.ts",
@@ -239,7 +239,7 @@ var init_package = __esm(() => {
239
239
  zod: "^4.4.3"
240
240
  },
241
241
  devDependencies: {
242
- "@code-yeongyu/senpi": "2026.9.7",
242
+ "@code-yeongyu/senpi": "2026.9.7-2",
243
243
  "@oh-my-opencode/agents-md-core": "workspace:*",
244
244
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
245
245
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -280,18 +280,18 @@ var init_package = __esm(() => {
280
280
  typescript: "^7.0.2"
281
281
  },
282
282
  optionalDependencies: {
283
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.46",
284
- "oh-my-opencode-darwin-x64": "5.0.0-beta.46",
285
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.46",
286
- "oh-my-opencode-linux-arm64": "5.0.0-beta.46",
287
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.46",
288
- "oh-my-opencode-linux-x64": "5.0.0-beta.46",
289
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.46",
290
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.46",
291
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.46",
292
- "oh-my-opencode-windows-arm64": "5.0.0-beta.46",
293
- "oh-my-opencode-windows-x64": "5.0.0-beta.46",
294
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.46"
283
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.48",
284
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.48",
285
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.48",
286
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.48",
287
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.48",
288
+ "oh-my-opencode-linux-x64": "5.0.0-beta.48",
289
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.48",
290
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.48",
291
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.48",
292
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.48",
293
+ "oh-my-opencode-windows-x64": "5.0.0-beta.48",
294
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.48"
295
295
  },
296
296
  overrides: {
297
297
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -94526,7 +94526,7 @@ var package_default2;
94526
94526
  var init_package2 = __esm(() => {
94527
94527
  package_default2 = {
94528
94528
  name: "@oh-my-opencode/omo-codex",
94529
- version: "5.0.0-beta.46",
94529
+ version: "5.0.0-beta.48",
94530
94530
  type: "module",
94531
94531
  private: true,
94532
94532
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -1,6 +1,7 @@
1
1
  import type { TeamModeConfig } from "../../../config/schema/team-mode";
2
2
  import type { RuntimeState } from "@oh-my-opencode/team-core/types";
3
3
  import type { LiveDeliveryClient } from "./messaging-live-delivery-client";
4
+ import type { TeamSendMessageDispatchTiming } from "./messaging-runtime";
4
5
  type RuntimeMember = RuntimeState["members"][number];
5
6
  export declare function enqueueFallbackMailboxWake(input: {
6
7
  readonly client: LiveDeliveryClient;
@@ -11,5 +12,6 @@ export declare function enqueueFallbackMailboxWake(input: {
11
12
  readonly recipientName: string;
12
13
  readonly messageId: string;
13
14
  readonly config: TeamModeConfig;
15
+ readonly dispatchTiming?: TeamSendMessageDispatchTiming;
14
16
  }): Promise<void>;
15
17
  export {};
@@ -3,6 +3,7 @@ import { buildEnvelope } from "@oh-my-opencode/team-core/team-mailbox/poll";
3
3
  import type { Message, RuntimeState } from "@oh-my-opencode/team-core/types";
4
4
  import type { LiveDeliveryClient } from "./messaging-live-delivery-client";
5
5
  import type { DeliveryReservation } from "./messaging-live-delivery-reservation";
6
+ import type { TeamSendMessageDispatchTiming } from "./messaging-runtime";
6
7
  type RuntimeMember = RuntimeState["members"][number];
7
8
  type LiveDeliveryEnvelope = ReturnType<typeof buildEnvelope>;
8
9
  export declare function deliverLiveToRecipient(input: {
@@ -16,5 +17,6 @@ export declare function deliverLiveToRecipient(input: {
16
17
  config: TeamModeConfig;
17
18
  directory: string;
18
19
  settleMs?: number;
20
+ dispatchTiming?: TeamSendMessageDispatchTiming;
19
21
  }): Promise<void>;
20
22
  export {};
@@ -7,9 +7,15 @@ export type TeamRuntimeDetails = {
7
7
  senderName: string;
8
8
  activeMembers: string[];
9
9
  };
10
+ export type TeamSendMessageDispatchTiming = {
11
+ readonly postDispatchHoldMs?: number;
12
+ readonly queueRetryMs?: number;
13
+ readonly fallbackWakeSettleMs?: number;
14
+ };
10
15
  export type TeamSendMessageToolDeps = {
11
16
  loadRuntimeState: typeof loadRuntimeState;
12
17
  liveDeliverySettleMs?: number;
18
+ dispatchTiming?: TeamSendMessageDispatchTiming;
13
19
  };
14
20
  export declare const defaultTeamSendMessageToolDeps: TeamSendMessageToolDeps;
15
21
  type RuntimeMember = RuntimeState["members"][number];
package/dist/index.js CHANGED
@@ -96714,7 +96714,7 @@ function getCachedVersion(options = {}) {
96714
96714
  // package.json
96715
96715
  var package_default = {
96716
96716
  name: "oh-my-opencode",
96717
- version: "5.0.0-beta.46",
96717
+ version: "5.0.0-beta.48",
96718
96718
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
96719
96719
  main: "./dist/index.js",
96720
96720
  types: "dist/index.d.ts",
@@ -96898,7 +96898,7 @@ var package_default = {
96898
96898
  zod: "^4.4.3"
96899
96899
  },
96900
96900
  devDependencies: {
96901
- "@code-yeongyu/senpi": "2026.9.7",
96901
+ "@code-yeongyu/senpi": "2026.9.7-2",
96902
96902
  "@oh-my-opencode/agents-md-core": "workspace:*",
96903
96903
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
96904
96904
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -96939,18 +96939,18 @@ var package_default = {
96939
96939
  typescript: "^7.0.2"
96940
96940
  },
96941
96941
  optionalDependencies: {
96942
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.46",
96943
- "oh-my-opencode-darwin-x64": "5.0.0-beta.46",
96944
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.46",
96945
- "oh-my-opencode-linux-arm64": "5.0.0-beta.46",
96946
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.46",
96947
- "oh-my-opencode-linux-x64": "5.0.0-beta.46",
96948
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.46",
96949
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.46",
96950
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.46",
96951
- "oh-my-opencode-windows-arm64": "5.0.0-beta.46",
96952
- "oh-my-opencode-windows-x64": "5.0.0-beta.46",
96953
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.46"
96942
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.48",
96943
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.48",
96944
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.48",
96945
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.48",
96946
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.48",
96947
+ "oh-my-opencode-linux-x64": "5.0.0-beta.48",
96948
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.48",
96949
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.48",
96950
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.48",
96951
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.48",
96952
+ "oh-my-opencode-windows-x64": "5.0.0-beta.48",
96953
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.48"
96954
96954
  },
96955
96955
  overrides: {
96956
96956
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -133185,6 +133185,9 @@ async function enqueueFallbackMailboxWake(input) {
133185
133185
  dedupeKey: `team-live-delivery-fallback:${input.messageId}`,
133186
133186
  queueBehavior: "enqueue",
133187
133187
  durableRetry: true,
133188
+ settleMs: input.dispatchTiming?.fallbackWakeSettleMs,
133189
+ postDispatchHoldMs: input.dispatchTiming?.postDispatchHoldMs,
133190
+ queueRetryMs: input.dispatchTiming?.queueRetryMs,
133188
133191
  shouldDispatch: () => shouldDispatchFallbackMailboxWake(input),
133189
133192
  retryDispatchFailure: isPreSendConnectionFailure2,
133190
133193
  input: {
@@ -133276,7 +133279,8 @@ async function deliverLiveToRecipient(input) {
133276
133279
  reservation,
133277
133280
  config: config2,
133278
133281
  directory,
133279
- settleMs
133282
+ settleMs,
133283
+ dispatchTiming
133280
133284
  } = input;
133281
133285
  const recipientSessionId = recipientMember.sessionId;
133282
133286
  if (recipientMember.pendingInjectedMessageIds.length > 0) {
@@ -133294,7 +133298,8 @@ async function deliverLiveToRecipient(input) {
133294
133298
  teamRunId,
133295
133299
  recipientName,
133296
133300
  messageId: message.messageId,
133297
- config: config2
133301
+ config: config2,
133302
+ dispatchTiming
133298
133303
  });
133299
133304
  }
133300
133305
  return;
@@ -133337,6 +133342,7 @@ async function deliverLiveToRecipient(input) {
133337
133342
  source: "team-live-delivery",
133338
133343
  queueBehavior: "defer",
133339
133344
  settleMs,
133345
+ postDispatchHoldMs: dispatchTiming?.postDispatchHoldMs,
133340
133346
  input: {
133341
133347
  path: { id: recipientSessionId },
133342
133348
  body: buildMemberPromptBody(recipientMember, envelope),
@@ -133383,7 +133389,8 @@ async function deliverLiveToRecipient(input) {
133383
133389
  teamRunId,
133384
133390
  recipientName,
133385
133391
  messageId: message.messageId,
133386
- config: config2
133392
+ config: config2,
133393
+ dispatchTiming
133387
133394
  });
133388
133395
  return;
133389
133396
  }
@@ -133472,7 +133479,8 @@ async function deliverLive(client3, message, teamRunId, deliveredTo, config2, di
133472
133479
  reservation,
133473
133480
  config: config2,
133474
133481
  directory,
133475
- settleMs: deps.liveDeliverySettleMs
133482
+ settleMs: deps.liveDeliverySettleMs,
133483
+ dispatchTiming: deps.dispatchTiming
133476
133484
  });
133477
133485
  }
133478
133486
  }
@@ -150330,7 +150338,7 @@ function getReplyListenerRuntimeSignature(config2) {
150330
150338
  // packages/openclaw-core/src/reply-listener-poll-loop.ts
150331
150339
  var PRUNE_INTERVAL_MS = 60 * 60 * 1000;
150332
150340
  // packages/openclaw-core/src/reply-listener-start.ts
150333
- import { dirname as dirname46, join as join127 } from "path";
150341
+ import { dirname as dirname46, join as join128 } from "path";
150334
150342
  import { fileURLToPath as fileURLToPath7 } from "url";
150335
150343
 
150336
150344
  // packages/openclaw-core/src/reply-listener-spawn.ts
@@ -150339,6 +150347,7 @@ init_runtime();
150339
150347
  // packages/openclaw-core/src/reply-listener-process.ts
150340
150348
  init_runtime();
150341
150349
  import { readFileSync as readFileSync71 } from "fs";
150350
+ import { join as join127 } from "path";
150342
150351
  var REPLY_LISTENER_DAEMON_IDENTITY_MARKER = "--openclaw-reply-listener-daemon";
150343
150352
  var REPLY_LISTENER_DAEMON_ENV_ALLOWLIST = [
150344
150353
  "PATH",
@@ -150372,6 +150381,22 @@ var REPLY_LISTENER_DAEMON_ENV_ALLOWLIST = [
150372
150381
  "windir",
150373
150382
  "COMSPEC"
150374
150383
  ];
150384
+ async function windowsProcessCommandLineHasMarker(pid, deps) {
150385
+ const systemRoot = process.env.SystemRoot ?? process.env.SYSTEMROOT ?? "C:\\Windows";
150386
+ const powershell = join127(systemRoot, "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
150387
+ const processInfo = deps.spawn([
150388
+ powershell,
150389
+ "-NoProfile",
150390
+ "-NonInteractive",
150391
+ "-Command",
150392
+ `Get-CimInstance Win32_Process -Filter "ProcessId=${pid}" | Select-Object -ExpandProperty CommandLine`
150393
+ ], { stdout: "pipe", stderr: "ignore" });
150394
+ const stdout = await new Response(processInfo.stdout).text();
150395
+ await processInfo.exited;
150396
+ if (processInfo.exitCode !== 0)
150397
+ return false;
150398
+ return stdout.includes(REPLY_LISTENER_DAEMON_IDENTITY_MARKER);
150399
+ }
150375
150400
  function ignoreReplyListenerProcessProbeError(error) {
150376
150401
  if (error instanceof Error)
150377
150402
  return;
@@ -150407,6 +150432,9 @@ async function isReplyListenerDaemonProcessWithDeps(pid, deps) {
150407
150432
  const cmdline = readProcCmdline(pid);
150408
150433
  return cmdline.includes(REPLY_LISTENER_DAEMON_IDENTITY_MARKER);
150409
150434
  }
150435
+ if (platform2 === "win32") {
150436
+ return await windowsProcessCommandLineHasMarker(pid, deps);
150437
+ }
150410
150438
  const processInfo = deps.spawn(["ps", "-p", String(pid), "-o", "args="], {
150411
150439
  stdout: "pipe",
150412
150440
  stderr: "ignore"
@@ -150572,7 +150600,7 @@ function createStartFailureResult(message, state3) {
150572
150600
  }
150573
150601
  function resolveReplyListenerDaemonScript(currentFileUrl) {
150574
150602
  const currentFilePath = fileURLToPath7(currentFileUrl);
150575
- return currentFilePath.endsWith(".ts") ? join127(dirname46(currentFilePath), "daemon.ts") : join127(dirname46(currentFilePath), "daemon.js");
150603
+ return currentFilePath.endsWith(".ts") ? join128(dirname46(currentFilePath), "daemon.ts") : join128(dirname46(currentFilePath), "daemon.js");
150576
150604
  }
150577
150605
  async function startReplyListener(config2) {
150578
150606
  const normalizedConfig = getNormalizedReplyListenerConfig(config2);
@@ -150996,12 +151024,12 @@ async function createRuntimeSkillSourceServer(options, runtimeEnv = runtime6) {
150996
151024
  }
150997
151025
  // packages/claude-code-compat-core/src/features/claude-code-mcp-loader/loader.ts
150998
151026
  import { existsSync as existsSync104, readFileSync as readFileSync72 } from "fs";
150999
- import { join as join128 } from "path";
151027
+ import { join as join129 } from "path";
151000
151028
  import { homedir as homedir26 } from "os";
151001
151029
  function resolveMcpLoaderContext(options = {}) {
151002
151030
  const cwd = options.cwd ?? process.cwd();
151003
151031
  const homeDir = options.homeDir ?? getHomeDir();
151004
- const claudeConfigDir = options.claudeConfigDir ?? (options.homeDir === undefined ? getClaudeConfigDir3() : join128(homeDir, ".claude"));
151032
+ const claudeConfigDir = options.claudeConfigDir ?? (options.homeDir === undefined ? getClaudeConfigDir3() : join129(homeDir, ".claude"));
151005
151033
  return { cwd, homeDir, claudeConfigDir };
151006
151034
  }
151007
151035
  var mcpLoaderInternals = {
@@ -151010,10 +151038,10 @@ var mcpLoaderInternals = {
151010
151038
  function getMcpConfigPaths(context) {
151011
151039
  const { claudeConfigDir, homeDir, cwd } = context;
151012
151040
  return [
151013
- { path: join128(homeDir, ".claude.json"), scope: "user" },
151014
- { path: join128(claudeConfigDir, ".mcp.json"), scope: "user" },
151015
- { path: join128(cwd, ".mcp.json"), scope: "project" },
151016
- { path: join128(cwd, ".claude", ".mcp.json"), scope: "local" }
151041
+ { path: join129(homeDir, ".claude.json"), scope: "user" },
151042
+ { path: join129(claudeConfigDir, ".mcp.json"), scope: "user" },
151043
+ { path: join129(cwd, ".mcp.json"), scope: "project" },
151044
+ { path: join129(cwd, ".claude", ".mcp.json"), scope: "local" }
151017
151045
  ];
151018
151046
  }
151019
151047
  function getHomeDir() {
@@ -160532,13 +160560,13 @@ createHephaestusAgent.mode = MODE9;
160532
160560
  // packages/omo-opencode/src/agents/builtin-agents/resolve-file-uri.ts
160533
160561
  import { existsSync as existsSync105, readFileSync as readFileSync73 } from "fs";
160534
160562
  import { homedir as homedir27 } from "os";
160535
- import { isAbsolute as isAbsolute18, join as join129, resolve as resolve33 } from "path";
160563
+ import { isAbsolute as isAbsolute18, join as join130, resolve as resolve33 } from "path";
160536
160564
  init_logger2();
160537
160565
  var ALLOWED_HOME_SUBDIRS = [
160538
- join129(homedir27(), ".config", "opencode"),
160539
- join129(homedir27(), ".config", "oh-my-openagent"),
160540
- join129(homedir27(), ".omo"),
160541
- join129(homedir27(), ".opencode")
160566
+ join130(homedir27(), ".config", "opencode"),
160567
+ join130(homedir27(), ".config", "oh-my-openagent"),
160568
+ join130(homedir27(), ".omo"),
160569
+ join130(homedir27(), ".opencode")
160542
160570
  ];
160543
160571
  function isWithinAllowedPaths(filePath, projectRoot) {
160544
160572
  if (isWithinProject(filePath, projectRoot))
@@ -163296,7 +163324,7 @@ async function applyAgentConfig(params) {
163296
163324
  }
163297
163325
  // packages/claude-code-compat-core/src/features/claude-code-command-loader/loader.ts
163298
163326
  import { promises as fs21 } from "fs";
163299
- import { join as join130, basename as basename21 } from "path";
163327
+ import { join as join131, basename as basename21 } from "path";
163300
163328
 
163301
163329
  // packages/claude-code-compat-core/src/features/claude-code-command-loader/loader-cache.ts
163302
163330
  var commandLoaderCache = new Map;
@@ -163344,7 +163372,7 @@ async function loadCommandsFromDir(commandsDir, scope, visited = new Set, prefix
163344
163372
  continue;
163345
163373
  if (entry.name.startsWith("."))
163346
163374
  continue;
163347
- const subDirPath = join130(commandsDir, entry.name);
163375
+ const subDirPath = join131(commandsDir, entry.name);
163348
163376
  const subPrefix = prefix ? `${prefix}/${entry.name}` : entry.name;
163349
163377
  const subCommands = await loadCommandsFromDir(subDirPath, scope, visited, subPrefix);
163350
163378
  commands2.push(...subCommands);
@@ -163352,7 +163380,7 @@ async function loadCommandsFromDir(commandsDir, scope, visited = new Set, prefix
163352
163380
  }
163353
163381
  if (!isMarkdownFile(entry))
163354
163382
  continue;
163355
- const commandPath = join130(commandsDir, entry.name);
163383
+ const commandPath = join131(commandsDir, entry.name);
163356
163384
  const baseCommandName = basename21(entry.name, ".md");
163357
163385
  const commandName = prefix ? `${prefix}/${baseCommandName}` : baseCommandName;
163358
163386
  try {
@@ -163415,12 +163443,12 @@ function commandsToRecord(commands2) {
163415
163443
  return result;
163416
163444
  }
163417
163445
  async function loadUserCommands() {
163418
- const userCommandsDir = join130(getClaudeConfigDir3(), "commands");
163446
+ const userCommandsDir = join131(getClaudeConfigDir3(), "commands");
163419
163447
  const commands2 = await loadCommandsFromDir(userCommandsDir, "user");
163420
163448
  return commandsToRecord(commands2);
163421
163449
  }
163422
163450
  async function loadProjectCommands(directory) {
163423
- const projectCommandsDir = join130(directory ?? process.cwd(), ".claude", "commands");
163451
+ const projectCommandsDir = join131(directory ?? process.cwd(), ".claude", "commands");
163424
163452
  const commands2 = await loadCommandsFromDir(projectCommandsDir, "project");
163425
163453
  return commandsToRecord(commands2);
163426
163454
  }
@@ -171361,7 +171389,7 @@ function createChatHeadersHandler(args) {
171361
171389
  }
171362
171390
 
171363
171391
  // packages/omo-opencode/src/plugin/ultrawork-db-model-override.ts
171364
- import { join as join131 } from "path";
171392
+ import { join as join132 } from "path";
171365
171393
  import { existsSync as existsSync107 } from "fs";
171366
171394
  async function importBunSqlite() {
171367
171395
  if (typeof globalThis.Bun === "undefined") {
@@ -171378,7 +171406,7 @@ async function importBunSqlite() {
171378
171406
  }
171379
171407
  }
171380
171408
  function getDbPath() {
171381
- return join131(getDataDir(), "opencode", "opencode.db");
171409
+ return join132(getDataDir(), "opencode", "opencode.db");
171382
171410
  }
171383
171411
  var MAX_MICROTASK_RETRIES = 10;
171384
171412
  function logCaughtDbError(message, metadata, error) {
@@ -174070,7 +174098,7 @@ init_logger2();
174070
174098
  // packages/omo-opencode/src/shared/omo-process-sweep.ts
174071
174099
  import { fileURLToPath as fileURLToPath9 } from "url";
174072
174100
  // packages/utils/src/process-sweep/sweeper.ts
174073
- import { join as join134 } from "path";
174101
+ import { join as join135 } from "path";
174074
174102
 
174075
174103
  // packages/utils/src/process-sweep/family-sweeper.ts
174076
174104
  import { existsSync as existsSync108, mkdirSync as mkdirSync25, statSync as statSync16, utimesSync, writeFileSync as writeFileSync27 } from "fs";
@@ -174324,7 +174352,7 @@ function delay6(ms) {
174324
174352
  // packages/utils/src/process-sweep/lsp-daemon-family.ts
174325
174353
  import { readFileSync as readFileSync75, readdirSync as readdirSync30 } from "fs";
174326
174354
  import { homedir as homedir28 } from "os";
174327
- import { basename as basename23, join as join132, resolve as resolve36 } from "path";
174355
+ import { basename as basename23, join as join133, resolve as resolve36 } from "path";
174328
174356
 
174329
174357
  // packages/utils/src/process-sweep/lsp-daemon-owner-attestation.ts
174330
174358
  import { readFile as readFile13 } from "fs/promises";
@@ -174441,7 +174469,7 @@ function resolveLspDaemonBaseDir(options = {}) {
174441
174469
  if (override !== undefined && override.trim().length > 0)
174442
174470
  return resolve36(override);
174443
174471
  const homeDir = options.homeDir ?? env["HOME"] ?? env["USERPROFILE"] ?? homedir28();
174444
- return join132(homeDir, ".omo", "lsp-daemon");
174472
+ return join133(homeDir, ".omo", "lsp-daemon");
174445
174473
  }
174446
174474
  var VERSION_ENTRY_PATTERN = /^v([A-Za-z0-9][A-Za-z0-9._+-]{0,127})$/;
174447
174475
  function listLspDaemonVersionDirs(baseDir) {
@@ -174460,12 +174488,12 @@ function listLspDaemonVersionDirs(baseDir) {
174460
174488
  const version = VERSION_ENTRY_PATTERN.exec(entry.name)?.[1];
174461
174489
  if (version === undefined)
174462
174490
  continue;
174463
- versions.push({ dir: join132(baseDir, entry.name), version });
174491
+ versions.push({ dir: join133(baseDir, entry.name), version });
174464
174492
  }
174465
174493
  return versions.sort((left, right) => left.version.localeCompare(right.version));
174466
174494
  }
174467
174495
  function readLspDaemonOwnerTarget(versionDir) {
174468
- const ownerPath = join132(versionDir, "daemon.owner");
174496
+ const ownerPath = join133(versionDir, "daemon.owner");
174469
174497
  let raw;
174470
174498
  try {
174471
174499
  raw = requireOwnerText(ownerPath);
@@ -174476,7 +174504,7 @@ function readLspDaemonOwnerTarget(versionDir) {
174476
174504
  const owner = parseLspDaemonOwner(JSON.parse(raw));
174477
174505
  if (owner === null)
174478
174506
  return null;
174479
- return { authPath: join132(versionDir, "daemon.auth"), owner, ownerPath, pid: owner.pid };
174507
+ return { authPath: join133(versionDir, "daemon.auth"), owner, ownerPath, pid: owner.pid };
174480
174508
  } catch {
174481
174509
  return null;
174482
174510
  }
@@ -174648,33 +174676,33 @@ function matchLspDaemonProxyCommand(command, roots, platform2) {
174648
174676
  // packages/utils/src/process-sweep/roots.ts
174649
174677
  import { existsSync as existsSync109, readdirSync as readdirSync31, realpathSync as realpathSync20 } from "fs";
174650
174678
  import { homedir as homedir29 } from "os";
174651
- import { join as join133, resolve as resolve37 } from "path";
174679
+ import { join as join134, resolve as resolve37 } from "path";
174652
174680
  function discoverOmoOwnedRoots(options = {}) {
174653
174681
  const env = options.env ?? process.env;
174654
174682
  const homeDir = options.homeDir ?? env["HOME"] ?? env["USERPROFILE"] ?? homedir29();
174655
174683
  const roots = new Set;
174656
- addRoot(roots, join133(homeDir, ".claude", "omo"));
174684
+ addRoot(roots, join134(homeDir, ".claude", "omo"));
174657
174685
  addRoot(roots, options.pluginRoot);
174658
174686
  for (const root of options.extraRoots ?? [])
174659
174687
  addRoot(roots, root);
174660
- for (const root of readCodexPluginCacheRoots(options.codexHome ?? env["CODEX_HOME"] ?? join133(homeDir, ".codex"))) {
174688
+ for (const root of readCodexPluginCacheRoots(options.codexHome ?? env["CODEX_HOME"] ?? join134(homeDir, ".codex"))) {
174661
174689
  addRoot(roots, root);
174662
174690
  }
174663
174691
  return [...roots];
174664
174692
  }
174665
174693
  function readCodexPluginCacheRoots(codexHome) {
174666
- const cacheRoot = join133(codexHome, "plugins", "cache");
174694
+ const cacheRoot = join134(codexHome, "plugins", "cache");
174667
174695
  if (!existsSync109(cacheRoot))
174668
174696
  return [];
174669
174697
  const roots = [];
174670
174698
  for (const publisher of safeReadDir(cacheRoot)) {
174671
174699
  if (!OMO_CODEX_PLUGIN_CACHE_PUBLISHERS.has(publisher))
174672
174700
  continue;
174673
- const omoRoot = join133(cacheRoot, publisher, "omo");
174701
+ const omoRoot = join134(cacheRoot, publisher, "omo");
174674
174702
  if (!existsSync109(omoRoot))
174675
174703
  continue;
174676
174704
  for (const version of safeReadDir(omoRoot))
174677
- roots.push(join133(omoRoot, version));
174705
+ roots.push(join134(omoRoot, version));
174678
174706
  }
174679
174707
  return roots;
174680
174708
  }
@@ -174714,7 +174742,7 @@ var OMO_CODEX_PLUGIN_CACHE_PUBLISHERS = new Set(["sisyphuslabs"]);
174714
174742
  // packages/utils/src/process-sweep/sweeper.ts
174715
174743
  var LSP_PROXY_SWEEP_STAMP_FILE = "lsp-proxy-sweep.stamp";
174716
174744
  async function sweepOrphanedLspDaemonProxies(options = {}) {
174717
- const stampFile = join134(resolveLspDaemonBaseDir(options), LSP_PROXY_SWEEP_STAMP_FILE);
174745
+ const stampFile = join135(resolveLspDaemonBaseDir(options), LSP_PROXY_SWEEP_STAMP_FILE);
174718
174746
  const ownedRoots = options.ownedRoots ?? discoverOmoOwnedRoots(options);
174719
174747
  const result = await runProcessFamilySweep({
174720
174748
  familyLabel: "lsp-daemon proxy sweep",
@@ -174733,7 +174761,7 @@ async function sweepOrphanedLspDaemonProxies(options = {}) {
174733
174761
  var LSP_DAEMON_SWEEP_STAMP_FILE = "lsp-daemon-sweep.stamp";
174734
174762
  async function sweepStaleLspDaemonVersions(options = {}) {
174735
174763
  const baseDir = resolveLspDaemonBaseDir(options);
174736
- const stampFile = join134(baseDir, LSP_DAEMON_SWEEP_STAMP_FILE);
174764
+ const stampFile = join135(baseDir, LSP_DAEMON_SWEEP_STAMP_FILE);
174737
174765
  const currentVersion = resolveCurrentLspDaemonVersion(options);
174738
174766
  const dryRun = options.dryRun === true;
174739
174767
  if (currentVersion === undefined) {
@@ -174806,21 +174834,21 @@ function defaultPluginRoot() {
174806
174834
  init_atomic_write();
174807
174835
  init_xdg_data_dir();
174808
174836
  import { existsSync as existsSync110, mkdirSync as mkdirSync26, readFileSync as readFileSync76 } from "fs";
174809
- import { basename as basename24, join as join135 } from "path";
174837
+ import { basename as basename24, join as join136 } from "path";
174810
174838
  var POSTHOG_ACTIVITY_STATE_FILE = "posthog-activity.json";
174811
174839
  function resolveTelemetryStateDir(product, options = {}) {
174812
174840
  const dataDir = resolveXdgDataDir(product.cacheDirName, {
174813
174841
  env: options.env,
174814
174842
  osProvider: options.osProvider
174815
174843
  });
174816
- const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join135(options.env.XDG_DATA_HOME, product.cacheDirName);
174844
+ const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join136(options.env.XDG_DATA_HOME, product.cacheDirName);
174817
174845
  if (dataDir === xdgStateDir || xdgStateDir === undefined && basename24(dataDir) === product.cacheDirName) {
174818
174846
  return dataDir;
174819
174847
  }
174820
- return join135(dataDir, product.cacheDirName);
174848
+ return join136(dataDir, product.cacheDirName);
174821
174849
  }
174822
174850
  function getTelemetryActivityStateFilePath(stateDir) {
174823
- return join135(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
174851
+ return join136(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
174824
174852
  }
174825
174853
  function getDailyActiveCaptureState(input) {
174826
174854
  const state3 = readPostHogActivityState(input.stateDir, input.diagnostics);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.46",
3
+ "version": "5.0.0-beta.48",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -184,7 +184,7 @@
184
184
  "zod": "^4.4.3"
185
185
  },
186
186
  "devDependencies": {
187
- "@code-yeongyu/senpi": "2026.9.7",
187
+ "@code-yeongyu/senpi": "2026.9.7-2",
188
188
  "@oh-my-opencode/agents-md-core": "workspace:*",
189
189
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
190
190
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -225,18 +225,18 @@
225
225
  "typescript": "^7.0.2"
226
226
  },
227
227
  "optionalDependencies": {
228
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.46",
229
- "oh-my-opencode-darwin-x64": "5.0.0-beta.46",
230
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.46",
231
- "oh-my-opencode-linux-arm64": "5.0.0-beta.46",
232
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.46",
233
- "oh-my-opencode-linux-x64": "5.0.0-beta.46",
234
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.46",
235
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.46",
236
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.46",
237
- "oh-my-opencode-windows-arm64": "5.0.0-beta.46",
238
- "oh-my-opencode-windows-x64": "5.0.0-beta.46",
239
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.46"
228
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.48",
229
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.48",
230
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.48",
231
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.48",
232
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.48",
233
+ "oh-my-opencode-linux-x64": "5.0.0-beta.48",
234
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.48",
235
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.48",
236
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.48",
237
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.48",
238
+ "oh-my-opencode-windows-x64": "5.0.0-beta.48",
239
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.48"
240
240
  },
241
241
  "overrides": {
242
242
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -6127,14 +6127,17 @@ function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
6127
6127
  socket.connect(paths.socket);
6128
6128
  });
6129
6129
  }
6130
- function spawnDaemonProcess(paths) {
6130
+ function spawnDaemonProcess(paths, deps = {}) {
6131
6131
  mkdirSync3(dirname10(paths.log), { recursive: true });
6132
6132
  const logFd = openSync2(paths.log, "a");
6133
6133
  try {
6134
- const child = spawn2(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
6134
+ const spawnDaemonChild = deps.spawn ?? spawn2;
6135
+ const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
6136
+ const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
6135
6137
  detached: true,
6136
6138
  stdio: ["ignore", logFd, logFd],
6137
- windowsHide: true
6139
+ windowsHide: true,
6140
+ env: { ...process.env, BUN_BE_BUN: "1" }
6138
6141
  });
6139
6142
  child.once("spawn", () => closeSync2(logFd));
6140
6143
  child.once("error", (error) => {