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

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 (134) hide show
  1. package/dist/cli/index.js +75 -26
  2. package/dist/cli-node/index.js +75 -26
  3. package/dist/config/schema/background-task.d.ts +1 -0
  4. package/dist/config/schema/oh-my-opencode-config.d.ts +1 -0
  5. package/dist/features/background-agent/constants.d.ts +0 -7
  6. package/dist/features/background-agent/manager.d.ts +2 -1
  7. package/dist/features/background-agent/parent-wake-dispatched-tracker.d.ts +0 -1
  8. package/dist/features/background-agent/subagent-spawn-limits.d.ts +8 -0
  9. package/dist/features/task-toast-manager/manager.d.ts +0 -24
  10. package/dist/hooks/anthropic-context-window-limit-recovery/message-storage-directory.d.ts +0 -3
  11. package/dist/hooks/anthropic-context-window-limit-recovery/state.d.ts +1 -0
  12. package/dist/hooks/anthropic-context-window-limit-recovery/storage/empty-messages.d.ts +0 -1
  13. package/dist/hooks/claude-code-hooks/session-hook-state.d.ts +1 -0
  14. package/dist/hooks/claude-code-hooks/stop.d.ts +2 -0
  15. package/dist/hooks/claude-code-hooks/todo.d.ts +0 -1
  16. package/dist/hooks/claude-code-hooks/transcript.d.ts +2 -0
  17. package/dist/hooks/fsync-skip-warning/index.d.ts +4 -0
  18. package/dist/hooks/hashline-edit-diff-enhancer/hook.d.ts +1 -0
  19. package/dist/hooks/hashline-edit-diff-enhancer/pending-captures.d.ts +13 -0
  20. package/dist/hooks/keyword-detector/hook.d.ts +7 -0
  21. package/dist/hooks/keyword-detector/ultrawork/source-detector.d.ts +0 -1
  22. package/dist/hooks/model-fallback/hook.d.ts +1 -1
  23. package/dist/index.js +439 -218
  24. package/dist/oh-my-opencode.schema.json +5 -0
  25. package/dist/plugin-dispose.d.ts +3 -0
  26. package/dist/shared/agent-tool-restrictions.d.ts +0 -1
  27. package/dist/tools/delegate-task/sync-session-cleanup.d.ts +3 -0
  28. package/dist/tools/delegate-task/sync-session-poller.d.ts +1 -0
  29. package/dist/tools/delegate-task/types.d.ts +1 -0
  30. package/dist/tui.js +56 -3
  31. package/package.json +15 -15
  32. package/packages/git-bash-mcp/dist/cli.js +1 -0
  33. package/packages/lsp-core/src/lsp/client-wrapper.test.ts +97 -0
  34. package/packages/lsp-core/src/lsp/client-wrapper.ts +21 -6
  35. package/packages/lsp-core/src/lsp/constants.ts +5 -0
  36. package/packages/lsp-core/src/lsp/errors.ts +15 -0
  37. package/packages/lsp-core/src/lsp/manager-lifecycle.test.ts +262 -0
  38. package/packages/lsp-core/src/lsp/manager.ts +106 -13
  39. package/packages/lsp-core/src/lsp/workspace-markers.ts +18 -1
  40. package/packages/lsp-core/src/mcp.ts +3 -0
  41. package/packages/lsp-daemon/dist/cli.js +114 -18
  42. package/packages/lsp-daemon/dist/client.js +114 -18
  43. package/packages/lsp-daemon/dist/index.js +114 -18
  44. package/packages/lsp-daemon/dist/proxy.js +3 -0
  45. package/packages/lsp-tools-mcp/dist/cli.js +114 -18
  46. package/packages/lsp-tools-mcp/dist/lsp/manager.js +93 -12
  47. package/packages/lsp-tools-mcp/dist/mcp.js +114 -18
  48. package/packages/lsp-tools-mcp/dist/tools.js +113 -18
  49. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  50. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  51. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  52. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +31 -2
  53. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +31 -2
  54. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  55. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +12 -0
  56. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable-idle.test.ts +47 -0
  57. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  58. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  59. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  60. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  61. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  62. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  63. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  64. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +113 -18
  65. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  66. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  67. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  68. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  69. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  70. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  71. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  72. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  73. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  74. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  75. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +2 -2
  76. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  77. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -0
  78. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +2 -0
  79. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +100 -54
  80. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  81. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +9 -6
  82. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  83. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +7 -10
  84. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +3 -2
  85. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +15 -0
  86. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +50 -0
  87. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  88. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  89. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +2 -0
  90. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +16 -5
  91. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +11 -14
  92. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +3 -2
  93. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +73 -0
  94. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +44 -1
  95. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +25 -0
  96. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +7 -3
  97. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +45 -2
  98. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +20 -0
  99. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +74 -0
  100. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  105. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  106. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  107. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  108. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  109. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  110. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  111. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  112. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  113. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  114. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  115. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  116. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  117. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  118. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +1 -1
  119. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  120. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  121. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  122. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  123. package/packages/omo-codex/plugin/package-lock.json +13 -13
  124. package/packages/omo-codex/plugin/package.json +1 -1
  125. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  126. package/dist/hooks/ralph-loop/completion-promise-detector-test-input.d.ts +0 -11
  127. package/dist/hooks/ralph-loop/loop-session-recovery.d.ts +0 -7
  128. package/dist/tools/call-omo-agent/message-storage-directory.d.ts +0 -1
  129. package/dist/tools/delegate-task/model-string-parser.d.ts +0 -1
  130. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  131. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  132. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  133. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  134. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
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.30",
57
+ version: "5.0.0-beta.31",
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",
@@ -235,7 +235,7 @@ var init_package = __esm(() => {
235
235
  zod: "^4.4.3"
236
236
  },
237
237
  devDependencies: {
238
- "@code-yeongyu/senpi": "2026.8.30-3",
238
+ "@code-yeongyu/senpi": "2026.8.31",
239
239
  "@oh-my-opencode/agents-md-core": "workspace:*",
240
240
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
241
241
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -276,18 +276,18 @@ var init_package = __esm(() => {
276
276
  typescript: "^7.0.2"
277
277
  },
278
278
  optionalDependencies: {
279
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.30",
280
- "oh-my-opencode-darwin-x64": "5.0.0-beta.30",
281
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.30",
282
- "oh-my-opencode-linux-arm64": "5.0.0-beta.30",
283
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.30",
284
- "oh-my-opencode-linux-x64": "5.0.0-beta.30",
285
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.30",
286
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.30",
287
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.30",
288
- "oh-my-opencode-windows-arm64": "5.0.0-beta.30",
289
- "oh-my-opencode-windows-x64": "5.0.0-beta.30",
290
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.30"
279
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.31",
280
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.31",
281
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.31",
282
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.31",
283
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.31",
284
+ "oh-my-opencode-linux-x64": "5.0.0-beta.31",
285
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.31",
286
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.31",
287
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.31",
288
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.31",
289
+ "oh-my-opencode-windows-x64": "5.0.0-beta.31",
290
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.31"
291
291
  },
292
292
  overrides: {
293
293
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -305,7 +305,7 @@ var init_package = __esm(() => {
305
305
  "@code-yeongyu/comment-checker"
306
306
  ],
307
307
  patchedDependencies: {
308
- "@code-yeongyu/senpi@2026.8.30-3": "patches/@code-yeongyu%2Fsenpi@2026.8.30-3.patch"
308
+ "@code-yeongyu/senpi@2026.8.31": "patches/@code-yeongyu%2Fsenpi@2026.8.31.patch"
309
309
  }
310
310
  };
311
311
  });
@@ -20229,7 +20229,7 @@ var init_git_master = __esm(() => {
20229
20229
  });
20230
20230
 
20231
20231
  // packages/omo-config-core/src/schema/memory.ts
20232
- var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
20232
+ var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
20233
20233
  var init_memory = __esm(() => {
20234
20234
  init_zod();
20235
20235
  OmoMemoryReflectionTriggerSchema = object({
@@ -20251,6 +20251,14 @@ var init_memory = __esm(() => {
20251
20251
  OmoMemorySearchSchema = object({
20252
20252
  enabled: boolean2().default(true)
20253
20253
  }).strict();
20254
+ OmoMemoryRecallSchema = object({
20255
+ enabled: boolean2().default(true),
20256
+ max_items: number2().int().min(1).max(5).default(2),
20257
+ budget_tokens: number2().int().positive().default(600),
20258
+ excerpt_chars: number2().int().positive().default(200),
20259
+ min_score: number2().optional(),
20260
+ exclude: array(string2()).default([])
20261
+ }).strict();
20254
20262
  OmoMemoryNudgeSchema = object({
20255
20263
  enabled: boolean2().default(true),
20256
20264
  every_user_turns: number2().int().min(1).default(10)
@@ -20297,6 +20305,14 @@ var init_memory = __esm(() => {
20297
20305
  OmoMemorySearchLayerSchema = object({
20298
20306
  enabled: boolean2().optional()
20299
20307
  }).strict();
20308
+ OmoMemoryRecallLayerSchema = object({
20309
+ enabled: boolean2().optional(),
20310
+ max_items: number2().int().min(1).max(5).optional(),
20311
+ budget_tokens: number2().int().positive().optional(),
20312
+ excerpt_chars: number2().int().positive().optional(),
20313
+ min_score: number2().optional(),
20314
+ exclude: array(string2()).optional()
20315
+ }).strict();
20300
20316
  OmoMemoryNudgeLayerSchema = object({
20301
20317
  enabled: boolean2().optional(),
20302
20318
  every_user_turns: number2().int().min(1).optional()
@@ -20336,6 +20352,7 @@ var init_memory = __esm(() => {
20336
20352
  write_notice: OmoMemoryWriteNoticeLayerSchema.optional(),
20337
20353
  sync: OmoMemorySyncLayerSchema.optional(),
20338
20354
  search: OmoMemorySearchLayerSchema.optional(),
20355
+ recall: OmoMemoryRecallLayerSchema.optional(),
20339
20356
  compile_warn_tokens: number2().int().positive().optional()
20340
20357
  }).strict();
20341
20358
  OmoMemorySettingsSchema = object({
@@ -20365,6 +20382,13 @@ var init_memory = __esm(() => {
20365
20382
  write_notice: OmoMemoryWriteNoticeSchema.default({ enabled: true }),
20366
20383
  sync: OmoMemorySyncSchema.default({ enabled: true }),
20367
20384
  search: OmoMemorySearchSchema.default({ enabled: true }),
20385
+ recall: OmoMemoryRecallSchema.default({
20386
+ enabled: true,
20387
+ max_items: 2,
20388
+ budget_tokens: 600,
20389
+ excerpt_chars: 200,
20390
+ exclude: []
20391
+ }),
20368
20392
  compile_warn_tokens: number2().int().positive().default(30000),
20369
20393
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
20370
20394
  }).strict();
@@ -20381,6 +20405,7 @@ var init_memory = __esm(() => {
20381
20405
  write_notice: OmoMemoryWriteNoticeLayerSchema.optional(),
20382
20406
  sync: OmoMemorySyncLayerSchema.optional(),
20383
20407
  search: OmoMemorySearchLayerSchema.optional(),
20408
+ recall: OmoMemoryRecallLayerSchema.optional(),
20384
20409
  compile_warn_tokens: number2().int().positive().optional(),
20385
20410
  agents: record(string2(), OmoMemoryAgentOverridesSchema).optional()
20386
20411
  }).strict();
@@ -20414,11 +20439,11 @@ function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism
20414
20439
  const record2 = record(string2(), unknown()).parse(input);
20415
20440
  return OmoTaskSettingsSchema.parse({
20416
20441
  ...record2,
20417
- residency_max_children: record2["residency_max_children"] ?? Math.max(8, resolveParallelism() * 3),
20442
+ residency_max_children: record2["residency_max_children"] ?? Math.min(DEFAULT_RESIDENCY_MAX_CHILDREN, Math.max(8, resolveParallelism() * 2)),
20418
20443
  global_concurrency: record2["global_concurrency"] ?? Math.max(8, resolveParallelism() * 2)
20419
20444
  });
20420
20445
  }
20421
- var ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
20446
+ var DEFAULT_RESIDENCY_MAX_CHILDREN = 16, ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
20422
20447
  var init_task = __esm(() => {
20423
20448
  init_zod();
20424
20449
  ResidencyMaxChildrenInputSchema = union([number2().int().nonnegative(), literal("unlimited")]);
@@ -23980,7 +24005,6 @@ function extractPromptFailureMessage(error51) {
23980
24005
  try {
23981
24006
  return JSON.stringify(error51);
23982
24007
  } catch (stringifyError) {
23983
- stringifyError instanceof Error;
23984
24008
  return "";
23985
24009
  }
23986
24010
  }
@@ -24196,6 +24220,33 @@ var init_agent_model_requirements = __esm(() => {
24196
24220
  { providers: ["opencode-go"], model: "glm-5.2" }
24197
24221
  ]
24198
24222
  },
24223
+ "omo-senpi-code-reviewer": {
24224
+ fallbackChain: [
24225
+ { providers: ["openai", "openai-codex"], model: "gpt-5.6-terra", variant: "medium" },
24226
+ { providers: ["github-copilot"], model: "gpt-5.6-terra", variant: "medium" },
24227
+ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
24228
+ { providers: ["opencode-go"], model: "glm-5.2" },
24229
+ { providers: ["kimi-for-coding"], model: "kimi-k3" }
24230
+ ]
24231
+ },
24232
+ "omo-senpi-qa-executor": {
24233
+ fallbackChain: [
24234
+ { providers: ["openai", "openai-codex"], model: "gpt-5.6-luna", variant: "high" },
24235
+ { providers: ["github-copilot"], model: "gpt-5.6-luna", variant: "high" },
24236
+ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
24237
+ { providers: ["opencode-go"], model: "glm-5.2" },
24238
+ { providers: ["kimi-for-coding"], model: "kimi-k3" }
24239
+ ]
24240
+ },
24241
+ "omo-senpi-gate-reviewer": {
24242
+ fallbackChain: [
24243
+ { providers: ["openai", "openai-codex"], model: "gpt-5.6-sol", variant: "low" },
24244
+ { providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "low" },
24245
+ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-5", variant: "max" },
24246
+ { providers: ["opencode-go"], model: "glm-5.2" },
24247
+ { providers: ["kimi-for-coding"], model: "kimi-k3" }
24248
+ ]
24249
+ },
24199
24250
  atlas: {
24200
24251
  fallbackChain: [
24201
24252
  { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-5" },
@@ -24702,7 +24753,7 @@ function normalizeCapabilitiesReasoningEfforts(capabilities) {
24702
24753
  }
24703
24754
  return capabilities.reasoningEfforts.map((value) => value.toLowerCase());
24704
24755
  }
24705
- function resolveField(normalized, familyCaps, ladder, familyKnown, metadataOverride, familyAliases) {
24756
+ function resolveField(normalized, familyCaps, familyKnown, metadataOverride, familyAliases) {
24706
24757
  const aliased = familyAliases?.[normalized];
24707
24758
  if (aliased && (metadataOverride?.includes(aliased) || familyCaps?.includes(aliased))) {
24708
24759
  return { value: aliased, reason: "unsupported-by-model-family" };
@@ -24737,7 +24788,7 @@ function resolveCompatibleModelSettings(input) {
24737
24788
  let variant = input.desired.variant;
24738
24789
  if (variant !== undefined) {
24739
24790
  const normalized = variant.toLowerCase();
24740
- const resolved = resolveField(normalized, family?.variants, REASONING_LEVELS2, familyKnown, metadataVariants);
24791
+ const resolved = resolveField(normalized, family?.variants, familyKnown, metadataVariants);
24741
24792
  if (resolved.value !== normalized && resolved.reason) {
24742
24793
  changes.push({ field: "variant", from: variant, to: resolved.value, reason: resolved.reason });
24743
24794
  }
@@ -24746,7 +24797,7 @@ function resolveCompatibleModelSettings(input) {
24746
24797
  let reasoningEffort = input.desired.reasoningEffort;
24747
24798
  if (reasoningEffort !== undefined) {
24748
24799
  const normalized = reasoningEffort.toLowerCase();
24749
- const resolved = resolveField(normalized, family?.reasoningEfforts, REASONING_LEVELS2, familyKnown, metadataReasoningEfforts, family?.reasoningEffortAliases);
24800
+ const resolved = resolveField(normalized, family?.reasoningEfforts, familyKnown, metadataReasoningEfforts, family?.reasoningEffortAliases);
24750
24801
  if (resolved.value !== normalized && resolved.reason) {
24751
24802
  changes.push({ field: "reasoningEffort", from: reasoningEffort, to: resolved.value, reason: resolved.reason });
24752
24803
  }
@@ -94400,7 +94451,7 @@ var package_default2;
94400
94451
  var init_package2 = __esm(() => {
94401
94452
  package_default2 = {
94402
94453
  name: "@oh-my-opencode/omo-codex",
94403
- version: "5.0.0-beta.30",
94454
+ version: "5.0.0-beta.31",
94404
94455
  type: "module",
94405
94456
  private: true,
94406
94457
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -94840,7 +94891,6 @@ function getLocalDevVersion(directory) {
94840
94891
  const pkg = JSON.parse(content);
94841
94892
  return pkg.version ?? null;
94842
94893
  } catch (error51) {
94843
- error51 instanceof Error;
94844
94894
  return null;
94845
94895
  }
94846
94896
  }
@@ -94872,7 +94922,6 @@ function findPluginEntry(directory) {
94872
94922
  }
94873
94923
  }
94874
94924
  } catch (error51) {
94875
- error51 instanceof Error;
94876
94925
  continue;
94877
94926
  }
94878
94927
  }
@@ -94977,7 +95026,6 @@ async function getLatestVersion(channel = "latest") {
94977
95026
  const data = await response.json();
94978
95027
  return data[channel] ?? data.latest ?? null;
94979
95028
  } catch (error51) {
94980
- error51 instanceof Error;
94981
95029
  return null;
94982
95030
  } finally {
94983
95031
  clearTimeout(timeoutId);
@@ -107061,6 +107109,7 @@ var BackgroundTaskConfigSchema = exports_external.object({
107061
107109
  providerConcurrency: exports_external.record(exports_external.string(), exports_external.number().min(0)).optional(),
107062
107110
  modelConcurrency: exports_external.record(exports_external.string(), exports_external.number().min(0)).optional(),
107063
107111
  maxDepth: exports_external.number().int().min(1).optional(),
107112
+ maxLiveDescendantsPerRoot: exports_external.number().int().min(0).optional(),
107064
107113
  staleTimeoutMs: exports_external.number().min(60000).optional(),
107065
107114
  messageStalenessTimeoutMs: exports_external.number().min(60000).optional(),
107066
107115
  taskTtlMs: exports_external.number().min(300000).optional(),
@@ -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.30",
58
+ version: "5.0.0-beta.31",
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",
@@ -236,7 +236,7 @@ var init_package = __esm(() => {
236
236
  zod: "^4.4.3"
237
237
  },
238
238
  devDependencies: {
239
- "@code-yeongyu/senpi": "2026.8.30-3",
239
+ "@code-yeongyu/senpi": "2026.8.31",
240
240
  "@oh-my-opencode/agents-md-core": "workspace:*",
241
241
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
242
242
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -277,18 +277,18 @@ var init_package = __esm(() => {
277
277
  typescript: "^7.0.2"
278
278
  },
279
279
  optionalDependencies: {
280
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.30",
281
- "oh-my-opencode-darwin-x64": "5.0.0-beta.30",
282
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.30",
283
- "oh-my-opencode-linux-arm64": "5.0.0-beta.30",
284
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.30",
285
- "oh-my-opencode-linux-x64": "5.0.0-beta.30",
286
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.30",
287
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.30",
288
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.30",
289
- "oh-my-opencode-windows-arm64": "5.0.0-beta.30",
290
- "oh-my-opencode-windows-x64": "5.0.0-beta.30",
291
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.30"
280
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.31",
281
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.31",
282
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.31",
283
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.31",
284
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.31",
285
+ "oh-my-opencode-linux-x64": "5.0.0-beta.31",
286
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.31",
287
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.31",
288
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.31",
289
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.31",
290
+ "oh-my-opencode-windows-x64": "5.0.0-beta.31",
291
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.31"
292
292
  },
293
293
  overrides: {
294
294
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -306,7 +306,7 @@ var init_package = __esm(() => {
306
306
  "@code-yeongyu/comment-checker"
307
307
  ],
308
308
  patchedDependencies: {
309
- "@code-yeongyu/senpi@2026.8.30-3": "patches/@code-yeongyu%2Fsenpi@2026.8.30-3.patch"
309
+ "@code-yeongyu/senpi@2026.8.31": "patches/@code-yeongyu%2Fsenpi@2026.8.31.patch"
310
310
  }
311
311
  };
312
312
  });
@@ -20230,7 +20230,7 @@ var init_git_master = __esm(() => {
20230
20230
  });
20231
20231
 
20232
20232
  // packages/omo-config-core/src/schema/memory.ts
20233
- var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
20233
+ var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
20234
20234
  var init_memory = __esm(() => {
20235
20235
  init_zod();
20236
20236
  OmoMemoryReflectionTriggerSchema = object({
@@ -20252,6 +20252,14 @@ var init_memory = __esm(() => {
20252
20252
  OmoMemorySearchSchema = object({
20253
20253
  enabled: boolean2().default(true)
20254
20254
  }).strict();
20255
+ OmoMemoryRecallSchema = object({
20256
+ enabled: boolean2().default(true),
20257
+ max_items: number2().int().min(1).max(5).default(2),
20258
+ budget_tokens: number2().int().positive().default(600),
20259
+ excerpt_chars: number2().int().positive().default(200),
20260
+ min_score: number2().optional(),
20261
+ exclude: array(string2()).default([])
20262
+ }).strict();
20255
20263
  OmoMemoryNudgeSchema = object({
20256
20264
  enabled: boolean2().default(true),
20257
20265
  every_user_turns: number2().int().min(1).default(10)
@@ -20298,6 +20306,14 @@ var init_memory = __esm(() => {
20298
20306
  OmoMemorySearchLayerSchema = object({
20299
20307
  enabled: boolean2().optional()
20300
20308
  }).strict();
20309
+ OmoMemoryRecallLayerSchema = object({
20310
+ enabled: boolean2().optional(),
20311
+ max_items: number2().int().min(1).max(5).optional(),
20312
+ budget_tokens: number2().int().positive().optional(),
20313
+ excerpt_chars: number2().int().positive().optional(),
20314
+ min_score: number2().optional(),
20315
+ exclude: array(string2()).optional()
20316
+ }).strict();
20301
20317
  OmoMemoryNudgeLayerSchema = object({
20302
20318
  enabled: boolean2().optional(),
20303
20319
  every_user_turns: number2().int().min(1).optional()
@@ -20337,6 +20353,7 @@ var init_memory = __esm(() => {
20337
20353
  write_notice: OmoMemoryWriteNoticeLayerSchema.optional(),
20338
20354
  sync: OmoMemorySyncLayerSchema.optional(),
20339
20355
  search: OmoMemorySearchLayerSchema.optional(),
20356
+ recall: OmoMemoryRecallLayerSchema.optional(),
20340
20357
  compile_warn_tokens: number2().int().positive().optional()
20341
20358
  }).strict();
20342
20359
  OmoMemorySettingsSchema = object({
@@ -20366,6 +20383,13 @@ var init_memory = __esm(() => {
20366
20383
  write_notice: OmoMemoryWriteNoticeSchema.default({ enabled: true }),
20367
20384
  sync: OmoMemorySyncSchema.default({ enabled: true }),
20368
20385
  search: OmoMemorySearchSchema.default({ enabled: true }),
20386
+ recall: OmoMemoryRecallSchema.default({
20387
+ enabled: true,
20388
+ max_items: 2,
20389
+ budget_tokens: 600,
20390
+ excerpt_chars: 200,
20391
+ exclude: []
20392
+ }),
20369
20393
  compile_warn_tokens: number2().int().positive().default(30000),
20370
20394
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
20371
20395
  }).strict();
@@ -20382,6 +20406,7 @@ var init_memory = __esm(() => {
20382
20406
  write_notice: OmoMemoryWriteNoticeLayerSchema.optional(),
20383
20407
  sync: OmoMemorySyncLayerSchema.optional(),
20384
20408
  search: OmoMemorySearchLayerSchema.optional(),
20409
+ recall: OmoMemoryRecallLayerSchema.optional(),
20385
20410
  compile_warn_tokens: number2().int().positive().optional(),
20386
20411
  agents: record(string2(), OmoMemoryAgentOverridesSchema).optional()
20387
20412
  }).strict();
@@ -20415,11 +20440,11 @@ function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism
20415
20440
  const record2 = record(string2(), unknown()).parse(input);
20416
20441
  return OmoTaskSettingsSchema.parse({
20417
20442
  ...record2,
20418
- residency_max_children: record2["residency_max_children"] ?? Math.max(8, resolveParallelism() * 3),
20443
+ residency_max_children: record2["residency_max_children"] ?? Math.min(DEFAULT_RESIDENCY_MAX_CHILDREN, Math.max(8, resolveParallelism() * 2)),
20419
20444
  global_concurrency: record2["global_concurrency"] ?? Math.max(8, resolveParallelism() * 2)
20420
20445
  });
20421
20446
  }
20422
- var ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
20447
+ var DEFAULT_RESIDENCY_MAX_CHILDREN = 16, ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
20423
20448
  var init_task = __esm(() => {
20424
20449
  init_zod();
20425
20450
  ResidencyMaxChildrenInputSchema = union([number2().int().nonnegative(), literal("unlimited")]);
@@ -23981,7 +24006,6 @@ function extractPromptFailureMessage(error51) {
23981
24006
  try {
23982
24007
  return JSON.stringify(error51);
23983
24008
  } catch (stringifyError) {
23984
- stringifyError instanceof Error;
23985
24009
  return "";
23986
24010
  }
23987
24011
  }
@@ -24197,6 +24221,33 @@ var init_agent_model_requirements = __esm(() => {
24197
24221
  { providers: ["opencode-go"], model: "glm-5.2" }
24198
24222
  ]
24199
24223
  },
24224
+ "omo-senpi-code-reviewer": {
24225
+ fallbackChain: [
24226
+ { providers: ["openai", "openai-codex"], model: "gpt-5.6-terra", variant: "medium" },
24227
+ { providers: ["github-copilot"], model: "gpt-5.6-terra", variant: "medium" },
24228
+ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
24229
+ { providers: ["opencode-go"], model: "glm-5.2" },
24230
+ { providers: ["kimi-for-coding"], model: "kimi-k3" }
24231
+ ]
24232
+ },
24233
+ "omo-senpi-qa-executor": {
24234
+ fallbackChain: [
24235
+ { providers: ["openai", "openai-codex"], model: "gpt-5.6-luna", variant: "high" },
24236
+ { providers: ["github-copilot"], model: "gpt-5.6-luna", variant: "high" },
24237
+ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
24238
+ { providers: ["opencode-go"], model: "glm-5.2" },
24239
+ { providers: ["kimi-for-coding"], model: "kimi-k3" }
24240
+ ]
24241
+ },
24242
+ "omo-senpi-gate-reviewer": {
24243
+ fallbackChain: [
24244
+ { providers: ["openai", "openai-codex"], model: "gpt-5.6-sol", variant: "low" },
24245
+ { providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "low" },
24246
+ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-5", variant: "max" },
24247
+ { providers: ["opencode-go"], model: "glm-5.2" },
24248
+ { providers: ["kimi-for-coding"], model: "kimi-k3" }
24249
+ ]
24250
+ },
24200
24251
  atlas: {
24201
24252
  fallbackChain: [
24202
24253
  { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-5" },
@@ -24703,7 +24754,7 @@ function normalizeCapabilitiesReasoningEfforts(capabilities) {
24703
24754
  }
24704
24755
  return capabilities.reasoningEfforts.map((value) => value.toLowerCase());
24705
24756
  }
24706
- function resolveField(normalized, familyCaps, ladder, familyKnown, metadataOverride, familyAliases) {
24757
+ function resolveField(normalized, familyCaps, familyKnown, metadataOverride, familyAliases) {
24707
24758
  const aliased = familyAliases?.[normalized];
24708
24759
  if (aliased && (metadataOverride?.includes(aliased) || familyCaps?.includes(aliased))) {
24709
24760
  return { value: aliased, reason: "unsupported-by-model-family" };
@@ -24738,7 +24789,7 @@ function resolveCompatibleModelSettings(input) {
24738
24789
  let variant = input.desired.variant;
24739
24790
  if (variant !== undefined) {
24740
24791
  const normalized = variant.toLowerCase();
24741
- const resolved = resolveField(normalized, family?.variants, REASONING_LEVELS2, familyKnown, metadataVariants);
24792
+ const resolved = resolveField(normalized, family?.variants, familyKnown, metadataVariants);
24742
24793
  if (resolved.value !== normalized && resolved.reason) {
24743
24794
  changes.push({ field: "variant", from: variant, to: resolved.value, reason: resolved.reason });
24744
24795
  }
@@ -24747,7 +24798,7 @@ function resolveCompatibleModelSettings(input) {
24747
24798
  let reasoningEffort = input.desired.reasoningEffort;
24748
24799
  if (reasoningEffort !== undefined) {
24749
24800
  const normalized = reasoningEffort.toLowerCase();
24750
- const resolved = resolveField(normalized, family?.reasoningEfforts, REASONING_LEVELS2, familyKnown, metadataReasoningEfforts, family?.reasoningEffortAliases);
24801
+ const resolved = resolveField(normalized, family?.reasoningEfforts, familyKnown, metadataReasoningEfforts, family?.reasoningEffortAliases);
24751
24802
  if (resolved.value !== normalized && resolved.reason) {
24752
24803
  changes.push({ field: "reasoningEffort", from: reasoningEffort, to: resolved.value, reason: resolved.reason });
24753
24804
  }
@@ -94479,7 +94530,7 @@ var package_default2;
94479
94530
  var init_package2 = __esm(() => {
94480
94531
  package_default2 = {
94481
94532
  name: "@oh-my-opencode/omo-codex",
94482
- version: "5.0.0-beta.30",
94533
+ version: "5.0.0-beta.31",
94483
94534
  type: "module",
94484
94535
  private: true,
94485
94536
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -94919,7 +94970,6 @@ function getLocalDevVersion(directory) {
94919
94970
  const pkg = JSON.parse(content);
94920
94971
  return pkg.version ?? null;
94921
94972
  } catch (error51) {
94922
- error51 instanceof Error;
94923
94973
  return null;
94924
94974
  }
94925
94975
  }
@@ -94951,7 +95001,6 @@ function findPluginEntry(directory) {
94951
95001
  }
94952
95002
  }
94953
95003
  } catch (error51) {
94954
- error51 instanceof Error;
94955
95004
  continue;
94956
95005
  }
94957
95006
  }
@@ -95056,7 +95105,6 @@ async function getLatestVersion(channel = "latest") {
95056
95105
  const data = await response.json();
95057
95106
  return data[channel] ?? data.latest ?? null;
95058
95107
  } catch (error51) {
95059
- error51 instanceof Error;
95060
95108
  return null;
95061
95109
  } finally {
95062
95110
  clearTimeout(timeoutId);
@@ -107140,6 +107188,7 @@ var BackgroundTaskConfigSchema = exports_external.object({
107140
107188
  providerConcurrency: exports_external.record(exports_external.string(), exports_external.number().min(0)).optional(),
107141
107189
  modelConcurrency: exports_external.record(exports_external.string(), exports_external.number().min(0)).optional(),
107142
107190
  maxDepth: exports_external.number().int().min(1).optional(),
107191
+ maxLiveDescendantsPerRoot: exports_external.number().int().min(0).optional(),
107143
107192
  staleTimeoutMs: exports_external.number().min(60000).optional(),
107144
107193
  messageStalenessTimeoutMs: exports_external.number().min(60000).optional(),
107145
107194
  taskTtlMs: exports_external.number().min(300000).optional(),
@@ -4,6 +4,7 @@ export declare const BackgroundTaskConfigSchema: z.ZodObject<{
4
4
  providerConcurrency: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
5
5
  modelConcurrency: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
6
6
  maxDepth: z.ZodOptional<z.ZodNumber>;
7
+ maxLiveDescendantsPerRoot: z.ZodOptional<z.ZodNumber>;
7
8
  staleTimeoutMs: z.ZodOptional<z.ZodNumber>;
8
9
  messageStalenessTimeoutMs: z.ZodOptional<z.ZodNumber>;
9
10
  taskTtlMs: z.ZodOptional<z.ZodNumber>;
@@ -3557,6 +3557,7 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
3557
3557
  providerConcurrency: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
3558
3558
  modelConcurrency: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
3559
3559
  maxDepth: z.ZodOptional<z.ZodNumber>;
3560
+ maxLiveDescendantsPerRoot: z.ZodOptional<z.ZodNumber>;
3560
3561
  staleTimeoutMs: z.ZodOptional<z.ZodNumber>;
3561
3562
  messageStalenessTimeoutMs: z.ZodOptional<z.ZodNumber>;
3562
3563
  taskTtlMs: z.ZodOptional<z.ZodNumber>;
@@ -14,7 +14,6 @@ export declare const MIN_IDLE_TIME_MS = 5000;
14
14
  export declare const POLLING_INTERVAL_MS = 3000;
15
15
  export declare const TASK_CLEANUP_DELAY_MS: number;
16
16
  export declare const TMUX_CALLBACK_DELAY_MS = 200;
17
- export type ProcessCleanupEvent = NodeJS.Signals | "beforeExit" | "exit";
18
17
  export type OpencodeClient = PluginInput["client"];
19
18
  export interface MessagePartInfo {
20
19
  sessionID?: string;
@@ -32,12 +31,6 @@ export interface BackgroundEvent {
32
31
  type: string;
33
32
  properties?: EventProperties;
34
33
  }
35
- export interface Todo {
36
- content: string;
37
- status: string;
38
- priority: string;
39
- id?: string;
40
- }
41
34
  export interface QueueItem {
42
35
  attemptID: string;
43
36
  rawConcurrencyKey?: string;
@@ -88,6 +88,8 @@ export declare class BackgroundManager {
88
88
  commit: () => number;
89
89
  rollback: () => void;
90
90
  }>;
91
+ acquireSyncSubagentConcurrency(model: string, taskId?: string): Promise<void>;
92
+ releaseSyncSubagentConcurrency(model: string): void;
91
93
  private registerRootDescendant;
92
94
  private unregisterRootDescendant;
93
95
  private markPreStartDescendantReservation;
@@ -162,7 +164,6 @@ export declare class BackgroundManager {
162
164
  private requeueDispatchedParentWake;
163
165
  private clearSessionOutputObserved;
164
166
  private clearSessionTodoObservation;
165
- private messageUpdatedInfoHasParentWakeOutput;
166
167
  private shouldHoldDispatchedParentWakeForTextDelta;
167
168
  private parentWakeTextDeltaBufferKey;
168
169
  private clearParentWakeTextDeltaBuffers;
@@ -19,7 +19,6 @@ export declare class ParentWakeDispatchedTracker {
19
19
  releaseNotificationPreparation(sessionID: string): void;
20
20
  hasNotificationPreparation(sessionID: string): boolean;
21
21
  getWake(sessionID: string): PendingParentWake | undefined;
22
- hasWake(sessionID: string): boolean;
23
22
  clearWake(sessionID: string): void;
24
23
  trackWake(sessionID: string, wake: PendingParentWake, dispatchedAt: number): void;
25
24
  refreshWakeTimer(sessionID: string): void;
@@ -1,12 +1,14 @@
1
1
  import type { BackgroundTaskConfig } from "../../config/schema";
2
2
  import type { OpencodeClient } from "./constants";
3
3
  export declare const DEFAULT_MAX_SUBAGENT_DEPTH = 3;
4
+ export declare const DEFAULT_MAX_LIVE_DESCENDANTS_PER_ROOT = 24;
4
5
  export interface SubagentSpawnContext {
5
6
  rootSessionID: string;
6
7
  parentDepth: number;
7
8
  childDepth: number;
8
9
  }
9
10
  export declare function getMaxSubagentDepth(config?: BackgroundTaskConfig): number;
11
+ export declare function getMaxLiveDescendantsPerRoot(config?: BackgroundTaskConfig): number;
10
12
  export declare function resolveSubagentSpawnContext(client: OpencodeClient, parentSessionID: string, directory?: string): Promise<SubagentSpawnContext>;
11
13
  export declare function createSubagentDepthLimitError(input: {
12
14
  childDepth: number;
@@ -14,3 +16,9 @@ export declare function createSubagentDepthLimitError(input: {
14
16
  parentSessionID: string;
15
17
  rootSessionID: string;
16
18
  }): Error;
19
+ export declare function createSubagentDescendantLimitError(input: {
20
+ descendantCount: number;
21
+ maxDescendants: number;
22
+ parentSessionID: string;
23
+ rootSessionID: string;
24
+ }): Error;
@@ -19,39 +19,15 @@ export declare class TaskToastManager {
19
19
  skills?: string[];
20
20
  modelInfo?: ModelFallbackInfo;
21
21
  }): void;
22
- /**
23
- * Update task status
24
- */
25
22
  updateTask(id: string, status: TaskStatus): void;
26
- /**
27
- * Update model info for a task by session ID
28
- */
29
23
  updateTaskModelBySession(sessionID: string, modelInfo: ModelFallbackInfo): void;
30
- /**
31
- * Remove completed/error task
32
- */
33
24
  removeTask(id: string): void;
34
- /**
35
- * Get all running tasks (newest first)
36
- */
37
25
  getRunningTasks(): TrackedTask[];
38
- /**
39
- * Get all queued tasks
40
- */
41
26
  getQueuedTasks(): TrackedTask[];
42
- /**
43
- * Format duration since task started
44
- */
45
27
  private formatDuration;
46
28
  private getConcurrencyInfo;
47
29
  private buildTaskListMessage;
48
- /**
49
- * Show consolidated toast with all running/queued tasks
50
- */
51
30
  private showTaskListToast;
52
- /**
53
- * Show task completion toast
54
- */
55
31
  showCompletionToast(task: {
56
32
  id: string;
57
33
  description: string;
@@ -1,6 +1,3 @@
1
- import type { PluginInput } from "@opencode-ai/plugin";
2
1
  import { getMessageDir } from "../../shared/opencode-message-dir";
3
2
  export { getMessageDir };
4
- type OpencodeClient = PluginInput["client"];
5
- export declare function getMessageIdsFromSDK(client: OpencodeClient, sessionID: string): Promise<string[]>;
6
3
  export declare function getMessageIds(sessionID: string): string[];
@@ -2,6 +2,7 @@ import type { AutoCompactState, RetryState, TruncateState } from "./types";
2
2
  export declare function getOrCreateRetryState(autoCompactState: AutoCompactState, sessionID: string): RetryState;
3
3
  export declare function getOrCreateTruncateState(autoCompactState: AutoCompactState, sessionID: string): TruncateState;
4
4
  export declare function clearSessionState(autoCompactState: AutoCompactState, sessionID: string): void;
5
+ export declare function clearAllSessionState(autoCompactState: AutoCompactState): void;
5
6
  export declare function setRetryTimer(autoCompactState: AutoCompactState, sessionID: string, timeout: ReturnType<typeof setTimeout>): void;
6
7
  export declare function clearRetryTimer(autoCompactState: AutoCompactState, sessionID: string): void;
7
8
  export declare function getEmptyContentAttempt(autoCompactState: AutoCompactState, sessionID: string): number;
@@ -1,3 +1,2 @@
1
1
  export declare function findEmptyMessages(sessionID: string): string[];
2
2
  export declare function findEmptyMessageByIndex(sessionID: string, targetIndex: number): string | null;
3
- export declare function findFirstEmptyMessage(sessionID: string): string | null;
@@ -7,4 +7,5 @@ export declare const sessionInterruptState: Map<string, {
7
7
  interrupted: boolean;
8
8
  }>;
9
9
  export declare function clearSessionHookState(sessionID: string): void;
10
+ export declare function clearSessionEndHookState(sessionID: string): void;
10
11
  export declare function clearAllSessionHookState(): void;