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

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 (73) hide show
  1. package/dist/cli/index.js +34 -86
  2. package/dist/cli-node/index.js +34 -86
  3. package/dist/index.js +80 -93
  4. package/dist/tools/delegate-task/builtin-categories.d.ts +1 -0
  5. package/dist/tools/delegate-task/builtin-category-definition.d.ts +1 -0
  6. package/dist/tools/delegate-task/tool-description.d.ts +3 -1
  7. package/dist/tui.js +19 -71
  8. package/package.json +14 -14
  9. package/packages/lsp-core/src/lsp/client-wrapper-outside-cwd.test.ts +78 -0
  10. package/packages/lsp-core/src/lsp/client-wrapper.test.ts +6 -6
  11. package/packages/lsp-core/src/lsp/client-wrapper.ts +5 -6
  12. package/packages/lsp-core/src/lsp/outside-context-workspace.ts +33 -0
  13. package/packages/lsp-core/src/lsp/workspace-markers.ts +1 -0
  14. package/packages/lsp-daemon/dist/cli.js +94 -59
  15. package/packages/lsp-daemon/dist/client.js +72 -37
  16. package/packages/lsp-daemon/dist/index.js +78 -43
  17. package/packages/lsp-tools-mcp/dist/cli.js +68 -33
  18. package/packages/lsp-tools-mcp/dist/mcp.js +68 -33
  19. package/packages/lsp-tools-mcp/dist/tools.js +68 -33
  20. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  21. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  22. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +9 -0
  24. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +9 -0
  25. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  27. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  29. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  31. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  33. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +83 -54
  34. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  35. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  37. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  39. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  40. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  41. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  42. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  43. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  44. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  45. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  46. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  47. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  71. package/packages/omo-codex/plugin/package-lock.json +13 -13
  72. package/packages/omo-codex/plugin/package.json +1 -1
  73. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
