oh-my-opencode 5.0.0-beta.40 → 5.0.0-beta.43

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 (139) hide show
  1. package/.agents/skills/pre-publish-review/SKILL.md +9 -12
  2. package/.opencode/skills/pre-publish-review/SKILL.md +9 -12
  3. package/README.ja.md +2 -2
  4. package/README.ko.md +4 -4
  5. package/README.md +4 -4
  6. package/README.ru.md +2 -2
  7. package/README.zh-cn.md +2 -2
  8. package/dist/agents/gpt-prompt-identity.d.ts +1 -1
  9. package/dist/agents/types.d.ts +2 -0
  10. package/dist/cli/index.js +174 -78
  11. package/dist/cli-node/index.js +174 -78
  12. package/dist/index.js +243 -131
  13. package/dist/skills/ast-grep/SKILL.md +1 -1
  14. package/dist/skills/coding-agent-sessions/SKILL.md +1 -1
  15. package/dist/skills/data-scientist/SKILL.md +1 -1
  16. package/dist/skills/debugging/SKILL.md +1 -1
  17. package/dist/skills/frontend/SKILL.md +1 -1
  18. package/dist/skills/git-master/SKILL.md +1 -1
  19. package/dist/skills/init-deep/SKILL.md +1 -1
  20. package/dist/skills/lsp-setup/SKILL.md +1 -1
  21. package/dist/skills/programming/SKILL.md +1 -1
  22. package/dist/skills/refactor/SKILL.md +1 -1
  23. package/dist/skills/remove-ai-slops/SKILL.md +1 -1
  24. package/dist/skills/review-work/SKILL.md +99 -417
  25. package/dist/skills/ultimate-browsing/ATTRIBUTION.md +1 -1
  26. package/dist/skills/ultimate-browsing/SKILL.md +24 -9
  27. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +13 -10
  28. package/dist/skills/ulw-execute/SKILL.md +1 -1
  29. package/dist/skills/ulw-plan/SKILL.md +1 -1
  30. package/dist/skills/ulw-research/SKILL.md +5 -2
  31. package/dist/skills/visual-qa/SKILL.md +2 -2
  32. package/dist/tools/delegate-task/builtin-categories.d.ts +2 -1
  33. package/dist/tools/delegate-task/builtin-category-definition.d.ts +1 -1
  34. package/dist/tools/delegate-task/constants.d.ts +2 -2
  35. package/dist/tools/delegate-task/openai-categories.d.ts +7 -2
  36. package/dist/tui.js +149 -59
  37. package/package.json +21 -18
  38. package/packages/lsp-core/src/lsp/json-rpc-connection.ts +11 -6
  39. package/packages/lsp-daemon/dist/cli.js +11 -6
  40. package/packages/lsp-daemon/dist/client.js +11 -6
  41. package/packages/lsp-daemon/dist/index.js +11 -6
  42. package/packages/lsp-tools-mcp/dist/cli.js +11 -6
  43. package/packages/lsp-tools-mcp/dist/lsp/manager.js +11 -6
  44. package/packages/lsp-tools-mcp/dist/mcp.js +11 -6
  45. package/packages/lsp-tools-mcp/dist/tools.js +11 -6
  46. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  47. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  48. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  49. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  50. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  51. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  52. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  53. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  54. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  55. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  56. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +11 -6
  57. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  58. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  59. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  60. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  61. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  62. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  63. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  64. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  65. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  66. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  67. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +2 -2
  68. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  69. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  70. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  71. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +1 -1
  72. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  76. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  77. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  78. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  79. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  80. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  81. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  82. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  83. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  84. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  85. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  86. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  93. package/packages/omo-codex/plugin/package-lock.json +12 -12
  94. package/packages/omo-codex/plugin/package.json +1 -1
  95. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +6 -18
  96. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +1 -1
  97. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
  98. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +1 -1
  99. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +1 -1
  100. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -1
  101. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
  102. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +1 -1
  103. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
  104. package/packages/omo-codex/plugin/skills/programming/SKILL.md +1 -1
  105. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +1 -1
  106. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +1 -1
  107. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +99 -417
  108. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +1 -1
  109. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +24 -9
  110. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -10
  111. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +1 -1
  112. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
  113. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +5 -2
  114. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +2 -2
  115. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -1
  116. package/packages/omo-codex/scripts/install-dist/install-local.mjs +3 -2
  117. package/packages/shared-skills/package.json +7 -1
  118. package/packages/shared-skills/skill-source-filter.d.ts +16 -0
  119. package/packages/shared-skills/skill-source-filter.mjs +44 -0
  120. package/packages/shared-skills/skills/ast-grep/SKILL.md +1 -1
  121. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
  122. package/packages/shared-skills/skills/data-scientist/SKILL.md +1 -1
  123. package/packages/shared-skills/skills/debugging/SKILL.md +1 -1
  124. package/packages/shared-skills/skills/frontend/SKILL.md +1 -1
  125. package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
  126. package/packages/shared-skills/skills/init-deep/SKILL.md +1 -1
  127. package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
  128. package/packages/shared-skills/skills/programming/SKILL.md +1 -1
  129. package/packages/shared-skills/skills/refactor/SKILL.md +1 -1
  130. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -1
  131. package/packages/shared-skills/skills/review-work/SKILL.md +99 -417
  132. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +1 -1
  133. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +24 -9
  134. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -10
  135. package/packages/shared-skills/skills/ulw-execute/SKILL.md +1 -1
  136. package/packages/shared-skills/skills/ulw-plan/SKILL.md +1 -1
  137. package/packages/shared-skills/skills/ulw-research/SKILL.md +5 -2
  138. package/packages/shared-skills/skills/visual-qa/SKILL.md +2 -2
  139. package/dist/tools/delegate-task/anthropic-categories.d.ts +0 -2