package/dist/index.js CHANGED
@@ -5537,7 +5537,7 @@ var init_codegraph = __esm(() => {
5537
5537
 
5538
5538
  // packages/omo-config-core/src/schema/memory.ts
5539
5539
  import * as z7 from "zod";
5540
- var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
5540
+ var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
5541
5541
  var init_memory = __esm(() => {
5542
5542
  OmoMemoryReflectionTriggerSchema = z7.object({
5543
5543
  step_count: z7.number().int().nonnegative().default(25),
@@ -5582,6 +5582,9 @@ var init_memory = __esm(() => {
5582
5582
  OmoMemorySoulSchema = z7.object({
5583
5583
  edit_notice: z7.boolean().default(true)
5584
5584
  }).strict();
5585
+ OmoMemoryWriteNoticeSchema = z7.object({
5586
+ enabled: z7.boolean().default(true)
5587
+ }).strict();
5585
5588
  OmoMemoryReflectionTriggerLayerSchema = z7.object({
5586
5589
  step_count: z7.number().int().nonnegative().optional(),
5587
5590
  on_compaction: z7.boolean().optional()
@@ -5625,6 +5628,9 @@ var init_memory = __esm(() => {
5625
5628
  OmoMemorySoulLayerSchema = z7.object({
5626
5629
  edit_notice: z7.boolean().optional()
5627
5630
  }).strict();
5631
+ OmoMemoryWriteNoticeLayerSchema = z7.object({
5632
+ enabled: z7.boolean().optional()
5633
+ }).strict();
5628
5634
  OmoMemoryAgentOverridesSchema = z7.object({
5629
5635
  enabled: z7.boolean().optional(),
5630
5636
  agent: z7.string().min(1).optional(),
@@ -5634,6 +5640,7 @@ var init_memory = __esm(() => {
5634
5640
  dream: OmoMemoryDreamLayerSchema.optional(),
5635
5641
  people: OmoMemoryPeopleLayerSchema.optional(),
5636
5642
  soul: OmoMemorySoulLayerSchema.optional(),
5643
+ write_notice: OmoMemoryWriteNoticeLayerSchema.optional(),
5637
5644
  sync: OmoMemorySyncLayerSchema.optional(),
5638
5645
  search: OmoMemorySearchLayerSchema.optional(),
5639
5646
  compile_warn_tokens: z7.number().int().positive().optional()
@@ -5662,6 +5669,7 @@ var init_memory = __esm(() => {
5662
5669
  }),
5663
5670
  people: OmoMemoryPeopleSchema.default({ enabled: true, max_entries: 40, max_entry_chars: 200 }),
5664
5671
  soul: OmoMemorySoulSchema.default({ edit_notice: true }),
5672
+ write_notice: OmoMemoryWriteNoticeSchema.default({ enabled: true }),
5665
5673
  sync: OmoMemorySyncSchema.default({ enabled: true }),
5666
5674
  search: OmoMemorySearchSchema.default({ enabled: true }),
5667
5675
  compile_warn_tokens: z7.number().int().positive().default(30000),
@@ -5677,6 +5685,7 @@ var init_memory = __esm(() => {
5677
5685
  dream: OmoMemoryDreamLayerSchema.optional(),
5678
5686
  people: OmoMemoryPeopleLayerSchema.optional(),
5679
5687
  soul: OmoMemorySoulLayerSchema.optional(),
5688
+ write_notice: OmoMemoryWriteNoticeLayerSchema.optional(),
5680
5689
  sync: OmoMemorySyncLayerSchema.optional(),
5681
5690
  search: OmoMemorySearchLayerSchema.optional(),
5682
5691
  compile_warn_tokens: z7.number().int().positive().optional(),
@@ -28558,23 +28567,14 @@ function truncateDescription(description, maxLength = 120) {
28558
28567
  // packages/omo-opencode/src/tools/delegate-task/anthropic-categories.ts
28559
28568
  var UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
28560
28569
  You are working on tasks that don't fit specific categories but require substantial effort.
28561
-
28562
- <Selection_Gate>
28563
- BEFORE selecting this category, VERIFY ALL conditions:
28564
- 1. Task does NOT fit: quick (trivial), visual-engineering (UI), ultrabrain (deep logic), artistry (creative), writing (docs)
28565
- 2. Task requires substantial effort across multiple systems/modules
28566
- 3. Changes have broad impact or require careful coordination
28567
- 4. NOT just "complex" - must be genuinely unclassifiable AND high-effort
28568
-
28569
- If task fits ANY other category, DO NOT select unspecified-high.
28570
- If task is unclassifiable but moderate-effort, use unspecified-low instead.
28571
- </Selection_Gate>
28572
28570
  </Category_Context>`;
28571
+ var UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`;
28573
28572
  var ANTHROPIC_CATEGORIES = [
28574
28573
  {
28575
28574
  name: "unspecified-high",
28576
28575
  config: { model: "kimi-for-coding/k3", variant: "max" },
28577
28576
  description: "Tasks that don't fit other categories, high effort required",
28577
+ callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
28578
28578
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND
28579
28579
  }
28580
28580
  ];
@@ -28841,65 +28841,13 @@ Approach:
28841
28841
  - Minimal viable implementation
28842
28842
  - Skip unnecessary abstractions
28843
28843
  - Direct and concise
28844
- </Category_Context>
28845
-
28846
- <Caller_Warning>
28847
- THIS CATEGORY USES A SMALLER/FASTER MODEL (gpt-5.6-luna-fast).
28848
-
28849
- The model executing this task is optimized for speed over depth. Your prompt MUST be:
28850
-
28851
- **EXHAUSTIVELY EXPLICIT** - Leave NOTHING to interpretation:
28852
- 1. MUST DO: List every required action as atomic, numbered steps
28853
- 2. MUST NOT DO: Explicitly forbid likely mistakes and deviations
28854
- 3. EXPECTED OUTPUT: Describe exact success criteria with concrete examples
28855
-
28856
- **WHY THIS MATTERS:**
28857
- - Smaller models benefit from explicit guardrails
28858
- - Vague instructions may lead to unpredictable results
28859
- - Implicit expectations may be missed
28860
- **PROMPT STRUCTURE (MANDATORY):**
28861
- \`\`\`
28862
- TASK: [One-sentence goal]
28863
-
28864
- MUST DO:
28865
- 1. [Specific action with exact details]
28866
- 2. [Another specific action]
28867
- ...
28868
-
28869
- MUST NOT DO:
28870
- - [Forbidden action + why]
28871
- - [Another forbidden action]
28872
- ...
28873
-
28874
- EXPECTED OUTPUT:
28875
- - [Exact deliverable description]
28876
- - [Success criteria / verification method]
28877
- \`\`\`
28878
-
28879
- If your prompt lacks this structure, REWRITE IT before delegating.
28880
- </Caller_Warning>`;
28844
+ </Category_Context>`;
28845
+ var QUICK_CATEGORY_CALLER_GUIDANCE = `<Caller_Warning>Small/fast model: before delegating, write an explicit prompt with numbered must-do steps, forbidden deviations, and concrete success criteria.</Caller_Warning>`;
28881
28846
  var UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND = `<Category_Context>
28882
28847
  You are working on tasks that don't fit specific categories but require moderate effort.
28883
-
28884
- <Selection_Gate>
28885
- BEFORE selecting this category, VERIFY ALL conditions:
28886
- 1. Task does NOT fit: quick (trivial), visual-engineering (UI), ultrabrain (deep logic), artistry (creative), writing (docs)
28887
- 2. Task requires more than trivial effort but is NOT system-wide
28888
- 3. Scope is contained within a few files/modules
28889
-
28890
- If task fits ANY other category, DO NOT select unspecified-low.
28891
- This is NOT a default choice - it's for genuinely unclassifiable moderate-effort work.
28892
- </Selection_Gate>
28893
- </Category_Context>
28894
-
28895
- <Caller_Warning>
28896
- THIS CATEGORY USES GROK 4.6 (xhigh).
28897
-
28898
- **PROVIDE CLEAR STRUCTURE:**
28899
- 1. MUST DO: Enumerate required actions explicitly
28900
- 2. MUST NOT DO: State forbidden actions to prevent scope creep
28901
- 3. EXPECTED OUTPUT: Define concrete success criteria
28902
- </Caller_Warning>`;
28848
+ </Category_Context>`;
28849
+ var UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits, effort is moderate, and scope stays within a few files/modules. Prefer any matching specialist category.</Selection_Gate>
28850
+ <Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`;
28903
28851
  var OPENAI_CATEGORIES = [
28904
28852
  {
28905
28853
  name: "ultrabrain",
@@ -28919,12 +28867,14 @@ var OPENAI_CATEGORIES = [
28919
28867
  name: "quick",
28920
28868
  config: { model: "kimi-for-coding/kimi-for-coding-highspeed" },
28921
28869
  description: "Trivial tasks - single file changes, typo fixes, simple modifications",
28870
+ callerGuidance: QUICK_CATEGORY_CALLER_GUIDANCE,
28922
28871
  promptAppend: QUICK_CATEGORY_PROMPT_APPEND
28923
28872
  },
28924
28873
  {
28925
28874
  name: "unspecified-low",
28926
28875
  config: { model: "xai/grok-4.6", variant: "xhigh" },
28927
28876
  description: "Tasks that don't fit other categories, low effort required",
28877
+ callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
28928
28878
  promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
28929
28879
  }
28930
28880
  ];
@@ -28942,6 +28892,7 @@ function buildCategoryRecord(selector) {
28942
28892
  var DEFAULT_CATEGORIES = buildCategoryRecord((definition2) => definition2.config);
28943
28893
  var CATEGORY_PROMPT_APPENDS = buildCategoryRecord((definition2) => definition2.promptAppend);
28944
28894
  var CATEGORY_DESCRIPTIONS = buildCategoryRecord((definition2) => definition2.description);
28895
+ var CATEGORY_CALLER_GUIDANCE = buildCategoryRecord((definition2) => definition2.callerGuidance);
28945
28896
  var CATEGORY_PROMPT_APPEND_RESOLVERS = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition2) => definition2.resolvePromptAppend !== undefined).map((definition2) => [definition2.name, definition2.resolvePromptAppend]));
28946
28897
  var BUILTIN_CATEGORY_REQUIRES_MODEL = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition2) => definition2.requiresModel !== undefined).map((definition2) => [definition2.name, definition2.requiresModel]));
28947
28898
 
@@ -98726,7 +98677,7 @@ function getCachedVersion(options = {}) {
98726
98677
  // package.json
98727
98678
  var package_default = {
98728
98679
  name: "oh-my-opencode",
98729
- version: "5.0.0-beta.10",
98680
+ version: "5.0.0-beta.12",
98730
98681
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
98731
98682
  main: "./dist/index.js",
98732
98683
  types: "dist/index.d.ts",
@@ -98907,7 +98858,7 @@ var package_default = {
98907
98858
  zod: "^4.4.3"
98908
98859
  },
98909
98860
  devDependencies: {
98910
- "@code-yeongyu/senpi": "2026.8.18-2",
98861
+ "@code-yeongyu/senpi": "2026.8.19",
98911
98862
  "@oh-my-opencode/agents-md-core": "workspace:*",
98912
98863
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
98913
98864
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -98948,18 +98899,18 @@ var package_default = {
98948
98899
  typescript: "^7.0.2"
98949
98900
  },
98950
98901
  optionalDependencies: {
98951
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.10",
98952
- "oh-my-opencode-darwin-x64": "5.0.0-beta.10",
98953
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.10",
98954
- "oh-my-opencode-linux-arm64": "5.0.0-beta.10",
98955
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.10",
98956
- "oh-my-opencode-linux-x64": "5.0.0-beta.10",
98957
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.10",
98958
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.10",
98959
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.10",
98960
- "oh-my-opencode-windows-arm64": "5.0.0-beta.10",
98961
- "oh-my-opencode-windows-x64": "5.0.0-beta.10",
98962
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.10"
98902
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.12",
98903
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.12",
98904
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.12",
98905
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.12",
98906
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.12",
98907
+ "oh-my-opencode-linux-x64": "5.0.0-beta.12",
98908
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.12",
98909
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.12",
98910
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.12",
98911
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.12",
98912
+ "oh-my-opencode-windows-x64": "5.0.0-beta.12",
98913
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.12"
98963
98914
  },
98964
98915
  overrides: {
98965
98916
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -132948,14 +132899,39 @@ var SISYPHUS_JUNIOR_AGENT2 = getAgentDisplayName("sisyphus-junior");
132948
132899
 
132949
132900
  // packages/omo-opencode/src/tools/delegate-task/categories.ts
132950
132901
  init_logger2();
132902
+ function resolveAvailableModelEntry(entry, availableModels) {
132903
+ const configuredModel = typeof entry === "string" ? entry : entry.model;
132904
+ const parsedModel = parseModelString(configuredModel);
132905
+ if (!parsedModel)
132906
+ return null;
132907
+ const fullModel = `${parsedModel.providerID}/${parsedModel.modelID}`;
132908
+ const matchedModel = fuzzyMatchModel2(fullModel, availableModels, [parsedModel.providerID]);
132909
+ if (!matchedModel)
132910
+ return null;
132911
+ if (typeof entry === "string") {
132912
+ return parsedModel.variant ? `${matchedModel}(${parsedModel.variant})` : matchedModel;
132913
+ }
132914
+ return {
132915
+ ...entry,
132916
+ model: matchedModel,
132917
+ variant: entry.variant ?? parsedModel.variant
132918
+ };
132919
+ }
132951
132920
  function resolveCategoryConfig(categoryName, options) {
132952
132921
  const { userCategories, inheritedModel: _inheritedModel, systemDefaultModel, availableModels } = options;
132953
132922
  const defaultConfig = DEFAULT_CATEGORIES[categoryName];
132954
- const userConfig = userCategories?.[categoryName];
132955
- const hasExplicitUserConfig = userConfig !== undefined;
132956
- if (userConfig?.disable) {
132923
+ const configuredUserConfig = userCategories?.[categoryName];
132924
+ const hasExplicitUserConfig = configuredUserConfig !== undefined;
132925
+ if (configuredUserConfig?.disable) {
132957
132926
  return null;
132958
132927
  }
132928
+ let userConfig = configuredUserConfig;
132929
+ if (configuredUserConfig?.models && availableModels && availableModels.size > 0) {
132930
+ const models2 = configuredUserConfig.models.map((entry) => resolveAvailableModelEntry(entry, availableModels)).filter((entry) => entry !== null);
132931
+ if (models2.length === 0)
132932
+ return null;
132933
+ userConfig = { ...configuredUserConfig, models: models2 };
132934
+ }
132959
132935
  const categoryReq = CATEGORY_MODEL_REQUIREMENTS[categoryName];
132960
132936
  const requiredModel = categoryReq?.requiresModel ?? BUILTIN_CATEGORY_REQUIRES_MODEL[categoryName];
132961
132937
  if (requiredModel && availableModels && !hasExplicitUserConfig) {
@@ -133140,6 +133116,11 @@ async function resolveCategoryExecution(args, executorCtx, inheritedModel, syste
133140
133116
  const requirement2 = CATEGORY_MODEL_REQUIREMENTS[categoryName];
133141
133117
  const requiredModel = requirement2?.requiresModel ?? BUILTIN_CATEGORY_REQUIRES_MODEL[categoryName];
133142
133118
  const allCategoryNames = Object.keys(enabledCategories).join(", ");
133119
+ const configuredModels = userCategories?.[categoryName]?.models;
133120
+ if (configuredModels && availableModels.size > 0) {
133121
+ const configuredChain = configuredModels.map((entry) => getConfiguredModel(entry)).join(" -> ");
133122
+ return categoryResolutionError(`Configured model chain is unavailable for category "${categoryName}": ${configuredChain}`);
133123
+ }
133143
133124
  if (categoryExists && requiredModel) {
133144
133125
  return categoryResolutionError(`Category "${categoryName}" requires model "${requiredModel}" which is not available.
133145
133126
 
@@ -133585,7 +133566,8 @@ function createDelegateTaskPresentation(options) {
133585
133566
  const categoryEntries = Object.entries(allCategories).map(([name, categoryConfig]) => ({
133586
133567
  name,
133587
133568
  categoryConfig,
133588
- description: userCategories?.[name]?.description || CATEGORY_DESCRIPTIONS[name]
133569
+ description: userCategories?.[name]?.description || CATEGORY_DESCRIPTIONS[name],
133570
+ callerGuidance: CATEGORY_CALLER_GUIDANCE[name]
133589
133571
  }));
133590
133572
  const categoryNames = categoryEntries.map(({ name }) => name);
133591
133573
  const categoryExamples = categoryNames.join(", ");
@@ -133597,8 +133579,13 @@ function createDelegateTaskPresentation(options) {
133597
133579
  };
133598
133580
  });
133599
133581
  const availableSkills = options.availableSkills ?? [];
133600
- const categoryList = categoryEntries.map(({ name, description: description2 }) => {
133601
- return description2 ? ` - ${name}: ${description2}` : ` - ${name}`;
133582
+ const categoryList = categoryEntries.map(({ name, description: description2, callerGuidance }) => {
133583
+ const categoryLine = description2 ? ` - ${name}: ${description2}` : ` - ${name}`;
133584
+ const indentedGuidance = callerGuidance?.replaceAll(`
133585
+ `, `
133586
+ `);
133587
+ return indentedGuidance ? `${categoryLine}
133588
+ ${indentedGuidance}` : categoryLine;
133602
133589
  }).join(`
133603
133590
  `);
133604
133591
  const description = `Spawn agent task with category-based or direct agent selection.
@@ -163991,8 +163978,8 @@ function applyToolConfig(params) {
163991
163978
  const atlas = agentByKey(params.agentResult, "atlas", params.pluginConfig);
163992
163979
  if (atlas) {
163993
163980
  atlas.permission = {
163994
- ...atlas.permission,
163995
163981
  task: "allow",
163982
+ ...atlas.permission,
163996
163983
  call_omo_agent: "deny",
163997
163984
  "task_*": "allow",
163998
163985
  teammate: "allow",
@@ -164002,9 +163989,9 @@ function applyToolConfig(params) {
164002
163989
  const sisyphus2 = agentByKey(params.agentResult, "sisyphus", params.pluginConfig);
164003
163990
  if (sisyphus2) {
164004
163991
  sisyphus2.permission = {
163992
+ task: "allow",
164005
163993
  ...sisyphus2.permission,
164006
163994
  call_omo_agent: "deny",
164007
- task: "allow",
164008
163995
  question: questionPermission,
164009
163996
  "task_*": "allow",
164010
163997
  teammate: "allow",
@@ -164014,9 +164001,9 @@ function applyToolConfig(params) {
164014
164001
  const hephaestus = agentByKey(params.agentResult, "hephaestus", params.pluginConfig);
164015
164002
  if (hephaestus) {
164016
164003
  hephaestus.permission = {
164004
+ task: "allow",
164017
164005
  ...hephaestus.permission,
164018
164006
  call_omo_agent: "deny",
164019
- task: "allow",
164020
164007
  question: questionPermission,
164021
164008
  teammate: "allow",
164022
164009
  ...denyTodoTools
@@ -164025,9 +164012,9 @@ function applyToolConfig(params) {
164025
164012
  const prometheus = agentByKey(params.agentResult, "prometheus", params.pluginConfig);
164026
164013
  if (prometheus) {
164027
164014
  prometheus.permission = {
164015
+ task: "allow",
164028
164016
  ...prometheus.permission,
164029
164017
  call_omo_agent: "deny",
164030
- task: "allow",
164031
164018
  question: questionPermission,
164032
164019
  "task_*": "allow",
164033
164020
  teammate: "allow",
@@ -2,5 +2,6 @@ import type { CategoryConfig } from "../../config/schema";
2
2
  export declare const DEFAULT_CATEGORIES: Record<string, CategoryConfig>;
3
3
  export declare const CATEGORY_PROMPT_APPENDS: Record<string, string>;
4
4
  export declare const CATEGORY_DESCRIPTIONS: Record<string, string>;
5
+ export declare const CATEGORY_CALLER_GUIDANCE: Record<string, string | undefined>;
5
6
  export declare const CATEGORY_PROMPT_APPEND_RESOLVERS: Record<string, (model: string | undefined) => string>;
6
7
  export declare const BUILTIN_CATEGORY_REQUIRES_MODEL: Record<string, string>;
@@ -3,6 +3,7 @@ export type BuiltinCategoryDefinition = {
3
3
  name: string;
4
4
  config: CategoryConfig;
5
5
  description: string;
6
+ callerGuidance?: string;
6
7
  promptAppend: string;
7
8
  resolvePromptAppend?: (model: string | undefined) => string;
8
9
  requiresModel?: string;
@@ -6,4 +6,6 @@ export interface DelegateTaskPresentation {
6
6
  categoryExamples: string;
7
7
  description: string;
8
8
  }
9
- export declare function createDelegateTaskPresentation(options: DelegateTaskToolOptions): DelegateTaskPresentation;
9
+ type DelegateTaskPresentationOptions = Pick<DelegateTaskToolOptions, "availableCategories" | "availableSkills" | "userCategories">;
10
+ export declare function createDelegateTaskPresentation(options: DelegateTaskPresentationOptions): DelegateTaskPresentation;
11
+ export {};
package/dist/tui.js CHANGED
@@ -18837,7 +18837,7 @@ var init_codegraph = __esm(() => {
18837
18837
  });
18838
18838
 
18839
18839
  // packages/omo-config-core/src/schema/memory.ts
18840
- var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
18840
+ var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
18841
18841
  var init_memory = __esm(() => {
18842
18842
  init_zod();
18843
18843
  OmoMemoryReflectionTriggerSchema = object({
@@ -18883,6 +18883,9 @@ var init_memory = __esm(() => {
18883
18883
  OmoMemorySoulSchema = object({
18884
18884
  edit_notice: boolean2().default(true)
18885
18885
  }).strict();
18886
+ OmoMemoryWriteNoticeSchema = object({
18887
+ enabled: boolean2().default(true)
18888
+ }).strict();
18886
18889
  OmoMemoryReflectionTriggerLayerSchema = object({
18887
18890
  step_count: number2().int().nonnegative().optional(),
18888
18891
  on_compaction: boolean2().optional()
@@ -18926,6 +18929,9 @@ var init_memory = __esm(() => {
18926
18929
  OmoMemorySoulLayerSchema = object({
18927
18930
  edit_notice: boolean2().optional()
18928
18931
  }).strict();
18932
+ OmoMemoryWriteNoticeLayerSchema = object({
18933
+ enabled: boolean2().optional()
18934
+ }).strict();
18929
18935
  OmoMemoryAgentOverridesSchema = object({
18930
18936
  enabled: boolean2().optional(),
18931
18937
  agent: string2().min(1).optional(),
@@ -18935,6 +18941,7 @@ var init_memory = __esm(() => {
18935
18941
  dream: OmoMemoryDreamLayerSchema.optional(),
18936
18942
  people: OmoMemoryPeopleLayerSchema.optional(),
18937
18943
  soul: OmoMemorySoulLayerSchema.optional(),
18944
+ write_notice: OmoMemoryWriteNoticeLayerSchema.optional(),
18938
18945
  sync: OmoMemorySyncLayerSchema.optional(),
18939
18946
  search: OmoMemorySearchLayerSchema.optional(),
18940
18947
  compile_warn_tokens: number2().int().positive().optional()
@@ -18963,6 +18970,7 @@ var init_memory = __esm(() => {
18963
18970
  }),
18964
18971
  people: OmoMemoryPeopleSchema.default({ enabled: true, max_entries: 40, max_entry_chars: 200 }),
18965
18972
  soul: OmoMemorySoulSchema.default({ edit_notice: true }),
18973
+ write_notice: OmoMemoryWriteNoticeSchema.default({ enabled: true }),
18966
18974
  sync: OmoMemorySyncSchema.default({ enabled: true }),
18967
18975
  search: OmoMemorySearchSchema.default({ enabled: true }),
18968
18976
  compile_warn_tokens: number2().int().positive().default(30000),
@@ -18978,6 +18986,7 @@ var init_memory = __esm(() => {
18978
18986
  dream: OmoMemoryDreamLayerSchema.optional(),
18979
18987
  people: OmoMemoryPeopleLayerSchema.optional(),
18980
18988
  soul: OmoMemorySoulLayerSchema.optional(),
18989
+ write_notice: OmoMemoryWriteNoticeLayerSchema.optional(),
18981
18990
  sync: OmoMemorySyncLayerSchema.optional(),
18982
18991
  search: OmoMemorySearchLayerSchema.optional(),
18983
18992
  compile_warn_tokens: number2().int().positive().optional(),
@@ -78184,24 +78193,14 @@ var init_agent_display_names = __esm(() => {
78184
78193
  // packages/omo-opencode/src/tools/delegate-task/anthropic-categories.ts
78185
78194
  var UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
78186
78195
  You are working on tasks that don't fit specific categories but require substantial effort.
78187
-
78188
- <Selection_Gate>
78189
- BEFORE selecting this category, VERIFY ALL conditions:
78190
- 1. Task does NOT fit: quick (trivial), visual-engineering (UI), ultrabrain (deep logic), artistry (creative), writing (docs)
78191
- 2. Task requires substantial effort across multiple systems/modules
78192
- 3. Changes have broad impact or require careful coordination
78193
- 4. NOT just "complex" - must be genuinely unclassifiable AND high-effort
78194
-
78195
- If task fits ANY other category, DO NOT select unspecified-high.
78196
- If task is unclassifiable but moderate-effort, use unspecified-low instead.
78197
- </Selection_Gate>
78198
- </Category_Context>`, ANTHROPIC_CATEGORIES;
78196
+ </Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, ANTHROPIC_CATEGORIES;
78199
78197
  var init_anthropic_categories = __esm(() => {
78200
78198
  ANTHROPIC_CATEGORIES = [
78201
78199
  {
78202
78200
  name: "unspecified-high",
78203
78201
  config: { model: "kimi-for-coding/k3", variant: "max" },
78204
78202
  description: "Tasks that don't fit other categories, high effort required",
78203
+ callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
78205
78204
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND
78206
78205
  }
78207
78206
  ];
@@ -78458,64 +78457,10 @@ Approach:
78458
78457
  - Minimal viable implementation
78459
78458
  - Skip unnecessary abstractions
78460
78459
  - Direct and concise
78461
- </Category_Context>
78462
-
78463
- <Caller_Warning>
78464
- THIS CATEGORY USES A SMALLER/FASTER MODEL (gpt-5.6-luna-fast).
78465
-
78466
- The model executing this task is optimized for speed over depth. Your prompt MUST be:
78467
-
78468
- **EXHAUSTIVELY EXPLICIT** - Leave NOTHING to interpretation:
78469
- 1. MUST DO: List every required action as atomic, numbered steps
78470
- 2. MUST NOT DO: Explicitly forbid likely mistakes and deviations
78471
- 3. EXPECTED OUTPUT: Describe exact success criteria with concrete examples
78472
-
78473
- **WHY THIS MATTERS:**
78474
- - Smaller models benefit from explicit guardrails
78475
- - Vague instructions may lead to unpredictable results
78476
- - Implicit expectations may be missed
78477
- **PROMPT STRUCTURE (MANDATORY):**
78478
- \`\`\`
78479
- TASK: [One-sentence goal]
78480
-
78481
- MUST DO:
78482
- 1. [Specific action with exact details]
78483
- 2. [Another specific action]
78484
- ...
78485
-
78486
- MUST NOT DO:
78487
- - [Forbidden action + why]
78488
- - [Another forbidden action]
78489
- ...
78490
-
78491
- EXPECTED OUTPUT:
78492
- - [Exact deliverable description]
78493
- - [Success criteria / verification method]
78494
- \`\`\`
78495
-
78496
- If your prompt lacks this structure, REWRITE IT before delegating.
78497
- </Caller_Warning>`, UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND = `<Category_Context>
78460
+ </Category_Context>`, QUICK_CATEGORY_CALLER_GUIDANCE = `<Caller_Warning>Small/fast model: before delegating, write an explicit prompt with numbered must-do steps, forbidden deviations, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND = `<Category_Context>
78498
78461
  You are working on tasks that don't fit specific categories but require moderate effort.
78499
-
78500
- <Selection_Gate>
78501
- BEFORE selecting this category, VERIFY ALL conditions:
78502
- 1. Task does NOT fit: quick (trivial), visual-engineering (UI), ultrabrain (deep logic), artistry (creative), writing (docs)
78503
- 2. Task requires more than trivial effort but is NOT system-wide
78504
- 3. Scope is contained within a few files/modules
78505
-
78506
- If task fits ANY other category, DO NOT select unspecified-low.
78507
- This is NOT a default choice - it's for genuinely unclassifiable moderate-effort work.
78508
- </Selection_Gate>
78509
- </Category_Context>
78510
-
78511
- <Caller_Warning>
78512
- THIS CATEGORY USES GROK 4.6 (xhigh).
78513
-
78514
- **PROVIDE CLEAR STRUCTURE:**
78515
- 1. MUST DO: Enumerate required actions explicitly
78516
- 2. MUST NOT DO: State forbidden actions to prevent scope creep
78517
- 3. EXPECTED OUTPUT: Define concrete success criteria
78518
- </Caller_Warning>`, OPENAI_CATEGORIES;
78462
+ </Category_Context>`, UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits, effort is moderate, and scope stays within a few files/modules. Prefer any matching specialist category.</Selection_Gate>
78463
+ <Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, OPENAI_CATEGORIES;
78519
78464
  var init_openai_categories = __esm(() => {
78520
78465
  init_types6();
78521
78466
  OPENAI_CATEGORIES = [
@@ -78537,12 +78482,14 @@ var init_openai_categories = __esm(() => {
78537
78482
  name: "quick",
78538
78483
  config: { model: "kimi-for-coding/kimi-for-coding-highspeed" },
78539
78484
  description: "Trivial tasks - single file changes, typo fixes, simple modifications",
78485
+ callerGuidance: QUICK_CATEGORY_CALLER_GUIDANCE,
78540
78486
  promptAppend: QUICK_CATEGORY_PROMPT_APPEND
78541
78487
  },
78542
78488
  {
78543
78489
  name: "unspecified-low",
78544
78490
  config: { model: "xai/grok-4.6", variant: "xhigh" },
78545
78491
  description: "Tasks that don't fit other categories, low effort required",
78492
+ callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
78546
78493
  promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
78547
78494
  }
78548
78495
  ];
@@ -78552,7 +78499,7 @@ var init_openai_categories = __esm(() => {
78552
78499
  function buildCategoryRecord(selector) {
78553
78500
  return Object.fromEntries(BUILTIN_CATEGORIES.map((definition2) => [definition2.name, selector(definition2)]));
78554
78501
  }
78555
- var BUILTIN_CATEGORIES, DEFAULT_CATEGORIES, CATEGORY_PROMPT_APPENDS, CATEGORY_DESCRIPTIONS, CATEGORY_PROMPT_APPEND_RESOLVERS, BUILTIN_CATEGORY_REQUIRES_MODEL;
78502
+ var BUILTIN_CATEGORIES, DEFAULT_CATEGORIES, CATEGORY_PROMPT_APPENDS, CATEGORY_DESCRIPTIONS, CATEGORY_CALLER_GUIDANCE, CATEGORY_PROMPT_APPEND_RESOLVERS, BUILTIN_CATEGORY_REQUIRES_MODEL;
78556
78503
  var init_builtin_categories = __esm(() => {
78557
78504
  init_anthropic_categories();
78558
78505
  init_google_categories();
@@ -78567,6 +78514,7 @@ var init_builtin_categories = __esm(() => {
78567
78514
  DEFAULT_CATEGORIES = buildCategoryRecord((definition2) => definition2.config);
78568
78515
  CATEGORY_PROMPT_APPENDS = buildCategoryRecord((definition2) => definition2.promptAppend);
78569
78516
  CATEGORY_DESCRIPTIONS = buildCategoryRecord((definition2) => definition2.description);
78517
+ CATEGORY_CALLER_GUIDANCE = buildCategoryRecord((definition2) => definition2.callerGuidance);
78570
78518
  CATEGORY_PROMPT_APPEND_RESOLVERS = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition2) => definition2.resolvePromptAppend !== undefined).map((definition2) => [definition2.name, definition2.resolvePromptAppend]));
78571
78519
  BUILTIN_CATEGORY_REQUIRES_MODEL = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition2) => definition2.requiresModel !== undefined).map((definition2) => [definition2.name, definition2.requiresModel]));
78572
78520
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.10",
3
+ "version": "5.0.0-beta.12",
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",
@@ -181,7 +181,7 @@
181
181
  "zod": "^4.4.3"
182
182
  },
183
183
  "devDependencies": {
184
- "@code-yeongyu/senpi": "2026.8.18-2",
184
+ "@code-yeongyu/senpi": "2026.8.19",
185
185
  "@oh-my-opencode/agents-md-core": "workspace:*",
186
186
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
187
187
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -222,18 +222,18 @@
222
222
  "typescript": "^7.0.2"
223
223
  },
224
224
  "optionalDependencies": {
225
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.10",
226
- "oh-my-opencode-darwin-x64": "5.0.0-beta.10",
227
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.10",
228
- "oh-my-opencode-linux-arm64": "5.0.0-beta.10",
229
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.10",
230
- "oh-my-opencode-linux-x64": "5.0.0-beta.10",
231
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.10",
232
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.10",
233
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.10",
234
- "oh-my-opencode-windows-arm64": "5.0.0-beta.10",
235
- "oh-my-opencode-windows-x64": "5.0.0-beta.10",
236
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.10"
225
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.12",
226
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.12",
227
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.12",
228
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.12",
229
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.12",
230
+ "oh-my-opencode-linux-x64": "5.0.0-beta.12",
231
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.12",
232
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.12",
233
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.12",
234
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.12",
235
+ "oh-my-opencode-windows-x64": "5.0.0-beta.12",
236
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.12"
237
237
  },
238
238
  "overrides": {
239
239
  "@earendil-works/pi-agent-core": "0.84.2",