package/dist/tui.js CHANGED
@@ -3269,7 +3269,7 @@ var init_agent_model_requirements = __esm(() => {
3269
3269
  fallbackChain: [
3270
3270
  {
3271
3271
  providers: ["anthropic", "github-copilot", "opencode"],
3272
- model: "claude-fable-5",
3272
+ model: "claude-fable-5-1",
3273
3273
  variant: "xhigh"
3274
3274
  },
3275
3275
  {
@@ -3295,10 +3295,9 @@ var init_agent_model_requirements = __esm(() => {
3295
3295
  },
3296
3296
  momus: {
3297
3297
  fallbackChain: [
3298
- { providers: ["openai", "openai-codex"], model: "gpt-5.6-terra", variant: "high" },
3299
- { providers: ["github-copilot"], model: "gpt-5.6-terra", variant: "high" },
3300
- { providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "xhigh" },
3301
- { providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "high" },
3298
+ { providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "xhigh" },
3299
+ { providers: ["github-copilot"], model: "gpt-6-astra", variant: "high" },
3300
+ { providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "high" },
3302
3301
  {
3303
3302
  providers: ["anthropic", "github-copilot", "opencode"],
3304
3303
  model: "claude-opus-5",
@@ -3350,6 +3349,11 @@ var init_category_model_requirements = __esm(() => {
3350
3349
  CATEGORY_MODEL_REQUIREMENTS = {
3351
3350
  "visual-engineering": {
3352
3351
  fallbackChain: [
3352
+ {
3353
+ providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
3354
+ model: "claude-fable-5-1",
3355
+ variant: "max"
3356
+ },
3353
3357
  {
3354
3358
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
3355
3359
  model: "claude-opus-5",
@@ -3359,17 +3363,14 @@ var init_category_model_requirements = __esm(() => {
3359
3363
  providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
3360
3364
  model: "kimi-k3",
3361
3365
  variant: "max"
3362
- },
3363
- { providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.2", variant: "max" },
3364
- {
3365
- providers: ["openai", "openai-codex", "github-copilot", "opencode"],
3366
- model: "gpt-5.6-sol",
3367
- variant: "medium"
3368
3366
  }
3369
3367
  ]
3370
3368
  },
3371
3369
  ultrabrain: {
3372
3370
  fallbackChain: [
3371
+ { providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "max" },
3372
+ { providers: ["github-copilot"], model: "gpt-6-astra", variant: "max" },
3373
+ { providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "max" },
3373
3374
  { providers: ["openai", "openai-codex"], model: "gpt-5.6-sol", variant: "max" },
3374
3375
  { providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "max" },
3375
3376
  { providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "max" }
@@ -3377,6 +3378,11 @@ var init_category_model_requirements = __esm(() => {
3377
3378
  },
3378
3379
  deep: {
3379
3380
  fallbackChain: [
3381
+ {
3382
+ providers: ["openai", "openai-codex", "github-copilot", "opencode"],
3383
+ model: "gpt-6-astra",
3384
+ variant: "high"
3385
+ },
3380
3386
  {
3381
3387
  providers: ["openai", "openai-codex", "github-copilot", "opencode"],
3382
3388
  model: "gpt-5.6-sol",
@@ -3388,7 +3394,7 @@ var init_category_model_requirements = __esm(() => {
3388
3394
  fallbackChain: [
3389
3395
  {
3390
3396
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
3391
- model: "claude-fable-5",
3397
+ model: "claude-fable-5-1",
3392
3398
  variant: "xhigh"
3393
3399
  },
3394
3400
  {
@@ -3447,6 +3453,11 @@ var init_category_model_requirements = __esm(() => {
3447
3453
  },
3448
3454
  "unspecified-high": {
3449
3455
  fallbackChain: [
3456
+ {
3457
+ providers: ["openai", "openai-codex", "github-copilot", "opencode"],
3458
+ model: "gpt-6-astra",
3459
+ variant: "high"
3460
+ },
3450
3461
  {
3451
3462
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
3452
3463
  model: "claude-opus-5",
@@ -3462,17 +3473,16 @@ var init_category_model_requirements = __esm(() => {
3462
3473
  },
3463
3474
  writing: {
3464
3475
  fallbackChain: [
3465
- {
3466
- providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
3467
- model: "kimi-k3",
3468
- variant: "low"
3469
- },
3470
3476
  {
3471
3477
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
3472
- model: "claude-opus-5",
3473
- variant: "low"
3478
+ model: "claude-fable-5-1",
3479
+ variant: "medium"
3474
3480
  },
3475
- { providers: ["google", "github-copilot", "opencode"], model: "gemini-3.6-flash" }
3481
+ {
3482
+ providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
3483
+ model: "kimi-k3",
3484
+ variant: "max"
3485
+ }
3476
3486
  ]
3477
3487
  }
3478
3488
  };
@@ -3556,11 +3566,11 @@ var init_model_capability_aliases = __esm(() => {
3556
3566
  EXACT_ALIAS_RULES_BY_MODEL = new Map(EXACT_ALIAS_RULES.map((rule) => [rule.aliasModelID, rule]));
3557
3567
  PATTERN_ALIAS_RULES = [
3558
3568
  {
3559
- ruleID: "openai-gpt-5.6-fast-service-tier-alias",
3560
- description: "Normalizes OpenCode's OpenAI GPT-5.6 fast service-tier IDs to canonical snapshot IDs.",
3569
+ ruleID: "openai-gpt-fast-service-tier-alias",
3570
+ description: "Normalizes OpenCode's OpenAI GPT fast service-tier IDs to canonical snapshot IDs.",
3561
3571
  providerIDs: ["openai"],
3562
3572
  allowedSubproviderHosts: ["vercel"],
3563
- match: (normalizedModelID) => /^gpt-5\.6-(?:sol|terra|luna)-fast$/.test(normalizedModelID),
3573
+ match: (normalizedModelID) => /^(?:gpt-5\.6-(?:sol|terra|luna)|gpt-6-astra)-fast$/.test(normalizedModelID),
3564
3574
  canonicalize: (normalizedModelID) => normalizedModelID.slice(0, -"-fast".length)
3565
3575
  },
3566
3576
  {
@@ -3688,6 +3698,14 @@ var init_model_capability_heuristics = __esm(() => {
3688
3698
  reasoningEfforts: ["none", "minimal", "low", "medium", "high"],
3689
3699
  supportsTemperature: false
3690
3700
  },
3701
+ {
3702
+ family: "gpt-6",
3703
+ includes: ["gpt-6"],
3704
+ variants: ["low", "medium", "high", "xhigh", "max"],
3705
+ reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
3706
+ reasoningEffortAliases: { none: "low", minimal: "low" },
3707
+ supportsTemperature: false
3708
+ },
3691
3709
  {
3692
3710
  family: "gpt-5",
3693
3711
  includes: ["gpt-5"],
@@ -3862,6 +3880,37 @@ var init_supplemental_entries = __esm(() => {
3862
3880
  output: 262144
3863
3881
  }
3864
3882
  },
3883
+ "claude-fable-5-1": {
3884
+ id: "claude-fable-5-1",
3885
+ family: "claude-fable",
3886
+ reasoning: true,
3887
+ temperature: false,
3888
+ toolCall: true,
3889
+ modalities: {
3890
+ input: ["text", "image", "pdf"],
3891
+ output: ["text"]
3892
+ },
3893
+ limit: {
3894
+ context: 1e6,
3895
+ output: 128000
3896
+ }
3897
+ },
3898
+ "gpt-6-astra": {
3899
+ id: "gpt-6-astra",
3900
+ family: "gpt",
3901
+ reasoning: true,
3902
+ temperature: false,
3903
+ toolCall: true,
3904
+ modalities: {
3905
+ input: ["text", "image"],
3906
+ output: ["text"]
3907
+ },
3908
+ limit: {
3909
+ context: 1050000,
3910
+ input: 922000,
3911
+ output: 128000
3912
+ }
3913
+ },
3865
3914
  "gpt-5.6-sol": {
3866
3915
  id: "gpt-5.6-sol",
3867
3916
  family: "gpt",
@@ -4202,7 +4251,7 @@ function getOverride(modelID) {
4202
4251
  function getProviderOverride(providerID, modelID) {
4203
4252
  if (providerID.trim().toLowerCase() !== "github-copilot")
4204
4253
  return;
4205
- return GITHUB_COPILOT_GPT5_MODEL.test(normalizeLookupModelID2(modelID)) ? GITHUB_COPILOT_GPT5_OVERRIDE : undefined;
4254
+ return GITHUB_COPILOT_GPT_MODEL.test(normalizeLookupModelID2(modelID)) ? GITHUB_COPILOT_GPT_OVERRIDE : undefined;
4206
4255
  }
4207
4256
  function stripSameProviderPrefix(providerID, modelID) {
4208
4257
  const prefix = `${providerID.trim()}/`;
@@ -4341,14 +4390,14 @@ function getModelCapabilities(input) {
4341
4390
  }
4342
4391
  };
4343
4392
  }
4344
- var MODEL_ID_OVERRIDES, GITHUB_COPILOT_GPT5_MODEL, GITHUB_COPILOT_GPT5_OVERRIDE;
4393
+ var MODEL_ID_OVERRIDES, GITHUB_COPILOT_GPT_MODEL, GITHUB_COPILOT_GPT_OVERRIDE;
4345
4394
  var init_get_model_capabilities = __esm(() => {
4346
4395
  init_model_capability_aliases();
4347
4396
  init_model_capability_heuristics();
4348
4397
  init_model_string_parser();
4349
4398
  MODEL_ID_OVERRIDES = {};
4350
- GITHUB_COPILOT_GPT5_MODEL = /(?:^|\/)gpt-5(?:[.-]|$)/;
4351
- GITHUB_COPILOT_GPT5_OVERRIDE = {
4399
+ GITHUB_COPILOT_GPT_MODEL = /(?:^|\/)gpt-[56](?:[.-]|$)/;
4400
+ GITHUB_COPILOT_GPT_OVERRIDE = {
4352
4401
  variants: ["low", "medium", "high"],
4353
4402
  reasoningEfforts: ["none", "minimal", "low", "medium", "high"]
4354
4403
  };
@@ -4606,22 +4655,6 @@ var init_agent_display_names = __esm(() => {
4606
4655
  };
4607
4656
  REVERSE_DISPLAY_NAMES = Object.fromEntries(Object.entries(AGENT_DISPLAY_NAMES).map(([key, displayName]) => [displayName.toLowerCase(), key]));
4608
4657
  });
4609
- // packages/omo-opencode/src/tools/delegate-task/anthropic-categories.ts
4610
- var UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
4611
- You are working on tasks that don't fit specific categories but require substantial effort.
4612
- </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;
4613
- var init_anthropic_categories = __esm(() => {
4614
- ANTHROPIC_CATEGORIES = [
4615
- {
4616
- name: "unspecified-high",
4617
- config: { model: "anthropic/claude-opus-5", variant: "xhigh" },
4618
- description: "Tasks that don't fit other categories, high effort required",
4619
- callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
4620
- promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND
4621
- }
4622
- ];
4623
- });
4624
-
4625
4658
  // packages/omo-opencode/src/tools/delegate-task/google-categories.ts
4626
4659
  var VISUAL_CATEGORY_PROMPT_APPEND = `<Category_Context>
4627
4660
  You are working on VISUAL/UI tasks.
@@ -4730,13 +4763,13 @@ var init_google_categories = __esm(() => {
4730
4763
  GOOGLE_CATEGORIES = [
4731
4764
  {
4732
4765
  name: "visual-engineering",
4733
- config: { model: "anthropic/claude-opus-5", variant: "max" },
4734
- description: "Frontend, UI/UX, design, styling, animation",
4766
+ config: { model: "anthropic/claude-fable-5-1", variant: "max" },
4767
+ description: "Visual design, UI/UX, frontend, styling, animation, and design systems",
4735
4768
  promptAppend: VISUAL_CATEGORY_PROMPT_APPEND
4736
4769
  },
4737
4770
  {
4738
4771
  name: "artistry",
4739
- config: { model: "anthropic/claude-fable-5", variant: "xhigh" },
4772
+ config: { model: "anthropic/claude-fable-5-1", variant: "max" },
4740
4773
  description: "Complex problem-solving with unconventional, creative approaches - beyond standard patterns",
4741
4774
  promptAppend: ARTISTRY_CATEGORY_PROMPT_APPEND
4742
4775
  }
@@ -4773,7 +4806,7 @@ var init_kimi_categories = __esm(() => {
4773
4806
  KIMI_CATEGORIES = [
4774
4807
  {
4775
4808
  name: "writing",
4776
- config: { model: "kimi-for-coding/k3", variant: "low" },
4809
+ config: { model: "anthropic/claude-fable-5-1", variant: "medium" },
4777
4810
  description: "Documentation, prose, technical writing",
4778
4811
  promptAppend: WRITING_CATEGORY_PROMPT_APPEND
4779
4812
  }
@@ -4792,16 +4825,58 @@ function isGpt5_6Model(model) {
4792
4825
  const modelName = extractModelName(model).toLowerCase();
4793
4826
  return modelName.includes("gpt-5.6") || modelName.includes("gpt-5-6");
4794
4827
  }
4828
+ function isGpt6Model(model) {
4829
+ const modelName = extractModelName(model).toLowerCase();
4830
+ return modelName.includes("gpt-6");
4831
+ }
4795
4832
  var init_types = () => {};
4796
4833
 
4797
4834
  // packages/omo-opencode/src/tools/delegate-task/openai-categories.ts
4835
+ function resolveUltrabrainCategoryPromptAppend(model) {
4836
+ if (model && isGpt6Model(model)) {
4837
+ return ULTRABRAIN_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
4838
+ }
4839
+ return ULTRABRAIN_CATEGORY_PROMPT_APPEND;
4840
+ }
4798
4841
  function resolveDeepCategoryPromptAppend(model) {
4842
+ if (model && isGpt6Model(model)) {
4843
+ return DEEP_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
4844
+ }
4799
4845
  if (model && (isGpt5_5Model(model) || isGpt5_6Model(model))) {
4800
4846
  return DEEP_CATEGORY_PROMPT_APPEND_GPT_5_5;
4801
4847
  }
4802
4848
  return DEEP_CATEGORY_PROMPT_APPEND;
4803
4849
  }
4804
- var ULTRABRAIN_CATEGORY_PROMPT_APPEND = `<Category_Context>
4850
+ function resolveUnspecifiedHighCategoryPromptAppend(model) {
4851
+ if (model && isGpt6Model(model)) {
4852
+ return UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
4853
+ }
4854
+ return UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND;
4855
+ }
4856
+ var ULTRABRAIN_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="ultrabrain">
4857
+ The orchestrator routed this task here because it is the one genuinely hard, logic-heavy problem in its plan, and it sent a goal rather than steps: choose the approach yourself, and let correctness outrank speed, brevity, and token cost.
4858
+
4859
+ Success means:
4860
+ - every load-bearing claim cites evidence from this turn: a file and line read, a command run, a test executed;
4861
+ - every executable claim was executed: a proposed fix runs, an algorithm passes the boundary cases you enumerated, a verdict on a diff names the failing line;
4862
+ - the conclusion survived your own attempt to break it, and the answer names the strongest counter-case you looked for;
4863
+ - rejected alternatives carry the reason that decided against them, and open assumptions are stated so the orchestrator can overturn them;
4864
+ - one decision-complete recommendation, actionable without a follow-up question.
4865
+
4866
+ Whatever that check leaves unsettled goes in the answer as an open question with what would settle it. When the goal bundles independent problems, solve the one the others depend on and return the rest as separately delegable items.
4867
+ </Category_Context>`, DEEP_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="deep">
4868
+ The orchestrator routed this task here for depth: one goal, one deliverable, and the time to earn it. The exploration budget is generous: read every file involved, trace callers and dependencies in both directions, and fan out explore and librarian subagents in parallel for the questions a single read wave cannot answer, until you can explain the full mechanism you are about to change; an edit made before that point is the failure this category exists to prevent.
4869
+
4870
+ **MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
4871
+
4872
+ The goal is the authorization. Choose how to reach it yourself, and when it lists numbered steps or phases, deliver all of them in this turn as one task; a proposal, a plan awaiting approval, a simplified version, or a proof of concept is unfinished work. When the steps turn out to be independent problems sharing no reasoning, do the one the goal centers on and return the others as separately delegable items with what you learned. A question ends your turn and hands the task back unfinished, so decide from context, record each assumption in the final message, and stop early only for a blocker you cannot route around: a missing secret, a decision only the user can make, or three materially different attempts that all failed.
4873
+
4874
+ Fix the cause: trace at least two levels above the symptom before settling, and prefer the change that makes the failure impossible over the guard that hides it. Depth means understanding the mechanism, so the diff stays as small as the fix allows; on greenfield work choose strong defaults and finish something you would hand to a senior engineer. Close with the delivered change, the evidence that it works, and the assumptions you made.
4875
+ </Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="unspecified-high">
4876
+ The orchestrator routed this task here because it spans systems or modules and fits no specialist category, so breadth of consideration is what this category buys. Before committing to an approach, survey the whole surface the change touches: every caller and consumer of what you will modify, sibling modules that implement the same pattern, the tests, docs, schemas, config, scripts, and CI that encode the current behavior, and the history of the area (git log and blame) for the reasons it is shaped this way. Fan out explore and librarian subagents in parallel when that surface is wider than one read wave covers.
4877
+
4878
+ Weigh at least two ways to do it against what you found, choose one, and say in the final message why it won. Then deliver it across every surface you identified, so behavior stays consistent everywhere the change is observable and no caller, test, doc, schema, or config still describes the old state. A question ends your turn and hands the task back unfinished, so decide from context, record each assumption in the final message, and finish.
4879
+ </Category_Context>`, ULTRABRAIN_CATEGORY_PROMPT_APPEND = `<Category_Context>
4805
4880
  You are working on DEEP LOGICAL REASONING / COMPLEX ARCHITECTURE tasks.
4806
4881
 
4807
4882
  **CRITICAL - CODE STYLE REQUIREMENTS (NON-NEGOTIABLE)**:
@@ -4826,6 +4901,8 @@ You are working on GOAL-ORIENTED AUTONOMOUS tasks.
4826
4901
 
4827
4902
  You are NOT an interactive assistant. You are an autonomous problem-solver.
4828
4903
 
4904
+ **MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
4905
+
4829
4906
  BEFORE making ANY changes:
4830
4907
  1. Silently explore the codebase extensively (5-15 minutes of reading is normal)
4831
4908
  2. Read related files, trace dependencies, understand the full context
@@ -4843,6 +4920,8 @@ Minimal status updates. Focus on results, not play-by-play. Report completion wi
4843
4920
  </Category_Context>`, DEEP_CATEGORY_PROMPT_APPEND_GPT_5_5 = `<Category_Context name="deep">
4844
4921
  You are operating in DEEP mode. This is the category reserved for goal-oriented autonomous work on hairy problems that reward thorough exploration and comprehensive solutions.
4845
4922
 
4923
+ **MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
4924
+
4846
4925
  The orchestrator chose this category because the task benefits from depth over speed. You should feel empowered to spend the time needed: five to fifteen minutes of silent exploration before the first edit is normal and correct. Rushing to implementation on a deep task is a failure mode, not a feature.
4847
4926
 
4848
4927
  # How deep mode adjusts the base behavior
@@ -4876,23 +4955,27 @@ Approach:
4876
4955
  </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>
4877
4956
  You are working on tasks that don't fit specific categories but require moderate effort.
4878
4957
  </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>
4879
- <Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, OPENAI_CATEGORIES;
4958
+ <Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
4959
+ You are working on tasks that don't fit specific categories but require substantial effort.
4960
+ </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>`, GPT_FLAGSHIP_GATE_MODELS, OPENAI_CATEGORIES;
4880
4961
  var init_openai_categories = __esm(() => {
4881
4962
  init_types();
4963
+ GPT_FLAGSHIP_GATE_MODELS = ["gpt-6-astra", "gpt-5.6-sol"];
4882
4964
  OPENAI_CATEGORIES = [
4883
4965
  {
4884
4966
  name: "ultrabrain",
4885
- config: { model: "openai/gpt-5.6-sol", variant: "xhigh" },
4967
+ config: { model: "openai/gpt-6-astra", variant: "max" },
4886
4968
  description: "Use ONLY for genuinely hard, logic-heavy tasks. Give clear goals only, not step-by-step instructions.",
4887
- promptAppend: ULTRABRAIN_CATEGORY_PROMPT_APPEND
4969
+ promptAppend: ULTRABRAIN_CATEGORY_PROMPT_APPEND,
4970
+ resolvePromptAppend: resolveUltrabrainCategoryPromptAppend
4888
4971
  },
4889
4972
  {
4890
4973
  name: "deep",
4891
- config: { model: "openai/gpt-5.6-sol", variant: "medium" },
4892
- description: "Goal-oriented autonomous problem-solving on hairy problems requiring deep research. ONE goal + ONE deliverable per call \u2014 multiple goals must fan out as parallel `deep` calls, never bundled into one.",
4974
+ config: { model: "openai/gpt-6-astra", variant: "high" },
4975
+ description: "**MANDATORY: USE deep FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.** Deep autonomous problem-solving for complex research. ONE goal + ONE deliverable per call \u2014 multiple goals must fan out as parallel `deep` calls, never bundled into one.",
4893
4976
  promptAppend: DEEP_CATEGORY_PROMPT_APPEND,
4894
4977
  resolvePromptAppend: resolveDeepCategoryPromptAppend,
4895
- requiresModel: "gpt-5.6-sol"
4978
+ requiresModel: GPT_FLAGSHIP_GATE_MODELS
4896
4979
  },
4897
4980
  {
4898
4981
  name: "quick",
@@ -4907,6 +4990,14 @@ var init_openai_categories = __esm(() => {
4907
4990
  description: "Tasks that don't fit other categories, low effort required",
4908
4991
  callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
4909
4992
  promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
4993
+ },
4994
+ {
4995
+ name: "unspecified-high",
4996
+ config: { model: "openai/gpt-6-astra", variant: "high" },
4997
+ description: "Tasks that don't fit other categories, high effort required",
4998
+ callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
4999
+ promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
5000
+ resolvePromptAppend: resolveUnspecifiedHighCategoryPromptAppend
4910
5001
  }
4911
5002
  ];
4912
5003
  });
@@ -4917,14 +5008,12 @@ function buildCategoryRecord(selector) {
4917
5008
  }
4918
5009
  var BUILTIN_CATEGORIES, DEFAULT_CATEGORIES, CATEGORY_PROMPT_APPENDS, CATEGORY_DESCRIPTIONS, CATEGORY_CALLER_GUIDANCE, CATEGORY_PROMPT_APPEND_RESOLVERS, BUILTIN_CATEGORY_REQUIRES_MODEL;
4919
5010
  var init_builtin_categories = __esm(() => {
4920
- init_anthropic_categories();
4921
5011
  init_google_categories();
4922
5012
  init_kimi_categories();
4923
5013
  init_openai_categories();
4924
5014
  BUILTIN_CATEGORIES = [
4925
5015
  ...GOOGLE_CATEGORIES,
4926
5016
  ...OPENAI_CATEGORIES,
4927
- ...ANTHROPIC_CATEGORIES,
4928
5017
  ...KIMI_CATEGORIES
4929
5018
  ];
4930
5019
  DEFAULT_CATEGORIES = buildCategoryRecord((definition) => definition.config);
@@ -4932,7 +5021,10 @@ var init_builtin_categories = __esm(() => {
4932
5021
  CATEGORY_DESCRIPTIONS = buildCategoryRecord((definition) => definition.description);
4933
5022
  CATEGORY_CALLER_GUIDANCE = buildCategoryRecord((definition) => definition.callerGuidance);
4934
5023
  CATEGORY_PROMPT_APPEND_RESOLVERS = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.resolvePromptAppend !== undefined).map((definition) => [definition.name, definition.resolvePromptAppend]));
4935
- BUILTIN_CATEGORY_REQUIRES_MODEL = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.requiresModel !== undefined).map((definition) => [definition.name, definition.requiresModel]));
5024
+ BUILTIN_CATEGORY_REQUIRES_MODEL = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.requiresModel !== undefined).map((definition) => [
5025
+ definition.name,
5026
+ typeof definition.requiresModel === "string" ? [definition.requiresModel] : definition.requiresModel
5027
+ ]));
4936
5028
  });
4937
5029
 
4938
5030
  // packages/omo-opencode/src/tools/delegate-task/constants.ts
@@ -77762,7 +77854,6 @@ var init_memory = __esm(() => {
77762
77854
  OmoMemorySettingsSchema = object({
77763
77855
  enabled: boolean2().default(true),
77764
77856
  agent: string2().min(1).default("auto"),
77765
- tool_exposure: _enum2(["direct", "search"]).default("direct"),
77766
77857
  reflection: OmoMemoryReflectionSchema.default({
77767
77858
  enabled: true,
77768
77859
  trigger: { step_count: 25, on_compaction: true },
@@ -77793,7 +77884,6 @@ var init_memory = __esm(() => {
77793
77884
  OmoMemorySettingsLayerSchema = object({
77794
77885
  enabled: boolean2().optional(),
77795
77886
  agent: string2().min(1).optional(),
77796
- tool_exposure: _enum2(["direct", "search"]).optional(),
77797
77887
  reflection: OmoMemoryReflectionLayerSchema.optional(),
77798
77888
  nudge: OmoMemoryNudgeLayerSchema.optional(),
77799
77889
  facts: OmoMemoryFactsLayerSchema.optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.40",
3
+ "version": "5.0.0-beta.43",
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",
@@ -70,6 +70,8 @@
70
70
  "packages/git-bash-mcp/dist",
71
71
  "packages/shared-skills/package.json",
72
72
  "packages/shared-skills/index.mjs",
73
+ "packages/shared-skills/skill-source-filter.d.ts",
74
+ "packages/shared-skills/skill-source-filter.mjs",
73
75
  "packages/shared-skills/skills",
74
76
  "packages/omo-codex/THIRD-PARTY-NOTICES.md",
75
77
  "packages/omo-codex/marketplace.json",
@@ -122,6 +124,7 @@
122
124
  "build:binaries": "bun run script/build-binaries.ts",
123
125
  "build:schema": "bun run script/build-schema.ts",
124
126
  "build:omo-native": "bun run script/build-omo-native.ts",
127
+ "omob": "bun run script/build-omob.ts",
125
128
  "build:omo-schema": "bun run script/build-omo-schema.ts",
126
129
  "build:model-capabilities": "bun run script/build-model-capabilities.ts",
127
130
  "clean": "rm -rf dist",
@@ -129,14 +132,14 @@
129
132
  "prepare": "bun run build",
130
133
  "postinstall": "node postinstall.mjs",
131
134
  "prepublishOnly": "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
132
- "test:model-capabilities": "bun test packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail",
135
+ "test:model-capabilities": "bun test --timeout 20000 packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail",
133
136
  "typecheck": "tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
134
137
  "typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/pi-goal/tsconfig.json && tsgo --noEmit -p packages/pi-webfetch/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json",
135
138
  "typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
136
- "test": "bun test",
137
- "test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
139
+ "test": "bun test --timeout 20000",
140
+ "test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test --timeout 20000 packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
138
141
  "test:fast": "bun run script/test-fast.ts",
139
- "test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
142
+ "test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test --timeout 20000 packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
140
143
  "test:windows-codex": "bun run test:codex",
141
144
  "build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
142
145
  "build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build"
@@ -180,7 +183,7 @@
180
183
  "zod": "^4.4.3"
181
184
  },
182
185
  "devDependencies": {
183
- "@code-yeongyu/senpi": "2026.9.4",
186
+ "@code-yeongyu/senpi": "2026.9.5",
184
187
  "@oh-my-opencode/agents-md-core": "workspace:*",
185
188
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
186
189
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -221,18 +224,18 @@
221
224
  "typescript": "^7.0.2"
222
225
  },
223
226
  "optionalDependencies": {
224
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.40",
225
- "oh-my-opencode-darwin-x64": "5.0.0-beta.40",
226
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.40",
227
- "oh-my-opencode-linux-arm64": "5.0.0-beta.40",
228
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.40",
229
- "oh-my-opencode-linux-x64": "5.0.0-beta.40",
230
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.40",
231
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.40",
232
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.40",
233
- "oh-my-opencode-windows-arm64": "5.0.0-beta.40",
234
- "oh-my-opencode-windows-x64": "5.0.0-beta.40",
235
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.40"
227
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.43",
228
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.43",
229
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.43",
230
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.43",
231
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.43",
232
+ "oh-my-opencode-linux-x64": "5.0.0-beta.43",
233
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.43",
234
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.43",
235
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.43",
236
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.43",
237
+ "oh-my-opencode-windows-x64": "5.0.0-beta.43",
238
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.43"
236
239
  },
237
240
  "overrides": {
238
241
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -73,6 +73,7 @@ export class JsonRpcConnection {
73
73
  let settled = false;
74
74
  const writeCancel = (): Promise<void> => this.writeMessage({ jsonrpc: "2.0", method: "$/cancelRequest", params: { id } });
75
75
 
76
+ let rejectAfterCancelWrite: (() => Promise<void>) | undefined;
76
77
  const responsePromise = new Promise<T>((resolve, reject) => {
77
78
  const cleanup = (): void => {
78
79
  options.signal?.removeEventListener("abort", onAbort);
@@ -83,15 +84,19 @@ export class JsonRpcConnection {
83
84
  this.pendingRequests.delete(key);
84
85
  cleanup();
85
86
  const rejectCancelled = (): void => reject(abortError(options.signal));
87
+ rejectAfterCancelWrite = async (): Promise<void> => {
88
+ try {
89
+ await writeCancel();
90
+ } catch (error) {
91
+ this.emitError(toError(error));
92
+ }
93
+ rejectCancelled();
94
+ };
86
95
  if (!requestWritten) {
87
96
  cancelAfterWrite = true;
88
- rejectCancelled();
89
97
  return;
90
98
  }
91
- void writeCancel().then(rejectCancelled, (error) => {
92
- this.emitError(toError(error));
93
- rejectCancelled();
94
- });
99
+ void rejectAfterCancelWrite();
95
100
  };
96
101
  const onAbort = (): void => settleCancel();
97
102
  this.pendingRequests.set(key, {
@@ -118,7 +123,7 @@ export class JsonRpcConnection {
118
123
  try {
119
124
  await this.writeMessage(message);
120
125
  requestWritten = true;
121
- if (cancelAfterWrite) await writeCancel();
126
+ if (cancelAfterWrite) await rejectAfterCancelWrite?.();
122
127
  } catch (error) {
123
128
  if (settled) return responsePromise;
124
129
  const pending = this.pendingRequests.get(key);
@@ -686,6 +686,7 @@ class JsonRpcConnection {
686
686
  let cancelAfterWrite = false;
687
687
  let settled = false;
688
688
  const writeCancel = () => this.writeMessage({ jsonrpc: "2.0", method: "$/cancelRequest", params: { id } });
689
+ let rejectAfterCancelWrite;
689
690
  const responsePromise = new Promise((resolve2, reject) => {
690
691
  const cleanup = () => {
691
692
  options.signal?.removeEventListener("abort", onAbort);
@@ -697,15 +698,19 @@ class JsonRpcConnection {
697
698
  this.pendingRequests.delete(key);
698
699
  cleanup();
699
700
  const rejectCancelled = () => reject(abortError(options.signal));
701
+ rejectAfterCancelWrite = async () => {
702
+ try {
703
+ await writeCancel();
704
+ } catch (error) {
705
+ this.emitError(toError(error));
706
+ }
707
+ rejectCancelled();
708
+ };
700
709
  if (!requestWritten) {
701
710
  cancelAfterWrite = true;
702
- rejectCancelled();
703
711
  return;
704
712
  }
705
- writeCancel().then(rejectCancelled, (error) => {
706
- this.emitError(toError(error));
707
- rejectCancelled();
708
- });
713
+ rejectAfterCancelWrite();
709
714
  };
710
715
  const onAbort = () => settleCancel();
711
716
  this.pendingRequests.set(key, {
@@ -733,7 +738,7 @@ class JsonRpcConnection {
733
738
  await this.writeMessage(message);
734
739
  requestWritten = true;
735
740
  if (cancelAfterWrite)
736
- await writeCancel();
741
+ await rejectAfterCancelWrite?.();
737
742
  } catch (error) {
738
743
  if (settled)
739
744
  return responsePromise;
@@ -1341,6 +1341,7 @@ class JsonRpcConnection {
1341
1341
  let cancelAfterWrite = false;
1342
1342
  let settled = false;
1343
1343
  const writeCancel = () => this.writeMessage({ jsonrpc: "2.0", method: "$/cancelRequest", params: { id } });
1344
+ let rejectAfterCancelWrite;
1344
1345
  const responsePromise = new Promise((resolve2, reject) => {
1345
1346
  const cleanup = () => {
1346
1347
  options.signal?.removeEventListener("abort", onAbort);
@@ -1352,15 +1353,19 @@ class JsonRpcConnection {
1352
1353
  this.pendingRequests.delete(key);
1353
1354
  cleanup();
1354
1355
  const rejectCancelled = () => reject(abortError2(options.signal));
1356
+ rejectAfterCancelWrite = async () => {
1357
+ try {
1358
+ await writeCancel();
1359
+ } catch (error) {
1360
+ this.emitError(toError(error));
1361
+ }
1362
+ rejectCancelled();
1363
+ };
1355
1364
  if (!requestWritten) {
1356
1365
  cancelAfterWrite = true;
1357
- rejectCancelled();
1358
1366
  return;
1359
1367
  }
1360
- writeCancel().then(rejectCancelled, (error) => {
1361
- this.emitError(toError(error));
1362
- rejectCancelled();
1363
- });
1368
+ rejectAfterCancelWrite();
1364
1369
  };
1365
1370
  const onAbort = () => settleCancel();
1366
1371
  this.pendingRequests.set(key, {
@@ -1388,7 +1393,7 @@ class JsonRpcConnection {
1388
1393
  await this.writeMessage(message);
1389
1394
  requestWritten = true;
1390
1395
  if (cancelAfterWrite)
1391
- await writeCancel();
1396
+ await rejectAfterCancelWrite?.();
1392
1397
  } catch (error) {
1393
1398
  if (settled)
1394
1399
  return responsePromise;